От вашей работы мечты вас отделяет только техническое собеседование. Советы по подготовке (+опрос)

0
2197
views

Перевод статьи «The one thing between you and your dream job — coding interview!».

Техническое собеседование

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

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

Зачем вообще нужны технические собеседования?

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

Техническое собеседование это отличный фильтр для выявления хороших сотрудников.

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

Четкие сигналы

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

Показатель навыков

Большинство компаний, проводящих технические собеседования, нуждаются в людях, способных работать с любым техническим стеком и решать современные проблемы. Поэтому им нужен способ объективно оценить навыки кандидата безотносительно к его «звездному» резюме (а у большинства людей, желающих попасть в подобные компании, резюме именно такие). Задачи на техническом собеседовании призваны проверить навыки решения задач у кандидата, поскольку их наличие позволит ему браться за решение любых других проблем.

Опыт не имеет значения

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

Как пройти техническое собеседование?

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

Давайте рассмотрим, как можно подготовиться к такого рода собеседованиям.

Выберите язык

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

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

Какие языки программирования вы используете?

Используйте особенности выбранного вами языка

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

Срок реализации: 1 неделя.

Хорошо изучите теорию

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

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

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

Срок реализации: 2-3 недели, в зависимости от уже имеющихся знаний.

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

Пробное техническое собеседование

Попрактикуйтесь

Имея хорошее понимание структур данных и алгоритмов, вы можете погрузиться в решение задач. Для этой цели можно воспользоваться Leetcode и InterviewBit. Оба сайта имеют широкий спектр задач, сгруппированных по видам. Концентрируйтесь не на количестве, а на качестве. Старайтесь разбираться с задачами самостоятельно, отмечайте наличие шаблонов в разных проблемах, записывайте их и используйте в дальнейшем эти записи. Также можно почитать «Cracking the coding interview» или «Data Structures and Algorithms Made Easy».

Срок реализации – 8-12 недель.

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

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

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

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