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

Вот как я подготовился к этим собеседованиям и чему научился в процессе.

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

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

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

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

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

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

Собеседование - это навык

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

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

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

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

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

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

Во время моей поездки в Кремниевую долину мне удалось провести в общей сложности семь собеседований на месте. Это дало мне уникальное представление о текущем ландшафте для проведения собеседований.

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

Я кратко рассмотрю каждую из тем, с которыми я столкнулся.

Алгоритм интервью

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

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

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

Архитектура Дизайн Интервью

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

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

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

Поведенческие интервью

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

Обычно задаются следующие вопросы:
Как вы справляетесь с неудачами?
Какая ваша самая большая слабость?
Как разрешать конфликты?
Что бы вы сделали по-другому?

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

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

Культура Соответствие

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

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

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

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

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

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

Поиск и исправление ошибок

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

Я видел только один случай такого типа собеседований и чувствую, что для кого-то будет довольно сложно по-настоящему подготовиться, особенно если он младший. У каждой среды кодирования есть свои маленькие причуды и нюансы, большая часть лоскутков, которые я сделал, пришла из предыдущего опыта работы с IDE (интегрированной средой разработки) и связанными с ней фреймворками, которые я накопил за эти годы.

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

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

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

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

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

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

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

Как вам следует подготовиться

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

Минимальные знания

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

  • Научитесь писать код вручную сначала на бумаге и на доске, а затем вставьте его в среду IDE для выделения синтаксиса. Это должно стать вашей второй натурой.
  • Развивайте глубокие знания структур данных, их сильных и слабых сторон по сравнению друг с другом. Я обнаружил, что реализация структур данных и их поведения с нуля научила меня гораздо большему, чем то, что я знал из их абстрактных концепций.
  • Полностью понимать нотацию Big O как для временных, так и для пространственных сложностей, это идеально сочетается с вашим алгоритмом и вопросами сортировки.
  • Освойте все основные алгоритмы сортировки, потому что разница во времени и пространстве может сорвать ваше оптимальное решение для алгоритма, который вы пытаетесь решить.

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

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

Не волнуйся

У тебя есть это.

Ресурсы

Имитация интервью

Алгоритмы

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

Архитектурный дизайн

Поведенческий

Если вам нравится то, что вы прочитали сегодня, вы можете проверить другие мои статьи о разработке iOS и Swift, или, если хотите связаться, отправьте мне твит или подпишитесь на меня в Twitter @ andyyhope , это действительно делает мой день лучше. Я также создаю приложение для распознавания текста для macOS. Обязательно следите за его развитием, @SameSame_app