![Фото krakenimages с Unsplash Фото krakenimages с Unsplash](https://habrastorage.org/getpro/habr/upload_files/00c/73a/07b/00c73a07b99deadc551d227cc396bf4d.jpg)
В феврале 2022 года я наконец переехал в США по рабочей визе О1. Этому предшествовало 2.5 года работы над укреплением кейса, ожидание апрува.
За 1.5 года до этой даты я начал готовиться к интервью на позицию Front End. Сейчас работаю Senior Front-End Engineer в Roku.
Мотивацией для данного поста и создания телеграмм канала по интервью Front-End инженеров стало отсутсвие подробной информации о том, как же выглядит этот процесс в США.
Чем я занимался до переезда
До переезда я 7 лет работал в аутсорсинговых компаниях в Беларуси. Это позволило мне пощупать разные технологии, подходы и поработать на разнообразных проектах. Последний год, до переезда, я уже был на позиции Engineering менеджера с 26 JavaScript разработчиками (это усиливало мое резюме, особенно на позицию Staff). За последний год я провёл около 50 технических интервью в отдел.
Но в США я понял, что мой опыт не совсем релевантен, и мне нужно начинать с позиции Senior, чтоб разобраться, как тут построены процессы, культура, как проводить интервью, которые здесь совершенно устроены по-другому.
Я начал готовиться к техническим интервью за 1,5 года, пока ждал визу. Каждое утро рабочего дня я тратил на подготовку. Со временем это стало привычкой и не доставляло никакого дискомфорта, через какое то время это мне помогло промоутнуться до Engineering менеджера, так как я начал расти быстрыми темпами.
Подготовка
1. Leetcode.
На leetcode я решил 245 задач. В основном я фокусировался на массивах, матрицах, деревьях, связных списках, строках, хэштаблицах, сортировках и двух указателях. В моём профиле вы можете посмотреть темы которые я решал.
Здесь все задачи которые я решил тут.
Для ознакомления и вспоминания структур данных и алгоритмов на JS я использовал ресурс javascript-algorithms.
Для быстрой идентификации паттерна задач на Leetcode нужно прочитать эту статью 14 паттернов для Leetcode задач, помогают идентифицировать проблему.
Для определения сложности кода существует шпаргалка по нотации Big O.
Для представления, как выглядит интервью я использовал ресурс interviewing.
2. Big Front End (https://bigfrontend.dev/).
Я решил 50% BFE задач (легких и средних). Все свои решения я публиковал в своём телеграм-канале. Этот ресурс максимально полезен для интервью в Meta, но и другие компании более менее могут спрашивать подобное.
3. System design.
Для подготовки к системному дизайну я использовал видео Evgenii Ray. Он покрыл большинство аспектов системного дизайна, которые я встретил на реальных интервью.
Очень полезный ресурс для системного дизайна и для реальной работы (Web Performance) - 3perf
Все о доступности
4. Поведенческое интервью.
Список вопросов для подготовки и примеры ответов.
Для мок интервью я использовал FAANG канал в телеграмм и Pramp.
Также я использовал этот телеграмм-канал и Notion Evgenii Ray и решил все оттуда и прочитал от и до.
На glassdoor можно найти некоторые примеры вопросов и задач, которые спрашивают в компаниях.
И вот она, Америка…
По прилёту у меня начался 2 недельный джет лаг, никакой речи о прохождении интервью не было, я не мог нормально спать.
Но после того, как я отошёл я начал активно созваниваться с рекрутерами, списываться на LinkedIn. В день приходило по 20-30 сообщений с вакансиями, но большинство из них это ноунейм компании или стартапы.
Прежде чем ответить на сообщение я анализировал компанию, инвестиции, публичная она или приватная, чем занимаются и с какими технологиями работают (мне принципиально был React.js, JS/TS стек, ну и позиция Front End)
Это был первоначальный фильтр.
В день у меня было по 3-4 созвона с рекрутерами, затем по 2 технических собеседования.
Всего я участвовал в около 20 моках, чтоб понять как вести себя на интервью и какие у меня есть слабые стороны, но это не сравнится с реальными интервью. На реальных интервью у меня уже был заметный рост, уже спустя 1-1.5 месяца, я начал более качественно решать задачи, выяснять требования, продавать себя и отвечать на поведенческие вопросы, так как после каждого интервью я делал работу над ошибками, подправлял истории.
Я начинал с небольших стартапов и компаний и я был готов к отказам (это важно!).
Каждый день на протяжении 2 месяцев у меня были созвоны с рекрутерами, технические скрининги, онсайт собеседования. Очень удобно, что сейчас все проходит онлайн. После почти месяца технических скринингов я даже сказал, что мне нравится процесс интервью, столько интересных задач и людей, но потом пришло время онсайтов…после первого же 5 часового собеседования мое мнение поменялось в абсолютно другую сторону, это ооочень тяжело!
По началу у меня были отказы и это конечно расстраивало. Но как только я получил первый оффер, мотивация сразу поднялась..до следующего отказа.
Я был готов к отказам, но это все равно неприятно слышать, особенно когда ты потратил 5-6 часов и тебе присылают стандартную отписку, что мы решили продолжить с другим кандидатом без никакого фидбека. Это мотивировало рефлексировать и разбирать, что же пошло не так. Я делал заметки, пытался найти ответы как же решить задачу или что нужно было уточнить и как спроектировать что-то. Это помогло в будущих интервью скомпоновать разные решения в одно и выдавать качественное решение.
Также общение с рекрутерами помогло прокачать английский, в начале я мог и половину не понять, что мне говорят, но потом уже привык и было намного легче.
Под конец я у меня были действительно хорошие интервью, но я продолжал получать отказы на некоторые из них. И самое обидное, ты не понимаешь что пошло не так.
Процесс интервью
Моя статистика прохождения интервью:
Технические скрины (26): Meta, Amazon, Apple, Google, Microsoft, Lyft, Uber, LinkedIn, Roku, Salesforce, PayPal, DoorDash, Robinhood, Roblox, Intuit, Zoom, Grammarly, Imply, Disco, Square, SigmaComputing, LiveRamp, Zoox, Palo Alto Networks, Snowflake, Aurora
Онсайт интревью (15): Meta, Amazon, Google, Microsoft, LinkedIn, Roku, Salesforce, PayPal, DoorDash, Zoom, Grammarly, SigmaComputing, LiveRamp, Zoox, Aurora
Офферы: Google, Roku, Microsoft, PayPal, SigmaComputing, LiveRamp
Подавая на позицию Front End с большой вероятностью у вас будут вопросы только по фронтенду, но как минимум 1 алго-задачу уровня изи у вас спросят, в основном это со структурой данных и обработкой ее (а в JS их не так и много :)). Но некоторые любят по-старинке спрашивать алгоритмы.
Все приведенные мной материалы подготовки выше покрыли вопросы интервью.
Процесс довольно стандартный:
Созвон с рекрутером.
Технический скрининг.
Онсайт интервью:
Алгоритмы.
Задачки на кодинг виджета или функции JS.
Системный дизайн, с фокусом на Front-End.
Поведенческое интервью.
Переговоры.
1. Созвон с рекрутером.
На созвоне с рекрутером вы обсуждаете общие вопросы, узнаете больше про компанию и команду, к которую собеседуетесь. Они спрашивают про ваше разрешение на работу. Спрашивают про ваш опыт, проверят английский в разговоре. Они узнают на какой стадии поиска работы вы находитесь и от этого могут отталкиваться, например ускорить ваш процесс интервью (В Aurora я сказал, что я закончил все свои интервью и если мы можем быстро пройти все этапы, я согласен. По итогу все этапы мне сделали за 4 дня, причем онсайт всего в 3 раунда).
Зачастую эти созвоны случаются до того, как вы выслали свое CV. Только если все прошло хорошо и есть матч, вас попросят выслать CV. Могут спросить про ваши зарплатные ожидания, но у меня был ответ, правдивый, что я действительно не знаю сколько я стою на рынке, так как я только приехал, этого было достаточно, чтоб скипнуть вопрос. На этом же созвоне вы можете спросить всю интересующую вас информацию, вплоть до технического стека команды. Это самый удачный момент спросить важные для вас вопросы, для меня это были сроки по грин-кард, тех. стек.
Рекрутеры уважают ваше время, поэтому каждый звонок вы согласовываете по календарю, выбирая у рекрутера, либо он может выбрать в вашем календаре.
И самое важное, ни в коем случае, не называйте зарплатные ожидания, если они очень требут (было только один раз), называйте большой диапазон. Рекрутер Turo у меня очень настойчиво спрашивал ожидания, когда я ему назвал вилку он сказал, что у нас компенсация в 2 раза меньше и мы не сможем потянуть такую.
2. Технический скрининг.
Вот вы прошли первый этап и вам назначили технический скрининг. Обычно это 45 мин. На нем вы опять же расскажете немного о себе, вам зададут вопросы про ваш опыт и дадут решить какую-нибудь задачку небольшую (в 90% это будет либо сделать небольшой виджет на JS и фреймворке, либо изи задачка на алгоритмы, а точнее структуры данных которые есть в JS). Иногда были задачки с Hackerrank на HTML, CSS, JS, 2-3 нужно решить, они достаточно простые. Иногда можно использовать любой редактор на ваше усмотрение. Но большиство присылаю ссылку на свой онлайн редактор (с подсветкой кода даже).
Самое главное не молчать, думать вслух, чтоб интервьювер следил за вашими мыслями.
По поводу выполнения кода, тут 50 на 50, иногда код нужно запускать когда хочешь и сколько хочешь, иногда код даже не требую запускать (даже нет такой возможности).
Был один раз, где меня попросили спроектировать систему лифтов на техническом скрининге (без кода), ничем хорошим это не закончилось :)
3. Онсайт.
Самый сложный этап собеседования, так как он длится 3-6 часов. Многие компании позволяют разделить его на 2 дня, это уже на ваше усмотрение.
Как правило он состоит из кодинга, системного дизайна и поведенческого интервью.
О каждом раунде онсайта вы можете спросить у рекрутера, чтоб понимать, что ожидать на них.
Кодинг раунды похожи на технический скрининг: выясняем требования, обсуждаем решение, кодим, тестим.
Системный дизайн.
Всегда касается проблем фронтенда, не нужно рассказывать про высоконагруженные системы, БД и т.д. Вам нужно просто описать какую то функциональность в браузере, пути оптимизации, кастомизации и расширения, описать как передавать данные на сервер, как хранить, где хранить, почему. Иногда нужно расписать несколько эндпоинтов со структурой запросов и ответов. Не забывайте про доступность, это очень важно!
Поведенческое интервью.
Тут можно ожидать вопросы про ваш опыт, проекты, взаимодействие в команде. В основном это вопросы "Расскажите мне ситуацию, когда вы .."
В основном это вопросы были про самый сложный проект, про конфликт в команде, про то, как я поступал, когда сроки поджимали и команда не успевала, рассказать про самый большой фейл.
Все истории нужно рассказывать по методологии STAR (situation - task - action - result). рассказ не нужно затягивать на долго. Если вы не рассказали что-то, или интервьювер не допонял, они зададут уточняющие вопросы.
В основном это интерью проводят менеджеры нанимающих команд, это отличный момент в конце спросить все ваши вопросы, касаемо команды и продукта.
4. Переговоры.
Не менее стрессовый и важный этап. У меня занял почти месяц. С некоторыми компаниями было даже несколько раундов, в среднем удалось поднять офферы от 70-100к. Для того, чтоб понимать ситуацию попросите фидбек о вас, чтоб понимать наскольно вы были хороши и использовать это. Но ничто не работает лучше, чем контроффер. Но важно не перегнуть, посмотрите компенсации на сайте levels.fyi предварительно, чтоб понимать вилку.
Некоторые выводы по компаниям
Во всех компаниях рекрутеры работают очень хорошо и поддерживают вас на каждом шаге, рассказывают что ожидать на каждом раунде, как готовиться и рассказывают вообще как выглядит процесс интервью.
Amazon: у меня получилось самое худшее интервью. На всех раундах у меня были проблемы с тем, чтоб понять, что интервьювер от меня хочет, я уточнял требования большую часть времени и объяснял свое решение, потому что его почему-то не могли понять. А когда в процессе кодинга начинали задавать вопросы по JavaScript, оказалось они не знают его и приходилось еще тратить вермя на объяснение почему я использую это и как оно работает. В итоге оставалось 5-7 минут на кодинг, но этого было впринципе достаточно, чтоб закодить. Ну и в конце Hard на деревья, где я не до конца успел решить.
Microsoft: некоторые интервьюревы опять же не знали JavaScript, спрашивали только алгоритмические задачи и задавали вопросы по работе JavaScript. Это было больше похоже на интервью на позицию Full-stack.
Zoox: спрашивали только математические задачи и алгоритмы.
Aurora: спрашивали опять же только алгоритмы, хотя позиция чистый Front-End. Хотя у моего знакомого было интервью с чистым Front-End фокусом и вопросами..
Meta: столько внимания от этой компании я не ожидал. У меня было очень много созвонов с рекрутером, некоторые длились по часу, где он рассказывал вообще все в деталях об процессе интервью, давал материалы для подготовки, спрашивал как идет подготовка, давал советы, влоть того, как себя вести на интервью, что спрашивать, что лучше не спрашивать. Вопросы были чисто по фронтенду. После онсайта начался сразу фриз…
LinkedIn: у них фрэймворк Ember.js, поэтому вопросы только по чистому JavaScript и фронту.
Apple: потеряли мой фидбек после технического скрининга. До сих пор ищут.
Google: Процесс интервью был чисто фронтовой. После получения аппрува от хайринг комитета Гугла у вас следующий этап это тим матчинг. У меня был смешанный фидбек между L5 и L4 уровнями. По итогу комитет мне дал L4 без дополнительных этапов интервью. Только после успешного тим матчинга вам пришлют оффер с цифрами, а вот сколько этот процесс может занять, уже зависит от мнгих факторов.
У меня было по 2 колла с командами в неделю, хотя я мог и каждый день. Процесс занял 2 недели.
Критерии, по которым я сравнивал команды:
Размер команды. Инженеры фронтенд, бэкенд, инфраструктура.
Технический стек (все Angular).
Промоушн до L5 (время и возможности).
Продукт.
Обязанности.
Позиция фронт-енд или фул стек. Были даже бэкенд чистый.
Процесс разработки.
Кто пользователи продукта, сколько их. Возможно это внутренний проект или крупный для большого количества пользователей.
Оценивал как мне общаться с менеджером или лидом команды.
В итоге я сматчился с командой Google Analytics, которая отвечает за производительность данного продукта. В этой команде я видел много возможностей для роста и цифровые метрики для промоушена.
Как я принимал оффер
Я сравнивал офферы и принимал решение, какой принять по следующим критериям.
1. Продукт.
Очень важно, чтоб продукт был интересен вам. У меня много лет опыта в разработке стриминговых платформ и я знаю потребности пользователей и разработчиков. Я могу многому научиться и вижу много челленджей для себя в таких продуктах. Roku предоставляет мне такую возможность.
2. Технический стек и инструменты.
Мне не нравится Angular, я предпочитаю React.js. Это был один их самых важных факторов почему я выбрал Roku.
3. Work-life balance.
Это очень важная вещь. Я не хочу выгореть. Во время процесса интервью вы можете задавать вопросы про это и внимательно слушать ответы.
4. Возможности для роста.
Рост в техническом плане и в рамках компании на позицию лида (Staff)
5. Уровень позиции.
После позиции engineering manager я не был готов к позициям middle (да, такие тоже были).
6. Размер компенсации.
База и стоки. Roku платит на senior позиции 85% кэшем, мне, как новичку в этой стране это выгоднее, так как на данном этапе деньги нужны здесь и сейчас.
7. Процесс грин-карты.
Некоторые компании начинают процесс грин-карты с 1го рабочего дня, некоторые после 3, 6, 12 месяцев. Я фильтровал компании только по 1му дню и 3 месяцам. Но как оказалось, эти этими сроками тоже можно торговаться, я смог сторговаться с 3х месяцев до 1го рабочего дня.
Важный нюанс, Meta не делает грин-карты, я их спрашивал об этом на каждом звонке, на каждом этапе интервью, но ответа я так и не получил, накакого вообще. Но по информации в интернете, у них с этим все плохо.
8. Размер команды и обязанности.
Я не люблю работать в команде, где ты один Front End разработчик, или даже 2 разработчика. Я хочу расти и учиться. Также для меня был важен уровень инженеров в команде.
9. Удаленная работа или работа в офисе.
Я предпочитаю работу в офисе. Работать из дома для меня не комфортно. Некоторые компании сейчас предлагают работать 3 дня в офисе, 2 дня удаленно, некоторые предлагают полную удаленку.
10. Расположение офиса.
Я живу в Сан-Хосе и у некоторых компаний офисы в Сан-Франциско. Вы должны понимать, что это минимум 1.5 часа езды. Хотите ли вы тратить 3 часа в день на это?
Советы:
Не назначайте больше 3х (а лучше 2х) онсайт в неделю. На последней неделе я назначил 4 онсайта на неделе и это был ад! Но я получил 2 оффера:)
Во время интервью, ваши скилы растут бешеными темпами, поэтому не проходите сразу собеседования в компании мечты.
После интервью вы можете выговориться с кем-нибудь, помогает отпустить.
Делайте работу над ошибками после каждого интервью, чтоб понять, что могло пойти не так, ищите ответы на вопросы и задачи, которые были на интервью и пытайтесь разобраться.
Подготовьте текст самопрезентации на 1-1.5 минуты, вы будете это рассказывать на каждом этапе интервью.
Для поведенческого интервью подготовьте и потренируйте как можно больше историй по методологии STAR, у меня было около 20, которые покрывали почти все вопросы. Подготовить их заняло где-то месяц.
Купите платную подписку в Calendly (или аналогичный сервис), для того, чтоб было проще менеждить ваши интервью. Потому что высылая даты в почте, они могут ответить через неделю, а требовать 5 дат, соответсвенно эти 5 дней у вас блокируются и вы не можете на них поставить другие интервью.
Если у вас остались вопросы или темы, которые я не раскрыл, задавайте в комментариях тут или в моем телеграмм-канале!