Мой опыт собеседования в Google
Этим летом я проходил собеседование на роль Software Engineer в Google Zürich. Процесс меня приятно удивил — оказалось, что алгоритмическим задачкам отводится не так уж много времени, а такие важные области как software engineering и software design прорабатываются весьма тщательно.
Процесс собеседования в целом
Разговор с рекрутером
После того как вы отправили резюме (очень желательно — через знакомого гуглера), вам в течении недели должен ответить рекрутер. Вы договоритесь о времени звонка и поговорите о том, в каком офисе вы бы хотели работать, на какой позиции, какой у вас предыдущий опыт разработки и т.д. Рекрутер подробно опишет какие дальнейшие шаги вас ждут и что вам нужно повторить перед собеседованиями. Можно взять 2–3 недели на подготовку, но если вам недостаточно этого времени, то лучше начать подготовку заранее.
Лучшая рекомендация по подготовке — статья Get that job at Google by Steve Yegge. Еще очень важный совет, который я получил от моего знакомого гуглера — налегать на практику. Читаете книгу по математике/алгоритмам — решайте все упражнения. Решайте много олимпиадных задач, участвуйте в соревнованиях. Если есть возможность — перейдите на более подходящие для обкатки новых навыков проекты в текущей компании.
Phone screening
Следующий шаг — phone screening. Вы договоритесь о времени, когда вам удобно пройти собеседование по телефону или GTalk, на котором нужно будет решить одну-две задачи в Google Docs, проанализировать ее сложность (big-O) и ответить на дополнительные вопросы. Задача этого интервью (их бывает одно или два) — отсеять тех, кто не умеет решать рядовые для инженера Google задач.
On-site interviews
Если вы прошли phone screening, то с вами договариваются о дате для прохождения серии интервью в одном из офисов Гугла (обычно — в том, где вы планируете работать). В моем случае это было 5 интервью по 45 минут с часовым перерывом на обед. Кроме этого обеденного перерыва специальных перерывов нет, но перед началом каждой 45-минутки вам предлагают сходить за водой-чаем-кофе, в туалет. Задача этих интервью — протестировать с разных сторон ваши возможности в решении инженерных задач, проверка вашего опыта software engineering и system design, изучение ваших способностей решать задачи за пределами зоны комфорта.
В течении трех недель вы либо получаете результат: предложение о работе (job offer), либо вежливое «нет». Если нет — можно снова начать этот же процесс через год.
А теперь поподробнее об on-site interviews
Решение инженерных задач
У хороших интервьюеров есть заготовки задач, которые задают канву вашему разговору и на которых можно проверить разные ваши навыки. Из пяти моих on-site интервьюеров только один задавал «стандартные» задачи из набора »140 google interview questions» и «Cracking the Coding Interview».
Когда я читал отзывы проходивших собеседование, то встречал очень много отзывов именно о задачах. «Все решил, но не взяли», «Дурацкие задачки, мы же не в институте» и т.п. По моим ощущениям, задачки намного менее объемные чем на соревнованиях по программированию (даже при том что я участвовал только в любительском втором дивизионе). Если вы хорошо повторили (или же изучили, как это было в моем случае) алгоритмы и структуры данных, а затем еще и хорошенько потренировались на площадках codeforces.ru, topcoder.com, то реализация решений не будет отвлекать много вашего внимания, а на первый план выйдет ваше умение рассуждать, задавать хорошие уточняющие вопросы, объяснять возможные варианты решения, обсуждать возможные варианты улучшения первоначального решения.
Вывод за пределы комфортной зоны
Про это я читал в какой-то статье, мне даже говорил про это рекрутер, но что это такое (и почему это важно) — я осознал только на первом интервью. Суть хода в том, что в процессе разговора интервьюер нащупывает вашу зону комфорта/компенентности, проверяет насколько хорошо вы решаете задачи в этой зоне, а затем расширяет задачу за пределы этой зоны. Ощущение такое как будто только прочитал задачу C или D из условий соревнования, и у тебя нет ни малейшей идеи как к ней подступиться. Если есть опыт «взлома задач», мозговых штурмов, поиска в разных направлениях одновременно, то это сильно помогает. Я каждые 2–3 минуты генерировал новые возможные подходы к решению, пока не начали прорисовываться более-менее рабочие варианты. Такой подход на интервью я встретил впервые и очень зауважал те компании и тех интервьюеров, которые могут такое устроить.
Задачи на system design и software engineering
Я видел какой код пишется на соревнованиях по программированию и побаивался, что гугловое интервью проходят в основном такие программисты, но оказалось что «все под контролем». Одно из собеседований посвящено system design. Вам рассказывают требования к продукту и просят спроектировать программную систему, которая бы отвечала этим требованиям. Потом постепенно дополняют требования — большие нагрузки, большие данные и т.п. Потом просят спроектировать в деталях один из важнейших компонентов.
Кроме system design много внимания уделяется и software engineering: как и зачем писать тесты, как работать командой, как писать расширяемый код и т.п.
Ваши вопросы
Если у вас есть какие-то вопросы по процессу собеседования — пишите в комментарии. Хочу сразу развеять один миф, который я несколько раз слышал в Киеве.
В Google берут только PhD?
У меня диплом «инженерa-электрикa» маленького степного университета, что совсем не помешало мне получить Google job offer и разрешение на работу в Швейцарии. Мой профессиональный опыт (6 лет разработчиком и 3 года менеджером) компенсировал недостаток формального образования.