Мой уход из Яндекса, как не потерять мотивацию за полгода подготовки в FAANG и реджект в Google

Всем привет! Хотела бы поделиться своей историей прохождения собеседований в IT-гиганты и допущенными ошибками. Немного о себе: у меня диплом бакалавра по прикладной математике и 6+ опыта разработки. Свою карьеру я начинала фронтенд-разработчиком в американском аутсорсе еще на 2 курсе универа (да, бывший формошлеп будет вам сейчас вещать про алгоритмы), в Яндексе работала на фулл-стеке, потом ушла в хороший family-created стартап. Я была по обе стороны собеседований, суммарно их около 100+ наберется, но это отдельная тема с кучей кулл-стори, здесь будет больше про Google и несколько крупных компаний (не FAANG), которые мне хотелось бы осветить. Присаживайтесь поудобнее!

Если вы студент

Если вы все еще учитесь, хотите попасть в FAANG и вам кажется это нереальным, присядьте и успокойтесь. Я знаю примеры реальных людей, которые прошли на стажировку и это более, чем реально. Если бы мне кто-то сказал курсе на 2-ом, что нужно прорешать 500+ задач и попробовать податься, как postgraduate, то я бы обязательно попробовала, хотя и была очень неуверенна в себе. Если вы еще не работаете и действительно этого хотите — дерзайте! Материалы и ссылки будут в конце.

Как оно там в большой компании, вроде Яндекса? И почему Google?

Единственное, чему меня действительно научил Яндекс, так это то, что ваше собеседование, как первое свидание, если вам не нравится, то дальше уже лучше не будет. Селяви и ищем другую команду и/или компанию. Ваш профессиональный рост и продвижение по карьерной лестнице очень зависит от того, оказались ли вы в нужное время в правильном месте и тоже самое касается FAANG. Вам повезло, если у вас есть хотя бы 2 из этих 3 пунктов: адекватный менеджер, нормальный руководитель и действительно хоть какая-то доля интересных/громко-кричащих задач. Моя история это та, в которой вам не повезло и при заходе в компанию у вас нет ни одного из этих пунктов. Так или иначе спустя пол года я перевелась в другую команду и отработала год. Это был опыт, я познакомилась со многими хорошими специалистами и моя вторая команда была one love, но я уже просто устала от ненормального work-life balance в компании, не особо интересных задач, зарплаты ниже рынка и своих непонятных карьерных перспектив. После Яндекса мотивации работать не было вообще. Я ушла в стартап, CTO которого отработал 15 лет в IBM и это человек, который меня бесконечно вдохновляет, мало кто спустя такое количество времени в IT так горит своим делом. Через пол года я немного отошла от выгорания, мы с молодым человеком решили релокейтится так или иначе. Еще со времен университета мне всегда очень хотелось попасть в Google — это просто незакрытый гештальт.

Ну что, завелась и понеслась? Куда я проходила собеседования

ff6b2dec7638ad80410a706ac57eb4f7.jpeg

Компании, куда я подавалась, но меня не захотели собеседовать (непонятно по какой причине, ответ, как всегда, общий): Reddit, Github, Booking, Robinhood, Spotify, Bloomberg, Twitter, LinkedIn, Dropbox, всех и не вспомнишь уже…

Про Uber еще хочу сказать, что если вы подавались сами и вас не рассмотрели, порефералить вас на эту позицию может и не получится — будет действовать cooling period, ситуация реальная, имейте ввиду.

И отдельно про Microsoft (реферал) — тут рекрутинговый процесс нечто. Подавалась через реферала, со мной связался рекрутер и спросил, могу ли я прийти к ним на hiring coding event. Я не могла туда пойти, потому что в этот день у меня был онсайт в Google. Рекрутер на абсолютно пофигистичной ноте сказал, что сейчас у них нет много слотов на собеседования, но они со мной свяжутся. Как говорится, хотите вас позовем, хотите не вас…)

Здравствуйте, котиков на работу берете? Простите, вы слишком маленький котик

Мне 25, мне никогда не казалось, что это проблема, но да — это проблема. Рекрутеры обычно не особо засчитывали мне 2 года работы в университете и считали это вялотекущим парт-таймом, хотя он таковым не был. Я работала на полную ставку, не особо ходила на пары и просто закрывала сессию на 3, но людям в Европе сложно понять, как можно получить диплом и почти не ходить на пары на матфаке. При собеседовании в Нидерланды рекрутеры настолько удивлялись моему возрасту, что переспрашивали — это 2 и 5? Возможно, именно по этой причине меня не рассмотрели в другие компании или не было матча по опыту, неизведанно. Но один из рекрутеров сказал, что до 25 они вообще не релокейтят.

Подготовка и выбор языка

Тут стоит отметить, что у меня не совсем низкий старт. Когда-то в универе я разбирала задачи на динамическое программирование, длинную арифметику, деревья и что-то сабмитила на e-olymp. Формально, я ± представляла, чего ожидать. Ребятам, у которых не было никаких алгоритмов в универе или если они пришли в разработку из другой сферы может быть сложнее на старте.Разумеется, как изначально красильщик кнопок, я пишу на js. В С++ могу на уровне универа, написать пару несложных шаблонных функций и все. Долго думала, на чем я буду собеседоваться еще перед началом подготовки и это был бы явно не js. В js много чего нет, например, реализации heap. Выбор пал на Python, продакшн код на Python я не пишу, но в случае чего, на вопросы, вроде зачем нужен GIL, могу ответить. Почему Python? Java — очень много букв, C++ — очень хардкорно, на Python к тому же много алгоритмических курсов, например, MIT, но это чисто мое субъективное мнение.

Roadmap задач

Я старалась решать по 2–4 задачи в будний день из разных разделов, это примерно 4 часа в день до/после работы. Например, одна на строки, другая на графы. Разделам, где я проседала больше, выделяла отдельное время — в частности, на динамическое программирование. Полностью вся суббота и часть воскресенья уходили на подготовку. Будьте к этому готову, подготовка съест очень много вашего личного времени. На текущий момент у меня 352 задачи:

image-loader.svg

В таком режиме важен таймлайн — не можете решить задачу за 1–3 часа, смотрим хинты, непонятно как решать даже с хинтами, смотрим и разбираем решение. И да, купите премиум! Оно того стоит: у вас будут доступны фильтры задач по компании, решения, закрытые популярные задачи, тестовые подборки для собеседований. Параллельно я просматривала задачи из Cracking The Coding Interview c точки зрения подхода решения. Так прошло 4.5 месяца, нужно было начинать готовится в System Design. Есть еще неплохо подборка Patterns for Coding Questions. Какие топики обязательно надо покрыть (по-моему мнению):

  1. DP: одномерный (Coin Change, Climbing Stairs), двумерный (Unique Paths, Dungeon Game), трехмерный (Cherry Pickup, Cherry Pickup II);

  2. 2. Графы: DFS и BFS надо прям так, чтобы если вас разбудят среди ночи, вы их напишите. Алгоритм Дейкстры, как находит шарнирные точки, мосты, циклы. Рассмотреть задачи на BFS + Binary Search (Swim in Rinsing Water);

  3. Heap/Priority Queue;

  4. Матрицы: обходить змейкой, по диагонали, звездочкой и как угодно;

  5. Задачи бинарного поиска;

  6. RMQ: Fenwick tree, Segment tree (есть хорошее объяснение на канале у Tushar Roy);

  7. Задачи на sliding window, prefix sums, stack, recursion (вот тут надо уметь в Master Theorem)

System Design

До этого я читала GoF (у меня даже какой-то курсач в универе по паттернам был), книгу Фаулера (подписана на его блог и слежу за статейками там). Я очень волновалась именно за системный дизайн, потому что опыта проектирования highload систем у меня не было, но именно эта секция в Google прошла у меня лучше всего. Я знаю базовые вещи: про OSI, балансеры, LRU/LFU cache, ACID и т. д. Но нужно уметь четко выделять точки отказа в системе, как лучше шардировать данные, проектирование read heavy vs write heavy приложений и уметь донести свою мысль интервьюеру, что очень важно. В итоге, я прошла курс Grokking the System Design — хайли рекоменд, прочитала Alex Xu, System Design Interview и половину книги Designing Data-Intensive Applications (она очень интересная и стоящая, но мне не пригодилась). Есть еще более углубленный курс на educative — Grokking the Advanced System Design.

c7888ccd03e1c3711409c7400b481912.jpeg

Если у вас опыт только, как фронтенд разработчика, и вы не умеете в reverse proxy и зеркалирование в nginx, начать советую с этого. Напишите маленькое приложение на бекенде, настройте балансер, потрогайте ACL (можно даже через битовые маски реализовать, чтобы и битовые операции вспомнить).

Behavioral

Моей ошибкой было то, что я особо к нему не готовилась, а стоило. Я бы предложила взять Leadership Principles Амазон и расписать в доке конкретные ситуации с примерами и быть готовым красиво выкатить ответ, когда вас спросит про ownership, пример вашего achievement, disagreement с менеджером и пару десятков часто задаваемых вопросов. Тут не буду советовать того, чего не смотрела/читала. Советую обратить внимание на док сообщества подготовки в FAANG. Есть еще неплохой список топиков на leetcode.

Mock-собеседования

Ребята из канала подготовки в FAANG в телеге проводят mock-собеседования (только на английском). Cтоит сходить, когда у вас есть хотя бы 100 задач leetcode. Вам подберут других ребят по схожему количеству задач, очень помогает научиться правильно проговаривать ход своих мыслей и объяснять ход решения другому человеку. Это не тоже самое, что mock interview test на leetcode. Группа очень полезна, в доке сообщества куча информации по подготовке — советую ее прочитать и начать оттуда. Рефералов можно тоже поискать в группе или на LinkedIn/Blind, но у вас должно быть прорешено определенное количество задач. И пожалуйста, если будете присоединяться в группу — прочитайте сначала закрепленные сообщения, правила и начните с доки, вы найдете там ответы на большую часть ваших вопросов, не стоит сразу писать в чат, а с чего же стоит начать и что делать.

Подготовка резюме

Очень важно подготовить резюме и уместить все ваши достижения на максимум 2 страницы, а лучше 1.5, никто не будет читать ваши 15 страниц жизни, начиная с первого приложения «Hello World!». Резюме нужно оформить в формате goals and achievements, а не списком технологий. Почитать можно тут, шаблон взять отсюда. Еще хорошие шаблоны тут. В телеге в этом канале можно попросить ребят поревьюить ваше резюме. И тут сейчас будет мой факап, у нас проблемы Хьюстон! Я опечаталась в своем email при первой подаче через реферала, ситуация смешная и одновременно страшная. Вывод: всегда внимательно проверяйте контакты (раз 5) и дайте кому-то почитать перед отправкой.

Google

Язык: Python

Оценка процесса интервью: 10 из 10

Я подавалась по формочке и меня рассмотрели. Реферала я нашла уже потом и попросилась подкрепить мой application.

Phone screen

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

Onsite

Моей ошибкой было назначить все 5 этапов в 1 день, это тяжело, вы не успеваете выдохнуть, а перерывы 15–30 минут. На этапе онсайта у меня уже было 350 задач. Перед интервью я выписала топ 100 задач, по 2 строчки на каждую с общей идеей решения.

fb284776f2a10e99ab2e536f877bb86e.jpeg

1 собеседование — System Design

Я распереживалась и сначала начала рассказывать не в том направлении, что ожидал интервьюер, но потом собралась и уже двигалась в правильную сторону. Задача была про внедрении стороннего сервиса c REST API в систему, который по эндпоинту возвращает true/false блокировать или нет ресурс для пользователя по IP. Сначала начала рисовать это в гугл доке, но это только меня тормозило, переключилась просто на текст и описывала систему в top-down или left-to-right в виде. В духе, client → L3 → L7 → server. Интервьюер спрашивал про точки отказа, успели поговорить про них, варианты кеширования, rate limiting, middleware и много всего.

2 собеседование — Coding

Была задача — вариация c consecutive subarray. Как решать сообразила быстро, написала решение, по ходу проверки разных тест кейсов поправляла код. Фидбек был, что я долго писала реализацию и с багами, хотя очень быстро сообразила, как решать.

3 собеседование — Behavioral

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

4 собеседование — Coding

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

5 собеседование — Coding

Была задача на граф с follow up условиями, решала через BFS, немного провозилась с follow up в конце. Правильно сказала time и space complexity, этот кодинг прошел хорошо.

Summary

По фидбеку в общем рекрутер сказала, что у меня нет каких-то больших пробелов или совсем плохого кодинга. Просто есть моменты, над которыми надо поработать и можно попробовать еще раз через 6 месяцев. Насколько я поняла, cooling period зависит напрямую от результата онсайта, если вы не решите вообще какую-то задачу, то будет 12 месяцев. Впечатление от всего процесса очень положительное, интервьюеры были хорошие ребята и никто не пытается тебя завалить, нет какой-то давящей обстановки, учитывая, что ты и так нервничаешь, это очень важно. Перед онсайтом можно сходить на Champion Call — 15 минутная встреча, где можно задать интересующие вас вопросы, я на такой ходила.

А как оно там в Яндексе? Отличается от Google?

Да, если брать по моим ощущениям, то это 30% сложности от Google (тут говорю за службу, в которой я работала). Вы сами понимаете, что отбор в Google — это x20 от Яндекса, если не больше. Этапов с кодингом тоже 5 (4 онсайта и phone screen), НО если вы идете на js, то вас будут спрашивать js специфичные задачи (каррирование, замыкания, глубокую копию объекта, что-нибудь может про идемпотентность запросов). Алгоритмическая секция это easy/medium задачи, в основном массивы, списки, строки и баянистые задачи на стек, вряд ли вас вообще спросят про графы, балансировку 2 хипами, trie и уж тем более задачи RMQ. Это отличается, конечно, от того, куда вы идете и на какую позицию, но это все равно легче. Для ребят, которые идут на C++ или ML инженера с алгоритмами дела обстоят иначе.

Amazon

Язык: Python

Оценка процесса интервью: 7 из 10

Тут все прозаически эпично. Я завалила online assessment, было 2 задачи на 45 минут и 15 минут на Leadership Principles. Одна из задач была (как я уже поняла потом) на 2 heaps (похоже на решение задачи с data stream), я пыталась решить через DP, тест кейсы не проходили, я уже подумала загуглить ее, но времени оставалось мало и я не успела по кодингу, до Leadership Principles даже не дошла. Мне лично непонятно, зачем давать hard задачу на online assessment, если вы ее не знаете и нет подсказки от интервьюера — то можете отвалиться по времени. Но как оказалось, можно написать текстом ход мыслей, если вы не успеваете, но я этого не знала.

Gitlab

Язык/фреймворк: js, vue

Оценка процесса интервью: 10 из 10

Рекрутер на LinkedIn написал и предложил пройти собеседование, я прошла 5 этапов, но оффер не получила. Совсем другой подход к интервью, меня не спрашивали ни одной алгоритмической задачи. Вам дают поревьюить пулл-риквест и оставить в нем комментарии, на собеседовании вы обсуждаете эти улучшения и вас попросят их заимплементить и это единственный прям технический этап. Остальные этапы были про опыт, поговорить, behavioral вопросы. Сам процесс мне очень понравился и это, правда, одно из интересных и лучших собеседований, что у меня были. Развернутый фидбек мне дали на звонке, по технической части не было каких-то замечаний, рекрутер сказал, что все прошло хорошо и я одна из 5, кто вроде как дошел до финального этапа, просто другой кандидат им понравился больше и лучше подходил. И за обратную связь просто +1000 в карму. Gitlab молодцы.

Stripe

Язык: Python на секции по бекенду, React на фронтенд. Можете выбрать любой.

Оценка процесса интервью: 5 из 10 (заявочка на победу — меня 2 раза прособеседовали по бекенд секции, такой вот форс мажор)

Подавалась по формочке и собеседовалась на fullstack. Тут все очень интересно, я до конца так и не поняла сколько у них этапов, но вроде 4. Меня реджектнули на 2 (формально на 3) — frontend секции. Секция бекенд — это алгоритмическая задача, но тут смотрят на то, как ты проверяешь свой код и какие тест-кейсы пишешь, а не на то, правильно ли ты подсчитал time complexity. У задачи есть расширенный follow up.

1 собеседование — Coding

Задача была easy/medium уровня на hashmap, но условие задачи там (без примеров) не помещалось мне в экран. На входе была мапа соседей, у которых по ключу список по приоритетности домов других соседей, с кем бы они они хотели свапнуться. Нужно было сначала найти могут ли соседи A и B поменяться домами (приоритет обмена должен быть одинаковый), потому найти какие связи мы ломаем/добавляем если, например, для соседа A меняем приоритет обмена домами. Сама задача несложная, но условие витиеватое было и запутанное, как мне показалось. Этот этап я прошла.

2 собеседование — Coding

Тут у меня должна была быть frontend секция, так как я подавалась на fullstack, но что-то пошло не так, это перепутали и мне снова провели собеседование по задачам. Задача была на парсинг accept-language header. Прошло неплохо, но ко мне вернулся рекрутер и сказал, что они случайно перепутали секции, лол кек.

3 собеседование — Designing UI Component

По фронтенду задача заключалась в имплементации masked input для телефона и тут в момент собеседования мне пришлось ребутать мак, потому что из-за шаринга экрана и зума у меня жралось CPU, как не в себя и я нормально не могла писать код. Делала компонент на React с кастомным хуком — useMaskedInput, который бы принимал маску/формат и значение, где по слотам для вставки digit — вставлялась бы нужная цифра. Такой же подход, как и в блоге у ребят из Тинькофф. На этом этапе меня реджектнули, развернутого фидбека не дали, что пошло не так, кроме моих проблем с компом — не знаю) Видимо что-то не понравилось интервьюеру.

Впечатления от процесса 50/50, если бы не этот форс мажор с двойной секцией, то в целом сами собеседования и процесс неплохо выстроен, но обидно, что развернутого фидбека не дали, просто общий темплейт отказа на email, а ведь потрачено на компанию было 3+ часа времени.

Ebay

Язык: js

Оценка процесса интервью: 10 из 10

К сожалению, подписывала NDA и осветить весь процесс не могу, подавалась через их careers site. Собеседовалась в 2 команды, процесс очень отличается. Впечатления по процессу собеседования в одну команду весьма положительные, очень хорошие ребята и вопросы интересные, во второй команде 50/50. Если вы готовитесь так или иначе в FAANG, то 100% можете податься.

Немного советов:

  1. Фидбек и мнение. Во-первых, не весь фидбек конструктивен и всегда найдется человек, который думает, что он эксперт во всем и его мнение непременно самое правильное и важное и вам очень нужно это знать. Пример: у одного из моих технических лидов в команде была психологическая травма и просто чуть ли не панические атаки при слове «аутсорс». Он считал, что аутсорс, цитирую: «неправильно воспитывает людей и нормально разработке они там не научатся». Иногда чье-то мнение, это просто мнение, не имеющее ничего общего с реальностью, так что если вам скажут, что что-то тяжело/не потянете/мало лет воспринимайте это соответственно. Конструктивный фидбек — это другое, в моем случае я завалила бихейв в Google — и тут есть над чем поработать.

  2. Готовится придется долго и вам нужно расставить приоритеты и решить, чего вы действительно хотите, будет обидно, если вы бросите все на полпути.

  3. Разбейте онсайт на 2 дня, если есть такая возможность. Спустя 3–4 собеседования вы устанете, лучше пусть это будет 2 дня, чем вы завалите последний этап интервью.

  4. Решайте задачи, пробуйте писать код в гугл доке/на листике/доске. Практикуйтесь — это залог успеха. И удачи!

А что с офферами?

В этой статье хотелось осветить процесс подготовки и ошибки, а также впечатления от процесса найма в крупные компании. Некоторые компании не включила, например Facebook, потому я все еще жду от них ответа. Я получила оффер в Ebay и компанию в составе Shell Group. Про переезд и куда я в итоге пошла will keep you posted, сейчас на этапе сбора чемоданов. Всем успехов и удачи на собеседованиях!

Ссылки и материалы

  1. Группа по подготовке в FAANG и док сообщества

  2. Группа по ревью резюме

  3. Блог Ларисы Агарковой и ее хороший гайд по подготовке, можно еще интервью посмотреть

  4. Ютуб-канал Tuchar Roy

  5. Курс по System Design

  6. Курс по Advanced System Design

  7. Курс Patterns for Coding Questions

  8. Книга Alex Xu, System Design Interview

  9. Книга Designing Data-Intensive Applications

  10. Книга Cracking The Coding Interview

© Habrahabr.ru