Final loop. FAANG Interview
Sergei Golitsyn https://t.me/crack_code_interviewАлоха всем.

Хочу поделиться опытом собеседования в одну из FAANG. Расскажу немного почему прохожу туда собеседования. Я периодически общаюсь с этой компанией, чтобы поддерживать себя в форме. И не стараюсь получить оффер от этой компании, в силу моих тараканов в голове, единственное что меня интересует - опыт. У них достаточно много алгоритмических секций, где я могу проверить себя.
В этом году у них произошли изменения в процессе интервью. Раньше на алго секциях кандидату давалось 10 минут на приветствие, 40 минут на задачу, и оставшееся время на вопросы о компании. Теперь же у вас есть 20 минут на бихейв вопросы и 20 минут на алго задачу. Перейдем к тому из чего состоит процесс интервью. Для меня это было 4 часовых звонка с SDE и SDM. Вводные данные есть.

Первый звонок.
Я присоединился к звонку. Интервьюер представился и попросил коротко рассказать о себе. После этого мы перешли к бихейв сессии.
Первый вопрос
"Расскажи мне о времени когда ты столкнулся со сложной комплексной проблемой".
Я попросил минуту на подумать, чтобы сформировать схему ответа в голове. И начал отвечать. Хочу ответить, что очень важно отвечать по паттерну STAR. С чего я взял, что это важно? Я запрашивал фидбэк с прошлых интервью и это был один из поинтов. Также ваш рекрутер присылает вам материалы для подготовки, в которых указано, что очень важно использовать STAR паттерн для вашего ответа. Я закончил свой рассказ, и начались follow-up вопросы. Эти вопросы естественно касались моей "истории". Интервьюер спросил, как бы я действовал, если бы мы могли отмотать время назад? Какие метрики я использовал? Какие выводы я сделал? Спокойно ответив на эти вопросы мы перешли ко второму behavioral вопросу.
Второй вопрос
"Расскажи мне о ситуации в которой ты облегчил работу customer".
На первый взгляд все задачи, что мы делаем в той или иной ситуации облегчают работу customer. Я задал пару уточняющих вопросов, чтобы понять, что именно от меня хотят. И переформулированный вопрос звучал как
"Расскажи о ситуации когда ты проявил инициативу и предложил решение, которое облегчило работу customer".
То есть этот вопрос предполагает историю в которой вы вышли из своей зоны ответственности, проявили инициативу и нашли какое-то новое решение/идею о которой customer не догадывался. У меня есть пример такой истории, поэтому трудностей не возникло. Конечно, не обошлось без follow-up вопросов. Они были о том, как мое решение повлияло на customer, какие метрики я использовал и какой профит мы получили. Исходя из этих дополнительных вопросов, я понял, что очень важно добавлять в свой ответ метрики и данные на которые я опираюсь, а так же метрики которые улучшились после реализации этой фичи.
Идем дальше и попадаем на 20 минутный кодинг. Кодинг происходит на платформе этой компании. По сути это блокнот в котором интервьюер видит что вы делаете. Быстро взглянув на эту платформу я понимаю, что запускать код мы не будем и не будет проверять его на внутренних тестах. Поэтому очень важно будет все протестить в комментариях к задаче. Мне показалось что задача была уровня медиум.
Дан не отсортированный массив parent-child, вернуть абсолютное значение path для каждой терминальной ноды.
Input: (A, B), (C, A), (D, F), (A, E), (C, D)
Output: "/C/A/E", "/C/A/B", "/C/D/F"
Вы можете предложить и приложить свои решения в комментариях.
Я старался все время быть on the same page с интервьюером, поэтому все прошло достаточно гладко и интервьюер был удовлетворен моим решением (внутреннее ощущение). Я упускаю структуру ответа в этом посте, если вам интересно, как верно решать алгосики на интервью, вы можете написать мне по поводу Dream Offer, где мы это рассказываем.
После задачи мы поболтали 5 минут, я задал интересующие меня вопросы и пошел ко второму звонку.
Второй звонок.
Попался парень из Канады. Не знаю как это объяснить, но общение не пошло буквально с первого Hello, how are you doing? Не было, знаете, синхронизации с интервьюером. (это полностью мое внутреннее ощущение). До того как мы перешли к бихейв сессии, интервьюер очень старался показать свою важность в компании, я честно говоря так и не понял для чего это было сделано.
Первый вопрос
"Расскажи о времени, когда ты сделал что то значительное в не зоны своей ответственности".
По стандарту берем пару секунд на подумать и начинаем выдавать историю по STAR паттерну. И понеслись вопросы. Было видно, что интервьюер не считал, что то что я сделал это значительно. Первый follow-up вопрос был "Сколько денег это принесло?", следующий "Почему ты считаешь что это был significant impact?". После ответов на эти вопросы, был задан следующий вопрос, который действительно удивил меня "Почему возникла эта проблема?" Я был удивлен, потому что вроде как я рассказал про это, и мне пришлось повторить. Кроме бихейв вопросов было множество технических вопросов и интервьюер хотел знать все технические детали и как я это реализовывал. На этом этапе я внутренне понимал, что это собеседование провалено. Это полностью мой косяк и я должен был найти верный "ключ" к своему интервьюеру. Но мы не сдаемся и двигаемся дальше.
Второй вопрос.
"Расскажи мне о ситуации, когда у тебя было сложное/тяжелое взаимодействие с customer".
У меня есть примеры когда я сталкивался со сложными заказчиками, поэтому мне было что рассказать. И душнилово понеслось дальше. Я правда не могу назвать никак по другому, то как вел себя собеседовавший меня парень. Это действительно было душно. Я пытался понять, что от меня хотят и сохранять позитивный настрой. Тут больше рассказывать нечего, все прошло очень плохо.
Идем к задаче.
Условие → Sort version numbers. У нас может быть массив со строками
[“1”, “1.1”, “2.1.0”, “1.1.1”, “2.0.0.0”]. Нужно их отсортировать.
Кстати, буду рад если приложите свои решения к этой задаче. Я был крайне демотивирован и мозг уже не очень хотел что либо продолжать. Я написал базовое решение, но упустил пару корнер кейсов, что прям сильно не нравилось интервьюеру и было видно как мы оба хотим побыстрее закончить разговор.
Это был полный провал.
Я думаю, что это полностью мои недоработки и мне есть над чем работать. Я считаю, что очень полезно попадать в такие ситуации, рефлексировать потом и находить зоны роста для себя.

Третий звонок.
О это был невероятно кайфный звонок. Как оказалось это была систем дизайн сессия. И конечно все ожидают 40 минут, да? А вот нет, 20 минут на бихейв и 20 минут на систем дизайн =)
Первый вопрос
"Расскажи о ситуации когда ты имел strong disagreement with manager".
Ооо какой же классный вопрос. Я старался учитывать опыт прошлых этапов, поэтому я пошарил свой опыт, рассказал, как вышел из этой ситуации и какие выводы сделал. Мне показалось что интервьюер был действительно доволен и мы еще немного поболтали о этой ситуации и перешли к следующему вопросу.
Второй вопрос
"Расскажи о ситуации когда ты подписался на что то, но столкнулся с "препятствиями", которые мешали выполнить обязательства в срок"
Я думаю все сталкивались с сорванными сроками и недовольными заказчиками, все ведь? =) Я рассказал об общении с заказчиком и как я смог сгладить недовольство. Пара follow-up вопросов по этой истории и паереходим к систем дизайну.
Систем дизайн "Search Engine".
Как вам дизайнить систему за 20 минут? =) Для меня это был внутренний вызов. Я уточнил требования и мы двинулись дальше. Я пропустил этап расчетов, интервьюеру это было не нужно и он хотел видеть high level architecture и как мы будем скалировать это до миллиардов пользователей. Я подготовил базовый АПИ и расписал несколько flow.
Очень, очень важно писать все что вы говорите.
Потому что эти заметки будут использовать потом для вынесения вердикта. Я подготовил user flow и перешел к БД. Тут мы остановились и обсудили алгоритмы шардирования, какие проблемы будут и как мы будем их решать. Далее я решил проявить немного инициативы и за пару минут накидал рядом систему для "показа популярных поисков". Следом мы перешли к кэшированию, какой тип кэша будем использовать и какие проблемы могут возникнуть. Разговор шел хорошо и каждый элемент вытекал плавно из предыдущего. Единственное, что я действительно не помню как устроены БД для полнотекстового поиска, поэтому глубокие ответы на эту тему я старался избегать.
Думаю эта сессия прошла отлично и с хорошим настроением я запрыгиваю в следующий звонок.
Четверный звонок.
Первый вопрос
"Расскажи мне о ситуации когда ты проявил инициативу outside of your scope".
Это был тот же вопрос, который был на 2м звонке. Мне показалось, что 2й интервьюер отметил, что я дал недостаточно сигналов по этому вопросу, поэтому мне задали его еще раз. В этот раз синк с интервьюером был налажен и все прошло достаточно гладко. Я учитывал свои прошлые косяки и добавил сразу импакт, метрики и прочие штуки.
Второй вопрос
"Расскажи мне о ситуации когда ты не мог выполнить обязательства, но превзошел ожидания".
Очень похоже на вопрос с третьего звонка, да? Мне тоже так показалось, поэтому я чуть переформулировал свой рассказ, добавив результаты, метрики и то что я мог сделать по другому. Я считаю очень важно быстро адаптировать и применять знания, которые вы буквально получили только что.
Кооодинг, все последний кодинг в этой сессии.
Дан лист нод и стоимость перехода из одной ноды в другую. Написать функцию, которая конвертирует одну ноду в другую.
input: {A, B, 1.1} {B, C, 1.2}, from = A, to = C
output: 1.32. (1.1 * 1.2)
Я написал решение с графом. Написал множество тестов и по моему это решение даже должно работать. Правда потом рефлексируя я пришел к другому решению, которое должно быть более оптимальным. Скидывайте свои решения в комменты. Если я правильно понял эмоции интервьюера, то в целом он остался удовлетворен решением задачи, дал мне follow-up вопрос, который уже был покрыт в моем решении. (Если честно я не мог поверить свои глазам, что смог написать нужный код, который был протестирован и даже работал, но это не точно)
Рефлексия
На этом финальный loop был закончен и пришло время рефлексии.
Что бы я сделал по другому?
Хах, я бы добавил ответ на этот вопрос в каждую свою бихей стори. Также думаю необходимо добавить метрики на которые я ориентировался и импакт которого достиг. Что еще? Думаю нужно научиться не демотивироваться при общении со "специфичными" интервьюерами. А и не стоит забывать, адаптироваться к ситуации и не бояться применять только что полученные знания.
Ах, точно, кому то может показаться что все эти истории я брал из головы и рассказывал. Это не совсем так. На большинство поведенческих вопрос у меня есть заготовки, которые я могу адаптировать. Эти заготовки составлялись несколько лет и я полировал их на каждом интервью. Это очень долгий и кропотливый процесс. Так же спасибо Александру, который детально разобрал мое резюме и дал несколько ключиков. Кому интересен разбор, вот ссылка на ютуб #1. Улучшаем резюме Staff Software Engineer. Шаблон
Стоит еще отметить, что помимо алгоритмов и системного дизайна, в программе Dream Offer мы помогаем подготовить ответы на вопросы behave интервью и составить правильное резюме. Для меня и многих русскоязычных инженеров, которых я знаю, сессии поведенческого интервью являются самой сложной частью. Кстати, если я не ошибаюсь, именно по поведенческим вопросам можно понять ваш "настоящий" уровень. Поэтому мы уделяем им достаточное внимание. А что такое Dream Offer? Пишите мне в личные сообщения.

Поскриптум.
Я спросил одного интервьюера, что бы он хотел изменить или что ему не нравится. Он сходу ответил work and life balance. Посмотрев на его лицо, я заметил, что он вдруг стал грустным, было ощущение, что могут навернуться слезы. Я по честному, искренне посочувствовал этому парню. Конечно, он пытался сгладить ответ и объяснить почему так, но его лицо и глаза говорили больше чем его слова.
Я буду безумно рад любому фидбэку по тому что вы только что прочитали