Я получил место разработчика в Facebook. Вот как я готовился к интервью.

Собеседования и их виды

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

Мое многолетнее путешествие в Кремниевую долину

Когда я изучал информатику в моем университете в Австралии, я всегда представлял, что в будущем стану программным инженером в Кремниевой долине.

Мне нравилась идея быть в центре всех инноваций технической индустрии, а также ее проколов. Эта цель меня мотивировала. Она заставляла меня сосредотачиваться.

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

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

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

Прохождение собеседований это навык

В ходе моей подготовки я всегда знал, что процесс интервью потребует много сил. Но, честно говоря, я и понятия не имел, насколько это будет тяжело, пока не попал на свое первое собеседование.

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

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

Как и во всем остальном в жизни, практика повышает вашу уверенность.

Разные виды собеседований, которые мне встретились

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

На своем пути в Кремниевую долину я сумел пройти в общей сложности семь интервью. Это дало мне уникальное видение того, как проходят собеседования.

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

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

Я кратко пробегусь по каждой теме, которая мне попалась.

Интервью по алгоритмам

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

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

Лично мне в самом деле нравятся алгоритмы на белой доске, потому что мне не приходится беспокоиться о написании сложного синтаксиса (большую часть времени), что позволяет мне сосредоточиться на конкретной проблеме. Другим людям это может не нравится, но я бы посоветовал им последовательно попрактиковаться, так как это может изменить их мнение.

Интервью по дизайну архитектуры

Это интересное собеседование, а я его как раз сильно недооценил. Интервьюер попросит вас спроектировать систему (на белой доске, конечно) вроде системы парковочных талонов, мессенджера, ленты твиттера или других распространенных систем.

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

Собственно, вам следует управлять разговором, чтобы раскрыть ваши знания того как работает система. Если вы бэкенд-инженер, вам на самом деле не нужно погружаться в механику деталей клиентского приложения, разве что у вас за плечами есть опыт в этой сфере. Я – iOS-инженер, поэтому я говорил об архитектуре шаблонов, модуляризации функционала, шаблонах проектирования, а не о масштабировании конечных точек API, добавлении workers, AWS и т. д.

Поведенческие собеседования

Интервьюер будет задавать вам вопросы о вас, и о том как вы поступаете в определенных ситуациях. Подготовка к таким собеседованиям не настолько сложна, как к другим, но требует самоанализа своего поведения.

Типичные вопросы могут быть такими:

  • Как вы справляетесь с поражениями?
  • Какова ваша самая большая слабость?
  • Как вы разрешаете конфликты?
  • Что бы вы сделали по-другому?

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

«Моя слабость в том, что я слишком сосредоточен».

«Это была полностью вина Джерри, я вообще болел большую часть проекта».

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

Совпадение культур

Это обычно объединяется с поведенческим интервью и служит для выяснения того насколько вы находитесь на одной линий с ценностями компании. Например, Facebook имеет «хакерскую» культуру: смелость, продвижение новых идей, испытания путем экспериментов, отсутствие страха что-то сломать. В то же время Airbnb хочет создать мир, в котором люди, куда бы они ни направились, чувствуют себя как дома, и поэтому они ищут людей с хорошими навыками гостеприимства.

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

Парное программирование

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

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

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

Нахождение и исправление ошибок

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

У меня был только одно собеседование такого типа и я думаю, что подготовиться к нему достаточно сложно, особенно новичку. Каждая среда программирования имеет свои особенности и нюансы; многие патчи, которые я делал, основывались на прошлом опыте с IDE (интегрированная среда разработки) и касались конструкций, накапливаемых годами.

Проверка знаний в конкретной области

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

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

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

Понимание операционных систем

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

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

Как нужно готовиться

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

Минимум знаний

Если меня спросят, на что следует сделать упор, я бы посоветовал следующее:

  • Научитесь писать код от руки на бумаге и белой доске, а затем помещайте его в IDE для подсветки синтаксиса; это должно стать вашей второй натурой.
  • Углубляйте знания касательно структур данных, их сильных и слабых сторон в сравнении друг с другом. Я обнаружил, что реализация структур данных и их поведения с нуля научили меня гораздо большему, чем то, что я знал из их абстрактных концепций.
  • Добейтесь полного понимания «О большого» в том что касается временной и пространственной сложности; это будет прекрасно сочетаться с вашими вопросами по алгоритмам и сортировке.
  • Охватите все главные сортировочные алгоритмы, потому что разница во временной/пространственной сложности может сорвать ваше оптимальное решение для алгоритма, который вы пытаетесь решить.

Когда начинать

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

Не переживайте

У вас получится.

***
Подписывайтесь на наш канал в Telegram!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]

1 комментарий к “Я получил место разработчика в Facebook. Вот как я готовился к интервью.”

  1. Инженер

    Какой умственно отсталый переводил этот текст автоматическим онлайн-переводчиком?
    У вас редакторы вообще есть или вы даже такого слова не знаете?

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх