Как я проходил собеседования на позицию Junior .Net Developer

в 11:21, , рубрики: .net, C#, Алгоритмы, собеседование вопросы

Приветствую всех. Сегодня расскажу вам как я проходил собеседования в Москве на позицию .Net Developer. Усиленно готовился к собеседованиям месяц, целыми днями сидел и смотрел вопросы и пытался отвечать на них, а также читал книжки по С#. В статье привожу интересные задачки и вопросы, которые мне задавали в разных компаниях в Москве. Заранее скажу, что я попал в ту компанию, в которой хотел. Я прошел 4 собеседования в этой компании и меня наконец то взяли! Много статей было прочитано в частности здесь и надеюсь, что эту статью тоже будут читать начинающие Net разработчики и спрашивать все в комментариях.Кому интересна тема прохождения собеседований, прошу под кат! При поиске работы я пользовался Head Hunter. Там очень много вакансий с подробным изложением того, что хотят фирмы от кандидата. Решил откликнутся практически на все вакансии «C# разработчик», потому что для меня главное было пройти как можно больше собеседований, набраться опыта, а также во время таких собеседованиях найти интересную работу в интересной компании (забегая вперед скажу, что я нашел очень интересную работу). Некоторые компании (всего 2), для того, чтобы откликнуться на предложенную ими вакансию, хотели, чтобы кандидат решил предложенные ими задачи (напоминаю это при отклике). На мой взгляд это даже правильно, ведь это показывает, что компания очень ценит свое время и хочет, чтобы кандидат на собеседовании умел решать простые задачи. Обычно на таких собеседованиях спрашивают более «узкие» вопросы. Практически во всех компаниях есть несколько этапов собеседований. На первом обычно собеседует hr, на второй — старший разработчик, на третьем — технический директор. Бывали компании, в которых на первом же приходили и старший разработчик, и Team Lead и технический директор, что конечно чуть заставляет нервничать. Пройдя 5 собеседований, я выяснил такую вещь: чем позитивнее и свободнее ведешь себя на собеседовании, тем легче и быстрее она проходит.А теперь хочу поделиться с вами тем, какие вопросы мне задавали на очных собеседованиях. Поехали.Я не ожидал так много вопросов по базам данных, мне пришлось быстро осваивать (точнее вспоминать) sql язык. Вот какие вопросы и задания мне задавали:

  1. Что такое кластеризованный и некластеризованный индекс? Когда какое надо использовать?
  2. Что такое Join? Чем он отличается от Left Join, Right Join? Inner Join? Outer Join?
  3. Есть три таблицы: CUSTOMERS (ID, NAME, MANAGER_ID); MANAGERS (ID, NAME); ORDERS (ID, DATE, AMOUNT, CUSTOMER_ID). Написать запрос, который выведет имена Customers и их SalesManagers, которые сделали покупок на общую сумму больше 10000 с 01.01.2013.
  4. Делаем электронный справочник по книгам. Ищем:А) В каком магазине купить данную книгу.Б) В каких магазинах купить книги этого автора (авторов)В) Кто автор книгиГ) Какие книги написал авторНарисовать БД. Написать запрос Б. (Не забыть учесть, что у одной книжки — может быть несколько авторов)
  5. Что такое агрегирующие функции? Операторы Group By, Having? Приведите примеры их использования.
  6. Table «PC» (id, cpu(MHz), memory(Mb), hdd(Gb))1) Тактовые частоты CPU тех компьютеров, у которых объем памяти 3000 Мб. Вывод: id, cpu, memory2) Минимальный объём жесткого диска, установленного в компьютере на складе. Вывод: hdd3) Количество компьютеров с минимальным объемом жесткого диска, доступного на складе. Вывод: count, hdd
  7. Дана следующая структура базы данных в MS SQL: Departments (Id, Name), Employees(Id, DepartmentId, Name, Salary)Необходимо:• Написать запрос получения имени одного сотрудника, имеющего максимальную зарплату в компании, и название его отдела• Получить список отделов, средняя зарплата в которых больше 1000$
  8. Ado Net – что за технология? и как и когда она используется?
  9. Что такое Entity Framework? Какие подходы проектирования БД знаете? Расскажите про Code First.

Конечно вопросы про ООП

  1. Назовите и объясните основные парадигмы ООП.
  2. Назовите преимущества объектно-ориентированного подхода к программированию перед структурным программированием
  3. Перечислите недостатки ООП парадигмы.
  4. Что такое раннее и позднее связывание?
  5. Перечислите модификаторы доступа и когда они используются?

Вопросы про паттерны проектирования

  1. Расскажите про SOLID и примеры его использования
  2. В чем отличие паттерна «Стратегия» от паттерна «Шаблонный метод»?
  3. Паттерн Адаптер и его применение
  4. Расскажите про паттерн «Фасад»

Ну и конечно огромное количество вопросов по С#

  1. using (SomeClass sc = new SomeClass()){} Что делает данная конструкция?
  2. int i = 1; Console.WriteLine(«i = {0}», ++i); Что выведет данный код?
  3. Различие класса и структуры? И что будет если их передать в метод в виде параметров?
  4. Задача: есть нули и единицы в массиве. Надо для каждого нуля посчитать сколько единиц правее него и вывести сумму таких чисел. Сделать за один проход.
  5. Различие абстрактного класса и интерфейса? Можно ли отказаться от интерфейсов и использовать только абстрактный класс, ведь мы можем в абстрактном классе просто указать сигнатуры методов?
  6. Что такое интернирование строк ?
  7. Расскажите про интерфейс IEnumerable? Зачем он используется?
  8. Когда мы можем пройтись по собственной коллекции foreach- ом? Что для этого надо сделать и почему? (Рассказать про утиную типизацию)
  9. Различие между IEnumerable and IQueryable ?
  10. Как устроен Dictionary внутри? Как борются с коллизиями?
  11. Есть обычный пользовательский класс. Нужно его использовать как ключ в Dictionary. Что для этого надо поменять (добавить) в классе ?
  12. Какова алгоритмическая сложность для операций чтения и записи для коллекции Dictionary?
  13. В чем различие между ключевыми словами «ref» и «out»?
  14. Расскажите как работает try, catch, finally? Когда вызывается каждый
  15. Чем отличаются друг от друга классы String и StringBuilder? Зачем нужно такое разделение?
  16. Какие отличие между значимыми и ссылочными типами? Зачем придумали такое разделение? Нельзя было придумать только либо значимые либо ссылочные?
  17. В чем отличие использования Finalize и Dispose?
  18. Что такое управляемый код и CLR? Основные требования к управляемому коду?
  19. Что такое assembly manifest (манифест сборки)?
  20. Что такое Boxing и Unboxing?
  21. В чем суть полиморфизма?
  22. Чем отличается event от delegate?
  23. Может ли класс реализовать два интерфейса, у которых объявлены одинаковые методы? Если да, то каким образом?
  24. Что такое абстрактный класс? В каком случае вы обязаны объявить класс абстрактным?
  25. В чем разница инкапсуляции и сокрытия?
  26. Что такое частные и общие сборки?
  27. Что такое .Net Framework?
  28. LINQ lazy loading, eager loading в чем разница?
  29. Можно ли запретить наследование от своего собственного класса?
  30. Определение паттерна синглтон
  31. Что такое интеграционные тесты и unit-тесты?
  32. Что такое MVC, MVVM, WEB API?
  33. Каким образом можно присвоить значения полям, которые помечены ключевым словом readonly?
  34. Когда вызывается статический конструктор класса?
  35. Чем отличаются константы и поля, доступные только для чтения?
  36. Чем отличаются константы и поля, доступные только для чтения?
  37. Разница между асинхронностью и параллельностью?
  38. У вас есть сайт, вы заметили что он долго отвечает, как вы будете искать причину?

Ну и как же без логических задач

  1. Вы находитесь в пустом поезде. Это даже не поезд, а просто вагоны, они сцеплены друг с другом. Все вагоны внутри одинаковы, двери на выход из вагона закрыты, через окна ничего не видно. Вы можете включать и выключать свет в вагоне, в котором находитесь, можете сходить в соседний вагон, там тоже можно включать или выключать свет. Вам известно, что вагоны стоят на кольце и сами сцеплены в кольцо, первый вагон сцеплен с последним, ходить по кругу можно сколько угодно. В момент начала решения задачи в каких-то вагонах свет уже горит, в каких-то — не горит.Ваша задача при помощи управления светом в вагонах и перемещения по ним узнать сколько в этом кольце вагонов.
  2. У вас есть 100 монет по одному рублю. Они все лежат на столе. У вас также есть два носка. Вам нужно распределить все монеты по 2 носкам, так чтобы в одной из них было в два раза больше монет, чем во второй, при этом
    • не разрешается ломать их (они должны остаться целыми)
    • надо использовать все 100 монет (прятать нельзя)
    • они все одинаковые (по весу, по виду)

Также в одной компании дали готовый пользовательский класс. Мне нужно было найти логические и синтаксические ошибки. К сожалению, это задание мне не дали с собой взять после собеседования и из-за этого не могу опубликовать, но я помню, что там можно было докопаться практически к каждой строчке!В другой компании, попросили спроектировать базу данных для приложения вроде «Инстаграмм». Потом попросили написать сигнатуру метода «Upload», который отправляет фото на сервер. Прозвучал также вопрос что, если бы руководство изменило вот «это», то как бы вы «переспроектировали» эту базу. Ну так как у меня нет опыта в проектировании, мне пришлось на ходу думать и генерировать идеи, как оказалось, я прошел это собеседование).Другая компания решила дать интересную задачу. Я думаю, что это часть задачи, которую решают внутри компании. Решили проверить, как решают другие. Вот как она звучит: Реализовать программу анализа текста. Входной текст произвольный и может быть большим по объему. Количество и содержание метрик определяется самостоятельно. Требования к алгоритму: Программа должна быть расширяема к изменению списку метрик. Масштабируемость. На что обращаем внимание и что анализируем:

  1. Какие метрики предложены кандидатом и их смысл — аналитическое мышление
  2. SOLID анализ предложенного решения — навыки проектирования
  3. Какие шаблоны применены для масштабируемости и расширяемости — архитектурные скилы кандидата. повод при общении затронуть более глубоко вопрос проектирования
  4. Какие синтаксические конструкции языка применены и какая технология используется — использование сахара и средств упрощения кода
  5. Написаны ли unit тесты — что и как тестирует, какие фреймворки и стили тестов использует
  6. Сравнение с когнитивными сервисами — знание трендов применения технологий в реальных проектах
  7. Время, сложность решения, активность дополнительных вопросов выполнения — заинтересованность к решаемым задача/получению оффера

Так же хочется отметить тот факт, что в своем резюме я указал, что занимаюсь олимпиадным программированием и это очень положительно повлияло на ход многих собеседований. Меня просили рассказать, что это такое. Меня удивило, что большинство интервьюверов не знали про такое движение в программировании. Те, кто знали, просили меня реализовать какие- нибудь сортировки (пузырьковая, вставками, qsort), задачи с олимпиадного программирования. Я считаю, что алгоритмы и структуры данных дают огромный плюс в жизни программиста и теперь как оказалось еще и при трудоустройстве.Также положительным фактом оказалось преподавание информатики в ВЦНМО. Расспрашивали каково преподавать и трудно ли объяснять сложные вещи на пальцах.Для меня было неожиданностью, что меня пригласили работать практически все компании (80%), в которых я проходил собеседование. Может это чувство из-за моей низкой самооценки?! После прохождения собеседований, с уверенностью могу сказать, что это несложно, а даже легко и интересно. Так что друзья, не бойтесь собеседований и крупных компаний, будьте самоуверенными, верьте в свои силы и все будет на 5!Для тех, кто будет готовится или уже готовится к собеседованиям, ниже перечислю ссылки, которые помогут вам (по моему мнению) подготовится к собеседованию на должность Junior C# Developer, .Net Developer.

  1. metanit.com/sharp. Здесь собран большой материал по C#, А также есть специальный раздел «Вопросы к собеседованию». Рекомендую пока пройти теоретический материал, а потом попробовать тесты. Тесты находятся здесь (https://metanit.com/sharp/interview/).
  2. www.quizful.net/test. Сайт направлен именно на собеседования по разным направлениям разработки, где вы также сможете найти и C#. Там есть очень много «острых» и хитрых вопросов.
  3. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#. Джефри Рихтер. Эта классическая книга по освоению .Net. Там очень хорошо написано про CLR, про сборки и манифесты. Книга написано на довольно простом языке.
  4. metanit.com/sql. Здесь довольно хорошо и просто описывается язык запросов SQL.
  5. www.w3schools.com/sql/default.asp Здесь также можете пройти туториал по SQL. В конце будет тест, который очень легко сдать(опять- таки, это лично субъективное мнение).
  6. tproger.ru/articles/problems Здесь собраны наиболее интересные логические задачи с ответами.
  7. ivinsky.livejournal.com/3266.html здесь собраны задачи по C#, которые часто бывают на собеседованиях
  8. oignatov.blogspot.ru/2015/10/net-developer.html здесь собраны задачи по C#, которые часто бывают на собеседованиях
  9. jopr.org/blog/detail/voprosy-na-sobesedovanii-po-c здесь собраны задачи по C#, которые часто бывают на собеседованиях

Автор: Дзеранов Иосиф

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js