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

Не все проблемы исходят от Leetcode

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

Думай громко

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

Не бросайтесь сразу к кодированию

Когда я был первокурсником, я часто делал эту ошибку. Была дана проблема, я не задал достаточно вопросов о проблемах, я не объяснил свои мысли или решение, я перешел к коду. Если вы это сделаете, это красный флаг. Почему это? Потому что в реальной жизни нет хорошо структурированных проблем. Вы должны задавать вопросы, чтобы узнать требования и варианты использования. То же самое и на собеседовании: интервьюеру может не потребоваться самое эффективное решение, или, возможно, проблема, которую он/она задает, не о том, о чем вы думаете. Поэтому вы всегда должны четко спрашивать требования, а затем сначала объяснять свое решение. Если интервьюер доволен вашим решением, только тогда вы должны начать программировать.

Напишите несколько дополнительных тестов

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

Выберите лучший язык, который вы знаете

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

Опишите, что вы пишете

Вы должны описать, что вы пишете, пока кодируете. Например:

assignment = dict()

При написании этого кода вы можете сказать —

Я создаю словарь, похожий на хэш-карту, для хранения значения присваивания.

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

Протестируйте свой код, прежде чем говорить, что он будет работать

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

Удача всегда нужна

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

  1. Менее опытный интервьюер: это самая очевидная причина. Если у интервьюера нет опыта, он/она не будет давать вам правильных советов. Кроме того, они склонны задавать более сложные вопросы, чем необходимо. Но хуже всего то, что они не понимают ваш код, даже если вы написали его максимально чисто. Кроме того, менее опытные интервьюеры обычно не предвзяты, поэтому они допускают только те решения, которые им известны.
  2. Предвзятость. Несмотря на то, что все крупные технологические компании пытаются уменьшить предвзятость, она все равно случается. Это может быть раса, образование, страна происхождения и т. д. Так что, если интервьюер предвзят, то он/она задаст вам сложные проблемы, даже если вы дадите правильное решение, они не дадут должной оценки/отзыва о вас.

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

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