Преамбула
Я люблю собеседоваться в разных компаниях. Во-первых, я нанимаю и сам тоже, и мне интересно смотреть, как это делают другие, и перенимать разные фишки. Во-вторых, это мой способ понять свою ценность и посмотреть, куда движется рынок.
Вот лишь небольшая часть истории моих собеседований:
-
GetYourGuide (оффер, и до сих пор счастлив сотрудничать)
-
Facebook (оффер)
-
Amazon (не прошёл техническое собеседование)
-
Zalando (отказали уже в самом конце, но я и правда не очень подходил на позицию)
-
SumUp (пре-оффер, не сошлись по условиям)
-
Canonical (провалился с громким треском)
-
Wayfair (не помню уже, что-то пошло не так)
Компании поменьше и не сосчитать уже.
Так вот, Фейсбук. Позиция дата-инженера в Лондоне или Дублине (по ходу процесса вариант с Дублином отпал почему-то).
Сначала расскажу свои общие впечатления. Дальше подробно опишу процесс и дам советы, на что обратить внимание. Многое из мною описанного ниже применимо к собеседованиям на сходные позиции и в других компаниях тоже.
Что понравилось
1. Очень профессиональные ребята.
Не жди рекрутера, который будет неправильно называть языки программирования, а на все вопросы отвечать “я уточню и вернусь к вам как можно скорее”. О, нет! Рекрутер в Фейсбуке не только очень хорошо разбирается в стеке, на который нанимает, но и имеет за плечами богатую историю с предыдущими кейсами. Переезжаешь со своим любимым удавом? Без проблем, они только что наняли программиста из Индии, у него их было целых три, причём один болел диабетом.
2. Рекрутер — друг твой. На протяжении всего процесса.
У рекрутера в Фейсбуке достаточно времени, чтобы отвечать на ВСЕ твои вопросы или просто желать тебе успеха утром в день собеседования. В истории моей переписки с ними 23 письма по процессу собеседования, затем ещё пост-офферных 28 писем. Не считая, наверно, десяти созвонов голосом.
3. Очень прозрачный процесс.
Конечно, в интернете полно информации, о чём спрашивает Фейсбук на собеседованиях. Да только они и сами этого не скрывают: рассказывают, какие будут вопросы, какого рода задания. Советуют, что повторить (вот оно всё, в открытом доступе). Дают ссылки на ресурсы для повторения. И да, потом действительно спрашивают, что обещали. Фейсбуку важен опыт решения нетривиальных задач и навыки разруливания на ходу, а не то, что легко гуглится.
Что не понравилось
1. Настойчивы, иногда до неприличия.
Временами это напоминало деструктивную секту. Чем ближе дело к заключению контракта, тем меньше времени было, чтобы взвесить все за и против. Три дня на подумать? Зачем? Давай сейчас всё обсудим, развеем все сомнения. Очень заметно, что бонусы рекрутера как-то зависят от количества или даже скорости подписанных контрактов.
2. Утром деньги, вечером стулья.
Я ниже расскажу, почему всё не срослось — главная проблема оказалась в британских законах и бюрократических заморочках. Так вот, разговаривать с relocation team по их внутренним правилам запрещено, пока не подписан контракт. Хочешь узнать, как долго ждать визу или на каких условиях перевозить семью? Всё расскажем, но потом. Сначала подпись.
3. Нет титулов.
Это не про процесс найма, а про компанию в целом — у них отсутствуют seniority levels, по крайней мере там, куда устраивался я. Скажете, зазнайство или снобизм — бояться расстаться со своей senior приставкой? Скорее всего. Но ещё мне это сильно помогает в работе, расставляет маркеры: с senior продакт-менеджером я буду разговаривать не тем языком и не в тех терминах, нежели с junior.
Процесс
Этап 1. Разговор(ы) с рекрутером
Как я уже говорил, разговоров было много и в разных форматах. Особняком выделялся один из первых созвонов, этакий формальный чекин. Говорили про компанию, про мой прошлый опыт, мотивацию, планы на будущее. Достаточно детально разобрали пару прошлых кейсов (слово года — impact, советую употреблять регулярно в малых дозах), прошлись по стеку. Было и несколько вопросов на уровне чек-листа — мол, знаю или нет? Помню только один: нужно было по формальному определению распознать linked list (притом, что в работе я его не использовал в явном виде, пожалуй, ни разу в жизни).
Этап 2. Первое техническое собеседование
Я условно делю техническое собеседование на три части, потому что это действительно были три часовые беседы с разными людьми. Однако все они проходили в один день с минимальными паузами, так что могу путаться в деталях.
Сначала — бизнес- и продуктовое чутьё. Глубокого знания продуктов Фейсбука не требовалось, показателей квартального отчёта никто наизусть не спрашивал. Вопросы были по большей части вида “что-если” и “как это измерить”. Для подготовки очень рекомендую эту статью и хорошо потренироваться на котиках собственных примерах.
Мой главный совет — думай как продакт-менеджер. Не надо тут про ООП или шардирование, конкретно эта часть собеседования — исключительно про метрики и как сделать приятно конечному пользователю.
Пример вопроса: ты пришёл утром на работу и обнаружил, что метрика “частота доскролливания до четвёртого поста в ленте фейсбука” упала на 7% по сравнению с вчерашним днём. Как будешь разбираться в причинах? (Метрики могут быть самые дикие, в этом вся фишка.)
Направление ответа:
-
сказать, что причины могут быть внутренние и внешние; дебаг нужно начинать с внутренних, потому что они более вероятны
-
из внутренних причин могут быть: проблема с данными или пайплайном (то есть на самом деле с метрикой всё в порядке, просто мы её неправильно посчитали), проблема с продуктом (на какой-то версии андроида не работает скролл) или проблема со стимулами (что-то отвлекает пользователя от скроллинга)
-
внешние причины: сезональность (грядут новогодние праздники, в прошлом году было так же) или структурные изменения в мировом порядке (люди массово переходят на другой формат потребления контента и вообще странно себя ведут).
Этап 3. Второе техническое собеседование
Моделирование данных.
Здесь мне предложили на выбор несколько известных компаний (я выбрал Убер) и предложили набросать несколько наиболее важных таблиц, её описывающих, и связей между ними (у меня получились таблицы для автомобилей, водителей, клиентов, поездок, городов, локаций; а у поездки, например, есть автомобиль, водитель, клиент, локация начала и конца поездки, дата/время начала и конца, стоимость, ну и так далее). Интервьюер намеренно останавливает буйную фантазию, не даёт слишком усложнять.
А потом начинается этап “массажа” — снова вопросы вида “что-если” и просьбы написать запрос, отвечающий конкретной бизнес-проблеме. Видно, что готового скрипта собеседования нет, кейсы возникают спонтанно, модель можно менять на ходу, если так будет легче справиться с задачей.
Пример вопроса “что-если”: как изменится твоя модель, если водитель не привязан жёстко к автомобилю (скажем, компания-таксопарк может назначать одному и тому же водителю разные машины в разные дни)? Как будет устроена связь автомобиля с поездкой?
Пример на SQL: найти водителей в Берлине, которые в ноябре 2021 года совершили как минимум в три раза больше поездок, чем в среднем на одного водителя за тот же период. (Водители-трудяги, мы им хотим послать новогодние открытки.)
Я так понимаю, вопросы ограничены только фантазией вопрошающего, но, по моему впечатлению, они действительно имели смысл с продуктовой точки зрения. Совсем уж странных задач не было.
Иногда вопросы формулировались самым общим образом: например, хотим померять долю прибыли от постоянных клиентов, напиши запрос. Необходимо было путём рассуждений (а кто такие постоянные клиенты?) предложить конкретное техническое воплощение.
Этап 4. Третье техническое собеседование
Кодинг. Про эту часть помню меньше всего, всё как в тумане 😂
Писали на Python, задач было несколько. Успели вроде бы всё, но времени было в обрез. Никаких мегасложных концепций, дата-структур, pandas-ов, sklearn-ов и прочего не требовалось. Только листы и словари, да базовые операции.
Пример задачи: дан массив с интервалами (скажем, вида [(1, 3), (2, 5), (9, 26), …], нужно объединить пересекающиеся интервалы в один (то есть первые два должны объединиться в (1, 5)). Скорость работы и О-нотации в оценивании не участвуют.
Краткость кода приветствовалась (помню, что одну из первых задач решил в питонячьем стиле в одну строку, интервьюер сказал, это было самое короткое решение в его практике), но было видно, что правильное решение важнее короткого, но неправильного.
Что ещё запомнилось:
-
тестирование — это часть ответа: мало было написать функцию, желательно было её ещё проверить на разных исходных данных (базово, без юнит-тестов). Кстати, в требованиях этого не было, но на словах поощряли любые попытки быстро проверить правильность кода
-
были задачи на какой-то неожиданный трюк — например, конвертацию типов (скажем, если нужно вытащить третью цифру из длинного числа, не нужно устраивать делений с округлениями; намного удобнее преобразовать его в строку и взять третий символ)
-
я постоянно натыкался на одну и ту же ошибку при работе со словарями (dict), надо было повторить получше.
Этап 5. Behavioral
Здесь много говорить не буду, всё было достаточно стандартно: поговорили о прошлом опыте, проектах, каких-то моих архитектурных решениях. Что за команда, чем гордишься, как разрешаешь конфликты, и так далее.
Запомнилось, что здесь можно было теоретизировать (“считаю, что лучший формат взаимодействия команды — это когда …”), но просили подкреплять примерами из практики.
На этом всё, дальше было несколько дней на обработку фидбека от всех интервьюеров — и оффер.
Ну и вообще
Напоследок дам несколько общих советов, которые пригодятся на всех этапах (да и в любых компаниях):
-
думать вслух с первой секунды. Если вообще непонятно, с чего начинать, повтори вопрос своими словами (“итак, насколько я понял, мне нужно …”) — часто интервьюер корректирует постановку вопроса и даёт какие-то подсказки
-
взаимодействовать, не замыкаться в себе, рассуждать, задавать вопросы (“у меня есть два направления решения, пока не могу выбрать. С одной стороны, можно попробовать … С другой стороны, … Что бы вы посоветовали?”)
-
не нужно булшита типа у собак есть блохи, если не знаешь — то лучше так и сказать (окей, лучший вариант ответа: “про Х я знаю только, что он используется в Y, но опыта у меня нет. Я для подобных задач использовал Z”)
-
не трать время на споры об условиях задачи; если накладываются определённые ограничения, значит, тебя хотя потестировать именно в этих условиях. Если просят написать SQL без подзапросов, не нужно разглагольствовать, что в реальной жизни так не бывает. Прими этот вызов и решай 😉
-
выстраивай общение на равных, даже если чувствуется разница в опыте. Если интервьюер указывает на ошибку, лучшая реакция — поблагодарить (без дифирамбов и извинений!) и исправить ошибку, либо хотя бы обозначить понимание (“да, вы правы, спасибо за совет. Я изначально предполагал Х, но после вашей ремарки вижу, что действительно лучше Y”). Спорить тоже можно, но только (а) аргументированно и (б) с уважением к точке зрения собеседника.
-
стресс твой — враг твой, однако никто не застрахован от блока мыслительных процессов на фоне нервов и паники. Если такое произошло, лучше честно в этом признаться и предложить скорректировать скрипт собеседования (“прошу прощения, что-то я разнервничался и не могу ясно думать. Мы можем пока перейти к следующему блоку вопросов?”)
Оффер и дальше
Сейчас я ступаю на скользкую дорожку самолюбования в стиле “одна из самых успешных компаний мира звала меня, а я повёл плечиком и ушёл в закат”. Оставим всё подсознательное Фрейду, в моих терминах всё выглядит гораздо прозаичнее: крупная компания предлагала мне переехать в один из самых дорогих городов мира (в активной фазе брекзита) и пойти на существенные личные и профессиональные ограничения, и в тот момент я сделал выбор в пользу другого развития событий.
Основных препятствий было три:
-
переехать мог только я, моя жена (которая на тот момент ещё не была женой) должна была пройти пять кругов ада с документами, визами, апостилями, консулами, подтверждением уровня английского и бог знает чем ещё. И это как раз тот случай, когда “мы всё разрулим, только подпиши контракт” оказалось на поверку “ну таковы английские законы, ничего не попишешь”
-
я уже принял для себя решение двигаться в сторону карьеры менеджера, и мне в принципе казалось не лучшей идеей менять место работы в тот момент. В новой компании нужно заново выстраивать своё окружение и зарабатывать авторитет, на это требуется время
-
ну и брекзит — мне очень важна свобода путешествий, которую даёт Европа: за 50 евро и два часа времени можно оказаться в другой стране и другой культуре. Мне кажется, это уникальное место на планете, где многие сотни народов научились жить в мире и согласии, уважать разнообразие взглядов. И мне очень не хотелось расставаться с возможностью путешествовать по Европе без виз.
Зачем же я тогда вообще затеял весь этот процесс с собеседованиями? См. начало :)
Автор: Евгений Ключников, Senior Data Engineer @ GetYourGuide (Берлин, Германия)
Linkedin: eugene-klyuchnikov
Instagram: @eugene.klyuchnikov
Автор: Евгений Ключников