Продолжаем цикл статей о том, что требуют на собеседованиях в разных компаниях. Это давно обещанная статья о Mail.Ru.
Disclaimer. ❗️ Это статья из цикла рассказов о том, как я проходил собеседования в различные IT-компании. В этих статьях я из этических соображений не раскрываю задачи, которые мне давали. Цель этих статей — сформировать картину того, какие знания и навыки требуют от кандидатов на позицию разработчика современные IT-компании.
Когда я рассказывал кому-то из знакомых, что ходил собеседоваться в Mail.Ru, некоторые из них кривили лицо. Действительно, у Mail'а весьма специфическая репутация, но в то же время это крутой бизнес. Поиск, почта, ВКонтакте, Одноклассники, Юла, Delivery Club, игры, Ситимобил — это далеко не полный список бизнесов, частично или полностью принадлежащих Mail.Ru. Было очень интересно узнать, как у них внутри.
В предыдущих статьях я рассказывал о трёх собеседованиях в Network Optix (а потом случилось ещё и четвёртое, но об этом в другой раз), в Mail.Ru же меня пощадили и провели одно, пускай и довольно продолжительное собеседование.
1️⃣ Начали с того, что меня оставили одного в переговорке, выдав на бумаге набор заданий. На их решение отвели один час. Первое задание — классическая алгоритмическая задача, решение которой надо было запрограммировать на бумаге. У неё есть простое решение за квадрат и более сложное — за O(N). Я понимал, что могу написать и то, и другое, но шансов ошибиться в линейном решении было больше. Поэтому я чисто и без ошибок написал квадратичное решение, а потом, когда уже пришёл интервьюер, рассказал ему, что есть ещё и линейное.
Далее шли несколько задач, в которых код писать было не надо, но надо было придумать алгоритм и оценить время его работы и потребление памяти. Ничего экзотического, но знание классических алгоритмов и структур данных необходимо для успешного решения.
После этого блока заданий шёл блок вопросов на знание Linux. Нужно было продемонстрировать знание и умение применять стандартные утилиты командной строки Linux, а также понимание принципов работы процессов в этой ОС. Пользоваться Интернетом не запрещают :)
2️⃣ Когда час истёк, ко мне пришёл интервьюер. Наше общение состояло из двух частей. В первой части мы обсуждали, как я решил выданные мне задачи, во второй он рассказывал о задачах своей команды. Обсуждение задач проходило в формате защиты: я обосновывал свои решения, рассказывал, что в Linux я знаю, чего не знаю, и на основании каких соображений выбрал свой ответ.
3️⃣ Следующая часть собеседования проходила классически — пришёл интервьюер и дал алгоритмическую задачу, решение которой надо было запрограммировать на доске. Я шёл по алгоритму, который рекомендую применять для решения задач на собеседовании: написал пару тестов, придумал алгоритм, рассказал его интервьюеру, после его одобрения продумал структуру программы и написал её на доске. У меня получился несложный чистый код. А дальше я сделал самый главный шаг — начал тестировать свой код на тестах, которые составил вначале. Это позволило мне понять, что у меня в коде возникает бесконечная рекурсия, и исправить этот баг.
Таким образом, я на реальном собеседовании проследовал по рекомендуемым мною шагам и продемонстрировал, что я не только могу писать код, но и тестировать и отлаживать его.
Post #42
670