×Закрыть

Как попасть в Google: инструкция по подготовке

Я постараюсь описать весь свой опыт и те подводные камни, которые я встретил при подготовке к собеседованию в Google и другие компании Долины (Microsoft, Amazon, Snapchat, Evernote, Cruise Automation, Uber и др.). Я ставил цель получить оффер от Google или Facebook, а еще лучше от обоих, все остальные компании были из разряда «ну если там будет очень интересно, то можно». С первого дня, когда я начал подготовку, до момента, когда я получил оффер от Google, прошло 1 год и 5 месяцев. Первый оффер я получил после 1 года и 2 месяцев подготовки. Всего было 7 онсайтов (интервью в офисе компании), из них 3 оффера (Google, Evernote, Cruise Automation). Итак, начнем.

Предыстория

Я был вендором в Google в Mountain View на протяжении полутора лет. Там же было несколько гуглеров, которые тоже были вендорами до этого. Конечно, мозг постоянно подсказывал, что они «другие», что они «умнее-лучше-круче», чем я. А мой удел — быть вендором. Я даже один раз попробовал решить задачку на LeetCode. Осилить я смог 5-ю easy задачку, которая получилась на 120 строк кода и в результате так и не прошла тесты. На это ушло 5 часов прекрасного субботнего калифорнийского дня. Я окончательно понял, что вот всем вокруг «дано», а мне нет.

Но все же, проводя с друзьями-гуглерами много времени, я понял приблизительный алгоритм — что и как нужно делать. Я сделал в точности, как они сказали, и получил оффер (чему был немало удивлен). Второй нюанс — в Google я делал front-end, все мои друзья были back-end, и подготовку они описывали именно для back-end. Я подумал и решил: «А back-end тоже хорошо (я же когда-то писал на .NET, хотя и давно), буду идти в точности как они, но сделаю больше, чем они, и тогда точно получу оффер».

Мотивация

Подготовка к интервью в больших компаниях — это не спринт, это long run. По моему опыту — от полугода до полутора лет. На этот забег нужно много топлива, и будет очень печально, если оно закончится на середине пути или в его конце. Поэтому нужно подготовить ресурсы заранее.

Что я имею ввиду. Подготовка требует много времени: приблизительно 2-3 часа каждый рабочий день и каждый выходной полностью. То есть, по сути, все свободное время. Я был без жены и детей, и было проще, с одной стороны, — никто не требует постоянного внимания. С другой — никто и не поддерживает.

Я считаю, с людьми, с которыми ты тесно связан, нужно договариваться «на берегу», чтобы они знали, чего ожидать, разделяли цели, помогали в трудные периоды (они будут, у всех они были).

Кроме того, нужно четко понимать, для чего ты это делаешь и что хочешь получить. И лучше всего, чтобы эта цель была вне тебя, больше, чем ты. Если что-то делаешь только для себя — в трудные периоды можно забить, если для кого-то — мотивация намного выше, и это помогает не остановиться.

Пример 1: «Я хочу в Google, потому что это круто», «Я хочу в Facebook, потому что там много денег» — это для себя. В любой момент можно найти статью о том, что Google — это дерьмо, что денег там дали меньше, чем в другой компании, что там скучно, много политики. И что? И все, мотивация упала, книжки с алгоритмами летят в окно.

Пример 2: «Я хочу в Google, чтобы вывезти свою семью в США и дать детям хорошее образование», «Я смогу, имея деньги от Facebook, сделать это и это». В моем случае мотивация звучала так: «Я хочу быть ближе к дому». Я рассматривал переезд в Лондон либо Цюрих. Когда я начал подготовку, я себе так сказал: «Пацан, ты следующий раз полетишь домой, когда получишь оффер, и только так». Домой хотелось, и это давало энергию. Я думаю, это работает не для всех и не всегда, но для меня сработало.

Второй трюк — подготовка в парах. Лично я его не использовал, но мои друзья успешно так готовились. После работы люди вместе садятся в одной переговорке и решают задачки, каждый свою. А еще решают задачки у доски: один играет роль интервьюера, второй интервьюируемого. Таким образом можно получать фидбэк.

Процесс в общем

Весь путь можно разделить на несколько этапов:

  1. Решение задач на LeetCode или InterviewBit.
  2. Изучение алгоритмов и структур данных.
  3. Повторение решенных задач на LeetCode.
  4. Подготовка к дизайн-интервью.
  5. Mock-интервью (телефонные и на вайтборде).
  6. Реальные интервью.
  7. Оффер и алкогольное забвение.

Решение задач

Это самая важная и самая длительная часть подготовки.

Сколько задач нужно решить? Я считаю — 200-250, из которых 40-50% easy, 40-50% medium, 10-20% — hard. Я решил около 300, мои друзья — 120-160.

А что если сначала пройти курс по алгоритмам, а потом решать задачки? Это была моя первая идея, спасибо друзьям, отговорили. Задачки уровня easy не требуют знания сложных алгоритмов, а простые можно дочитать в процессе решения задач.

А что если я сначала прочитаю всю книжку «Cracking Coding Interview» с решенными задачками и уже весь подготовленный пойду в бой? Не стоит:) Решение, которое я просто прочитал, я не мог вспомнить даже под конец того же дня, не говоря уже через несколько дней.

Можно прочитать начало «Cracking Coding Interview». Там хорошо описан сам процесс интервью, как общаться, базовые вещи об алгоритмах и структурах данных, как анализировать сложность алгоритмов и т. д. К примеру, как анализировать сложность рекурсивных алгоритмов я понял именно из нее.

Перед тем как начать решать задачки на определенную тему можно прочитать решение схожих задач в «Cracking Coding Interview». Причины тут две:

  • Убрать немножко граблей на своем пути и получить общее представление о том, как люди такие задачи решают.
  • Убрать тоннельное зрение — это когда ты решаешь сотни задач, но случайно упускаешь классические задачи. Потом тебе на интервью попадается хитрая задача, о существовании которой знают все, кроме тебя (это из личного опыта).

А какие вообще существуют задачи, какие темы нужно покрыть? Понять, какие вообще тематики существуют, можно с InterviewBit. Мне не очень понравилось там решать задачи, но вот общее представление я получил. Ну и кроме того, можно полистать «Cracking Coding Interview».

В какой последовательности стоит решать задачи? Нужно идти от простых тем к сложным (InterviewBit подскажет порядок). В каждой теме решать задачки до тех пор, пока не начнет хоть чуть-чуть получаться, и в этот момент сразу переключиться на следующую тему. Начинать, конечно, с уровня easy. Я пытался решать каждую задачу на протяжении около получаса-часа. Если не смог — шел смотреть решение. На LeetCode к каждой задаче есть форум, где люди постят свои решения, обсуждают, голосуют. Я выбирал топ решений и изучал их, так и учился. Наверное, эти форумы — самое ценное место для обучения. Далеко не все решения просто понять, даже те, под которыми стоят комментарии «This is absolutely awesome!!!».

Например, начал я решать задачи на строки. 1-я — не решил, пошел смотреть решение, 2-я... 5-я — то же самое. 6-я, 7-я — решил. Значит, пора переключиться на следующую тему. Секрет такой — переключаться между темами нужно как можно чаще, так лучше запоминается. Но если переключиться до того, как начнет получаться, то через несколько тем можно демотивировать себя полостью. Мозг услужливо подскажет: «Ну раз ты ничего не можешь решить — то иди выпей пивка и посмотри футбол, это просто не твое». Нужно быть готовым к тому, что самооценка и настроение будут как американские горки: получается — мы несемся вверх, не получается — унываем и падаем вниз. Просто нужно помнить, что и первое, и второе — это временно, нужно продолжать. Если долго нет результата — брать задачки проще.

Как происходит решение задачи? Конечно, можно просто взять и решать задачки на LeetCode и не заморачиваться с тем, что я опишу ниже. Но результат будет куда лучше, если использовать следующий алгоритм, поскольку он полностью повторяет шаги на реальном интервью:

  1. Читаем условие задачи, ни в коем случае не пытаемся придумать решение до того, как условие прочитано до конца. Это важно!!! Мозг пытается найти похожую задачу, решение которой он знает, и выдать за требуемое.
  2. Пытаемся придумать уточняющие вопросы. Пример 1: есть задача, в которой нужно как-то трансформировать строку. Что спрашивать? — Какие символы могут быть в строке — ASCII или Unicode? Могут ли рядом стоять несколько пробелов? Могут ли быть пробелы в начале или конце строки? Есть ли спецсимволы типа -,.^/ ? Есть ли разница для анализа между большой и маленькой буквами? Насколько длинная входная строка? Помещается ли она в память машины? Пример 2: есть массив из Integer, в нем нужно что-то найти. Вопросы: есть ли повторяющиеся элементы? Есть ли отрицательные числа? Что если в результате подсчета мы получим больше, чем Integer.MAX_VALUE?
  3. Рисуем примеры, лучше парочку — один классический, второй с corner cases. После этого мы +/- должны быть уверены в том, что задачу мы поняли правильно.
  4. Придумываем решение «в лоб» и оцениваем его сложность. Сложность решения нужно уметь определить всегда.
  5. Придумываем более оптимальное решение, оцениваем его сложность.
  6. Разрабатываем API решения — какие будут методы (приватные и публичные).
  7. Пишем код в тетрадке.
  8. Дебажим код по тетрадке на новом примере. Не нужно брать один из примеров, который мы рисовали в начале. В этом случае очень высока вероятность, что мы написали решение именно для этого случая, а не для всех возможных. Лучше взять новый пример с corner-кейсом, такой, чтобы потенциально мог решение сломать.
  9. Перебиваем код в любимую IDE, при этом не смотрим в бумажку. Таким образом, мы повторяем решение два раза.
  10. Копируем код из IDE в LeetCode и запускаем. В случае идеального выполнения должно cработать правильно с первого раза. У меня такое получалось в 10% случаев.

Я понимаю, что это звучит как «чертова куча бесполезной работы». «Я же могу просто взять и написать код в LeetCode». Но все эти шаги после некоторой практики будут занимать минуты или даже секунды, что критично на интервью. Очень многие ребята засыпались на том, что им не хватило времени, чтобы дописать-отдебажить решение. И я один из них.

А что же делать, если задачка не решается? Когда я не смог придумать решение за полчаса-час (сначала бывало, что я по полдня страдал над одной задачей), то шел смотреть лучшие решения на форуме. Разбор решения — почти всегда непростая задача и требует времени: нужно пересмотреть и понять несколько решений, понять сложность, дочитать ссылки на алгоритмы, которые указывают авторы решений. Большинство алгоритмов я нашел и изучил после того, как встретил их в реальных решениях. А что же дальше с этим делать? А дальше нужно повторить с этой задачкой все шаги, которые я привел выше. И куда лучше сделать это на следующий день или как минимум под конец этого дня.

Все свои решения я заливал на GitHub. Хорошо видна статистика, и всегда есть доступ к коду. Это я начал делать после того, как LeetCode затер все мои решения. Так что LeetCode — не лучшее место для хранения своих решений.

Важно вести статистику (вот моя), в которой будет следующее:

  • что когда решил;
  • Group A — список задач, которые не решил самостоятельно;
  • Group B — список задач, которые решил самостоятельно, но при этом очень страдал.

Это я считаю критически важным, так как задачи нужно будет повторить, и в первую очередь нужно повторять A, за ними — B.

Ноу-хау «дверь». После того, как я решил порядка 230 задач (это был мой изначальный план), я переключился на изучение алгоритмов (об этом позже). Когда в алгоритмах я прокачался, что заняло около двух месяцев, пришло время задачи повторять. И вот здесь получилась интересная штука: повторить задачу — по времени не многим меньше, чем решить ее (так как шаги нужно использовать те же, только код из тетрадки не переписывать в IDE). И тут пришла долгожданная демотивация — не чувствует организм, что делает что-то полезное, и все тут. Я стал думать, как проблему решать, понял, что я визуал и мне нужно визуальное подтверждение своей деятельности. И оно нашлось. Каждую задачу, которую повторил, я записывал на стикере: номер задачи, сложность (easy, med, hard), тема и краткое решение. Краткое решение — это не код. Как оказалось, код запомнить почти невозможно, а вот простые шаги типа «1. Создаем мапу с каунтерами, 2. Находим в ней Х ...»- вполне. Задачи из одной темы попадают в один ряд, сложность можно отмечать цветами (это я понял позже).

Цель была следующая — все решенные задачи должны быть повторены и появиться на двери как стикеры. Когда я наклеил первые 10 стикеров и это отняло несколько дней, честно скажу, хотелось плакать. Мозг подсказывал: «До 230 осталась бесконечность».

В результате на моей двери появилось 218 наклеек. Некоторые задачи я так и не успел повторить.

Дверь в начале и дверь в конце

Алгоритмы

Я изучал алгоритмы по курсам дедушки Седжвика на Coursera (Part 1, Part 2). Видео этих курсов можно найти на торрентах.

После первой домашки из этих курсов я решил, что делать их не буду. Причина — в домашних работах больше использование готовых библиотек с алгоритмами, нежели реализация этих алгоритмов. Но и просто прослушивание курса результата не даст вовсе. Я слушал и полностью конспектировал, в результате у меня получилось две тетрадки с полным конспектом, которые я перечитал 4-5 раз. Очень помогало в последние несколько дней перед собеседованием, когда нужно повторять много и быстро.

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

Дизайн-интервью

Дизайн-интервью состоит из так называемых открытых вопросов по дизайну, типа «как задизайнить YouTube». По началу я совсем не мог понять, что требуется и как это должно выглядеть. Потом я нашел курс «Grokking the System Design Interview», который мне открыл глаза. Он стоит свои 80 баксов.

Вот еще одно видео от Джексона (Facebook guy), которое даст понимание процесса. Хорошее обсуждение на Quora.

Еще очень полезно почитать примеры реальных проблем, например, на High Scalability. Если у компании, в которую идем на собеседование, есть инженерный блог, его точно стоит почитать.

Behavioral-интервью

Можно писать много, но за меня хорошо скажет Джексон. В моей практике такое интервью было только в Facebook. Задача интервьюера — понять, что ты собой представляешь как личность, будет ли с тобой комфортно работать, как ты себя будешь вести в условиях конкретной компании.

Например, на таком интервью в Facebook меня спросили следующее. Вот две команды. В первой есть менеджер, аналитики, задачи пишутся, процессы построены, все знают, кто и что должен делать. Вторая — не структурирована, нет четкого лидера (эта роль переходящая), как делать — не ясно, понятно только, что должно получиться в результате (то есть полная неопределенность). В какой команде тебе более комфортно работать? Вопрос был еще более сложно завернут. Суть такая — в Facebook команды не структурированы, второй вариант хорошо описывает, как у них все строится. И если тебе с этим не комфортно жить, значит, наверное, нанимать тебя не стоит.

Mock-интервью

Mock-интервью — это то же самое, что и обычное интервью с той разницей, что его проводят друзья, коллеги или специальные компании. А потом дают свой отзыв — что хорошо, что нужно поправить. Это тоже критически важный шаг, упускать его не стоит. Конечно, будучи в Долине, сделать это в разы проще. Вокруг меня было много друзей гуглеров, действительно клевых ребят, которые мне провели порядка 20-ти mock-интервью. Я был как Том Сойер, который взялся красить забор, а в результате красили забор все. Интервью мы проводили, конечно, на английском на вайтборде со строгим ограничением по времени.

Телефонные mock-интервью (а потом и реальные) я проходил на interviewing.io. Я просто полюбил этот ресурс, ребята реально молодцы. Но они сейчас заточены под США и предоставляют этот сервис по США. Бывали дни, когда у меня в неделю было около 7-8 собеседований на interviewing.io.

Сначала было страшно и некомфортно. Но к 10-му разу я привык, и стало нравиться. Первые интервью я валил, потом стало получаться. Средняя конверсия была 50%, то есть половину прошел, половину — нет. Всего телефонных собеседований (реальных и mock) было около 30-35.

Как подаваться

Самый простой и самый малоэффективный метод — заполнить форму на сайте компании. Но иногда и он дает результаты. К примеру, я заполнил форму на сайте Snapchat, и на следующий день со мной связался рекрутер, мы договорились о телефонном интервью. С Google, я думаю, это абсолютно бесполезно, так как эту формочку заполняют тысячи раз в день.

Второй способ — сайты работ типа Hired.com. Ты заполняешь все данные о себе, а потом компании, которым ты подходишь, сами с тобой связываются. Сервис ориентирован на рынок США. Без H1 или грин-карты там делать нечего.

Способ третий — interviewing.io, о котором я упоминал выше, и схожие сервисы. Они работают так: сначала ты проходишь на их платформе телефонные mock-интервью. Как только ты успешно проходишь два, они дают тебе возможность проходить анонимные телефонные интервью с реальными компаниями на их платформе. К примеру, сотрудник Uber и ты заходите в одно и то же время, и он тебя собеседует. Если прошел — дальше онсайт. Mock-телефонное и реальное телефонное интервью не отличаются вовсе. Минусов в interviewing.io несколько. Первый — они больше сотрудничают со стартапами, больших компаний мало. Второй — ориентированы на Штаты (нужна H1 или грин-карта).

Способ последний и самый эффективный — через реферала. Это когда человек, который работает в компании Х, дает референс на тебя рекрутеру. Он должен указать, откуда он тебя знает и почему считает, что ты подходишь + твое резюме. Вероятность, что с тобой после этого свяжутся, очень высока. Если не связались, скорее всего, рекрутер увидел в резюме что-то, что его насторожило.

Резюме

Резюме инженера в Долине и Украине очень отличается. Оно должно быть кратким (лучше не выходить за рамки двух страниц), показывать, что ты реально сделал (твой импакт для компании).

Лариса, инженер в Google, много пишет на тему интервью, Google, Долины в своем блоге. У нее есть интересный раздел «Резюме на проверку». Здесь люди открывают доступ к Google doc со своим резюме, Лариса и другие читатели его комментируют и пытаются улучшить.

Телефонное интервью

Стандартное телефонное интервью включает в себя общение голосом (по телефону, скайпу, hangouts и т. д.) и написание кода в shared Google doc или shared online IDE. Занимает по времени 1 час либо 45 минут, это нужно уточнить заранее.

Первые пару минут уходят на знакомство — интервьюер расскажет немного о себе, соискатель в ответ тоже должен рассказать, кто он и что он. У меня сначала с этим было туго, потом я написал и отточил self-presentation на 2 минуты, отрепетировал ее с помощью диктофона. Это, по сути, первое впечатление о тебе, и лучше его не испортить.

Дальше интервьюер копирует в shared doc условие задачи и несколько примеров. Сразу стоит уточнить, сколько дается времени на решение задачи, поскольку задач может быть одна, две или даже три. Часто это две задачи — одна простая для старта и вторая уже более серьезная. Иногда это одна задача, но после того, как готова первая часть, интервьюер усложняет исходную задачу дополнительными условиями. После всех уточнений нужно идти по плану, который я приводил для решения задачи.

Очень важный момент — ни в коем случае не начинать писать код до того момента, пока ты полностью не понял решение задачи. Иначе очень большая вероятность напутать в процессе и превратить код в спагетти с последующим провалом. Еще раз — ни в коем случае не писать код, пока не нашел решение. Я совершил эту ошибку до десятка раз, и каждый раз жалел об этом.

Самый эпический пример этой ошибки у меня случился на онсайт-интервью в Evernote. Задача была следующая — распарсить CSV-файл с расписанием поездов и написать программку, которая будет подбирать оптимальный поезд по определенным условиям. Можно гуглить. Я до этого код для работы с файлами на джаве не писал и растерялся. Решил так, я сейчас быстренько с файлами разберусь, а там уже как-то алгоритм построю. Времени на все — 1 час 15 мин. Я полчаса строил красивые врапперы вокруг чтения из файла, пучок сущностей, описывающих поезда, маршруты и прочий мусор. При этом мало представлял, как алгоритм выбора будет работать. Дальше я понял, что я не успеваю, не понимаю, как строить алгоритм, подступила паника. За 12 минут до конца собеседования я понял, как оно должно быть. За 15 минут (с опозданием в 3 минуты) я написал код (с парой ошибок, правда). Так быстро я не писал код никогда в своей жизни.

Онсайт-интервью

Если телефонное интервью прошло успешно, следующий шаг — онсайт. Компания покупает тебе билеты на самолет, оплачивает отель, и ты летишь к ним в гости. Я так летал в Лос-Анджелес на интервью в Snapchat.

Все интервью проходят в один день, одно за одним с перерывом на обед. Рекрутер высылает заранее имейл с расписанием, в котором указано время, тип интервью, имя интервьюера. К примеру в Snapchat у меня было два технических до ланча и три после. Между интервью нет перерыва, если затянул одно интервью — украл у себя время на следующем. Поэтому лучше сразу узнать, где у них вода и уборная, и, если нужно, бежать туда, как человек-молния.

Какие бывают типы интервью на онсайте и как к ним подготовиться.

Классическое техническое интервью с задачами. Тут все относительно понятно — то же самое, что и на телефонном. Нужно держать в голове следующий факт — уложиться нужно в ⅔ времени и ⅓ оставить на непредвиденные обстоятельства, поверьте они будут. В Google одно интервью 45 минут, это означает, что после знакомства у вас есть 25 минут на все. Из них 2-5 минут на то, чтобы понять задачу и нарисовать примеры, 2-5 — чтобы придумать решение и 15-20 на написание кода и дебаггинг. Во время дебаггинга, конечно, всплывут ошибки, и их нужно быстро и красиво пофиксить. Именно на это и нужна та заветная ⅓.

Нюанс — всегда нужно идти на интервью со своим лэптопом. Первым делом нужно спросить, можно ли кодить на нем. В Facebook меня спросили: есть лептоп? хочешь на нем кодить? Ответ — конечно, да! Это быстрее, и вероятность ошибки в разы ниже. К тому же, переписывать код на вайтборде и в IDE — это две большие разницы. У меня неоднократно была ситуация, когда я исправлял ошибки на вайтборде, в результате чего код становился абсолютно нечитаемым (и, скорее всего, с новыми ошибками). Интервьюеры смотрели на это с грустью и слезами.

На лэптопе должны быть любимая IDE и проектик с типовыми шаблонами:

  • работа с файлами;
  • парсинг CSV-файлов;
  • считывание по http;
  • HTML- документ с подключенными стилями.

Еще помните мой печальный опыт с Evernote? Так вот, на следующем онсайте меня тоже попросили распарсить CSV, это заняло 3 минуты. Интервьюеры не против, если ты используешь такие шаблоны — это экономит время, и они понимают, что ты способен нагуглить, как распарсить файл.

Важный момент — нужно всегда контролировать время. На одном из интервью в Google мой интервьюер, парень лет 25-ти, задал мне хитрую задачку на динамическое программирование. Я нашел способ, как ее решить за квадратичное время, на что он спросил: «А лучше можно»? И я начал искать, как это сделать, подступала паника, но решение «лучше» найти я не мог. Наш диалог дальше:

Я: Не могу придумать решение лучше. Может, напишем мое решение и после этого подумаем?
Он: Давай еще 10 мин подумаем. Если не найдешь, напишем твое.
Я: Мне кажется, что времени может быть мало. Давай все же напишем мое сначала.
Он: Ну ок.

Я успел дописать свое решение с опозданием в 5 минут. Если бы послушал его, то не написал бы ничего и провалил интервью на 100%. А после такого в космонавты не берут. Штука в том, что он прикидывал, сколько времени нужно ему для написания задачки на доске, зная решение досконально.

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

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

Дизайн-интервью. Это отдельный зверь, не очень страшный, но специфический. Здесь тебе дают очень общие начальные условия типа «Нужно построить Dropbox» и смотрят, как ты продираешься через терновые кусты неопределенности. Какие вопросы ты задаешь, как анализируешь проблему.

Мои выводы по этому типу интервью:

  • Первым делом нужно собрать требования. Очень четкие и конкретные требования, которым должна отвечать система. Типовые вопросы, которые можно задать: how many users, active users, time zones (one or few). Acceptance criteria — network bandwidth (in-going/ out-going traffic), RAM, storage, latency, battery life (for mobile) etc.
  • Представь, что интервьюер — это твой заказчик (или пользователь), для которого строится система. Что ему нужно? А что можно предложить сверх этого (сбор статистики, админпанель)?
  • Какие будут пользователи у этой системы? Часто их несколько — general users и administrators. И требования для них могут быть кардинально разные. Понимая это, нужно собрать все use cases. Один use case будет отвечать одному методу в API.
  • Определяем три ключевых элемента — UI (если таковой имеется), API, DB schema. Часто, рисуя UI, можно найти новые use cases и обговорить их.
  • Оценить все, что только можно, — number of users, requests (queries) per second (QPS), latency, API latency, disk space you need (for 5 years for instance), cache space, in-going/out-going traffic.
  • Отдельно оценить read-write ratio. Наша система read heavy или write heavy? В зависимости от этого, как мы будем писать и читать данные?
  • Как будет организовано хранилище данных, кеширование? Возможно, нужна очередь для обработки дорогостоящих операций? Как будут организованы replicas и shards (нужно хорошо понимать различие между этими понятиями)?
  • Для упрощения понимания сначала можно построить систему для 100 пользователей. После того как интервьюер согласится с таким дизайном, можно подумать, как будем его масштабировать до тысяч и миллионов пользователей.
  • Найти trade-offs и обсудить их. К примеру, это может быть trade-off между consistency и speed. Что важнее в данном контексте? Как этого добиться?
  • Когда мы рисуем диаграммы, ни один блок не должен быть в единичном экземпляре, это всегда сет из многих. При падении одного узла его тут же должен заменить его клон. Нужно продумать, какие могут быть аварийные ситуации и как мы будем с ним бороться.
  • И самое главное — внимательно слушать интервьюера и никогда-никогда с ним не спорить. Это кажется очевидным, но многие (и я среди них) об этом забывают.

Вопросы интервьюеру

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

Пример плохих вопросов: на каком языке программирования вы пишете? На каком клауде у вас стоит инфраструктура? Какая у вас СУБД? В чем тут проблема — компания нанимает универсального солдата, который за месяц-два должен разобраться в технических деталях. То есть это, по сути, не важно, это как-бы слишком узко.

О чем лучше спрашивать? Самое простое: что интервьюеру нравится и не нравится в компании, почему он выбрал эту компанию. Можно спрашивать о бизнесе: как он устроен, какие проблемы и потребности существуют. Можно спрашивать об условиях работы: когда люди приходят и уходят с работы, работают ли удаленно, как много митингов, каких именно.

За 10 дней до важного онсайта

У меня было два самых важных онсайта — Google и Facebook. Google был первым, и я достаточно сильно переживал. За 10 дней до онсайта я составил расписание на каждый день, что нужно сделать. Оно содержало следующее: повторение алгоритмов, типовых задач, задач, которые встречались на собеседованиях в Google, вопросы по дизайну. 5 дней до интервью я не ходил на работу и ушел в подготовку с головой.

Мне стало интересно, как спортсмены готовятся перед важными соревнованиями. Что они делают для того, чтобы не запаниковать в критический момент? Один из важных моментов — это прокручивание в голове будущего выступления и тренировка в условиях, приближенных к реальным.

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

Финал

Через несколько дней после онсайта мне позвонил рекрутер. Поздравил, сказал, что я молодец, все прошло хорошо. Мне нашли команду в Швейцарии в Цюрихе. Официальная позиция — Software Engineer. Я выдохнул. Голова была абсолютно пустой, я добежал. Забег в 1 год и 5 месяцев объявляется закрытым.

LinkedIn

Лучшие комментарии пропустить

Самая детальная и полезная статья на ДОУ :) Поздравляю с оффером!

Я уж переживал, что на доу пропала годнота. Сергей, ты потрясающий молодец, офигительный пример для вдохновения. Больших успехов тебе! Надеюсь, ты запилишь что-то крутое в Швейцарии.
Спасибо за такую детальную статью. И да, гуглдок твой возьму себе! :)

P.S. А на какой уровень гугла взяли, если не секрет?

Поздоровляю з гуглом та крутою статтею.
Але виникло таке питання. Є умовний гуглобукозон куди треба ноулайфить півтора роки виключно навичку проходження інтерв’ю. І є інші контори, з нормальними умовами праці та зарплатнею, але які не мають шаленого напливу інженерів, тому ставлять нижчу планку для кандидатів.
Які гуглобуказон дає бенефіти, що варті оцих додаткових зусиль, в порівннянні з іншими компаніями, які не можуть собі дозволити хардкорний відбір, але тим не менше мають пристойні умови праці та зарплатню?

Очень хорошо написано! Спасибо!

З.Ы. Не перестаю удивляться зрадофильству —
один рассказывает, что строчка в резюме Google — штамп о «середняковости» кандидата, другой, что автор зря потратил полтора года и обладает хреновой мечтой, третий, что это просто потому что есть куча друзей гуглеров и «прописка» в Кремниевой Долине и так далее.

И хоть бы один зрадофил написал: «Я получил офер в гугл и отказался потому что я ...»

Интересно это просто зависть или есть еще какие-то причины?))

Автору — мои поздравления, шикарная статья, ждем теперь через полтора года еще одну, сколько из навыков и знаний полученных при подготовке к интервью, пригодились в реальной работе в Гугле.

186 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Автор молодец. Пример целеустремлённости и мотивированности. На уютненьком в топ попал, это вин.

Спасибо! А можешь кинуть ссылку на уютненькое, чесслово, не нашел.

Буквально недавно Google предложил мне пройти интервью на точно такую же позицию в Цюрихе. Расскажите как там работается? Атмосфера в компании и в общем?

Если кратко — мне очень нравится, как Щвейцария так и компания. Я бы соглашался. Тут в двух словах сложно, пора новую статью писать.

Выдалась пара минут, напишу в деталях. Атмосфера в офисе мало чем отличается от долины — в штатах ты работаешь в интернациональной среде, тут то же самое. Только в Штатах больше китайских и индийских ребят, здесь в большинстве европейцы. К примеру в моей команде есть ребята из Австрии, Норвегии, Германии, Румынии, Польши, России, Украины, Сербии, Нидерландов, Италии (от каждой страны ровно один представитель:)) ). Все общаются на английском, многие немецкий не учат, но мне кажется если в планах остаться на длительный срок, то нужно учить. Я сейчас прохожу уровень А2. Атмосфера достаточно спокойная, авралов-пожаров не было, темп работы вменяемый. По началу конечно был «страх что не вытяну», наверное это у всех есть, со временем прошел — чем больше маленьких побед (закрытых задач), тем больше уверенность что «даже если будет очень сложно, я все равно справлюсь».
Страна мне очень нравится, Швейцария одно из самых красивых мест что я видел. Пока самое-самое красивое место что я здесь нашел это lauterbrunnen (www.instagram.com/p/BoHpZ-kBiXd). Кроме того Швейцария это наверное самая поездатая страна в мире — на поезде от Цюриха в любую точку Швейцарии можно добраться за 4 часа. До Бера — 1 час, до Милана — 3:30, до Мюнхена — 4. Люди много ходят в горы (what a surprise), катаются на маунтин байках, лыжах, летают на парапланах, плавают в озерах (летом теплые и всегда очень чистые), вейбордят. То есть активные и спортивные. Так что я бы соглашался на Цюрих.

Привет друзья! В конце декабря я прилетаю в Киев, почему бы нам не встретиться! Ветка на форуме для обсуждения дат и формата мероприятия. dou.ua/forums/topic/25753

Сергей, очень интересная статья. Спасибо, за такие подробности. Описано очень много моментов, про которые даже и не подумаешь на старте. Удачи!

Спасибо, очень приятно! Нюансов действительно много.
История: мой коллега купил мотоцикл и выехал на автобан. Когда он приподнял голову поток воздуха зашел под шлем и начал тянуть его вверх. Как он описал «ощущение что тебя тянут за голову вверх». Он чуть было не потярел управление, было очень страшно.
Так вот, ему об этом просто никто не говорил, и он не знал что такая опастность существует.
Нужно ли на все нюансы (из статьи) обращать внимание? — наверное нет. Просто стоит о них знать.

Друзья, я сейчас активно путешествую по Швейцарии и окрестностях. Кому интересно как вся эта красота выглядит welcome to my Instagram.
www.instagram.com/sergey_sema

С одной стороны — автору респект, потому что HE HAS DONE IT!
С другой — риторический вопрос — А ЗАЧЕМ?!

В моем случае мотивация звучала так: «Я хочу быть ближе к дому». Я рассматривал переезд в Лондон либо Цюрих.

Т.е. как я понимаю, у автора был вид на жительство в США, но не было права работать в UK и Швейцарии (разве что вот таким вот финтом в рамках транснациональной корпорации).
Ну если желание настолько сильно...
Мне бы лично было очень жаль субоптимально потраченного времени. Я не говорю «зря потраченного» (тренировать мозги — уже не зря), но этот case мне напомнил упертых, стремящихся с CFA. Ну получают они заветную бумажку, а как спросишь где сейчас SP500 или как рассчитать цену простейшего дериватива — так ни бум бум — ибо если и знали, то сдав экзамен, тут же забыли.

Друзья, я планирую написать новую статью (а может и несколько). И здесь мне нужна ваша помощь — оставьте в комментах как можно больше вопросов которые вам интересны.
(Ничего страшного если вопросы будут повторяться). Я их все соберу, систематизирую и напишу статью со вдумчивыми ответами. Спасибо!

привет! а что тебе хотелось больше всего: попасть в гугл, просто релоцироваться или получить карьерный рост?

может, если тебе было бы все-равно в какую компанию собеседоваться, лишь бы релокация, то процесс упростился бы? хочется ликбеза «что бы я сделал по-другому»

Спасибо, очень толковые вопросы. Добавил в список.

Сергей, спасибо большое за статью. Я уже не первый раз к ней возвращаюсь, она для меня убийственно конкретна и детальна. Обычно после верных, но абстрактных деклараций вроде «problems->computer science on Coursera->mockup interviews» статьи заканчиваются, а мне всегда хотелось узнать то же, но в деталях. Фотография с дверью и исходники на гитхабе переводят эту статью в категорию живой и очень персональной.

Из вопросов, которые меня волнуют — это уже про то, что было после оффера. Чем занимаются джависты, а чем C+±шники? Интересны ли задачи сами по себе или рутина и много легаси-кода? Помогает ли компания с релокацией? Ну и как определяется команда, в которой новый сотрудник начинает работать: решают ли это менеджеры за кандидата или у второго есть возможность выбора? То же самое про офис, в котором кандидату работать: возможно ли, что сотрудник хочет работать в Цюрихе, но там нет вакансий, и компания предлагает релоцироваться в Дублин? Как Цюрих сам по себе (хотя это уже интересная, но вкусовщина)? Много ли работы в принципе: надо ли работать по 10 часов в сутки в стрессовом режиме, чтобы угнаться за коллегами?

Спасибо огромное! Очень приятно что мой опыт оказался полезным. По правде говоря, это опыт многих, просто я его изложил и пытался быть как можно более конкретным — что делать? как делать? чего не стоит делать?, и многие другие вопросы которые я себе задавал в начале пути.

Спасибо за вопросы! Очень дельные, добавил себе в заметки.

Супер статья! Спасибо большое за такое крутое описание процесса. Сергей, еще хотел спросить — вот ты пишешь, что сначала решил 230 задач, а потом уже начал учить алгоритмы. Я так понимаю в эти 230 входят также задачи уровня medium и hard. Они часто совсем не простые и без знания алгоритмов здесь не справиться.
Можешь плз раскрыть чуть подробнее — как удалось так прокачаться (не влезая в алгоритмы), если по началу даже easy давались с трудом? Или под «учить алгоритмы» имелось ввиду повторять/заучивать именно для интервью?
Просто сейчас сам в ситуации, когда easy уже надоели, а уровнем выше задачи как-то совсем тяжело...

Спасибо! Я думаю ты все делаешь верно. Шаг первый — это начать решать задачки уровня easy с первого дня. Когда они уже хорошо получаются — можно переключиться на изучение алгоритмов (курс Седжвика к примеру) и с этими знаниями продолжать решать задачки уже medium + hard. Можно конечно учить алгоритмы параллельно с решением задач, многие делают и так. Моя статистика с литкода: solved — 289, easy — 113, medium — 153, hard — 23. Я многому научился анализируя top решения с литкода (не меньше чем я взял у Седжвика, если не больше). Еще люди в решениях часто ссылаются на алгоритмы которые они используют — их тоже очень важно проработать. Дерзай, бро!

Друзья, я упоминал в статье о шаблонах которые я подготовил для интервью. Если интересно, я добавил их в GitHub репозиторий github.com/...​/tree/master/appTemplates

Сергей, вы большой молодец — ваша история стала своего рода источником вдохновения для меня (хоть у меня и нет цели попасть в гугл через 1.5 года)), спасибо что рассказали её.

Спасибо! Это очень-очень приятно слышать. Я думаю все можно было сделать и быстрее, вокруг меня много примеров когда люди за полгода (или немногим больше) добивались схожих результатов. Take care!

Сергей, спасибо за статью. LeetCode отличный сайт, проверил по вашей рекомендации, очень увлекательно.

Спасибо Вам! Для меня литкод стал аналогом головоломок: сначала сложно и немножко страшно, потом проще и с удовольствием.

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

Ты полностью описал мои ощущения: я смотрел чужие решения и прозревал, именно на них я и учился как делать «красиво».

Нашёл ещё одну статью на ту же тему. Надеюсь поможет более четко сформировать общую картину. www.facebook.com/...​-guide/10210834096793375

Круть! Побольше таких. Серег, продолжай писать, держим за тебя кулаки (y)

Большое спасибо за такую полезную статью!

Спасибо Вам! Рад что оказалась полезной.

Очень интересная статья, которая демотивирует идти на собеседования в такие компании.
Конечно, каждый выбирает сам для себя, чем ему заниматься, но 1.5 года готовиться к интервью на позицию рядового инженера... Мне кажется, что это чересчур.

Привет, спасибо за коммент. Я точно не хотел демотивировать, скорее описать как для меня проходил процесс подготовки для компаний в долине. Я понимал что он отличается от интервью в Украине, но как отличается? Как готовиться? Что учить? Своей статьей я ставил задачу эти вопросы прояснить.
Много ли полтора года? Да, много. Можно ли быстрее? Однозначно да, у меня есть друзья которые справились за полгода.
Если бы я мог отменить предыдущие полтора года? Я бы поступил так же. Суть не только в оффере, но скорее в том как я изменился пока к этому шел. Удачи!

Автору спасибо за детальную инструкцию.
Хочу уточнить для каких случаев нужен шаблон HTML-документа?

На лэптопе должны быть любимая IDE и проектик с типовыми шаблонами:
HTML- документ с подключенными стилями.

Меня пару раз просили что-то сверстать и закодить на JS, такой шаблончик сэкономит пару минут.

Очень интересно а главное полезно. Большая благодарность автору за то что поделился личным опытом.

Сергей — спасибо большое за статью!!! Очень впечатлило и помогло представить себе «что такое настоящая моитивация!». Очень полезны акценты на психологию (которая играет с нами в игры).

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

Статья супер! Но про алкогольное забвение тема не раскрыта

Спасибо! Отдельную статью напишу:)

Молодец, вот это четко: вижу цель — не вижу препятствий :) Поздравляю!

Спасибо. Наверное нужно добавить что мне помогло эту цель держать: каждый вечер я выходил и гулял по Саннивейлу, по одному и тому же маршруту. Я делал три вещи мечтал, планировал, думал как увеличить свои шансы.

Спасибо за статью. Очень вдохновляет, особенно то, на что способен человек ради своей цели.

Скажи, на каких языках проводят интервью? Почему пришлось учить для этого Java? JavaScript не подходит?

Спасибо! В Google интервью проводят на 4х языках — Java, Python, JS, C++. Я сначала решал задачки на js, после 30й понял что мне не комфортно, к тому же все хорошие примеры были на Java и C++. Я решил попробовать Java, первые 10 было сложно, дальше пошло очень хорошо.

Я на интервью вижу народ по большей части питон использует, и я могу их понять — feels like cheating :)

если задачи алгоритмические (как я понял по конкретеым технологиям там не спрашивают), нужно использовать тот язык который проще и с которым тебе комфортнее, чтоб не париться о мелочах типа «ой я тут забыл деструктор вызвать» а сосредоточиться на решении

о мелочах типа «ой я тут забыл деструктор вызвать»

Як можна його забути викликати? Деструктор викликається автоматично коли час життя об’єкту закінчується.

Чи є такі мови де деструктор треба руками викликати?

Пацан, краще біжи, зараз прийдуть дєди і всьо, добігався)

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

Мне жаль, но да:)))

Я ещё раз подумал, и вот что придумал. Да, когда учишь алгоритмы это именно зубрежка, но задачки это гораздо веселее, это как решать головоломки. Нужно научиться ловить от этого кайф, и будет проще.

Хорошая статья про мотивацию, спасибо Сергей. Если не секрет, в каком возрасте вам удалось попасть в Гугл, иными словами, какой возрастной барьер?

Спасибо! Мне 33, самый молодой гуглер в моем окружении пришел в Google после интернатуры в 21. На счет верхней планки по возрасту: я о такой не слышал, но возможен нюанс — если много опыта, то будут собеседовать на Level 5 (senior engineer) и там будет скорее всего сложнее.

и там будет скорее всего сложнее.

Т.е. нужны уже не полтора года а лет пять? Чёрт мне как раз рекрутер написал... пичалько ((

Из того, что я слышал/читал, то интервью на L5 сложнее не алгоритмами, а вопросами на System Design

Я слышал то же самое — два дизайн интервью вместо одного. Но это пока слухи, у меня знакомых которые прошли на level 5 в окружении нет.

Сергей, а ты прошел на Level 4?

Я на 4й прошел, на 5й не рискнул пробовать))

В гугле любят занижать уровень. Даже если ты в другой (+/- равноценной) компании 5 уровень, но опыта мало по меркам гугла, то скорее всего предложат 4, но денег как на 5.

Очень хорошо написано! Спасибо!

З.Ы. Не перестаю удивляться зрадофильству —
один рассказывает, что строчка в резюме Google — штамп о «середняковости» кандидата, другой, что автор зря потратил полтора года и обладает хреновой мечтой, третий, что это просто потому что есть куча друзей гуглеров и «прописка» в Кремниевой Долине и так далее.

И хоть бы один зрадофил написал: «Я получил офер в гугл и отказался потому что я ...»

Интересно это просто зависть или есть еще какие-то причины?))

И хоть бы один зрадофил написал: «Я получил офер в гугл и отказался потому что я ...»

Специально для тебя — я отказался от оффера в Гугл в 2012 в 200К, потому что скучные проекты.

Так ты не зрадофил, это не считается.

Но это же я написал:

один рассказывает, что строчка в резюме Google — штамп о «середняковости» кандидата,

%)

Из-за этого тоже в зрадофилы записывают? Ну, ок.

А что такого особенного в офере в Гугл? Мы все достаточно взрослые мальчики, чтобы понимать как ведутся дела в огромных корпорациях и то, что допуск к святыням RnD человеку с улицы не светит.
Вместе с тем, в каком-нибудь ноунейме, известном только в узком кругу профессионалов, можно заработать и впечатляющие деньги, и коснуться последних технологий, и сделать быструю карьеру.
P.S. Автор конечно произвел впечатление своим умением добиваться поставленной цели, но вот сама цель не вдохновляет нихрена.

P.S. Автор конечно произвел впечатление своим умением добиваться поставленной цели, но вот сама цель не вдохновляет нихрена.

Вот! То что вертелось на языке и никак не мог сформулировать. Уважение вызывает именно умение автора добиваться поставленной цели и заниматься саморазвитием — это то, чего сейчас не имеют многие в ИТ и плывут по течению.

А що ще робити? Ініціатива карається, експерименти ставити не дають (береш хайповий фреймворк та на ньому формошльопиш, ось й весь експеримент), всі KPI тупі. Про який саморозвиток взагалі йде мова в таких умовах? ;)

А що ще робити? Ініціатива карається, експерименти ставити не дають

Бросать весла — строить собственную лодку.

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

Швидше автомейшин тести :)

Дзвониш в ФБ, питаєш чи будуть тебе змушувать писати автомейшин тести, рішаєш задачки:)

Спасибо за отличную статью)
Недавно нашел интересный блог насчет ’как попасть работать в google’, очень много полезной информацией по данной теме. Кому интересно larrr.com
Особенно порадовали чек-листы по технологиям и знаниям
larrr.com/...​eklistov-dlya-podgotovki

Поддерживаю, Лариса большой молодец. Она хорошо и доступно пишет, я взял оттуда много полезного. Еще у нее есть телеграм канал t.me/empireinthemaking

Дуже крута і мотивуюча історія.

tldr; Без труда — не вытянешь рыбку из пруда.

Якось це... дивно все. Навіть кумедно. Дорослий зрілий спеціаліст, не студент, не джун, який до того ж вже працює в гуглі через вендора (тобто робить те, що гугль реально використовує в продакшне) півтора року замість того, щоб сіяти розумне, добре, вічне, вивчати те, що цікавить, розвиватися туди, куди є бажання, і взагалі, жити собі в кайф, дрочить алгоритмічні задачки, щоб «хакнути інтерв’ю» в гугль (чи фейсбук, пофігу) і отримати личку «офіційного гребця гугля».
Ні, ну там в кожного своя фантастична мета — піднятися на Еверест, взяти нобелевську премію, заспівати для стадіону фанатів... але отримати позицію інженера н-го рангу в корпорації, де таких імплоїв-гвинтиків десяток тисяч... ну не знаю )))

А якщо

алгоритмічні задачки, щоб «хакнути інтерв’ю» в гугль (чи фейсбук, пофігу) і отримати личку «офіційного гребця гугля»

це якраз і є

сіяти розумне, добре, вічне, вивчати те, що цікавить, розвиватися туди, куди є бажання, і взагалі, жити собі в кайф

?

Це лише тому хто щось робить вирішувати що воно для нього означає.

Хорошая статья о том, как попасть в Google будучи вендором в Google, живя в Калифорнии и имея кучу друзей-гуглеров.

Ждем ответку от сырников, как попасть в Епам, работая в том же БЦ что и Епам, живя в Киеве и имея кучу друзей-епамеров)

Автору — мои поздравления, шикарная статья, ждем теперь через полтора года еще одну, сколько из навыков и знаний полученных при подготовке к интервью, пригодились в реальной работе в Гугле.

Статья находка! Такой выносливости, целеустремленности и самодисциплине можно только позавидовать! Удачи в новом марафоне!

Спасибо! Я уже начинаю подготовку к следующему, он будет совсем другим но не менее интересным.

Спасибо за инструкцию, познавательно и интересно :)

А было ли интервью в Фейсбук? Если да, то как там прошло тоже интересно.

Интервью в ФБ было, я прошел телефонное, а вот онсайт уже не прошел.На онсайте было 5 интервью, из них одно на дизайн, одно на behavioral, остальные на алгоритмы. Одна из задач на алгоритмы была достаточно популярной задачей с LeetCode.

Такой вот вопрос — цель была исключительна в оффере?
Результат тоже остался только в оффере или знаний тоже прибавилось соразмерно полутора годам подготовки?

Вообще, читая подобные статьи немного страшно становится. Интересно, что было бы, инвестируя это колоссальное время в реальную инженерию.

Вообще, читая подобные статьи немного страшно становится. Интересно, что было бы, инвестируя это колоссальное время в реальную инженерию.

Была бы реальная польза %)

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

Вторая книга в этой ссылке была моей настольной во все школьные годы до 9 класса:
publ.lib.ru/...​’vovich/_Brudno_A.L..html

Потом были разные подобные книжки.

Закончил я на этой книге:
www.math.ru/...​es/pdf/olimp/informat.pdf

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

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

Попытаюсь ответить максимально честно. Я не особо верил что у меня получится, и это был скорее вызов себе. Я подумал «а что я такого крутого могу сделать, чтобы изменить себя и свою жизнь к лучшему?» Я жил в долине и ответ пришел сам.
Инвестируя в реальную инженерию, я думаю, было бы точно по-другому:)

Питання по харчуванню, якісь добавки їсти треба, шоб накачати таку біцуху?

Дякую, бро! Вся їжа звичайна, просто в зал ходжу кожен робочий день. В мене розклад був такий — робота -> зал -> задачки. Якщо задачки дістали зовсім — тоді два зала :) А ще кинув курити :)

Такая дисциплина и такие усилия — все ради того что бы всего-лишь стать программистом в гугл. Такая трата(

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

Вопрос очень хороший, я на счет этого тоже переживал. В универе у меня была «вышка», но я уже все забыл, на текущий момент интеграл не возьму точно:)
Подтянуть пришлось пару базовых вещей типа «что такое логарифм».

О, спасибо, вы меня обрадовали, тоже собираюсь начать готовиться, и переживаю по этому поводу

У меня база знаний росла с решением задач. Не знаем как что-то работает? — идем читаем и продолжаем страдать над задачей. Постепенно пробелов становилось все меньше.

Автору вітання, жодних питань до нього не маю. Багато праці і відмінний результат. Можна фільм знімати.

Є натомість питання до ситуації що склалася. Чи справді людина після півтора року цілеспрямованої підготовки саме до інтерв‘ю стала ціннішим кадром на ринку праці?

І що би змінилося, якби автор натомість прогресував у робочих скілах? Тих, які йому використовувати потім кожного дня (контрактор повинен приблизно уявляти що йому доведеться робити). Підозрюю, що тоді його шанси на отримання офера були б куди меншими.

Мені здається, тут щось не так. А вам?

справді людина після півтора року цілеспрямованої підготовки саме до інтерв‘ю стала ціннішим кадром на ринку праці?

Людина продемонструвала що може самостійно дістатися рівня достатнього для того щоб отримати офер. Тобто і клепка в голові є, і самодисципліна, і з мотивацією з точки зору контори все в порядку. І таким чином людина така цінна тим що зможе розв’язувати складні задачі і освоювати нові технології. В гуглобуки не беруть за знання конкретних технологій — беруть за вміння швидко вчитися та самостійно знаходити рішення проблем.

Никто и не говорит, что индустрия функционирует адекватно, особенно когда дело касается корпораций типа гугла или фб.

Мені здається, тут щось не так

Гугл может себе позволить, наверное

А вот когда рекрутер из конторы помельче требует топ 3% на Kaggle на джуниорскую позицию, это уже перебор

ТС, вы «страшный» человек, точнее терминатор
Удачи на новом месте, методичность подхода реально впечатляет!

Вітаю з досягненням та здійсненням мрії!
Варто було б зауважити що буде після того як у вас є офер. Справа в тому що незалежно від того на яку відкриту позицію ви подавалися коли ви вже в компанії на вас будуть дивитися і вибирати команди яким ви сподобаєтеся чи у яких не буде вже вибору серед новачків. А імовірність того що ви таки потрапите на ту позицію в яку хотіли доволі низька. І виходить так що люди проходять, а потім на декілька років «зникають» працюючи над внутрішніми інструментами, інфрастуктурою та тест-репортами. В ФБ хоча б новачки можуть вибирати команди і пробують їм сподобатися, в гуглі такого вибору нема. Чи може щось вже помінялося?

Дякую! Мені запропонували дві команди на вибір, ми довго спілкувались і я зрозумів що мені ближче. Так що я +/- розумію з чим буду працювати. В ФБ з цим дуже круто, ти перший місяць працюєш з різними командами, а далі обираєш що тобі сподобалось.

Есть прекрасная альтернатива leetcode — firecode.io, там и повторение задачи есть и визуализация и геймификация.

Спасибо огромное! Это очень ценно, я до этого не встречал. Возьму на заметку себе.

Є тільки одне маленьке зауваження: там тільки дуже класичні мови програмування : java, c, c++, python. На інших сервісах є набагато більш вибору.

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

отличная статья, пугающие усилия :-) поздравляю.

Спасибо! Сейчас анализируя все это я понимаю что многое было избыточно. Что-то можно сделать быстрее, а что-то не делать вовсе. У меня есть знакомые гуглеры которые прошли этот путь за 6 месяцев.

Цікаво, а могли б описати більш детально, що саме

сделать быстрее, а что-то не делать вовсе

Я думаю количество задач можно уменьшить, немногим за 200 должно быть достаточно. Некоторые алгоритмы (сложные алгоритмы на строках к примеру) можно было не учить.

Ок, дякую. Тобто, можна зробити висновок, що якщо реалізація алгоритму в коді(маркером на дошці) займає більше 15-20 хвилин, то, скоріше за все, цей алгоритм не буде фігурувати на співбесіді. Поправте, якщо не правий.
15-20 хв маю на увазі, якщо вже знаєш рішення і справа тільки в тому аби написати і віддебажити код і, можливо, написати тести, якщо писати на ноуті, ясна справа, що на продумування алгоритму може піти значно більше часу.

можна зробити висновок, що якщо реалізація алгоритму в коді(маркером на дошці) займає більше 15-20 хвилин, то, скоріше за все, цей алгоритм не буде фігурувати на співбесіді.

гарний критерій, думаю десь так і є. З мого досвіду — найдурніший алгоритм що мене питали був «Алгоритм Манакера» про паліндроми, але це виключення з правил.

Проходил интервью в Амазон почти год назад. Процесс полностью идентичен, все по сути. По поводу сроков все зависит от опыта и фундаментальных знаний. Полтора года наверное относится к тем у кого был небольшой опыт работы с прикладными задачами. У меня на подготовку ушло 2 месяца, учитывая что до этого периодически читал Кормана и сидел в HackerRank пару раз в месяц. Алгоритмы наверное действительно самая сложная часть SDE интервью, но если хорошо прорешать типовые задачи — шанс пройти очень высокий. Однако подготовка обязательна, вне зависимости от твоего уровня и опыта. Еще такой момент, у интервьюера нет цели завалить тебя и даже не совсем правильное решение задачи не означает провал. Если что-то идет не так, многие начинают сразу паниковать и заваливаются. Ты можешь расчитывать на определенную помощь со стороны интервьюера. Можно задавать наводящие вопросы которые помогу показать что ты разбираетесь в теме и получить правильную подсказку. Например уточнить правильность скорости структуры данных при определенной операции. И даже если решение будет неправильным на одном интервью, но другие пройдут успешно (касается онсайт), шанс получить оффер достаточно высок

Там же было несколько гуглеров, которые тоже были вендорами до этого. Конечно, мозг постоянно подсказывал, что они «другие», что они «умнее-лучше-круче», чем я. А мой удел — быть вендором.
...
Но все же, проводя с друзьями-гуглерами много времени, я понял приблизительный алгоритм — что и как нужно делать. Я сделал в точности, как они сказали, и получил оффер (чему был немало удивлен).

ну круто чо. Когда все твои друзья работают на галлерах то все что они могут посоветовать это учи хибернейт чтобы попасть в наш уютный епам)

хорошо скажет Джексон.

этот чел реально крутой. Хз, почему он больше не выкладывает контента( Тот что есть пересмотрел несколько раз. Особенно хорош про поведенческие интервью.

Поддерживаю, очень крутой чувак! Рассказывает просто и с огоньком, дизайн интервью очень хорошо разложил по полочкам.

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

А на прекрасном.it ещё на наши галеры что-то гонят.

Ага, и это нормальная практика:) Я всегда перед первым интервью запасался водой на весь день и в деталях изучал путь в уборную.

Гугл, введи войска.

Перечитываю «Смертельный марш». Там такая глава есть — «Ментальность морского корпуса».

Нашел на амазоне, похоже это она www.amazon.de/...​s-Computing/dp/013143635X
Спасибо!

Вопрос: что по фронту делали до старта подготовки и чем занимаетесь теперь?

По front-end я писал на ReactJS, AngularJS, Angular 2 Dart. Этим всем я жил последние 4 года (включая полтора года подготовки). Я еще не стартовал на новом проекте, по этому сказать сложно чем я буду заниматься. Со слов менеджера это будет Java в глубоких недрах Google инфраструктуры.

Я до этого код для работы с файлами на джаве не писал и растерялся

То есть это не опечатка про джаву? Вы её знали до или специально учили к собеседованиям?

Не совсем понимаю, вы специально с фронта хотели перейти на другие технологии или просто так получилось?

Все именно так. Java учил специально для интервью, все интервью проходил на ней родной. Так что это не опечатка:) Хотелось чего-то нового, такого чтобы глубокий лютый бек-енд.

Не жалеете что учили java, были ли мысли-сомнения на счет прохождения интервью на python или с++?

По поводу java я не сомневался вовсе — я в прошлом дотнетчик, так что процесс пошел достаточно быстно. python или с++ я не прассматривал так как понимал что их я буду изучать куда дольше чам java.

с дотнетом долго работали?

Около 6ти лет, больше всего с Web (asp, asp.net, asp.net mvc, web api).

Дуже цікаво, дякую за інформативну розповідь ! Щиро сподіваюся, Ваші враження від нової вакансії будуть адекватні зусиллям та інвестованому часу.

Дякую дуже! Хотілось подати матеріл так, щоб людям які йшли схожим шляхом було простіше ніж мені. Ще раз, дякую!

Большое спасибо за системное изложение, и успехов в дальнейших планах)

Дуже дякую за статтю, вона супер, обов’язково скористаюся порадами навіть просто для саморозвитку

Дуже радий, що вона стала корисною. Дякую Вам!

Успіхів Вам на новій позиції!

Я уж переживал, что на доу пропала годнота. Сергей, ты потрясающий молодец, офигительный пример для вдохновения. Больших успехов тебе! Надеюсь, ты запилишь что-то крутое в Швейцарии.
Спасибо за такую детальную статью. И да, гуглдок твой возьму себе! :)

P.S. А на какой уровень гугла взяли, если не секрет?

Спасибо огромное! Очень-очень приятно! Я когда стал к онсайту готовиться понял что материала много, а времени мало — и тогда я прошерстил все важные темы и выбрал по одной оптимальной статье. И каждый раз перечитывал, так понемногу и Дейкстра стал не таким страшным :)
Взяли на Level 4, это у них аналог Middle. Но из моих знакомых никто не пришел в Google на Level 5, там все серьезнее. Так что я остался доволен уровнем.

Спасибо за статью!

там все серьезнее

А можно тут подробней?

Тут у меня только слухи есть. Они говорят что задачи сложнее и что вместо одного дизйн интервью может быть два.

Самая детальная и полезная статья на ДОУ :) Поздравляю с оффером!

Спасибо огромное! Я очень старался сделать ее полезной и без «воды».

Дуже, дуже дякую! Ви молодець і двічі молодець, що ділитеся з іншими!

Вам дякую! Я знаю, що вона довга, можливо навіть задовга. Good luck!

— лучше резюме на одну страницу — я специально смотрел, как ведут себя мои американские коллеги. и за мои надцать проведенных интервью я не видел, чтобы кто-то смотрел дальше первого листа. европейские резюме на 20 страниц их приводили в дикий шок. я и сам начиная с 3-5 интервью перестал смотреть дальше первой страницы.
— на самом деле, 20 — 25 решенных задач достаточно, чтобы покрыть знания для 80% вопросов. весь вопрос в том, как выбрать эти 20 — 25 задач, это не совсем тривиально. оставшиеся 20% покрыть нереально, ибо всегда встретится что-то уникальное. задачу, заданную мне на одном из интервью в MS — я больше никогда не слышал и не видел в интернете.
— ну и никогда не отчаивайтесь в случае отказа — ибо всегда есть факторы, которые никак от вас не зависят!

P.s. в футбол играешь?

Привет! Я наверное самый бездарный игрок в футбол в мире:))) На счет количества задач вопрос очень сложный. В моем случае я точно могу сказать что нет таких 25ти задач которые бы вывели меня на уровень прохождения интервью. Я помню момент когда почувствовал уверенность в своих силах, это было где-то за 200й задачей. Но у меня есть друзья-гуглеры которые решили меньше сотни или немногим больше сотни.

Сережа, спасибо! Отличная статья!

Статья супер! Спасибо большое!

Спасибо, оч приятно!

Отличная статья, спасибо! Гуглдок вообще огонь — утащил к себе :)
А в какой момент времени при подготовке пришло понимание что пора подаваться в компанию мечты?

Рад что гугл-док пригодился кому-то еще! Подготовку я начал когда мой проект закончился и я попал на бенч:) А вот момент когда подаваться на интервью был очень сложным. После mock интервью я был так воодушевлен что думал сразу в Google подаваться (хорошо что не подался). Что-то мне подсказало «а попробуй сначала в другие компании», я попробовал и завалил несколько онсайтов подряд. Это меня отрезвило и я решил еще заточить свои скилы:)

Поздоровляю з гуглом та крутою статтею.
Але виникло таке питання. Є умовний гуглобукозон куди треба ноулайфить півтора роки виключно навичку проходження інтерв’ю. І є інші контори, з нормальними умовами праці та зарплатнею, але які не мають шаленого напливу інженерів, тому ставлять нижчу планку для кандидатів.
Які гуглобуказон дає бенефіти, що варті оцих додаткових зусиль, в порівннянні з іншими компаніями, які не можуть собі дозволити хардкорний відбір, але тим не менше мають пристойні умови праці та зарплатню?

Назвіть ці компанії, в яких аналогічні гуглу умови праці і зарплатні, але менш хардкорний відбір — і я впевнений вас залайкають :) Але думаю проблема якраз в тому, що таких не існує. Ну і гугл він же єдиний такий, рядок в резюме і все таке.

аналогічні гуглу умови праці і зарплатні

Ну так питання, що дає гугл чого не дають звичайні компанії, і що варто року зубрьожа задачок. Умовно кажучи. Працюєш в generic_product_company — маєш телєк. Зп в гуглі більша — можеш купити телєк на двадцять дюймів більший. Відповідно, ти рік проноулайфиш над алгоритмами заради двадцяти дюймів плазми. Шикарна перспектива, чи не так? :-)

А саморазвитие там и всё остальное, вклад в какие-то инновации, не? Конечно те у кого амбиций никаких нет и основная цель это заработать свою зп, то да, смысла напрягаться нет ни малейшего.

Какое саморазвитие, какие инновации у рядового гребца?
Для этого берут других людей и другим способом.

Тєлєк... тєлек в 2018?!! Ви б ще як мотиватор назвали радіолу.

Я думаю в кожного своя мотивація для чого заробляти більше. Я для себе знайшов наступну: декілька відсотків від мого чистого інкаму йде рідним, декілька на допомогу армії. Метод запозичений у якогось бізнес тренера, не пам’ятаю кого саме.

окрім більш масштабних задач, підозрюю, що строчка у резюме «Google» дає одразу +100 до репутації, а відповідно і до зп, трасту і т.д.

Кто работал с большими брендами знает — за эту самую строчку в резюме-портфолио они руки-ноги выкрутят и всю кровь выпьют.

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

окрім більш масштабних задач, підозрюю, що строчка у резюме «Google» дає одразу +100 до репутації, а відповідно і до зп, трасту і т.д.

В Северной Америке такая строчка в резюме — это часто клеймо середнячка, от которого тяжело отмыться. Сейчас будет обидно, но скажу как есть, надавняя работа в гугле (меньше 5 лет назад) означает перед другим работодателем, что перед тобой прекрасный галерный раб, удобный во многих отношениях, но далеко не выдающийся.

эмм, а какое клеймо «не середнячка»?))

Такого нет :) Есть компании, люди из которых фейлятся буквально сразу, они тоже на слуху. Касательно гугля — это банальная статистика, т.к. это огромная людско-дробительная машина, в которой много очень толковых спецов, но на свободный рынок труда они не попадают и переходят из компании в компанию через специальный вход, а на рынок труда попадают в основной массе только середнячки. Поэтому строчка Гугль в резюме приносит больше понтов обладателю, чем пользы для дальнейшего трудоустройства.

а что если резюме к работодателю попадает не только, когда соискатель в активном поиске? Например, когда в линкедине написано Google Software Engineer, как раз вероятнее для человека открывается вот такой «специальный вход»

Специальный вход работает немного по-другому :) Без резюме.

«... рассмотрим один малоизвестный вид современной техники отбора. Переводчиков-китаистов для министерства иностранных дел приходится искать так редко, что метод их найма не получил широкой огласки. Предположим, понадобился переводчик и
отбирает его комиссия из пяти человек. Трое из них — чиновники, двое -
крупные ученые. На столе перед ними лежат горой 483 заявления с
рекомендациями. Все соискатели — китайцы, все как один окончили
университет в Пекине или Амое и совершенствовались по философии в
американских университетах. Большинство из них служило какое-то время на
Формозе. Некоторые приложили фотографии, другие осмотрительно
воздержались. Председатель комиссии обращается к тому из ученых, который
покрупнее: „Не скажет ли нам доктор Ву, какой соискатель наиболее пригоден
для нас?“ Д-р Ву загадочно улыбается и говорит, указывая на гору бумаг:
„Ни один“. — „Как же так, — удивляется председатель. — Почему?“ — „Потому
что хороший специалист заявления не подаст. Побоится позора“. — „Что же
нам делать?“ — спросит председатель. — „Я думаю, — ответит д-р Ву, — надо
уговорить доктора Лима. Как по вашему, доктор Ли?“ — „Да, — отвечает Ли, -
он подошел бы. Но мы, конечно, не можем его сами просить. Мы спросим
доктора Тана, не считает ли он, что доктор Лим согласится“. — „Я не знаю
доктора Тана, — говорит Ву, — но я знаком с его другом, доктором Воном“. К
этой минуте председатель уже не понимает, кто кого будет просить. Но суть
тут в том, что все заявления выбрасывают в корзину, а речь пойдет лишь о
человеке, который заявления не подавал.» ©

"

В Северной Америке такая строчка в резюме — это часто клеймо середнячка, от которого тяжело отмыться.

" наверное у каждого свой опыт. Я не могу сказать что замечал такое в долине. Если ты клевый инженер то работал ли ты до этого в Google, EPAM, SomeStartup роли особой не играет.

Т.к. я так или иначе задействован в autonomous cars, то волей-неволей начинаешь обращать внимание на уровень людей, с которыми приходится общаться, оригинальное мое утверждение подтверждается. Особенную настороженность стали вызывать люди из Uber, то ли там всё так плохо, то ли компания избавляется от ненужных людей, но уровень людей, которые появились после работы на убер на рынке оставляет желать лучшего.

Внезапно. Никогда с этой точки зрения вопрос не рассматривал.

Привет, спасибо за вопрос, он очень резонный. Из моего опыта — я проходил интервью и в стартапы в долине, и мне показалось что там не проще. Особенно запомнился случай в одном стартапе в Сан Франциско где было 7 интервью подряд — стартовали в 11 утра, закончили в 7 вечера. Я там и графы писал, и файлы парсил, и даже CSS писал. Оффер мне не дали:)

Хорошая статья, спасибо.

Швейцарии в Цюрихе

В США остаться не было вариантов или хотелось самому уехать?

В моем случае мотивация звучала так: «Я хочу быть ближе к дому».
В моем случае мотивация звучала так: «Я хочу быть ближе к дому»

По-моему тут написано :)

Привет! Тут несколько факторов: первый — хотелось ближе к дому, попробовать пожить в Европе и понять где мне более комфортно. Второй — у меня была L1 виза.

А как у Гугла в Швейцарии со структурой компенсации? Такая же как в США или RSU меньше насыпают, но больше base, или RSU ваще не дают?

Цифры очень схожи с долиной, и база и стоки.

Подписаться на комментарии