Как я получил офферы в Google, Amazon, Microsoft, Яндекс и Box, не завалив ни одного собеседования (ну, почти)

в 10:56, , рубрики: career, FAANG, Google, interview, interview preparation, Карьера в IT-индустрии, Учебный процесс в IT
Как я получил офферы в Google, Amazon, Microsoft, Яндекс и Box, не завалив ни одного собеседования (ну, почти) - 1

Клибейт, кликбейт!

Эта статья – пересказ моего треда в твиттере с небольшими доработками. Тут нет ограничения по символам, поэтому некоторые мысли я могу раскрыть лучше.

Disclaimer: это рассказ о моём опыте. Он может и должен сильно отличаться от вашего. Всё описанное тут – моё частное мнение, не претендую на истину в последней инстанции

Сразу немного статистики для нетерпеливых:

  • Решил 200 задач на литкоде к моменту последнего собеседования

  • Потратил на подготовку больше 1000$

  • А ещё 6 месяцев и около 500 человекочасов

  • 5 компаний позвали на собеседования

  • офферов тоже было 5

Введение

Ну и начнём с раздела об авторе – я считаю себя достаточно средним программистом. У меня хорошие софт-скиллы, неплохой опыт продуктовой разработки, довольно хороший английский, но каких-то сакральных знаний нет. Мой основной опыт работы связан либо с веб-, либо с игровой разработкой, но оценить его в годах сложно, потому что фрилансить я начал ещё в 17 лет. Учился в обычном университете (получил степень бакалавра), поработал несколько лет в Wargaming, где поднабрался опыта и хорошей инженерной культуры. Также я из тех, кто в информационном поле не отсвечивает: у меня нет опенсорс или пет проектов, на конференциях я не выступал (хотя хотел, ковид поломал планы на мой дебют), блога тоже нет. В общем, скучный я, куда мне в FAANG?

Ах да, ещё я из Воронежа (два месяца назад была статья от Андрея Гончарова о его опыте успешного прохождения собеседования в FAANG – земляк!) и рос в довольно криминогенном районе, так что можно считать, что эта статья – история успеха.

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

О собеседованиях в FAANG

Итак, что я выучил о собеседованиях в крупные компании? Они всегда многоступенчатые и это призвано создать много разных беспристрастных точек зрения на кандидата, из которых можно собрать общую картину и ответить на вопрос "берём/не берём". Из-за большого количества собеседований этот процесс ещё и лотерея и я слышал два мнения на тему того, как в этой лотерее выиграть: надо крутить барабан чаще и надо максимизировать свои шансы подготовкой. Я по ряду причин выбрал именно второй вариант.

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

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

Почти любой собес в крупную компанию состоит из пяти вещей:

  • Резюме

  • Кодинг

  • System design или архитектура

  • Поведеченские вопросы aka софт-скиллы

  • Удача

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

Начало подготовки, кодинг

Я начал готовитьcя в апреле и сразу собрал себе чатик группы поддержки в телеграме, который я использовал как дневник – писал туда каждый день, чем занимался и сколько времени потратил.

Совет: выстройте себе расписание и старайтесь его придерживаться. Подготовка к интервью в FAANG – это марафон, а не спринт. Тут важно правильно распределить силы

Я установил себе правило тратить на подготовку 2 часа по рабочим дням и 4 часа по выходным. В реальности в начале процесса я готовился скорее меньше часов, а ближе к концу – скорее больше. Оно и понятно, ведь этап вплоть до июля был разгонным. Я купил Cracking The Coding Interview, решал задачки оттуда и с leetcode, смотрел какие-то видео по архитектуре.

Насчёт книги – мне она кажется спорной. Реально полезного контента там на 50 страниц, дальше идут задачи того же уровня, что и на leetcode. Для старта неплохо, но потом становится бесполезной, а стоит 50$!

Чёткой системы подготовки сначала у меня не было – я просто решал разные задачки, выбирая в основном по названию и разбирал решения других с лучшими Time/Space complexity. В какой-то момент стали очевидны пробелы в знаниях и я стал заполнять конкретно их. Так, я потратил месяц, решая исключительно задачи на динамическое программирование, которое поначалу вообще не понимал. Забавно, что мне ни разу не попалась задачка на DP. Сейчас я бы начал сразу с Leetcode Learning Paths, но я обнаружил их достаточно поздно и к тому времени уже сам знал, что мне учить. Также есть хорошая общая тактика подготовки к техническому собеседованию вот тут. Статью я нашёл поздно, но примечательно то, что до большей части описанного там я пришёл сам.

Мой подход к сложным задачам был такой – после получаса-часа неудачных попыток я разбирал решение от другого пользователя и шёл объяснять его жене (ох, сколько она натерпелась). Реализовывал я его только на следующий день. После брал несколько задач на ту же тему, чтобы совсем уже разобраться и закрепить результат.

В июле и августе я сконцентрировался на решении задачек на leetcode, но немного изменил свой подход:

  1. Купил премиум и стал прорешивать задачи из пула тех, что часто дают на интервью в Google (мне ни одной не дали)

  2. Открыл для себя assessment – симуляцию реальных собеседований с ограничением по времени

Моё мнение – премиум на leetcode однозначно стоит своих немалых денег. Я сторонник платить за подготовку, ведь так проще себя обязать заниматься. Assessment в целом очень полезная штука: мало того, что она тренирует навыки решения задачек на скорость, так ещё по результатам успешных прохождений генерируется рейтинг относительно медианных результатов работников FAANG компаний и создаётся рейтинг понимания каждой из тем (но для этого надо пройти 10+ таких сессий).

Примерно в то же время я начал делать мок интервью по алгоритмам с друзьями. Комбинация мок интервью и ассессментов на leetcode дала мне уверенность, что я смогу сдать техническое интервью. Ох, как же я ошибался. Я упустил тот факт, что на собеседовании надо не решать задачки, а решать задачки за строго отведённое время. Иногда задачи намеренно делают такими сложными, что их можно и не решить за одну сессию (у меня так было в одном раунде в Google). Техническая часть интервью, кстати, занимала у меня около 30 минут в Microsoft и Amazon и 45 минут в Google. Можно отнять несколько минут из-за стресса, обязательных проблем с интернетом и доступом к среде разработки, замедленной коммуникации на английском и будет просто чудесно. Секрет прохождения таких собеседований уже обсуждался не раз – быстро решать задачки на время и постоянно сообщать о ходе своих мыслей. В идеале надо щёлкать задачи medium уровня за 30 минут, попутно объсняя ход решения. В общем, заводите таймер.

Довольно поздно я обнаружил украинскую группу людей, готовящихся к собеседованиям в FAANG – https://t.me/FaangInterview. Там организовывают моки по кодингу, архитектуре и по поведенческим интервью.

Резюме

На подготовку резюме я потратил не меньше недели. Я пользовался советами автора книги Cracking The Coding Interview:

  • Не больше одной страницы

  • Перечисление достижений, а не обязанностей

  • Больше цифр

Сделать такое резюме оказалось невероятно сложно. Наверное, это была самая сложная часть моей подготовки. Вспомнить все свои достижения и уложить ваши 3-5-7-10 опыта в одну страницу – это тяжелый труд. А зачем это вообще делать? Ну, умные люди говорят о 6 секундах, которые рекрутер тратит на сканирование глазами резюме. За эти 6 секунд он/она должны выхватить все ключевые слова и принять решение о том, в какую стопку положить это резюме. Несправедливо? Возможно. Так ли это на самом деле? Я не знаю.

Достижения – штука индивидуальная и всё сильно зависит от того, как это обернуть. Можно и кажущиеся мелочи предподнести очень эффектно. В книге The Tech Resume Inside Out я нашёл конкретные примеры рефакторинга нескольких резюме. Эта книга очень сильно помогла мне найти красивые формулировки и вспомнить похожие достижения в своей карьере. Только врать не надо – если это заметят, то это сразу будет red flag. Думаю, что это очевидно.

Пример из моего опыта и резюме: когда-то на заре карьеры я сделал новую версию API, поддержав новые типы данных, но оставил первую версию для обратной совместимости. Изначально я записал это как "Added support of new fields to API", но трансформировалось это в "Refactored service API to support new types of data and implemented backward compatibility using versioning".

Один из основных паттернов в резюме – "Сделал X с помощью Y, что привело к Z" – активно рекомендуется Google. Он очень полезный и пригодится вам в поведенческой части.

Ещё я купил подписку на 1 месяц на resumeworded. Стоило 50$, но точно стоило своих денег, а для ребят не с C2 и опытом продажи себя (то есть почти для всех нас) так вообще мастхэв. Сервис представляет собой некий grammarly для резюме и подсказывает, где поменять формулировку, где поставить action verb вместо другого а где – накинуть цифр.

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

Поведенческое интервью

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

Что вообще такое behavioral/cultural fit/soft skills/leadership интервью? Это штука, которой многие пренебрегают, но которая при этом может быть важнее даже кодинга в некоторых компаниях. Вас могут взять с посредственным результатом по кодингу, но совершенно точно не возьмут, если будет плохой результат по софт скиллам.

У каждой крупной компании есть своя культура и миссия. Задача поведенческого интервью состоит в двух вещах: убедиться, что кандидат впишется в команду/компанию и что он умеет рефлексировать над своими ошибками и не повторять их. Поэтому можно ожидать вопросов про неудачи (примерно 30% вопросов были про неудачи), успехи, сложные ситуации – копают глубоко. Эти интервью важны везде, но воздведены в абсолют в Amazon.

Совершенно все интервью строились по одной и той же схеме: интервьюер задаёт вопрос в стиле "Расскажи мне о ситуации, когда ..." и ожидает ответ в формате STAR. Во время ответа нужно сконцентрироваться на своих достижениях и действиях. Бонусный бал, если эта история уже отрефлексирована и есть понимание, как можно было сделать лучше. Большой бонусный бал, если это понимание уже получилось применить в другой ситуации.

Я знал, что именно Amazon уделяет больше всего внимания поведенческим вопросам и решил, что я буду готовиться именно к их формату интервью, а для других компаний просто подстрою свои истории. Забегая вперёд скажу, что тактика оказалась правильной. Все крупные компании так или иначе ценят лидерство, ownership, проактивность и поддержание высоких стандартов. У Amazon есть целая страница с их Leadership Principles, где они описывают свои ценности. Я нашёл список вопросов по каждому из принципов (около 60 вопросов) и начал готовить ответы по каждому из них. Копание в прошлом в таких масштабах мгновенно приводит к головной боли.

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

Я так и не смог подготовить ответы на все вопросы. Можно ожидать до 5 сильных историй и до 10 средних, на всякий случай. Каждая история потенциально подчеркивает сразу несколько принципов и может служить ответов на несколько разных вопросов. Вся подготовка к этому заняла у меня около 20 часов, которые я размазывал по выходным. Писал в основном по-русски, но подготовка истории на английском позволит поиграться с формулировками и сделать конфетку сразу же.

Когда большая часть историй была прописана, я прошёл несколько мок интервью. Это очень важный этап – нужно, чтобы человек без контекста услышал историю со стороны и дал рекомендации на тему расстановки акцентов. Нужно получить такие рекомендации хотя бы по нескольким примерам, остальное получится доработать уже самостоятельно. Совет: проведите 1-2 интервью с человеком, который знает, на что обращать внимание. В моём случае это были личностный коуч и человек, который прошёл в Facebook.

Каждый ответ на вопрос на cultural fit интервью – это история на 4-6 минут. Слушать такую историю объективно сложно, поэтому упростите жизнь интервьюеру и расставьте акценты в виде ключевых слов и цифр. Вам очень сильно пригодится формат XYZ из резюме

В процессе подготовки я пользовался в основном книгой и ютуб каналом Holly Lee – это бывший нанимающий менеджер из Amazon и она знает, о чём говорит.

Помимо историй я подготовил так называемый self pitch в длинном и коротком варинтах. Это такой рассказ о себе, который в идеале должен продать кандидата компании сразу же. Забавно, но я подготовил 15+ историй и совершенно забыл про self pitch. В Microsoft меня просили рассказать о себе на каждом интервью, было неловко. Кстати говоря, в этом self pitch можно и нужно ввернуть пару достижений (наш любимый XYZ формат, можно прям из резюме взять)

Очень крутая глава по self pitching есть в книге Cracking The PM Interview. Я нахожу эту книгу более полезной для подготовки программисту, чем Cracking The Coding Interview.

System Design

Страшный зверь – именно это интервью оценивает кандидата как зрелого специалиста. Хоть оно и одно (как правило), его важность соразмера с кодингом, поэтому вложить на подготовку нужно столько же. Распространено мнение, что очень сложно пройти это интервью, не имя практического опыта работы в распределённых системах. Ну, я с этим не согласен, ведь интервью по систем дизайну – это огромное количество тем и совершенно точно с чем-то вы не работали. Дизайн систем – это такой же навык, всё нарабатывается.

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

Почти все вещи, о которых я тут пишу, описаны в отличном посте Gergely Orosz вот тут. Для подготовки я использовал:

  1. Курс Grokking The System Design Interview – точно стоит своих денег, даёт отличную базу и понимание стандартных компонентов распределённых систем

  2. System Design Interview – An Insider's Guide от Alex Xu – немного спорная книга, её стоит брать одновременно с курсом. В ней есть хороший фремворк для прохождения самих интервью

  3. Understanding Distributed Systems от Roberto Vitillo – отличная вводная книга, помогает понять, что вообще к чему

  4. Ютуб – есть огромное количество видео от коллег-индусов, но мне не помогли совсем. Зато канал System Design Interview просто чудесный, хоть и видео там немного.

  5. Designing Data Intensive Applications от Martin Kleppman, она же "кабанчик" – о ней позже

  6. Мок интервью – самая важная часть.

Так как все интервью по системному дизайну – это общение с небольшим количеством диаграмм, то надо хорошо следить за временем, ясно излагать мысли и иметь структуру повествования. Единственный способ сформировать этот навык – практика, поэтому мок интервью очень важны. Я прошёл около 20 мок интервью по дизайну, их было 3 вида:

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

  • Peer interviews – формат "ты – мне, я – тебе". Хорош для выхода из зоны комфорта и для практики. Опять же, скорее всего ваш пир – не эксперт в архитектуре. Зато бесплатно и можно посмотреть на то, как отвечают другие люди.

  • Платные мок интервью – дорого (интервью с человеком из конкретной компании стоит 250$!), но полезно. Вас будет собеседовать человек, который уже работает в FAANG и его фидбек будет более релевантным. Я пользовался interviewing.io – осторожно, реферальная ссылка.

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

"Кабанчик" или Designing Data Intensive Applications – это такой талмуд на 600 страниц от профессора-ресерчера университета Кембриджа про сложность различных компонентов распределённых систем. Читать её от корки до корки сложно, но я сделал иначе – просто начал с той темы, которая мне была больше всего непонятна и дальше прыгал по книге. Постепенно я прочитал большую часть интересных мне вещей и именно благодаря этой книге все кусочки информации, полученных из других ресурсов начали выстраиваться в общую картину. Это сразу отразилось на качестве мок интервью.

Итоги

Вроде как пройти в 5 крупных компаний и получить от всех оффер – это нечастое явление и закономерно возникает вопрос "а что же такого я сделал?". Ведь в этой статье нет ничего экстраординарного, а большая часть и вовсе спокойно гуглится.

Я, рефлексируя, вижу тут четыре вещи, которые повлияли на весь процесс:

  1. Серьёзность подготовки и дисциплина – я реально хотел сделать всё идеально и вложил большое количество усилий в подготовку. Постепенно подготовка начала формировать привычки – я понял, что лучше всего я готовлюсь утром и начал вставать в 6-7 утра каждый день. Естественно, дисциплина появилась не сразу – до июля я часто пропускал дни подготовки и филонил.

  2. Мок интервью – фидбек от других людей позволил мне увидеть себя с другой стороны и понять, как себя вести и на чём акцентировать внимание.

  3. Самопродажа – нам всем не хватает этого навыка. Во время подготовки резюме и историй для поведенческого интервью я прошёл с увеличительным стеклом через всю свою карьеру и результате сформировал довольное неплохое понимание своих сильных и слабых сторон, своих успехов и неудач. В результате мне было очень легко общаться с рекрутерами и нанимающими менеджерами, потому что я знал, как я могу помочь каждой команде и как мой опыт соотносится с основными вызовами проекта и вакансии.

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

Ну и удача, конечно. Это жестоко, но иногда может не получиться с первого раза по ряду причин: рекрутер не вовлечён, волнение, проблемы с интернетом. Мелочь может привести к неудаче всей попытки.

Хороший момент в том, что нанимающие менеджеры – тоже люди и понимают эти проблемы. Я полностью провалил один из кодинг раундов в Google, но хороший результат по софт-скиллам и по систем дизайну дал мне шанс на дополнительные интервью, где я справился гораздо лучше.

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

Такие дела.

Автор: Роман

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js