Процесс начался с подачи резюме на интересующую меня позицию вместе с рефералкой. Через какое-то время мне ответил рекрутер с предложением начать процесс собеседования и попросил предоставить мое availability для первого этапа (PS). Также он высокоуровнево описал вообще все этапы и что примерно ожидается на конкретно первом - будет предложено минимум 2 задачи на алгоритмы и на решение дается приблизительно 30-35 минут. И такой формат сохраниться для кодингов и на онсайте. Что касается сложности и вообще флоу алгоритмических секций в Meta, то я много где я слышал и читал о том, что там даются задачи в основном несложные и очень похожие на те, что есть в company-tagged списках на литкоде. После прохождения кодинг этапов могу сказать, что в целом это правда. Однако сложность задач компенсируется конкретной такой нехваткой времени на собеседовании. У тебя есть буквально до 15-18 минут на одну задачу. За это время нужно не просто написать код, но пройти все этапы: прояснить все requirements и constraints, придумать решение, прогнать его на тест кейсах и объяснить интервьюеру, оценить алгоритмическую сложность, написать код и сделать верификацию. В моем случае, выбранный язык еще немного усложнил все - я писал код на Java. Это влияет, потому что одинаковые вещи написать на разных языках занимает разное время и желательно выбирать простой язык. Также надо учитывать, что на кодинг интервью не будет автокомплитов или линтеров, и здесь моя рекомендация заранее учиться писать код без подсказок. Я вначале писал код в IDE, а потом перешел только в leetcode editor, и это очень хорошо бустит скорость для интервью. В общем, времени на собеседовании очень мало, и по моему сугубо личному ощущению, если в течение 5-7 минут решение в голову не пришло вообще никакое, то скорее всего сделать все до конца не получится, не хватит времени.
Итак, наступает первый день X вместе с PS, поставленным в середине дня, что оказалось совершенно неудобно. По моему мнению, лучше всего ставить собеседования по возможности утром, так как в это время ты еще не погрузился в рабочие задачи. И далее все собеседования я ставил именно утром. Также здесь упомяну, что Meta использует для проведения интервью. Код пишется в CoderPad, обычно интервьюер разрешает включить подсветку синтаксиса, что хоть чуть-чуть упрощает жизнь. Сам звонок организуется через Zoom. В целом, имеет смысл хотя бы ознакомиться с редактором кода перед интервью, чтобы немного снизить стресс. Во время созвона интервьюер сразу вставил в CoderPad условие первой задачи. Это было несложная задача на массив почти полностью взятая с литкода, но с модифицированными constraints, что слегка изменило решение. Во время верификации своего кода на одном из тест кейсов, я обнаружил баг. Это считается хорошей практикой, когда ты самостоятельно обнаруживаешь баги у себя в коде и исправляешь (хотя конечно лучше их вообще не делать). И это как раз пример почему важно делать проверку кода даже когда абсолютно уверен, что все работает. Интервьюеры оценивают как проактивно кандидат это делает и если окажется, что ему придется дать тебе хинт, то это будет минус. Я также советую брать на тесты не только то, что предоставил интервьюер в качестве примера, но и придумывать свои тест кейсы, так легче найти вероятный баг. Для второй задачи сходу решение в голову не пришло. В задаче был дан массив чисел, в котором по определенным условиям нужно было найти и вернуть subarray. Здесь хотел бы еще раз подчеркнуть, что очень важно уточнять все constraints у интервьюера, и не предполагать что-либо самостоятельно. Например, эта задача в зависимости от них решалась абсолютно по-разному (в одном случае линейное время, а в другом квадратичное).
После обсуждения решения, получилось быстро написать для него код, уже без багов. Очень скоро после интервью я получил письмо с положительным фидбеком и предложение созвониться и поговорить насчет следующего этапа.
Засетапить онсайт я решил чуть меньше чем через месяц после PS. Я решил разделить все на два дня, хотя конечно есть возможность пройти и за один, и за четыре. Для себя я решил, что мне проще немного растянуть, так как с одной стороны в случае фрустрации на одном из этапов, можно будет отойти от этого, и на этапы на следующий день это не повлияет, а с другой стороны ты не растягиваешь себе стресс на почти целую неделю. Сам онсайт состоит из стандартных 4 интервью - 2 кодинга интервью, 1 поведенческое и 1 систем дизайн. Из всех этих для меня самым стрессовым был систем дизайн. До этого я ни разу не проходил таких собеседований, и именно на него я решил выделить максимальное количество времени. Что касается подготовки, то я каждый день старался решать хотя бы 3-4 литкод задачи, чтобы поддерживать форму и быть готовым к кодингу, и все остальное время уделять систем дизайну. К нему я готовился с помощью этих двух каналов - https://www.youtube.com/@jordanhasnolife5163 и https://www.youtube.com/@hello_interview. Отдельно отмечу Hello Interview. Там представлен хороший фреймворк для систем дизайна, по которому желательно строить флоу на собеседовании. Например, в материалах для подготовки, которые мне предложили в Meta, рекомендуется использовать именно такой фреймворк. Также на моках с инженерами из Meta мне советовали следовать именно ему. Учитывая, насколько систем дизайны расплывчаты, наличие плана значительно помогает не запутаться и понимать, что делать. И кстати, насчет моков, они очень важны и нужны для всех видов собеседований, поскольку на них можно оценить насколько ты действительно готов и как поведешь себя на настоящем интервью. Плюс на них можно получить ценный фидбек и взгляд со стороны. Я брал моки на interviewing.io и мне в целом все понравилось.
Далее немного про поведенческое собеседование. Во время подготовки на него часто получается уделять наименьшее количество времени, но оно очень важно и по сути оно (наряду с систем дизайном) определяет уровень на который кандидат будет определяться. Для подготовки к нему я составил список самых популярных вопросов которые ожидаются, прошерстил что обычно спрашивают в Meta, и написал в Google Docs ответы на них по STAR формату (именно его Meta рекомендует использовать для ответов). Желательно также научиться рассказывать эти ответы в рамках определенного времени, чтобы добиться того, что и раскрыто все, и заняло это вменяемое время. Я обычно стараюсь уложиться до 4 минут для ответа по STAR формату. Еще во время подготовки мне неплохо помогла глава про поведенческое собеседование в книге Beyond cracking the coding interview, поэтому советую с ней ознакомиться. Она мне раскрыла простую вещь: по сути все сводиться к тому, чтобы предоставить интервьюеру сигналы в своих ответах, и его вопрос определяет какие именно сигналы он хочет услышать.
Он был с сюрпризами. Во-первых было два человека на самом интервью - один из них был в shadow моде и как-бы по сути не участвовал в процессе, но вначале это все равно заставляет немного больше стрессовать. Во-вторых меня попросили выключить фильтры на камере (у меня был background blur включен), и все интервью вести демонстрацию экрана. Вроде и мелочь, и понятно зачем это делается, но все же об этом не было написано где-то в доках, что мне дал рекрутер, так что это было неожиданно. Первая задача была на балансирование скобок в строке, а вторая на написание своей реализации одной из математический функций из стандартных библиотек. Вот тут отмечу момент, что есть задачи, которые решаются рекурсивно и итеративно. За время подготовки к кодингу я уяснил, что в таком случае Meta приоритезирует именно итеративное решение, так что лучше смотреть решения в итеративных формах.
После подготовки все оказалось довольно шаблонно. Вопросы стандартные - most challenging task, working with a difficult person, и т.д. Иногда интервьюер уточнял какие-то моменты, но без пушинга.
Здесь первая задача была на бинарные деревья и вторая достаточно интересная на рандомный выбор элемента из массива по определенным правилам.
В целом на обоих кодинг собеседованиях я успевал проходить полный флоу, но по времени было прямо до упора. На одном из них я смог только вербально упомянуть более оптимизированное решение, но не успел написать код. Вообще, к кодингу мне очень помогли подготовиться два канала - https://www.youtube.com/@NeetCode (здесь есть целая роадмапа какие задачи решать и в каком порядке, помогает все систематизировать) и https://www.youtube.com/@CodingWithMinmer (здесь есть варианты задач с литкода, которые спрашивают на собеседованиях)
Meta использует Excalidraw для проведения систем дизайна. Перед интервью очень полезно ознакомиться с программой, а еще лучше изучить и запомнить горячие клавиши, чтобы фокусироваться на самом дизайне, и не тратить время на то, чтобы найти, как нарисовать тот или иной квадрат. Плюс во время подготовки я старался все дизайны там рисовать. Еще момент, в Meta есть два вида систем дизайна - System Design и Product Architecture. Обычно разницу между ними описывают как-то так: в SD больше упор на бекенд (scalability, reliability), а в PA - больше про API, модели и схемы данных. Также теоретически еще от него зависит какого типа будет задача (для SD возможны больше infra-heavy задачи, а для PA - больше user-facing). Из того, что я понял, обычно рекрутер смотрит на резюме и на основании того, с чем у тебя больше опыта, определяет тип интервью, иногда ты сам выбираешь. На практике, скорее всего что для одного, что для второго флоу будет примерно похожим на интервью и особой разницы в фокусе на конкретные темы не будет, однако иногда на PA есть вероятность получить от интервьюера очень специфичные вопросы, например глубоко закопаться в API design, или в то, как будет работать фронтенд вплоть до UI. В общем, после прочитанных опытов кандидатов, я решил, что выбрать SD как-то надежней и подготовиться будет проще:)
На самом интервью мне предлагалась задизайнить систему для продажи билетов.