Введение
За последний год работы в компании мне довелось провести более 50
собеседований. Большинство из них проводилось на позицию
программист-стажер\программист C\C++.
Стоит отметить, что мне очень нравится беседовать с новыми людьми, особенно с программистами. Ведь очень интересно, чем люди занимаются в нашей отрасли и какие проекты делают в других компаниях.
Стоит отметить, что мне очень нравится беседовать с новыми людьми, особенно с программистами. Ведь очень интересно, чем люди занимаются в нашей отрасли и какие проекты делают в других компаниях.
Когда мне первый раз предложили провести собеседование нового кандидата,
у компании не было какого-то четкого порядка проведения собеседования,
не было списка вопросов или тестовых заданий. Коллеги, которые
проводили собеседования, имели некоторый стандартный список вопросов в
своей голове, которые и предлагались кандидатам. Когда я сам
устраивался в компанию, я отвечал именно на эти вопросы.
Мне такой слегка хаотичный порядок сразу не понравился. Порой собеседования проводят разные люди, при этом вопросы у каждого в голове свои и отличаются от вопросов коллег. Это может привести к тому, что одна из областей не будет затронута вообще и вы возьмете неподходящего кандидата. Дабы избежать таких проблем, мы составили 2 списка вопросов (для стажеров и опытных
программистов), а затем и небольшой тест, который проходят кандидаты
перед собеседованием. Данный тест позволяет оценить базовые знания
кандидата и не тратить время на дальнейшее собеседование в случае, если такие знания отсутствуют. Также мы используем лист с тестом для записи комментариев и оценок по каждой области
после собеседования. Он отлично помогает вспомнить каждого конкретного
кандидата после многих собеседований.
Наш тест вряд ли будет кому-то интересен, поэтому и публиковать его я не буду. А вот наши вопросы и, соответственно, ответы на них приведу в конце данного поста. Возможно эти вопросы помогут кому-то в подготовке к собеседованию
(почему-то в интернете не так много вопросов для подготовки к собеседованию на должность программиста С\С++).
Всем хочется проводить собеседование "активного", подготовленного кандидата. Я, например, очень надеюсь, что кто-то из наших кандидатов
придет подготовленным. К сожалению, на данный
момент мой опыт собеседований весьма негативный. Большинство кандидатов, которые приходят к нам
в компанию, обладают крайне низким уровнем знаний. Конечно, студент,
приходящий на собеседование, редко когда обладает большим багажом знаний и навыков. Но когда технический специалист после 3-4 курса института не
знает, что такое DNS, как применяется ключевое слово static, то это
п....ечально. Еще печальнее, что такие знания порой
отсутствуют у людей имеющих 1-2-3 года работы на схожих позициях :(.
Очень хотелось бы знать, почему такие ситуации имеют место быть. Пока, к сожалению, я не могу назвать причину происходящего. Возможно,
дело в том, что компания предлагает среднюю зарплату в городе. Или в
том, что все серьёзные программисты едут работать из Зеленограда в
Москву.
P.S. Замечу, что помимо вопросов к собеседованию я планирую
постепенно публиковать ответы, которые мы ожидаем от кандидатов. Как вы видите, список вопросов достаточно обширный и
захватывает многие около-компьютерные вопросы. Стоит отметить, что мы не
мучаем кандидата всеми этими вопросами. Но если мы понимаем, что в
данной области человек обладает какими-то знаниями, то мы стараемся
копнуть как можно глубже, чтобы выяснить границу его знаний.
Вопросы и ответы
Итак, первая часть вопросов - Системные вещи:
- Что такое архитектура процессора? Чем x86 отличается от x64?
- Что такое защищенный и реальный режимы работы? Сегменты, IDT, GDT, LDT, TSS(TR)?
- Что такое режим ядра и режим пользователя? CPL, RPL, DPL?
- Как происходит взаимодействие между режимом пользователя и ядра? SYSENTER, int2e?
- Что такое виртуальная память? Как работает paging? PAE, x64, IOMMU?
- Что такое прерывание? Какие они бывают? Как происходит их обработка? Что со стеками?
- Подробно как происходит загрузка компьютера? А с UEFI?
- Что такое ядро ОС? Какие функции оно выполняет? Почему DOS не является ОС?
- Что такое драйвер? Чем он отличается от обычной программы?
- Что такое поток? Что он включает? Как и кем создается? В каких состояниях может быть?
- Что такое HAL? Зачем он нужен?
- Форматы исполняемых файлов(ELF, COFF(PE)). Секции, таблица релокаций, PIC?
- Что такое реестр? Как он устроен? Где храниться?
- Что такое сервис (служба)? Чем он отличается от обычной программы?
- Что такое Unicode, какое отношение к нему имеют UTF16, UCS2LE, UTF8 и т.д.?
Комментариев нет:
Отправить комментарий