Skip to main content

Собеседования и вопросы

Cобеседования и вопросы

Предыстория

За последний год работы в компании мне довелось провести более 50 собеседований. Большинство из них проводилось на позицию программист-стажер\программист C\C++.
Отмечу, что мне очень нравится беседовать с новыми людьми, особенно с программистами. Ведь очень интересно, чем занимаются люди в IT и какие проекты делают в других компаниях.

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

Мне такой слегка хаотичный порядок сразу не понравился. Собеседования проводят разные люди, при этом вопросы у каждого в голове свои и отличаются от вопросов коллег. Это может привести к тому, что одна из областей не будет затронута вообще и вы возьмете неподходящего кандидата. Дабы избежать таких проблем, мы составили 2 списка вопросов (для стажеров и опытных программистов), а затем и небольшой тест, который проходят кандидаты перед собеседованием. Данный тест позволяет оценить базовые знания кандидата и не тратить время на дальнейшее собеседование в случае, если такие знания отсутствуют. Также мы используем лист с тестом для записи комментариев и оценок по каждой области после собеседования. Он отлично помогает вспомнить каждого конкретного кандидата после проведения собеседований.

Тест вряд ли будет кому-то интересен, поэтому и публиковать его я не буду. А вот наши вопросы приведу в новых постах. Постараюсь так же опубликовать ответы, которых мы ждём от кандидатов. Возможно эти вопросы помогут кому-то в подготовке к собеседованию (почему-то в интернете не так много вопросов для подготовки к собеседованию на должность программиста С\С++).

Зачем вообще публиковать вопросы?

Хочется собедовать «активного», подготовленного кандидата. Я всегда надеюсь, что кто-то из наших кандидатов придет подготовленным. С 2016 года компания высылает вопросы кандидатам перед собеседованием и предлагает им потратить хотя бы 3-5 дней на освяжение своих знаний. Однако, это никак не сказалось на подготовке кандидатов. 90% кандидатов, которые приходят к нам в компанию, обладают крайне низким уровнем знаний. Конечно, студент, приходящий на собеседование, редко обладает большим багажом знаний и навыков. Но когда технический специалист после 3-4 курса института не знает, что такое DNS, как применяется ключевое слово static, то это п….ечально. Еще печальнее, что такие знания порой отсутствуют у людей имеющих 1-2-3 года работы на схожих позициях :(.

Хочется знать, почему так происходит. Пока, к сожалению, я не могу назвать причину происходящего. Возможно, дело в том, что компания предлагает среднюю зарплату в городе. Или в том, что серьёзные программисты едут работать из Зеленограда в Москву. Или дело просто в падении среднего уровня технических знаний у студентов.

P.S. Замечу, что помимо вопросов к собеседованию я планирую постепенно публиковать ответы, которые мы ожидаем от кандидатов. Cписок вопросов достаточно обширный и захватывает многие около-компьютерные вопросы. Стоит отметить, что мы не мучаем кандидата всеми этими вопросами. Но если мы понимаем, что в данной области человек обладает какими-то знаниями, то мы стараемся копнуть как можно глубже, чтобы выяснить границу его знаний.

Вопросы

Итак, первая часть вопросов — Системные вещи:

  1. Что такое архитектура процессора? Чем x86 отличается от x64?
  2. Что такое защищенный и реальный режимы работы? Сегменты, IDT, GDT, LDT, TSS(TR)?
  3. Что такое режим ядра и режим пользователя? CPL, RPL, DPL?
  4. Как происходит взаимодействие между режимом пользователя и ядра? SYSENTER, int2e?
  5. Что такое виртуальная память? Как работает paging? PAE, x64, IOMMU?
  6. Что такое прерывание? Какие они бывают? Как происходит их обработка? Что со стеками?
  7. Подробно как происходит загрузка компьютера? А с UEFI?
  8. Что такое ядро ОС? Какие функции оно выполняет? Почему DOS не является ОС?
  9. Что такое драйвер? Чем он отличается от обычной программы?
  10. Что такое поток? Что он включает? Как и кем создается? В каких состояниях может быть?
  11. Что такое HAL? Зачем он нужен?
  12. Форматы исполняемых файлов(ELF, COFF(PE)). Секции, таблица релокаций, PIC?
  13. Что такое реестр? Как он устроен? Где храниться?
  14. Что такое сервис (служба)? Чем он отличается от обычной программы?
  15. Что такое Unicode, какое отношение к нему имеют UTF16, UCS2LE, UTF8 и т.д.?

Остальные вопросы находятся тут, тут, тут и тут.