DEV Community

faangmaster
faangmaster

Posted on

Как подготовиться к собеседованию в FAANG/Big Tech

Введение

Вы решили пройти собеседование в FAANG (Facebook, Apple, Amazon, Netflix, Google), около FAANG компанию (Microsoft, Twitter, Uber, Lyft) или топовый хэдж фонд типа Two Sigma, Jane Street, Citadel.

Из каких этапов состоит собеседование в FAANG?

  • Отклик на вакансию и подача резюме.
  • Созвон с рекрутером.
  • Phone Screen/Tech Screen/Online Assessment(OA).
  • Full Loop. Состоит из 4-6 собеседований. Каждое по 45 минут. В них входит: coding (решение алгоритмических задач), system design и поведенческое собеседование.
  • Получение офера.

Для примера, вот так выглядят этапы собеседований в Facebook:

  • Подача резюме
  • Созвон на 15 минут с рекрутером
  • Phone Screen. 45-минутное собеседование на coding. Состоит из решения 2-х алгоритмических задач c интервьюером.
  • Full Loop. 4 собеседования по 45 минут. 2 coding собеседования, такие же как и Phone Screen, 1 поведенческое собеседование, 1 system design собеседование. Если вы подаетесь на позицию Staff Software Engineer, то будет 2 system design собеседования.

И в Amazon:

  • Подача резюме
  • Созвон на 15 минут с рекрутером
  • Online Assessment (OA): вам пришлют ссылку с алгоритмическими задачами, которые нужно решить за ограниченное время. Обычно это две задачи. Решение задач происходит в автоматизированной системе без участия интервьюера.
  • Phone Screen[Optional]. Если задачи на OA были решены не полностью, вас могут либо зареджектить, либо пригласить на Phone Screen. Если задачи решены правильно, вас пригласят сразу на Full Loop. На Phone Screen вам нужно будет решить одну алгоритмическую задачу с интервьюером, а также ответить на вопросы по одному из [Amazon Leadership Principles].(https://www.amazon.jobs/content/en/our-workplace/leadership-principles).
  • Full Loop. 3 coding + LP собеседования. Каждое собеседование по 45 минут, на котором нужно решить одну алгоритмическую задачу и спросят про один из Amazon Leadership Principles. И одно system design + LP собеседование. Где вас спросят сделать дизайн системы и по одному из Amazon Leadership Principles.

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

Английский

Чтобы пройти собеседование в FAANG/Big Tech, знание английского обязательно. Важно не только знать грамматику, но и уметь на нём говорить. Я бы сказал, что разговорная часть намного важнее письменной. Причем разговорный английский важен не на произвольные темы, такие как то, что я ел сегодня на завтрак, а на технические темы — умение вести техническую дискуссию.
Минимальный необходимый уровень, я бы сказал, это B2 (Upper - Intermediate)/C1 (Advanced).

Как я учил английский и какие советы бы дал?

  • Чтобы улучшить словарный запас и научиться думать на технические темы на английском, я перешел на чтение технической литературы и документации исключительно на английском. Это позволит вам сразу мыслить на английском и не переводить термины с русского на английский во время собеседования. Я читал книги по алгоритмам и system design только на английском, а также проходил курсы и смотрел обучающие видео исключительно на английском.
  • Для прокачки разговорного языка я использовал онлайн-сервисы, где можно за деньги созваниваться с носителем и разговаривать на любые темы. В том числе я нашел человека с IT-бэкграундом и обсуждал с ним технические темы. Буквально 10–20 таких уроков значительно улучшили мои навыки разговорного языка. Я пользовался сервисом https://www.italki.com/, но думаю, есть и другие подобные платформы.
  • Для прокачки грамматики я использовал книги "Macmillan English Grammar in Context". Они есть для всех уровней.

Резюме

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

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

На что стоит обратить внимание при написании резюме?

  • Оно должно легко парситься. Желательно делать очень простую и понятную структуру. Не надо всякие сайд бары, фотографии, ворд-арты и т.д. ФИО, контактная информация, саммари, скилы, Job History, Education.
  • Делайте его коротким. 1-2 страницы достаточно. Если у вас меньше 10 лет опыта, не надо писать 2-3 страницы ваших хобби, пет проектов, похвальных листов от бабушки и т.д. Сделайте 1 страничку. Люди не будут долго вчитываться в ваше резюме. Это секунды или пара минут на просмотр. Обратят внимание на ключевые слова: список работодателей и должностей и название универа и специальность.
  • Список работодателей, должностей, название универа, специальность и степень (бакалавр, магистр) должны легко и за несколько секунд считываться при беглом просмотре. Это, вообще, ключевые параметры, которые влияют на выбор вашего резюме. Эта информация должна легко считываться.
  • Делайте упор на последние ~5 лет. Если вы учились в универе 15 лет назад, то просто укажите название, степень, специальность и годы. Не надо расписывать детали. Если вы только закончили универ, то можно уделить этому больше текста, описать темы дипломов, проекты, достижения, если они релевантны вакансии. Если у вас 20 лет опыта, более детально опишите достижения за последние лет 5, остальное очень коротко.
  • Пишите результаты и достижения, а не обязанности. При описании Job History, пишите название компании, должность, команду или отдел и ключевые достижения, релевантные вакансии. Сделал то-то с таким-то импактом. Если вы аплаитесь на Senior, то должны быть проекты, которые вы бы лидили и были ваши контрибьюшены в роудмап, планирование и менторинг. Если на Staff, как вы лидили команду из 8-10 человек, драйвили роудмап, лидили проекты с крос тим или крос орг импактом. Не пишите текст, вроде работал работу, писал код, ходил на митинги. Это очевидно и занимает место в резюме. Нужно писать ваши результаты и чтобы эти результаты соответствовали требованиям вакансии.
  • Не пишите нерелевантные хобби, без существенных достижений. Не надо писать, что вы любите музыку, путешествия и вкусно покушать. Какой у вас любимый цветок и кто вы по знаку зодиака. Но если у вас есть существенные достижения, хоть они и нерелевантные, то указать их стоит. Например, вы участвовали в олимпиаде(по брейкдансу, по бегу), пробежали марафон, поднялись на эверест, стали гроссмейстером по шахматам. Хоть это все не релевантно, это будет говорить про вашу одаренность и способность к наивысшим достижениям. Релевантные хобби я бы писал, только при существенных результатах. Писать, что-то типа, люблю программировать или читать книги по программированию в свободное время, смысла нет. А вот если вы достигли результатов на всемирно известных хакатонах, конкурсах проектов, олимпиадном программировании, написали книгу, выступали на конференциях, контрибьютили в open source и т.д. То это указать имеет смысл.
  • Сделайте ваше основное резюме, и кастомизируйте его под вакансию. Для каждой вакансии, сделайте копию вашего резюме и немного доработайте его под вакансию. Пройдитесь по требованиям вакансии и убедитесь, что у вас на все/большинство пунктов есть что-то в резюме: в достижениях в рамках работы, в скилах, в образовании и т.д.
  • Имейте профиль на linkedin и держите его актуальным. В России это не нужно, но если вы хотите работать в зарубежных компаниях, то это обязательно. Также укажите его в контактных данных в резюме. Есть шанс, что вам сам на linkedin напишет рекрутер из FAANG, если его заинтересует ваш профиль или у вас много контактов из FAANG.

Почему нужно писать именно достижения, а не должностные обязанности или список проектов ?

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

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

Как писать достижения?
Прежде чем описывать свои достижения, ознакомьтесь с методикой STAR. Она используется в том числе и на самом собеседовании (в поведенческой его части). Такой же подход можно применять на performance review в рамках вашей компании для оценки производительности сотрудников.
Если кратко, то вам нужно описать контекст проекта и в чем была его сложность. В чем была цель, что сделали именно вы для ее достижения и какой получился результат.

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

Например,

Вместо: Занимался баг фиксами
Для Junior/Mid: Используя профилирование памяти, обнаружил утечку памяти, которая оставалась незамеченной в течение двух месяцев в продакшене. Предложил и реализовал способ её устранения с использованием XXX, что привело к увеличению пропускной способности приложения на 30%. Также предложил и реализовал YYY для предотвращения подобных проблем в будущем, а также создал метрики и алармы для их быстрого обнаружения.
Senior/Staff: Работал с инженерами из нескольких команд, чтобы выявить блокеры, которые снижают эффективность при работе над высокоприоритетными задачами саппорта, которые влияют на SLA/SLO ключевых компонент приложения. Предложил и драйвил реализацию XXX, что сократило время обнаружения и устранения проблем на N% в 4 командах.

Вместо: Принимал участие в напиcании кода, code review и дизайне.
Junior/Mid: Реализовал в составе команды из 4 человек функцию сортировки магазинов по удаленности от покупателя, которой пользуются 15 миллионов пользователей в месяц.
Senior/Staff: Предложил, сделал дизайн/архитектуру и драйвил реализацию командой из 4 человек функцию сортировки магазинов по удаленности от покупателя, которой пользуются 15 миллионов пользователей в месяц.

Подача резюме

  • Больше всего шансов, что вы попадете на собеседование - если вам напишет сам рекрутер. Поэтому нужно иметь актуальный профиль в linkedin. По каким критериям он вас отберет? Это список работодателей, образование, контакты, которые уже работают в компании. Шансы большие, что это произойдет, если у вас образование в топ-10 вузе вашей страны или у вас есть работодатели из топ-10 вашей страны в IT-сфере или у вас есть контакты, с которыми вы раньше вместе работали в одной компании, а потом этот контакт попал в FAANG/Big Tech, в которую вы собеседуетесь. Или же вы учились в одном вузе. Например, вы учились в МФТИ, МГУ, Бауманке, МИФИ, ИТМО, Спбгу и т.д. Или вы работали или работаете в Яндексе, Mail ru, JetBrains, Сбертехе, Авито, Тинькове и т.д. Или у вас есть контакты, которые работали или учились там где вы, а потом они попали в FAANG.
  • Также, чтобы увеличить шансы попасть на собеседование, можно подать заявку через реферала. Если у вас есть знакомый, который уже работает в компании, вы можете попросить его подать ваше резюме. В этом случае оно будет рассмотрено в приоритетном порядке, и у вас будет больше шансов получить приглашение на собеседование.
  • Подать заявку самому. Для этого заходим на официальный сайт карьеры компании, находим подходящую вакансию и подаем резюме. Например: https://www.amazon.jobs/en/, https://www.metacareers.com/, https://www.google.com/about/careers/applications/. Для повышения шансов, что вас пригласят на собеседование, смотрите мои рекомендации по написанию резюме в прошлой главе.

Как подготовиться к алгоритмической части собеседования?

Умение решать алгоритмические задачи является минимальным необходимым условием для прохождения собеседования на позицию разработчика. Однако это условие не является достаточным, поскольку есть еще system design и поведенческое собеседование.

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

Advanced уровень.

Вы уже работаете в FAANG и хотите попасть в другую компанию (из Amazon или Microsoft в Google или Facebook, например), или, скажем, в Яндексе и уже умеете решать на хорошем уровне алгоритмические задачи. Или вы не работаете в этих компаниях, но вы топовый олимпиадник по программированию (не просто участвовали, но были в призах/победителях крупных соревнований).

В таком случае идем на Leetcode, отфильтровуем задачи по компании, в которую вы хотите попасть (скажем Google или Facebook), сортируем по частоте встречаемости и решаем первые 50-100 задач. При вашем уровне подготовки это займет 20-100 часов подготовки. Посмотрите также мои рекомендации: Почему решив 1500 задач на leetcode вы не сможете получить офер в FAANG, Как решать алгоритмические задачи на подготовке, чтобы это было эффективно

Intermediate

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

Подготовка:

Берем книгу Cracking the Coding Interview by Gayle Laakmann McDowell.

Берем только нужные главы (Какие главы из Cracking the Coding Interview нужно изучить для прохождения алгоритмического собеседования?) Для начала можно даже еще пару глав на сложные темы исключить (Chapter 8. Recursion and Dynamic Programming и Chapter 17. Hard.).

Т.е. взять главы:
Chapter 1. Arrays and Strings
Chapter 2. Linked Lists.
Chapter 3. Stacks and Queues.
Chapter 4. Trees and Graphs.
Chapter 10. Sorting and Searching
Chapter 16. Moderate

В начале каждой темы приведены алгоритмы, которые нужно знать наизусть и потом приведены задачи и решения к ним. Стоит начать с запоминания и понимания работы алгоритмов. Попробуйте выписать эти алгоритмы на бумажке без использования подсказок. Делайте это до тех пор, пока у вас это не будет получаться на автомате за пару минут. Далее смотрите задачи. Попробуйте сначала решить задачу сами. Если не смогли решить за 1-2 часа, изучайте решение до тех пор, пока не сможете сами, без подсказок, написать решение.

Смотри также мои статьи:

В этих 6 главах, где-то 70-80 задач. На изучение и запоминание теории к каждой главе + самостоятельное решение задач + разбор правильного решения и запоминание уйдет при вашей подготовке где-то ~250 часов. После перейти к изучению Главы 8. На что уйдет еще где-то ~50 часов. В сумме где-то ~300 часов. Я не утверждаю, что этот подход единственный, но лично я им воспользовался. На изучение этой книги до состояния, что я могу за 5 минут написать на бумажке стандартный алгоритм без ошибок и подсказок, а также решить за 15-30 минут задачи из этих глав у меня ушел 1 год (параллельно с работой). Чем хороша эта книга - в теории нет ничего лишнего, только все самое необходимое. А также очень детально разобраны решения, с несколькими вариантами решения и описанием хода мысли, как к этим решениям прийти. Если сразу перейти на Leetcode, то без должной подготовки до этого, вы будете просто терять свое время.

Решаем задачи на https://www.algoexpert.io/.
На данный момент там ~200 задач с очень подробным разбором решения в формате видео. Я бы сказал, что это Cracking the Coding Interview только в online формате с возможностью сабмита своих решений и их проверки. Вам не обязательно решать все 200 задач. Можно выбрать только конкретные темы, которые вы хотите прокачать. Или решать задачи выборочно, какой-то процент задач по нужным вам темам. Например, мне это помогло прокачать динамическое программирование, задачи на деревья и графы. Если скажем вы решите и разберете 50-100 задач с этой платформы, то у вас это займет ~100-200 часов.

Переходим на Leetcode.
Нужно начать с easy задач для того, чтобы освоится на платформе. Но я не рекомендую решать очень много таких задач, это будет просто бесполезная трата времени. Решите не более 100 easy задач. Можно воспользоваться моей подборкой (Подборка из easy задач для начала подготовки к алгоритмическому собеседованию.) Далее, переходим уже более предметно на темы, которые вы хотите прокачать и потренировать. Начинайте с easy задач на нужную вам тему и постепенно, переходите на medium задачи. Делайте упор на решении именно medium задач. Смотрите мою подборку Сбалансированная подборка из 100 задач для подготовки к алгоритмическому собеседованию. Можно решить таким образом ~200 задач, из которых около половины или чуть больше это medium задачи. На это уйдет ~200 часов.

Итого у вас это займет: 600-700 часов до уровня Advanced + 100 часов на финальную подготовку (прицельная подготовка в компанию). В сумме вы решите ~500 задач на трех платформах (300 на Leetcode, 100 на algoexpert и 100 из книги Cracking the Coding Interview). Итого: 800-900 часов.

Beginner

Вы знаете какой-то язык программирования на уровне достаточном, чтобы решать алгоритмические задачи. Смотри, например, Шпаргалка по Java для алгоритмического собеседования. Но вы плохо себе представляете, что такое структуры данных и алгоритмы. Никогда их не изучали ни в каком виде.

Тогда перед шагами описанными в части для Intermediate уровня, вам нужно изучить структуры данных на самом базовом уровне. Тут есть много вариантов. Если вы студент, возможно у вас в Университете есть какой-то курс. Если нет, можете найти курс по структурам данных и алгоритмов для начинающих. Где расскажут, про самые базовые вещи. Без сложных алгоритмов и сложных задач.

Курсы:

  1. https://www.designgurus.io/course/grokking-data-structures-for-coding-interviews
    Он подходит полным новичкам, но он на английском.

  2. Также, если вы в любом случае планируете пользоваться https://www.algoexpert.io/. Там есть краткий курс по структурам данных в виде серии видео: https://www.algoexpert.io/data-structures/

Книги:

  1. Для новичков рекомендую: Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (В переводе на русский: Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих | Бхаргава Адитья)

  2. Если у вас много времени, то можно почитать Структуры данных и алгоритмы в Java | Лафоре Роберт. Но там будет много лишней информации и сложной для новичка. Я прочитал эту книгу, но далеко не все там полезно. Для новичка я бы только запоминал основы. Что такое массив, строка, список, стек, очередь, хэш таблица, куча, множество, дерево, граф. Как они работают, как их можно реализовать и т.д. В детали можно сильно не уходить.

На овладение основами, вам потребуется еще ~100 часов. Тогда в сумме с уровня, когда вы вообще ничего не знаете про структуры данных, до собеседования в FAANG вам потребуется ~900-1000 часов обучения.

Читать сложные книги, вроде:

  1. Алгоритмы: построение и анализ (Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн.)
  2. Алгоритмы (Роберт Седжвик)

Я бы не рекомендовал новичкам и тем, кто не планирует начать карьеру в олимпиадном программировании или заниматься наукой в области Computer Science. Они сложны, очень объемны и вы потратите колосальное время на изучение этих книг. Для прохождения собеседования есть и более короткий путь. Если же вы школьник или студент и у вас есть много времени и интереса к программированию, можете использовать эти книги.

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

Подготовка к System Design Interview

Express подготовка для Advanced уровня

У вас есть месяц для подготовки, и вы более или менее разбираетесь или имели опыт в построении высоконагруженных систем, то просто проходим курс:
https://www.designgurus.io/course-play/grokking-the-system-design-interview

или

Если у вас есть немного больше времени, но вы все еще более-менее представляете, как устроены высоконагруженные системы, пройдите похожий, но более расширенный курс:
https://www.educative.io/courses/grokking-modern-system-design-interview-for-engineers-managers

Intermediate подготовка

Эти два ресурса очень похожи на предыдущие, но они представлены в другом формате и проще в восприятии. Однако они могут содержать не исчерпывающую или не самую актуальную информацию, необходимую для прохождения собеседования по System Design. Поэтому, если у вас достаточно времени, я бы рекомендовал начать с одного из этих ресурсов и дополнить его одним из вышеуказанных.

Очень похожий курс, на предыдущие, только в видео формате на английском: https://www.algoexpert.io/systems/product
В таком виде позволит вам еще прокачать английский в контексте System Design собеседований. Более того, в формате видео, материал подается проще и понятней. Но я бы проходил его не вместо двух предыдущих, а в дополнение (сначала этот а потом один из вышеперечисленных).

или

Книги System Design Interview – An Insider's Guide, автор Alex Xu. Тоже очень похожий курс на три предыдущих, но в формате книги.

Beginner

Это для тех, кто не в зуб ногой про архитектуру, system design, высоконагруженные системы, но кто хочет освоить эти темы и у кого есть много времени на полноценное освоение темы.

Книги:

  • Clean Architecture: A Craftsman's Guide to Software Structure and Design, автор Robert C. Martin
  • Building Microservices, автор Sam Newman
  • Designing Data-Intensive Applications, автор Martin Kleppmann. Книга сложная, но прокачает ваше понимание в архитектуре и сложных концепциях устройства высоконагруженных систем невероятно.

Есть еще куча полезных книг, в том числе по SOA, Domain Driven design и т.д. Но прочтение этих трех книг прокачает ваши скилы очень сильно.

Подготовка к Поведенческому собеседованию

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

  • Ваш самый сложный проект (технически и/или организационно, с точки зрения leadrship).
  • Ситуация, когда у вас был конфликт с менеджером или коллегами и как вы его разрешили. Понятное дело, что конфликт должен быть не личным, а по работе. Разные мнения по поводу кода, дизайна, архитектуры, организации. Проблемы в коммуникации между командами или отделами и т.д. И конфликт и его решение должно соотвествовать вашему уровню.
  • Примеры, как вы создавали direction в команде/орге, если на позиции senior/staff+, как драйвили roadmap, планирование и т.д.

В Amazon спрашивают ситуации, когда вы проявили тот или иной Amazon Leadership Principles. Поэтому надо подобрать истории, где вы их проявляли на нужном уровне.

Top comments (0)