Здравствуй, читатель. Сегодня я хочу по делится своим опытом в собеседованиях на должность C # разработчика.
Самое первое, с чем нужно определится – это сфера, в которой интересно работать. В данный момент я разработчик плагинов САПР и для меня это оказалось не столь интересным, как разработка WPF приложений. Поэтому иногда меня посещают мысли о смене работы, так как нет заинтересованности (кроме финансовой, разумеется).
Поэтому при отклике на вакансию, сразу смотрите на то, чем компания занимается и с чем придётся работать.
А теперь сами собеседования. Я часто их прохожу не с целью трудоустроится, а с целью того, чтобы быть в курсе потребностей рынка и для собственного развития. В последнее время есть прям основное, что есть всегда:
1) Методы класса Object . Особенно часто любят спрашивать про работу метода Equals и ReferenceEquals. У меня это спрашивали практически на каждом техническом собеседовании.
2) Наследование. Это, в принципе, база, что должен знать разработчик. Часто присылают код и я должен при них ответить на вопрос о том, как работать будет данный код. **Если вдруг статью читает кто-то из тех, кто собеседует – присылайте код фотографией что ли. А лучше открывайте сеанс Live Share . Потому что получать код в формате в *.txt или в *.docx – очень «здорово» .**
3) SOLID – на каждом собеседовании просили о нём рассказать. Комментировать это не за чем, на этих принципах построено всё (потому что они логичны). Про другие, такие как KISS или DRY спрашивали намного реже. (хотя моё мнение в том, что SOLID эти принципы включает в себя).
Остальные вопросы уже относились часто уже к самой технологии. Например, SQL запросы. На тестовых заданиях не встречалось чего-то сложного, а было что-то в духе сделать выборку, а потом отсортировать её. Но больше меня удивляет другое. Многие спрашивают про Entity Framework , но часто практически не используют его в своих проектах. Я часто встречал статьи о том, что такие ORM системы не подходят для сложных запросов и прочее. Но это уже старые статьи (до 2016 года). В Entity Framework Core много чего пофиксили и использовать это дело в продакшене стало очень удобно и «без танцев с бубном».
Также стоит обратить внимание на LINQ запросы. При чём не просто о том, что LINQ работает с объектами и интерфейсом IEnumerable . Это язык запросов и нужно знать о интерфейсе IQueryable.
Наглядный пример ( да- да, я знаю, что я сам написал код текстом, но тут чуть- чуть и вы всё поймёте 😊 ):
var list = new List<MyClass>() { new MyClass { Id = 1, Name = " Петров" }, new MyClass { Id = 2, Name = " Сидоров" } };
var q = list.Select(e => e.Name);
list.Add(new MyClass { Id = 1, Name = " Иванов" });
Console .Write (q .Last ());
Консоль выведет “Иванов”. Тут q – это IQueryable тип. И он отложенный, вследствие чего его работа началась только тогда, когда к этому объекту обратились за данными.
Если работать придётся в веб – то в любом случае будет вопрос про DI контейнеры и про работу сборщика мусорщика. Честно скажу, я погорел на вопросе о том, когда стоит вызывать метод Dispose (IDisposable ) или метод Finalize (System .Object ). Не принцип их работы, а когда действительно лучше использовать Finalize , а когда стоит использовать Dispose .
Если речь про desktop разработку (в основном на рынке сейчас WPF ), то нужно уметь работать со стилями, создавать свои элементы интерфейса, знать про Dispatcher . Конечно, помимо всяких базовых вопросов, в духе «расскажите про паттерн MVVM » или «расскажите про DataGrid » или «работали ли с O bservablecollection».
В целом по сложившейся картине вышло так: порог входа на должность C # разработчика не высок на рынке в России (позиция Junior или Middle ). Это связанно с тем, что многие компании не задают каких-то сложных вопросов о структурах данных, о сложности алгоритмом и прочее. На своём опыте скажу, что проходить собеседования довольно часто весьма скучно, так как нового ничего не узнаю на них, а вопросы часто повторяются. Часто задают технологические вопросы, с которыми с вероятностью 80-90% работали все, когда изучали ту или иную технологию. Года 2 назад я устроился официально в одну из фирм и там спрашивали про устройство CLR , про то, как работает компилятор. Меня тогда спросили даже про свойства, что они представляют из себя в IL коде. Сейчас таких вопросов я не получал. Исключительно про базовые методы и паттерны ,основы той или иной технологии.
Знаете, хочется сказать, что если у Вас аналитическое мышление, с работающей логикой, то на позицию Junior разработчика можно попасть, потратив месяца 2-3 на самостоятельное изучение того, что интересно. Можно заплатить за курсы, но для новичков это неправильно, как я думаю. (Курсы себя оправдывают, если они рассчитаны на уже имеющийся опыт, иначе это просто деньги на ветер.)