5 собеседований в топовых компаниях и 5 предложений о работе

0
10756

5 дней я проходил собеседования в LinkedIn, Salesforce Einstein, Google, Airbnb, и Facebook и получил 5 предложений о работе.

Это был невероятный опыт, и я очень счастлив, что мои труды оправдали себя. Поэтому я решил написать что-то об этом. Я расскажу, как я готовился, а также поделюсь впечатлениями о собеседованиях и самих компаниях.

5 interviews in 5 days

Как всё началось

Сначала о моей первой работе. Я работал в Groupon почти три года. Там была потрясающая команда, и мы занимались очень крутыми проектами. Мы разрабатывали интересные вещи, публиковались, и все это позволяло нам расти и двигаться вперёд. Но в какой-то момент я почувствовал, что мой темп обучения стал замедляться, а мой разум при этом требовал больше информации, задач и испытаний. Также работая программистом в Чикаго, я думал о том, что у тёплого залива в Сан-Франциско есть огромное количество привлекательных компаний.

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

Подготовка

Несмотря на то, что мне интересно машинное обучение, некоторые из 5 вакансий не были с этим связаны. Три из них — инженер по машинному обучению (LinkedIn, Google, Facebook), одна — вакансия технического специалиста (Salesforce) и одна вакансия просто инженера-программиста (Airbnb). Таким образом мне нужно было подготовиться по трём разным направлениям: написание кода, машинное обучение и системное проектирование.

Так как у меня все ещё была работа, подготовка заняла у меня 2-3 месяца. И вот как она происходила.

Код

Я согласен, что собеседования, где вы пишите код — возможно не самый лучший способ оценить ваши скилы как разработчика. При этом скорее всего нет лучшего способа оценить ваши возможности как инженера-программиста за столь короткий промежуток времени. На мой взгляд это необходимое зло, чтобы получить эту работу.

В основном я использовал Leetcode и Geeksforgeeks, чтобы практиковаться, но Hackerrank и Lintcode тоже хорошие платформы. Несколько недель я занимался структурами данных, затем сфокусировался на областях, с которыми я не так хорошо знаком, и в конце я разобрал несколько чаще всего встречающихся задач. Из-за ограничения по времени я обычно разбирал по две проблемы в день.

Вот несколько мыслей:

  1. Практика и только практика. Нет других путей.
  2. Но вместо того, чтобы делать все 600 задач подряд на Leetcode, разберите разные виды заданий и тщательно продумайте каждое из них. В общей сложности я разобрал около 70 задач и понял, что этого для меня достаточно. Я думаю, что если вам не достаточно 70 задач, то возможно вы делаете их неправильно, и в таком случае не помогут и 700.
  3. Начните с более сложных. После этого все остальные покажутся лёгкими.
  4. Если вы застряли на одном задании более, чем на 2 часа, посмотрите его решение. Скорее всего оно не стоит больше потраченного времени.
  5. После того, как решите задачу, проверьте её решение. Я часто удивлялся, насколько изящными могут быть некоторые решения, особенно Python однострочники.
  6. Используйте язык, с которым лучше всего знакомы. Он так же должен быть достаточно распространённым, чтобы интервьюеру было легко вас понять.

Системное проектирование

Эта область больше связана с фактическим опытом работы. Во время собеседования вам могут задавать много вопросов по архитектуре систем, объектно-ориентированной разработке, разработке схем баз данных, распределённых систем, и это далеко не конец списка.

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

Вот некоторые из действительно полезных ресурсов:

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

  1. Сначала ознакомьтесь с требованиями, затем определитесь с дизайном высокого уровня и, наконец, переходите к деталям реализации. Не нужно сразу кидаться к деталям, не выясняя точных требований.
  2. Не бывает идеальных проектов, просто постарайтесь сделать всё, что необходимо.

Учитывая всё вышесказанное, чтобы действительно хорошо подготовиться к собеседованию по системному проектированию нужно просто взять и разработать систему, то есть попытаться сделать вашу будущую работу. Вместо того, чтобы ограничиться минимумом, углубитесь в то, как устроены инструменты, фреймворки и библиотеки, которые вы используете. Например, если вы используете HBase, то вместо того, чтобы просто использовать клиент для запуска DDL и делать выборки, попробуйте понять его общую архитектуру, такую как: чтение/запись потоков; как HBase обеспечивает строгую последовательность; какие минорные/мажорные сжатия доступны; и где LRU-кэш и Bloom Filter’ы используются в системе. Вы даже можете сравнить HBase и Cassandra и посмотреть, что у них общего и в чем их различия. Тогда, если вас попросят создать хранилище типа «ключ-значение», вы будете знать, что делать.

Многие блоги, такие как Hacker Noon и инженерные блоги некоторых компаний также являются отличным источником информации. Кроме этого официальная документация по проектам с открытым исходным кодом может быть очень полезна.

Самое главное — это сохранять заинтересованность. Будьте губкой, которая впитывает всё, что её окружает.

Машинное обучение

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

Если у вас не было опыта в изучении машинного обучения, и вы не проходили какие-то действительно хорошие курсы по МО, то вам совсем не помешает немного почитать учебники. Можно взять классические, такие как Elements of Statistical Learning and Pattern Recognition или Machine Learning. А если вам интересны более узкие области, можете отдельно почитать про них.

Убедитесь, что вы понимаете базовые понятия такие, как: дилемма смещения и дисперсии, переобучение, градиентный спуск, L1/L2 регуляризация, теорема Байеса, бэггинг/бустинг, коллаборативная фильтрация, уменьшение размерности и т.д. Ознакомьтесь с простыми формулами, такими как теорема Байеса, вывод моделей логической регрессии, метод опорных векторов. Попробуйте реализовать простые модели, такие как дерево принятия решений и метод k-средних. Если вы включаете в своё резюме какие-то модели, то убедитесь, что вы их очень хорошо понимаете и можете поговорить об их плюсах и минусах.

Для разработки с использованием машинного обучения вы должны понимать процесс создания продукта. Вот что я пытался сделать:

  1. Выясните, какова задача: прогноз, рекомендация, кластеризация, поиск и т.д.
  2. Выберите верный алгоритм: c учителем или самообучение, классификация или регрессия, линейная модель / дерево решений / нейронная сеть и т.д. Вы также должны уметь рассуждать о том, как должен происходить выбор.
  3. Выберите подходящие функции, исходя из доступных данных.
  4. Выберите показатели производительности модели.
  5. При желании, прокомментируйте, как оптимизировать модель для производства.

Здесь я хочу еще раз подчеркнуть важность сохранения заинтересованности и непрерывного обучения. Старайтесь не просто использовать API для Spark MLlib или XGBoost и считать дело сделанным, а понять, почему стохастический градиентный спуск подходит для распределенного обучения, как XGBoost отличается от традиционного GBDT, что особенного в его функции потерь, почему нужно вычислять производную второго порядка и т.д.

Процесс собеседования о работе

Я начал с ответа на сообщения HR в LinkedIn и попросил рефералы. После одной проваленной попытки (об этом расскажу позже), я несколько месяцев усердно готовился, и после этого с помощью моих рекрутеров я организовал себе целую неделю в Сан-Франциско. Я прилетел в воскресенье, затем у меня было 5 полных дней собеседований о работе. Я встретился примерно с 30 интервьюерами из лучших компаний мира, и мне повезло получить все 5 предложений о работе!

По телефону

Все телефонные собеседования стандартны. Единственное различие это их длительность: для некоторых компаний как LinkedIn это один час, а, например, в Facebook и Airbnb это 45 минут.

Так как вы ограничены по времени, обычно у вас только один шанс, поэтому главное здесь — это опыт. Вам нужно будет очень быстро понять задачу и предложить решение высокого уровня. Не забывайте говорить интервьюеру о ваших мыслях по данной проблеме и её возможных решениях. Это может замедлить вас по началу, но здесь самое важное — ваше общение с интервьюером. Не заучивайте ответы, интервьюер почти наверняка это заметит.

Если вы претендуете на должность инженера по машинному обучению, то будьте готовы, что на собеседовании вам будут задавать теоретические вопросы, поэтому перед таким собеседованием повторите всё, что вы знаете.

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

Собеседования с несколькими компаниями в один день дают вам некоторые преимущества. Я пропустил второй раунд телефонного собеседования с Airbnb и Salesforce, потому что LinkedIn и Facebok пригласили меня к себе в офис уже после первого раунда.

Что ещё более удивительно, Google разрешили мне сразу прийти на собеседование в офис, когда узнали, что я уже приглашён на 4 других собеседования на следующей неделе. Я понимал, что это будет ужасно утомительно, но кто сможет отказать Google?

Собеседования в офисе

LinkedIn

LinkedIn

Это было моё первое собеседование, и оно проходило в Саннивейл. Офис был очень аккуратным, а люди выглядели как всегда профессиональными.

Каждое собеседование длится примерно час. Вопросы по программированию довольно стандартны, а вот вопросы по машинному обучению могут быть сложными. Тем не менее я получил имейл от HR, в котором были материалы для подготовки, которые оказались довольно полезными, поэтому на собеседовании не было ничего, что удивило бы меня. До меня дошёл слух о том, что LinkedIn лучше всех во всей Кремниевой долине кормит своих сотрудников. И из того что я видел, даже если это не совсем правда, то очень близко к ней.

Тот факт, что Micrisoft выкупил LinkedIn похоже освободил их от финансовых трудностей, и теперь они делают реально крутые вещи. У них появились новые фишки, такие как видео, профессиональная реклам. Так как LinkedIn сосредоточены на профессиональном развитии, они ставят рост своих сотрудников на первое место. Многие команды в компании расширяются, так что стоит поторопиться, если вы хотите присоединиться к ним.

Salesforce Einstein

Salesforce

Rock star проект от rock star команды. Довольно молодая команда, которая очень сильно смахивает на стартап. Проект построен на Scala stack, поэтому типобезопасность там имеет не последний приоритет.

Я проходил собеседование в офисе в Пало Алто. У команды там сплоченная рабочая атмосфера. Все очень увлечены тем, что делают, и действительно наслаждаются этим. Так как у меня впереди меня ждали другие собеседования, я провёл там не много времени, но я хотел бы провести больше.

Google

Google

Абсолютный лидер индустрии, и сложно сказать что-то, чего люди ещё не знают. Google огромный. Просто ГИГАНТСКИЙ! Поездка на велосипеде до места встречи с друзьями заняла у меня 20 минут. Также очереди на обеде могут быть очень большими. Но Google это всегда лучшее место для разработчика.

Моё собеседование проходило в одном из многочисленных зданий кампуса в Манунтин Вью, и я точно не знаю, в каком именно, потому что это место ОГРОМНОЕ.

Мои интервьюеры выглядели очень умными людьми, а когда они начали говорить, это впечатление только усилилось. Работать с этими людьми было бы очень круто.

Единственное, что особенно в собеседовании в Google, — это то, что уметь оценивать сложность алгоритма очень важно. Убедитесь, что вы действительно понимаете, что такое «O» большое.

Airbnb

Airbnb

Быстро растущая компания с уникальной культурой, и скорее всего с самым красивым офисом во всей Кремниевой долине. Новые разработки, такие как Впечатления и резервирование ресторанов, высокий спрос на рынке и расширение в Китай, всё это способствует уверенному будущему компании. Airbnb — отличный выбор, если вы готовы рисковать и при этом быстро развиваться.

Собеседование в Airbnb немного не похоже на остальные, потому что там вам придется писать код на IDE, а не на обычной доске, поэтому ваш код должен компилироваться и желательно выдавать правильный ответ. Некоторые задачи могут быть действительно сложными.

Так же они проводят кросс-функциональное интервью. В Airbnb серьёзно подходят к культуре компании, поэтому даже если вы идеальный специалист, это не всегда гарантирует, что вы получите работу. Для меня эта часть была приятной, интервьюеры просто беседовали со мной, и все были довольны в конце.

В целом я считаю, что собеседование в Airbnb было самым трудным из-за сложности задач, большей продолжительности по времени и уникальных кросс-функциональных интервью. Если вы заинтересованы в работе в Airbnb, вы должны понимать их культуру и ценности.

Facebook

Facebook

Ещё один гигант, который очень быстро растёт, но всё ещё мелкий по сравнению с Google. Благодаря своим продуктам, доминированию на рынке социальных сетей и большим инвестициям в AI и VR, в будущем я вижу для этой компании только больше роста и развития. С такими звездами, как Ян Лекун и Янцин Цзя, это идеальное место для тех, кто интересуется машинным обучением.

Моё собеседование проходило в корпусе 20. На его крыше открывается вид на океан, и там же расположен сад. Ещё в этом здании находится офис Марка Цукерберга.

Я не знаю, были ли у интервьюеров какие-то чёткие инструкции, но они никак не давали мне понять, верно ли моё решение, хотя я знал, что с ним скорее всего всё в порядке.

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

В основном я чувствовал, что люди верят в эту компанию и гордятся тем, что они делают. Будучи компанией стоимостью полтора триллиона долларов и растущей, Facebook — идеальное место для развития вашей карьеры.

Обсуждение условий

Это довольно большая тема, и я не смогу полностью раскрыть её здесь. Но эта статья может быть очень полезна.

Тем не менее вот небольшой список вещей, которые я считаю очень важными:

  1. Ведите себя как профессионал.
  2. Помните о своих сильных сторонах.
  3. Будьте действительно заинтересованы в командах и проектах.
  4. Сохраняйте спокойствие и уверенность.
  5. Будьте решительным, но вежливым.
  6. Никогда не лгите.

Как я провалил собеседование в Databricks

Каждый успех начинается с поражения, и собеседования о работе не исключение. Перед тем, как я начал проходить эти 5 собеседований, я провалил собеседование в Databricks в мае.

Еще в апреле со мной связались через LinkedIn и спросили, интересует ли меня позиция в команде Spark MLlib. Я был заинтригован, потому что 1) Я использую Spark и люблю Scala 2) Инженеры Databricks — первоклассные специалисты, и 3) Spark — это революция всего мира big data и о такой работе можно только мечтать. Это была возможность, которую я не мог упустить, поэтому через несколько дней я начал собеседования о работе.

Планка очень высока, и сам процесс занимает довольно много времени: предварительное анкетирование, собеседование по телефону, собеседование с заданием и полное собеседование в офисе.

Мне удалось получить приглашение в их офис в центре Сан-Франциско, откуда можно увидеть Трежер Айленд.

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

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

Некоторые размышления

  1. Жизнь коротка, а карьера ещё короче, делайте всё в своё время.
  2. Собеседования — это не только ваша карьера, но и отличная возможность для общения и новых знакомств.
  3. Всегда интересуйтесь тем, что вам нравится и учитесь.
  4. То, что вы получили предложения о работе означает, что вы отвечаете минимальным требованиям. Максимальных требований нет. Никогда не переставайте расти и развиваться.

Моя первая смена карьеры была непростой: от первого проваленного собеседования о работе в мае до полученной работы в конце сентября прошло много времени.

Мне было трудно подготовиться, потому что всё ещё необходимо было хорошо справляться с моей нынешней работой. В течение нескольких недель я регулярно готовился к собеседованию до 1 часа ночи, вставая в 8:30 утра на следующий день и полностью посвящая себя еще одному дню на работе.

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

Спасибо, что прочитали этот очень длинный пост.

Оригинал статьи от Xiaohan Zeng

Дополнительные материалы по теме:

Как не провалить дистанционное техническое собеседование

Как попасть на собеседование в компанию мечты

Как успешно пройти любое техническое собеседование