На собеседованиях в IT кандидата не только спросят об опыте работы и навыках, но и попросят их подтвердить. Например, объяснить термин, решить логическую задачку и написать код здесь и сейчас. Примеры таких заданий для разных профессий и советы от IT-специалистов, руководителей и HR читайте ниже.
Из чего состоит интервью в IT
Собеседование в IT-компаниях проводится в два этапа: первичное с рекрутером и техническое с тимлидом. На этапе HR-собеседования я провожу первичный скрининг технических навыков. Знаю, что не все рекрутеры это делают, но это помогает отсеивать неподходящих кандидатов. Скрининг состоит из 15–20 простых вопросов, которые помогают выявить технические скиллы. Например, если я набираю на проект Bitrix-разработчиков, то спрашиваю, создавал ли соискатель свои модули и компоненты, работал ли преимущественно с коробочным или с облачным продуктом, с какой версией PHP и фреймворками знаком. Так я могу оценить навыки и знания кандидата и рекомендовать его для прохождения полноценного технического интервью.
Техническое интервью чаще всего проводит тимлид, оно состоит из двух блоков: теории и лайвкодинга. Сначала интервьюер выясняет, насколько человек «в теме». Для этого он задает теоретические вопросы: какие вы знаете паттерны проектирования, как наследовать класс, в каких IDE работали. Постепенно тимлид будет углубляться в определенную технологию, чтобы проверить, какого грейда разработчик сидит перед ним. Например, сначала он задаст вопрос, знаком ли кандидат с принципами SOLID. Потом начнет уточнять: что означает каждый из принципов SOLID, как кандидат это понимает?
Дальше идет лайфкодинг. Мы не мучаем соискателей и отводим на него 5–7 минут. Как правило, техническое интервью проходит по видеосвязи, кандидата просят поделиться экраном и в режиме реального времени написать простой алгоритм.
Еще одним блоком технического собеседования могут быть логические задачи. Они помогают понять, насколько развито логическое мышление у разработчика. В них интервьюер смотрит и на правильный ответ, и на то, как вы размышляете. Такие задания достаточно популярны в крупных компаниях.
Общие задачи на логику
Традицию включать логические задания в собеседования начали крупные IT-гиганты: Apple, Microsoft, Google. По задумке HR, эти задачи показывают, способен ли кандидат принимать решения в нестандартных ситуациях, обладает ли логическим и креативным мышлением. Чтобы дать правильный ответ на такие вопросы, не обязательно владеть специфическими знаниями — достаточно базы в математике и логике.
Задача от Apple про двух стражников
Вы проходите квест и дошли до финального задания. Перед вами две двери: за одной из них — победа, за другой — поражение. У каждой двери стоит по стражнику, и оба точно знают, куда именно ведут их двери. Один из них постоянно лжет, но вы не знаете кто. Зато вы можете задать по одному вопросу каждому из стражников. Что нужно спросить, чтобы выиграть?
Ответ: чтобы открыть правильную дверь, нужно задать вопрос: «Какая дверь, по мнению другого стражника, ведет к победе?» Стражник, который всегда говорит правду, укажет на дверь, за которой игрока ждет поражение. Стражник, который всегда врет, укажет на ту же дверь. Игроку остается открыть другую.
Задача от Google про числа
В числовом ряду 10, 9, 60, 90, 70, 66 какое число должно стоять следующим?
Ответ: искать математическую закономерность в этих числах нет смысла. Однако, если произнести их вслух на английском языке, можно заметить, что количество букв в каждом следующем числе увеличивается на одну (ten, nine, sixty, ninety, seventy, sixty-six). 10 — самое большое число, состоящее из трех букв, 9 — самая большая цифра, состоящая из четырех букв и так далее. В следующем после 66 числе должно быть девять букв. Если кандидат дает ответ 96 (ninety-six), его засчитывают. Идеальным считается число 10 гуголов (ten googol), так как его название созвучно Google.
Задача от Microsoft про воду и ведра
У вас есть два ведра: пятилитровое и трехлитровое. Имея бесконечный запас воды, как с помощью этих двух ведер точно отмерить четыре литра?
Ответ: сначала наполните водой пятилитровое ведро. Вылейте часть в другое ведро — в первом ведре останется два литра. Опустошите трехлитровое ведро и перелейте туда два литра из большого ведра. Снова наберите пятилитровое ведро и снова перелейте часть воды в маленькое. В трехлитровом ведре окажется ровно три литра, в пятилитровом — четыре.
Задачи для разработчиков
Карьерный тренер Льюис Пин собрал несколько вопросов на логику, с которыми сталкивались его клиенты при собеседовании в Google, в том числе на позицию разработчика.
Задача про «мясо»
Что означает выражение «dead beef»?
Ответ: по мнению специалистов из Google, разработчик не будет углубляться в дословное значение. DEADBEEF — число в шестнадцатеричном коде, которое использовалось в Mac OS и IBM, чтобы обозначать ошибки. Об этом примере часто вспоминают при изучении ассемблера — простейшего языка программирования низкого уровня.
Задача по С++
Встречаются и задания на наблюдательность, связанные с кодом. Например, разработчика могут спросить, что не так в конкретной части кода:
operator int() const {
return *this;
}
Ответ: При запуске кода в таком виде интерфейс либо сразу предупредит об ошибке еще на этапе компиляции, либо все закончится переполненным стеком. Оperator int будет пытаться привести возвращаемое значение к типу int для текущего объекта. То есть функция будет рекурсивно вызывать саму себя.
«Вопросы на собеседовании для фронтенда зависят от уровня профессионального развития разработчика и вакансии, на которую он претендует. Приведу примеры вопросов и задач, с которым я сталкивался на собеседованиях на разных позициях.
Junior-разработчиков спрашивают о базовых концепциях языка программирования: использование переменных, функций, методов, массивов и объектов. Также могут вопросы по HTML и CSS, например о структуре веб-страницы, тегах, стилях, верстке, адаптивности и медиазапросах. Чтобы проверить навыки, могут предложить задачу на проверку строки на палиндром, задачи про вычисление FizzBuzz или про анаграммы.
Middle-разработчикам задают более сложные вопросы, связанные с computer science: структуры данных, оценка сложности алгоритмов, парадигмы и принципы программирования. Могу поставить задачу реализовать механизм мемоизации, debounce-функции или throttling.
Senior-разработчиков спросят про архитектуру и проектирование ПО. В качестве практики попросят построить архитектуру приложения с лентой новостей или интернет-магазина с корзиной».
Задачи для аналитиков
При собеседовании на эту позицию особенно важно оценить, насколько кандидат внимателен к деталям, умеет применять математику и логику в жизненных ситуациях и объяснять свое решение.
Задача про год рождения
Пример базовой математической задачи с конечным множеством чисел от компании Bercut. В нем бывает разное количество чисел. Разница между минимальной и максимальной суммой чисел в нем — 90. Его обычно делят на части, в первой из которых бывает до четырех простых чисел. О чем речь?
Ответ: речь о месяце. Его действительно делят на недели и если первая начинается с понедельника, то в ней четыре простых числа: 2, 3, 5 и 7. Минимальная сумма чисел в месяце — 406, максимальная — 496.
Задача на поиск оптимального алгоритма действий
Такими заданиями проверяют навык расчета оптимального порядка действий в разных ситуациях. Вы стоите перед двумя изолированными комнатами. В одной — 3 лампочки, в другой — 3 выключателя. Зайти в комнату с лампочками можно всего один раз, но выкручивать их нельзя. Совершив минимальное количество действий, нужно выяснить, какую лампочку включает каждый выключатель.
Ответ: приводим в действие первый выключатель и оставляем в положении «вкл.». Переключатель номер два не трогаем, а третий включаем на 5–7 минут и выключаем. Теперь можно зайти в комнату с лампочками: одна из них будет гореть, вторая будет холодной на ощупь, а третья — чуть теплой, потому что успела немного нагреться. Так получится понять, какой выключатель отвечает за разные лампочки.
Задача про канализационные люки
Вопрос проверяет способность человека искать логичное объяснение даже очевидным фактам. Почему канализационные люки круглые?
Ответ: диаметр люка всегда одинаковый, поэтому, как ни крути, люк не провалится в канализацию. Кроме этого, круглый люк легче транспортировать — можно перекатывать от одного отверстия к другому.
Задачи для DevOps
На собеседовании на позицию DevOps кандидатам задают вопросы и задачи на базовое знание сетей, инструментов и процессов, рабочей культуры.
Задача на понимание внутренних процессов сетей
Даны два устройства из разных сетей с роутером между ними. Что происходит в момент, когда устройство А отправляет данные на устройство Б?
Ответ: решением здесь будет стандартное рассуждение. Можно рассказать, что через таблицу маршрутизации видно, что передача данных осуществляется только через роутер. Устройство А отправляет запрос, по IP определяет MAC-адрес роутера, передает данные. Роутер фиксирует подключенную сеть и передает данные на второе устройство.
Задача про пиццу
Классический вопрос для DevOps. Опишите работу решений Saas, PaaS и IaaS на примере пиццы.
Ответ: впервые концепцию «изготовление пиццы как облачный сервис» придумал инженер из IBM Альберт Баррон. Позже ее усовершенствовали: обновленная схема правильного ответа выглядит вот так.
Читайте также: «Мы постоянно заботимся о качестве продукта»: чем занимается DevOps-тимлид в IT-компании
Задачи для дата-сайентистов
Кандидатам на позицию data scientist реже дают задачи на логическое мышление. Практически всегда такие задания совмещают с проверкой hard skills.
Интервью в Data Science по техническим вопросам состоит из следующих этапов:
- Вопросы и задачи по теории вероятности, алгоритмам и структурам данных, алгоритмам машинного обучения. Например: «Объясните схему работы алгоритма Random Forest», «За какую минимальную сложность можно отсортировать список из чисел и как это сделать», «Что такое p-value».
- Кейсы, которые проверяют подход к решению задач. Например, вам могут предложить сделать алгоритм ранжирования отзывов. Нужно будет описать схему подхода и эксперименты, пояснить, какие метрики и почему будут выбраны, как будет использоваться итоговая модель машинного обучения.
- Реальная задача на дом. Кандидату выдадут тренировочные данные и предложат на их основе подготовить модель машинного обучения. На такие задания, как правило, дают неделю. По итогу компания проверяет точность предсказания на тестовых данных (чтобы сравнить точность разных кандидатов) и ход решения».
Приведем несколько примеров задач для дата-сайентистов.
Задача про дождь в Санкт-Петербурге
Вы летите в Санкт-Петербург и сомневаетесь, брать ли с собой зонт. Чтобы посоветоваться, вы звоните трем случайным жителям города и спрашиваете, идет ли дождь. Каждый из них говорит правду с вероятностью ⅔, а с вероятностью ⅓ лжет. Все трое ответили, что идет дождь. Какова вероятность, что он идет на самом деле?
Ответ: при решении этой задачи нужно опираться на теорему Байеса, одну из самых важных в data science. Допустим, что вероятность дождя в Санкт-Петербурге в любой день, не связанный с визитом, равна ¼, или 25%.
P(A) = вероятность дождя = 0,25
P(B) = вероятность, что все три жителя говорят, что идет дождь.
P(A|B) = вероятность дождя при условии, что все трое говорят, что он идет.
P(B|A) = вероятность, что все трое говорят, что идет дождь, при условии, что он действительно идет = (2/3)3 = 8/27.
Вспоминаем формулу Байеса: P(A|B) = P(B|A) * P(A) / P(B) и находим P(B):
P(B) = P(B|A) * P(A) + P(B| не А) * P(не A).
P(B) = (2/3)3*0,25 + (1/3)3*0,75 = 0,25*8/27 + 0,75*1/27.
После этого можно посчитать P(A|B).
P(A|B) = 0,25*(8/27) / (0,25*8/27 + 0,75*1/27) = 8 / (8+3) = 8/11.
Получается, что если все трое петербуржцев говорят, что идет дождь, то он действительно идет с вероятностью 8/11.
Задача на разбор адреса
Я нанимал специалиста в сфере data science на решение задачи, которую мы уже решили сами. Соискателю нужно было разобрать адрес из строки данных — это одна из ключевых и самых сложных задач в качестве клиентских данных, над которым мы работаем. На первый взгляд, все просто: есть адрес, и его нужно привести к стандартному формату, разобрать на гранулы (страна, город, улица, дом и еще десяток полей). Как это работает, можно посмотреть, например, на сайте DaData.ru. Проблема в том, что адрес может быть написан миллионами разных способов, часто с опечатками и мусором, старыми названиями улиц и городов. А иногда пользователь вообще вводит несуществующий адрес. Разобранные по полям адреса позволяют их сравнивать, геокодировать, точнее и дешевле доставлять заказы. В ситуации с финансовыми организациями такая обработка адресов помогает формировать корректные отчеты для регуляторов и не получать штрафы за ошибки.
Такая задача позволяет проверить как общие знания, так и реальный опыт в конкретной узкой области. Для ее решения нужно знать Python — наиболее популярный язык в ML-разработке, NLP-библиотеки и фреймворки и уметь с ними работать. Обычно с неподходящими кандидатами интервью заканчивалось за 15–20 минут: становилось понятно, что дальше не о чем говорить. А с лучшими можно было спокойно общаться и 1–1,5 часа. Некоторые кандидаты либо честно признавались, что не имеют подходящего опыта, либо очень неуверенно начинали фантазировать над решением. На самом деле, даже не имея опыта, но обладая достаточно развитым кругозором в ML, кандидат имел все шансы успешно пройти собеседование.
Больше всего меня впечатлил кандидат, который уже решал похожие задачи. Он сразу описал используемые технологии и предполагаемый пайплайн, сказал, какие данные понадобятся для обучения. Он приятно выделялся тем, что задавал глубокие вопросы о том, как мы сами пробовали решать эту задачу, какие данные у нас есть и какой результат мы ожидаем.
Задача про «лес»
Даны два устройства из разных сетей с роутером между ними. Что происходит в момент, когда устройство А отправляет данные на устройство Б?
Ответ: random forest — это универсальный алгоритм в машинном обучении. Он может выдавать результаты классификации, регрессии и кластеризации. Алгоритм состоит из нескольких отдельных деревьев решений, которые представляют ансамбль методов. Каждое дерево в случайном лесу возвращает прогноз класса, а класс с наибольшим количеством голосов становится прогнозом всего леса.
Читайте также: Я запускал собственные проекты, а теперь занимаюсь Data Science
Задачи для тестировщиков
С высокой вероятностью задачи на логику могут встретиться во время собеседования на позицию тестировщика. Проверку способностей кандидата проводит специальный технический эксперт. Ему важно не столько услышать правильный ответ, сколько понять ход мыслей претендента.
Задача про ягоды
Перед вами три стакана: с черникой, земляникой и смесью ягод. Каждый стакан помечен неверно. Заглядывать внутрь стаканов нельзя, но из каждого можно достать по одной ягоде наугад. Узнайте содержимое каждого из стаканов и расставьте метки правильно.
Ответ: подписи на стаканах ложны, поэтому начать стоит со стакана со смесью. Допустим, вы достали чернику — значит в этом стакане только она. Остается два стакана с пометкой о чернике и землянике. В «земляничном» стакане может быть либо черника, либо смесь. Если в стакане с меткой «земляника» оказалась черника, в этом стакане — смесь. Соответственно, в последнем стакане остается только земляника.
Задача про родителей и детей
Задание для тестировщиков от чешской компании Veeam. Условие короткое: Александр смотрит на Ольгу, а Ольга смотрит на Андрея. У Александра есть дети, у Андрея нет. Смотрит ли человек, у которого есть дети, на человека, у которого детей нет?
Ответ: по исходным данным неизвестно, есть ли дети у Ольги, но это не проблема. Если есть, то Ольга смотрит на Андрея, у которого нет детей, — ответ «да». Если у Ольги детей нет, то Александр, у которого дети есть, смотрит на Ольгу — ответ снова «да». Неважно, есть ли у Ольги дети, ответ «да» будет единственно верным при любом раскладе.
Задача про электрогитары
Некоторые задачи составляют, чтобы проверить логику кандидата как тестировщика, Например, претендента просят представить себя на позиции в компании, выпускающей электрогитары. В зоне ответственности — проработка вопросов безопасности будущего инструмента. Какие тесты из области безопасности стоит провести?
Ответ: такая задача одновременно дает простор для фантазии и проверяет навыки тестировщика. Среди самых распространенных тестов можно назвать проверку перепадов напряжения в шнуре питания, токсичность лака, которым покрывается гитара. Некоторые предлагают выяснить силу, с которой могут порваться струны, и проверить корпус на прочность, если солист решит ударить инструментом по сцене. Альтернативных тестов может быть несколько десятков.