На этой неделе я проходила техническое собеседование в Google и, хоть и провалила, хочу поделиться опытом в этой статье.

HR из Google вышла на меня сама. Мне 25 лет, Junior Android developer, у меня есть свой простой сайт-визитка, 3 опубликованных довольно примитивных приложения в маркете, живой гитхаб профиль и 2к репутации на StackOverflow. Как именно меня нашли я не знаю. 1 раз я сама подавалась на вакансию к ним, давно — может это повлияло. Кроме этого я часто программирую для удовольствия — я гуглю очень много по теме и возможно мои поисковые запросы складывают обо мне хорошее впечатление. Остается только догадываться.

Первое собеседование с HR было очень легко пройти. Мы прошлись по моему резюме, она указывала на мои сильные стороны, а мне нужно было просто поддакивать. Ей понравилась что я люблю open-source разработку, Android и что у меня математическое мышление. Она так же задала мне пару простых вопросов на алгоритмы сортировки и их big-O, попросила явно указать линк на мой GitHub в CV. Она так же рассказала про процесc отбора.

Отбор состоит из нескольких собеседований. Мой следующий этап — техническое Phone-screen интервью. Оно проходит через Hangouts. Мне сообщили, что в случае найма я смогу выбрать страну (только EMEA) и город, где смогу работать, а следовательно и проект. Google вначале набирает сотрудников, а потом распределяет. Также сказали, что я сколько угодно долго могу готовиться к техническому интервью, но рекомендуют 2 недели. Я попросила 6 недель. Дату и время испытуемый выбирает сам. В Google готовы подстраиваться под Вас.

Для подготовки HR посоветовала прочесть книгу Cracking the Coding Interview Steve Yegge's Blogspot. А так же практиковаться на https://codeforces.com/. Кроме этого меня попросили записаться на 1 часовой online тренинг для кандидатов — как правильно отвечать на вопросы тех интервью. На нем присутствует программист от Google и около 7 кандидатов. На этом тренинге рассматривается одна задача, все думают, кто хочет задает вопросы или предлагает решения. Потом тренер предлагает шаблон, как отвечать по задаче. Нам дали понять, что нормально и даже хорошо, если вы вначале выдаете наивное (не эфективное) решение. Вы сообщаете о проблемах вашего решения, назваете Run-time (Big-O) алгоритма и предлагаете улучшения. Но по факту на собеседовании вы не успеете закодить несколько решений — только одно. Так что примитивные обсуджайте вслух, а финальное начинайте кодить.

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

На техническом интервью было 2 вопроса. Один совсем простой про работу со String. По сложности — 1 курс универа. Второй вопрос сложнее (я предлагала Бинарный поиск и прочее) — субъективно 3 курс универа. Вопросы на сообразительность и знание университетской программы, в целом довольно простые, что меня удивило. Во время ответа важно сразу писать код (в Google doc). Код должен быть компилируемым. Псевдокод не подойдет.

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

Вот выводы, которые я сделала:

— Хорошо перед собеседованием прочесть книгу, что советует HR (я читала лишь первые 20 страниц).
— Хорошо пройти пару курсов на Coursera по «Алгоритмам и структурам данных» — это дает ещё и технический английский.
— На тренинг нужно записаться как можно раньше, Ваши знания на нем не оценивают, зато вы получите больше времени для правильной подготовки.
— Самые важные темы — Big-O notation, алгоритмы, графы, большие данные. Это не полный список.

Если вы проходите phone-screen интервью, следующий этап — 5 интервью в офисе Google в 1 день с перерывом на обед.

Отбор очень жесткий. Давайте посчитаем. Если вы хорошо готовились к каждому интервью и имеете шансы на каждом собеседовании 80% из 100, что очень круто, то по теории вероятности после 6 технических интервью Ваши шансы равны 0.8^6 = 0.26. Короче Вас скорее не возьмут, чем возьмут. Но все равно пробовать стоит.

Следующая попытка собеседоваться может быть только через 1 год. Вот такие ограничения.

Update 2018: В этом году я снова проходила интервью в Google и снова они мне первые написали. Снова завалила на техническом. Давали 1 задачу на работу с текстом, типа на алгоритм MapReduce, парсинг строк, работа со String, объеденение данных по заданому правилу. Отвечать было сложно и был стрес. Сама бы решила задачу эту только в IDE и то за 2 дня. Я поняла, что лучший способ подготовки — сайт https://codeforces.com/. Решать задачи, подобные Google — отдельный навык, которой к вашей практике в офисе не имеет отношения. Codeforces даст этот навык.