2 подписчика

Техническое собеседование на позицию "Junior-разработчик C#"

Источник - https://unsplash.com/photos/KdeqA3aTnBY
Источник - https://unsplash.com/photos/KdeqA3aTnBY

Расскажу о техническом собеседовании на позицию "junior-разрабочик C# ", а так же опубликую вопросы, которые сам задаю.

Введение

Ты принял решение, что готов начать свой путь в ИТ? Выбрал язык С# ?

Похвально! Рынку нужны новые руки. Средняя заработная плата джуна, по данным Хабр Карьера, составляет 63 227 рублей за 2 полугодие 2021 года.

Источник - Хабр Карьера
Источник - Хабр Карьера

Это выше, чем средняя зарплата по России - 56 тысяч рублей. И это только начало карьеры!

Что тебя отделяет от устройства в IT компанию? Правильно - техническое собеседование.

Как правило, формат, вопросы, количество этапов и процесс проведения технического собеседования отличается от компании к компании и их все сложно собрать в воедино (если интересует мой опыт прохождения собеседований на разных уровнях, о фейлах с моей стороны и со стороны компаний - пиши в комментариях).

Ожидания от соискателя

Позиция "Junior разработчик C# " подразумевает, что человек имеет минимальный опыт работы разработки (до 1 года), либо не имеет его совсем.

Очевидно, что открывая такую вакансию, компания либо рассчитывает на рост компетенций у сотрудника - инвестируя в будущее, либо - снизить стоимость реализации простых задач, чтобы их выполнял менее компетентный (более дешевый) разработчик.

Однако, брать "с улицы" первого попавшегося не вариант - должен быть фильтр, чтобы оставить только перспективных кандидатов, готовых проработать в компании как можно больший период и в дальнейшем (я закладываю срок естественного перехода между грейдами от полугода до двух лет) вырасти до мидла.

Для меня таким фильтром является знание теории .NET и языка C# , ООП и паттернов проектирования. Так же срез знаний на собеседовании является ориентиром для постановки целей на испытательный срок (они разбавят общие цели - погрузиться в проект, разобраться в процессах разработки и т.д.).

Методика технического собеседования

Все вопросы разбиты на тематики и задаются от простого к сложному. Если соискатель плавает на простых вопросах, то его уровень по теме фиксируется, более сложные вопросы не задаются, а интервьюер задаёт вопрос из другой темы.

Задача интервьюера - найти по каждой теме белые пятна. По количеству этих пятен и их глубине определяется текущий уровень собеседника. Грубо говоря, если ты поверхностно ответил на все вопросы, это менее значимо, чем если ответить глубоко, но только на 50% из всех вопросов.

Отвечать "Я не знаю" - не самая выгодная стратегия. Попытаться самостоятельно, либо с подсказками, дойти до решения, имеет больший шанс на успешное завершение собеседования. В данном случае вы показываете, что можете найти решение, даже если его не знаете.

Если кандидат отвечает на все вопросы своего уровня, тогда ему задаются вопросы из следующего уровня, чтобы определить границу его знаний, например, у джуниора могут спросить вопрос мидла. Правильные ответы на такие вопросы идут в плюс соискателю, а неправильные - не учитываются.

Вопросы

Вопросы представлены в виде дерева - чем глубже, тем сложнее вопрос.

CLR и .NET

Группы типов данных в .NET и их отличия
---Что такое стек?
------В чем отличие стека от кучи?
---В каких случаях значимые типы могут храниться в куче?
------Boxing и Unboxing
---Какие есть модификаторы параметров метода?
---Как уничтожаются значимые типы данных?
---Как уничтожаются ссылочные типы данных?
------Что такое сборка мусора?
------Процесс сборки мусора?
------Зачем нужны поколения?
--------- В какое поколение попадают значения в статических полях?
------Что такое маркировка объектов?
------Что такое корни?
Что такое сборка?
Шаги выполнения программы на .NET
---Что такое IL-код?
------Для чего нужен JIT-компилятор?
Управляемые и неуправляемые ресурсы
---Для чего нужен IDisposable?
------Реализация IDisposable в C#
Управляемый и неуправляемый код. Что такое?
Что такое класс Object?
---Какими публичными методами он обладает?

Структура языка

Что такое поле?
---Что такое свойство? Какое отличие от поля?
------Какие модификаторы могут быть у поля, но не могут быть у свойства?
---Отличие от статического поля
Что такое класс?
---Какие модификаторы доступа у класса есть?
---Чем класс отличается от интерфейса?
---Чем класс отличается от структуры?
---Что такое абстрактный класс?
------Зачем нужны интерфейсы?
Что такое строки?
---Отличия от других классов?
---String vs StringBuilder
Что такое метод?
---Какие модификаторы доступа к методу есть?
---В чем разница out t a | out var a | out _?
Что такое множественное наследование?
---Как оно реализуется в C# ?
Что такое конструктор?
---Что такое конструктор по умолчанию?
---Что такое статический конструктор?
------Отличие от обычного конструктора
Что такое константа? Отличие от переменной
---Отличие константы от поля с модификатором readonly
Ключевое слово using
---Какие варианты использования using бывают?
Что такое методы расширения?
---Какие ограничения у метода расширения бывают?
---Какие отличия от описания обычного метода есть?
Что такое LINQ?
---В чем отличие Expression<Func<string>> | Func<string>?
------Что такое дерево выражений?
---В чем разница в использовании интерфейса IQueriable<T> от IEnumerable<T>?

Многопоточность

Многозадачность, многопоточность, асинхронность
Отличие потока от процесса
Отличие активного потока от фонового
Что такое Task?
---Способы запуска задачи, в чем их отличия
Планировщик задач в пуле потоков
Как дождаться выполнения задачи?
Как запустить задачу в другом планировщике?
Как отменить задачу (CancelationToken и CancelationTokenSource)?
Конструкции синхронизации потоков (пользовательского режима,
режима ядра, гибридные)
Конструкция lock
---Методы класса Monitor
Ключевое слово volatile
ConfigureAwait

ООП

Что такое ООП?
---В чем отличия ООП от других парадигм?
Что такое наследование?
---Пример из реальной жизни
---Пример на языке C#
---Каким способом можно точно определить необходимость наследования от другого класса?
Что такое полиморфизм?
---Пример из реальной жизни
---Пример на языке C#
Что такое инкапсуляция?
---Пример из реальной жизни
---Пример на языке C#

Паттерны и принципы

SOLID
DRY

Типы паттернов
Строитель
Одиночка
---Способы реализации на языке C#
---Защита при многопоточном вызове
Фабрика
---Фабричный метод
Сервис локатор
Декоратор
Адаптер
Фасад
Стратегия
Команда
Наблюдатель
Итератор

MVC
---Отличия от MVP

А где ответы?

Ответы, как правило, находятся в книжках. Представлю обязательные к прочтению книги:

Послесловие

Могу сказать по своему опыту проведения собеседований, что не более 10% кандидатов знают ответы на половину представленных выше вопросов, а менее 5% - знает ответы на большую часть вопросов.

Овладев ответами на эти вопросы, разработчик сможет реализовать большую часть повседневных задач, в поставленные сроки и с должным качеством. Поэтому, знание теории для junior-разрабочика, я считаю обязательным и ультимативным.

#с# #собеседование на работу #техническое собеседование #junior