Техническое собеседование в Google на Software Engineer — мой опыт
На этой неделе я проходила техническое собеседование в 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
Кроме этого меня попросили записаться на 1 часовой online тренинг для кандидатов — как правильно отвечать на вопросы тех интервью. Этот тренинг называется Coaching session. Он проходит 1 раз в 7 дней, кажется, и на нем присутствует тренер инженер Google и около 7 кандидатов. Опять через Hangouts. На этом тренинге рассматривается одна задача, все думают вслух, потом тренер предлагает шаблон как отвечать по задаче. У нас была задача по графам.
Тренинг действительно полезная штука.
Нормально и даже хорошо, если вы вначале предлагаете наивное (не эфективное) решение задачи. Вы сообщаете о проблемах вашего решения, назваете Run-time (Big-O) алгоритма и предлагаете улучшения.
Важно сразу писать код (в Google doc). Несколько раз было сказано, что код должен быть компилируемым. Псевдокод не подойдет.
В переписке с HR я спросила про зарплату, зависит ли она от страны, которую я выберу. Мне не называли сумм, но сказали что разочарована я не буду, что компания входит в топ по зарплатам для всех стран.
Вот в этом посте тема зарплат раскрыта более полно, и вообще хороший блог от сотрудника Google.
На техническом интервью было 2 вопроса. Один совсем простой про работу со String. По сложности — 1 курс универа. Второй вопрос сложнее (я предлагала Бинарный поиск и прочее) — субъективно 3 курс универа. Вопросы на сообразительность, но в целом довольно простые, что меня удивило.
Мне показалось, что я отвечала хорошо, хотя собеседование я не прошла. Сказали, что не хватает знаний в алгоритмах.
Вот выводы, которые я сделала:
Хорошо перед собеседованием прочесть книгу, что советует HR (я читала лишь первые 20 страниц).
Хорошо пройти пару курсов на Coursera по «Алгоритмам и структурам данных» — это дает ещё и технический английский.
На тренинг нужно записаться как можно раньше, Ваши знания на нем, наверное, не оценивают, зато Вы получите больше времени для правильной подготовки.
Самые важные темы — Big-O notation, алгоритмы, графы, большие данные. Это не полный список.
Если Вы проходите phone-screen интервью, следующий этап — 5 интервью в офисе Google в 1 день с перерывом на обед.
Отбор очень жесткий. Давайте посчитаем. Если вы хорошо готовились к каждому интервью и имеете шансы на каждом собеседовании 80% из 100, что очень круто, то по теории вероятности после 6 технических интервью Ваши шансы равны 0.8^6 = 0.26. Короче Вас скорее не возьмут, чем возьмут. Но все равно пробовать стоит.
Следующая попытка собеседоваться может быть только через 1 год. Вот такие ограничения.
Комментарии (3)
11 декабря 2016 в 22:54
0↑
↓
проходил сабж год назад. Рекрутер не задавал никаких технических вопросов и видимо вообще не смотрел мое резюме, причину отказа после 2-го интервью мне также не сообщили.
В любом случае, думаю что на интервью с гуглом очень легко попасть, но так очень велики сроки прохождения (после каждого этапа ответ от рекрутера можно ждать месяц) и процент отказов. Если вы хотите найти работу в течение пары месяцев, то это вариант не для вас.
11 декабря 2016 в 22:58
0↑
↓
Мне дали ответ на второй день.
11 декабря 2016 в 23:00
0↑
↓
Точно так же проходил у меня отбор в facebook, с которым я имел дело пару лет назад. Тоже советовали почитать литературу, почитать про структуры данных, про расчет big-O. Тоже была тренировка, которая проходит периодически для всех кандидатов.На собеседовании был всего один вопрос — написать программу (в моем случае на Python). Времени на все дается не так много: 45 минут. При этом считается хорошим тоном успеть не только решить задачу (желательно тремя различными способами), но и поназадавать собеседующему кучу интересных вопросов (о его проекте, о команде, компании и пр.).
Очевидно, что в таких условиях можно решить только такую задачу, похожую на которую ты когда-либо уже успешно решал (а желательно именно такую). В моем случае задача была довольно сложной, с которой ранее сталкиваться не приходилось, даже близко. Успел вроде пару способов предложить, на третий, который самый лучший обычно становится, уже не хватило времени. Но собеседование я скорее всего провалил после вопроса о сложности получившихся алгоритмов, на который я к моему стыду ответить не смог. Она оказалась равна O (2^n).
Отсюда вывод: готовится к таким собеседованиям нужно очень тщательно. Также желательно перерешать все задачи из сборников задач для проходящих собеседование в Google (можно найти такие, и HR сами их даже рекомендуют), и даже не один раз. И очень важно научится определять сложность любого алгоритма, даже самого изощренного.