Перевод и адаптация статьи Ace Your Technical Interview: What Got Me Into Google, Microsoft and More в сообществе The Startup на Medium. Высший пилотаж на техническом интервью: как я попала в Google, Microsoft и не только - 1До первого собеседования на стажировку я даже не догадывалась, что на нем будут задавать и технические вопросы. Я предполагала, что на нем меня ждет только куча вопросов в духе “расскажите о себе”. Впрочем, и к ним я не была готова как следует. Я провела два часа в центре профориентации, пытаясь вытрясти из всех подряд какие-либо ценные советы и еще два часа дома, репетируя ответы на разные вопросы. Но когда я пришла на собеседование, интервьюер не стал спрашивать о моих сильных и слабых сторонах. Вместо этого мне вручили маркер и сказали идти к доске. А я даже не подумала о том, что сначала проверят мою техническую подготовку! Это застало меня врасплох. Я не знала, как грамотно отвечать на вопросы и через несколько часов получила электронное письмо с вежливым отказом. К счастью, после этого случая у меня было много успешных интервью. Я была на полсотне технических собеседований и подготовила к ним множество своих друзей. Кажется, мой подход неплохо работает, ведь он помог мне и другим людям успешно справиться с интервью в таких компаниях как Google, Microsoft, Apple, Amazon и т.д. Я хотела бы помочь лично каждому, но на это просто не хватит времени. Лучшее, что я могу сделать — поделиться пошаговой инструкцией по тому, как проходить технические собеседования. Что можно, а что нельзя делать в таких ситуациях, я поняла методом проб и ошибок. Так что вот вам от меня список полезных советов, который я составила за несколько лет практики.

1. Не хватайтесь “с порога” за пробные интервью

Обычно люди советуют проходить как можно больше пробных интервью — и они правы. Но если вы неподготовлены, пробное интервью может быть неээфективным, отпугнуть вас и даже деморализовать. По опыту скажу: если я в качестве тренировки интервьюировала кого-то, кто был совсем не готов, по итогу они чувствовали себя демотивированными, потому что “плавали” в вопросах и отвечали не слишком хорошо. Уделите время тому, чтобы подготовиться получше и разобраться с тем, на что похоже техническое интервью. Вот наглядный пример пробного интервью в Google:

2. Умение общаться > уровень технической подготовки

Многие готовятся к техническим интервью, сидя часами на сайтах типа LeetCode и Hackerrank. Это отличные платформы для практики. Но лучше немного отвлечься, прежде чем вы потратите кучу часов на решение наобум задач, с которыми, как вы предполагаете, вы столкнетесь на собеседовании. Это неэффективный подход: на интервью вам попадется по крайней мере один вопрос, который вы прежде нигде не встречали. Среди моих друзей есть более сильные программисты, чем я, и меня часто удивляло удивляло, почему я справлялась с тестированием моей технической подготовки, а они (иногда) нет. Наибольшая разница между нами вероятнее всего заключается в том, что я проводила много времени, тренируя свои навыки общения. Серьезно: знание того, как решить топ-100 технических заданий не поможет, если не уметь толком объяснить свою логику решения. Очень важно учиться формулировать мысли. Поначалу все это может казаться тяжелым, неловким и неестественным, но практика помогает. Очень важно поддерживать свой технический бекграунд на высоком уровнее, но развивать навыки общения, возможно, еще важнее. Если у вас времени в обрез перед грядущим интервью, лучше сосредоточиться на коммуникации, чем пытаться за два дня заново пройти материал, который вы два года учили на компьютерных науках. Перед следующим техническим собеседованием попробуйте поучиться вот чему:

2.1 Научитесь задавать уточняющие вопросы

Один из главных плюсов на собеседовании — способность уточнить вопрос, который вам задали. Обычно те, кто проводят интервью, не дают все вводные, так что приходится выуживать из них дополнительные подробности. Вы же не можете решить проблему, не до конца понимая, в чем ее суть! Чтобы потренироваться, можете взять несколько вопросов с технических собеседований и придумать к ним ряд уточняющих вопросов. Например, если вас просят отсортировать список, вы можете спросить:
  • Как отсортировать список — в возрастающем или убывающем порядке?
  • Какой тип данных содержит список?
  • Могли бы вы привести пример того, как должен выглядеть ввод и вывод данных для данного типа задачи?
  • И т.д.
Вопросов может быть гораздо больше — это всего лишь несколько примеров. Обязательно уточняйте разные нюансы: Попросите пример ввода и вывода
  • Уточните тип данных
  • Уточните, есть ли какие-либо ограничения в диапазоне значений
  • Спросите, придется иметь дело с пограничными случаями
  • Выясните, можете ли вы использовать определенные библиотеки и фичи языка, на котором вы программируете

2.2 Учитесь выражать мысли

Раз уж вы задали все уточняющие вопросы и точно знаете, что нужно для решения проблемы, пришло время научиться правильно излагать суть своего решения. Если вы начнете просто писать код, не поясняя по ходу дела, зачем вы это делаете, интервьюеру будет сложно разобраться, правы вы или нет. За такое вы не получите баллы “в зачет”, не говоря уже о том, что можете в итоге написать неверное решение. Когда вы по ходу объясняете логику вашего решения, интервьюер может скорректировать вас в правильном направлении, если вы немного собьетесь с курса. Прежде чем писать код, попробуйте сделать вот что:
  • Расскажите собеседнику о вашем возможном решении — получится ли у вас решение задачи “в лоб” и можно или его можно как-то улучшить
  • Пошагово проговорите ваше решение на каком-либо примере, чтобы объяснить суть того, как оно должно работать
  • Разделите решение на несколько шагов и напишите псевдокод или “костяк”, чтобы интервьюер понял ход ваших мыслей
  • Протестируйте ваше решение разных пограничных случаях, чтобы разобраться, все ли вы учли. Поинтересуйтесь мнением интервьюера.
Чтобы потренироваться, возьмите какой-нибудь проработанный вопрос из интервью и попробуйте рассказать правильный ответ (решение) другу. Не можете найти друга — возьмите плюшевую зверушку или любой другой предмет и упражняйтесь на них.

3. Прокачайте технические знания и навыки

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

4. Практикуйтесь!

Вот теперь, прокачав необходимые навыки и знания, можно бросить все силы на практику.
В курсе JavaRush есть много задач-”головоломок” и целых проектов для создания прикладных решений.
Постарайтесь не просто писать решение, а обдумывать шаги: мысленно задавать уточняющие вопросы, продумывать структуру, а уже потом — писать решение. Это поможет вам почувствовать себя увереннее на интервью, а уверенность решает!

5. Что делать, если “забуксовали” на интервью?

Теперь представим, что вы попали на настоящее интервью и вдруг поняли, что вопрос поставил вас в тупик. Вы без понятия, что нужно сделать и как решить поставленную задачу. Вы хотите просто выбежать из комнаты и не возвращаться. Я понимаю — бывала в таких ситуациях, которые до сих пор снятся в кошмарах. Но не переживайте — надежда еще не потеряна. Не раз такое случалось на интервью, но они как правило заканчивались оффером. Это тяжело, это действует на нервы, но все возможно. Возьмите паузу и подумайте. Переведите дух, приведите мысли в порядок. Возможно, у вас появится “зацепка”. Пропетируйте решение на простом примере. Попробуйте создать упрощенную версию решения на похожей задаче, но попроще, обращая внимание на пошаговые действия. Например, если нужно отсортировать список — что вы делаете? Вы находите наименьшее число и ставите его в начало. А как бы вы реализовали это решение в коде? Расскажите о частном решении. Если полноценное решение не вырисовывается, ничего страшного. Скажите об этом интервьюеру, но также посвятите его в ход своих мыслей. Напоминает ли эта задача какую-либо из тех, с которыми вы сталкивались? Кажется ли, что вам нужно использовать определенную структуру данных для ее решения? Поделитесь логикой, которой вы руководствуетесь. Будьте честны. Если вы уверены, что вопрос, который вам задали — из незнакомой вам отрасли знаний, скажите об этом интервьюеру. Скажите, что вы готовы искать решение, но пока что у вас недостает необходимых навыков. Однажды мне задали вопрос, связанный с безопасностью сети. На тот момент у меня не было практики в этой сфере, о чем я и сказала интервьюерам. Они объяснили мне необходимые основы, чтобы я могла справиться с задачей. Вас собеседуют живые люди :) Они прекрасно понимают вас, ведь и сами бывали в похожих ситуациях. Вот и все советы, которые я выработала за несколько лет собеседований. Они помогли мне и моим друзьям попасть в топовые компании. Удачи в поисках!