Как пройти собеседование в Google: советы по подготовке

Когда устраиваешься в компанию таких масштабов, как Google, страх завалить собеседование всегда увеличивается многократно. Мы нашли и перевели советы по прохождению собеседования, которые помогут преодолеть страх и лучше проявить себя.

О чём нужно позаботиться перед собеседованием

  • Имейте копию зачётной книжки;
  • Выберите как минимум 3 дня и время (включая часовой пояс), в течение которого вы будете доступны для технического собеседования по телефону в формате дата-время-часовой пояс, для которого вы указали время;
  • Выберите язык программирования, который вы хотели бы использовать для собеседования: Java, C++, C или Python;
  • Предоставьте актуальные контактные данные, чтобы до вас могли дозвониться в день собеседования.

Советы по прохождению собеседования

Здесь собраны советы, призванные помочь в подготовке к успешному прохождению собеседования. Те, кто им следует, как правило, справляются гораздо лучше!

Планируйте заранее

Инженеры Google, которые будут вас собеседовать, весьма ограничены во времени. Поэтому найдите время и в своём расписании тоже! Также держите под рукой ручку и лист бумаги на случай, если вам скажут что-нибудь записать.

Чего ожидать

Техническое собеседование может длиться до 45 минут. Интервьюера будут интересовать ваши знания принципов Computer Science (структуры данных, алгоритмы и т.д.) и как вы их можете применить в решении задач.

Ваши знания Computer Science оставляют желать лучшего? Тогда загляните в нашу статью, чтобы восполнить этот пробел.

Вопросы на собеседовании

На собеседовании может затрагиваться всё, что указано в вашем резюме (особенно если вы отметили, что вы в этом эксперт!), вайтбординг (это когда вас заставляют писать код на доске или листике), разработка сложных алгоритмов и анализ их производительности, логические задачи, системное проектирование и основы Computer Science — хеш-таблицы, стек, массивы и т.д. Из-за сложности и глобального масштаба проектов, в которых вы будете участвовать, основы Computer Science являются необходимыми для всех инженерных должностей в Google вне зависимости от вашего стажа.

Как добиться успеха

В Google ценят совместную работу и обмен идеями. Поэтому вам понадобится больше информации от интервьюера, чтобы проанализировать поставленный вопрос и развёрнуто на него ответить.

  • Это нормально задавать вопросы интервьюеру.
  • Когда вас просят решить задачу, сначала сформулируйте, как вы её понимаете.
  • Если вам что-то непонятно — попросите помочь или объяснить.
  • Если у вас есть какое-то предположение, проговорите его, чтобы убедиться в правильности своих суждений!
  • Опишите, как вы собираетесь решить каждую часть задачи.
  • Всегда давайте интервьюеру следить за ходом вашей мысли, так как для него это не менее важно, чем конечное решение. Кроме того, если вы вдруг зависнете, то он сможет помочь советом.
  • Наконец, слушайте — не пропустите подсказку мимо ушей, если интервьюер пытается вам помочь!

Кто нужен Google?

Нам нужны не просто инженеры, которые будут решать знакомые им задачи; мы ищем тех, кто сможет найти ответы на вопросы, которые не встречались им ранее.

Интервьюерам важен подход к вопросу не меньше, чем сам ответ:

  • Слушал ли кандидат внимательно и понял ли он вопрос?
  • Задал ли он правильные вопросы, прежде чем приступить? (важно!)
  • Решил ли он задачу перебором? (нехорошо!)
  • Делаются ли какие-либо предположения без предварительной проверки? (нехорошо!)
  • Услышал ли кандидат подсказки и прислушался ли он к ним?
  • Кандидат медленно вникает/решает задачу? (нехорошо!)
  • Предпочитает ли кандидат найти несколько возможных решений, прежде чем выбрать лучшее?
  • Ищет ли он новые пути решения задачи?
  • Является ли кандидат изобретательным и гибким в своих решениях и открыт ли он для новых идей?
  • Возможен ли переход к решению более сложных задач в процессе собеседования?

Google хочет видеть действительно качественный, эффективный, чистый код без ошибок. Так как все инженеры (любого уровня) взаимодействуют с кодовой базой Google, где присутствует эффективная инспекция кода, очень важно, чтобы каждый работал на одинаково высоком уровне.

Задавайте больше вопросов!

Удостоверьтесь, что вы имеете чёткое представление о Google как бизнесе — за пределами основных продуктов компании. Узнать, чем занимается Google, можно на сайте компании и в Википедии.

В конце собеседования большинство интервьюеров спросят, есть ли у вас вопросы о компании, рабочей среде, их опыте и т.д. Неплохо иметь несколько заранее подготовленных вопросов, однако сильно не переживайте, если вы вдруг всё забудете.

Если у вас есть вопросы о процессе собеседования, зарплате или вашей работе, задайте их вашему рекрутеру.

Готовимся техническому собеседованию

Основные пункты, по которым следует пройтись инженерам для успешного прохождения собеседования в Google:

  • Сложность алгоритмов. Очень важно понимать анализ сложности в нотации «О-большое». Попробуйте разобраться с этим на практике.
  • Сортировка. Знайте, как сортировать. Не пузырьком. Следует знать в деталях как минимум один алгоритм сортировки сложности O(n log n), желательно два, например, быструю сортировку и сортировку слиянием. Последняя может быть крайне полезна в ситуациях, когда использовать быструю сортировку нецелесообразно, поэтому обратите на неё внимание.
  • Хеш-таблицы. Пожалуй, самая важная структура данных, известная человечеству. Вы обязательно должны знать, как они работают. Будьте готовы во время собеседования предоставить свою реализацию с помощью массивов на вашем любимом языке.
  • Деревья. Имейте представление о деревьях, знайте базовые алгоритмы построения, обхода и управления деревьями. Ознакомьтесь с двоичными, n-ичнымии и префиксными деревьями. Также нужно знать хотя бы один вид сбалансированного двоичного дерева, будь то красно-чёрное, расширяющееся или АВЛ-дерево, и как его реализовать. Разберитесь в алгоритмах обхода дерева: поиске в ширину и глубину, и узнайте разницу между прямым, симметричным и обратным обходами.
  • Графы. Графы имеют большое значение в Google. Есть три основных способа представить граф в памяти: объекты и указатели, матрица и список смежности; ознакомьтесь с каждым представлением и его преимуществами и недостатками. Вы должны знать основные алгоритмы обхода графа: поиск в ширину и поиск в глубину. Знайте их вычислительную сложность, преимущества и недостатки и как их реализовать с помощью кода. По возможности попробуйте изучить более интересные экземпляры вроде алгоритма Дейкстры и A*.
  • Математика. Некоторые интервьюеры задают вопросы по основам дискретной математики. В Google на это обращают больше внимания, чем в других компаниях, из-за характера задач, с которыми там работают. Потратьте немного времени перед интервью на повторение (или изучение) основ комбинаторики и теории вероятностей. Вы должны знать о задачах сочетаний из n по k и ей подобных — чем больше, тем лучше.
  • Операционные системы. Ознакомьтесь с процессами, потоками и параллелизмом. Необходимо знать, что такое блокировка, мьютекс, семафор и монитор и как они работают. Узнайте, что такое взаимная блокировка и livelock и как их избежать. Имейте представление о том, какие ресурсы нужны процессам и потокам, как работает переключение контекста и как оно инициируется операционной системой и аппаратной частью. Не будет лишним немного знать о планировании выполнения задач. Мир быстро движется в сторону многоядерности, поэтому также не помешают знания основ «современных» концепций параллелизма.
  • Программирование. Нужно хорошо знать как минимум один язык программирования, желательно C++ или Java. C# тоже подойдёт, так как он довольно похож на Java. Вас попросят написать код если не на всех, то как минимум на нескольких собеседованиях. От вас будут ожидать глубоких знаний вашего любимого языка программирования.

Примеры тем на собеседовании

  • Программирование. Построение/обход структур данных, реализация системных подпрограмм, переход от больших наборов данных к одиночным значениям, преобразование одного набора данных в другой;
  • Разработка/анализ алгоритмов. «О-большое», сортировка и хеширование, обработка очень больших объёмов данных. Также смотрите темы, указанные в разделе «Программирование»;
  • Проектирование систем. Наборы функций, иерархия классов, проектирование систем при определённых ограничениях, простота и надёжность, компромиссы;
  • Открытые вопросы. Самые сложные задачи, которые вам встречались, лучшие/худшие встреченные проекты, анализ производительности и оптимизация, идеи для улучшения существующих продуктов.

Полезные ресурсы при подготовке к собеседованию

  • Видео, где рекрутеры делятся советами;
  • Презентация инженеров из Google о том, как подготовиться к техническому собеседованию;
  • Канал Google с множеством полезных видео;
  • О процессе приёма на работу на Google Careers;
  • Статья о том, как отвечать на открытые вопросы Google.

Думаете о работе в Google и хотите больше узнать о том, как туда попасть? Тогда загляните в нашу статью — в ней описан опыт успешного трудоустройства разработчика из СНГ.

Перевод "How to Prepare Yourself for an Interview with Google"

Наши тесты для вас:
Тест на знание сленга веб-разработчиков.
Кто вы во вселенной Звёздных Войн?
А вы точно программист?