понедельник, 29 июня 2015 г.

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

Введение

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

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

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

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

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

Всем хочется проводить собеседование "активного", подготовленного кандидата. Я, например, очень надеюсь, что кто-то из наших кандидатов придет подготовленным. К сожалению, на данный момент мой опыт собеседований весьма негативный. Большинство кандидатов, которые приходят к нам в компанию, обладают крайне низким уровнем знаний.  Конечно, студент, приходящий на собеседование, редко когда обладает большим багажом знаний и навыков. Но когда технический специалист после 3-4 курса института не знает, что такое DNS, как применяется ключевое слово static, то это п....ечально. Еще печальнее, что такие знания порой отсутствуют у людей имеющих 1-2-3 года работы на схожих позициях :(.

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

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

Вопросы и ответы


Итак, первая часть вопросов - Системные вещи:
  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 и т.д.?

Комментариев нет:

Отправить комментарий