21 вопрос по .NET для Junior, Middle и Senior

Tuesday, November 10, 2020 21 вопрос по .NET для Junior, Middle и Senior

Сегодня на портале ДОУ вышла статья 150+ вопросов п .NET для Junior, Middle та Senior. Вопросы для этой статьи готовило много людей, у которых есть большой опыт работы c платформой .NET, в том числе есть там несколько вопросов и от меня.
В этой же публикации я хочу не только перечислить вопросы, которые обычно задаю соискателям, но и поделиться некоторыми ожиданиями от разработчиков и своими соображениями по поводу тестовых заданий и того, чего я скорее всего, никогда не буду просить сделать соискателя.


Вопросы на позицию Junior

  1. Объясните ваше понимание основных принципов ООП.
  2. В чем разница между значимыми и ссылочными типами?
  3. Что такое боксинг и анбоксинг?
  4. Что такое сборка мусора?
  5. Как можно обработать исключение?
  6. Что такое дженерик (generic) и для чего нужны такие типы?
  7. Что такое пространство имен (namespace) и для чего оно нужно?

Чего я жду от разработчика уровня Junior

В первую очередь Junior разработчик должен показать желание развиваться и готовность инвестировать собственное время в собственное развитие.

Вопросы на позицию Middle

  1. Какие паттерны вы знаете и используете?
  2. Какие способы отладки приложения вы применяете?
  3. Есть ли преимущества у иммутабельности? Если да, то какие?
  4. Используете ли вы логирование, когда пишете код?
  5. Что такое в вашем понимании чистая функция? Какие у нее преимущества?
  6. Что такое внедрение зависимостей и для чего оно нужно?
  7. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?

Чего я жду от разработчика уровня Middle

От разработчика этого уровня я ожидаю способностей самостоятельно разобраться в поставленной задаче и решить ее наилучшим способом.

Вопросы на позицию Senior

  1. Расскажите про проекты, в которых вы работали. Опишите их архитектуру (если это не нарушает NDA).
  2. Назовите три самые сложные проблемы, которые вам приходилось решать. Как вы их решили, как пришли к этому решению?
  3. Какие способы взаимодействия между микросервисами вы знаете и какие у них есть достоинства и недостатки.
  4. Каким образом вы будете отлаживать систему, состоящую из множества миросервисов, если нужно отследить полный путь обработки запроса?
  5. Опишите, какие вы знаете потенциальные проблемы, связанные с параллелизмом данных и задач.
  6. Какие инструменты выберете для работы с реляционными базами данных? Опишите их достоинства и недостатки.
  7. Какие инструменты для работы с очередями вам известны (как в .NET, так и отдельные продукты), какой инструменты/продукт вы бы выбрали и почему?

Чего я жду от разработчика уровня Senior

На этом уровне разработчик должен уметь самостоятельно разбить крупную задачу на подзадачи и определить архитектуру решения, которое он собирается реализовать. Также я ожидаю, помимо знаний этот специалист обладает уже определённым опытом, который поможет ему предусмотреть возможные проблемы, которые на первый взгляд не видны разработчикам уровня Middle.


В целом, каждый из приведенных выше вопросов – это приглашение беседе и более глубокому обсуждению, которое вполне вероятно сможет вывести беседу на совершенно новые темы, которые помогут кандидату лучше раскрыться и показать свой опыт.

Чего я точно не буду делать во время собеседования

Я точно не буду спрашивать расшифровку аббревиатур. Знает ли человек на память что значит SOLID, DWH, ROR, FOSS, или уже давно забыл – это никак не поможет определить уровень его компетентности.

Я точно не буду просить кандидата написать код на бумаге. Вообще просьба написать программиста код на бумаге сродни просьбе водителя грузовика показать, что он умеет переносить грузы на спине, а водителя экскаватора – показать, как он умеет обращаться с совковой лопатой. В реальной обстановке писать код за пределами IDE разработчику придется примерно никогда.

Я точно не буду просить перечислить на память сигнатуры методов. Вообще нет смысла спрашивать у кандидата ту информацию, которая легко находится в документации. Задача инженера – спроектировать и подготовить наиболее эффективное решение, а не выучить на память весь MSDN.

О практических заданиях

Практические задачи на собеседовании я даю очень редко, так как собеседование – это довольно стрессовое событие. А в состоянии стресса писать эффективный код довольно трудно. Поэтому для меня главное понять6 что человек правильно мыслит и хорошо понимает ту область, в которой он работает.