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

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

О чем нужно помнить перед изучением

  • Не сравнивайте себя с другими. Вы, вероятно, сейчас здесь, потому что вы, как и многие другие, почувствовали синдром самозванца, связанный с этим стилем интервью. Важно осознавать, что вы находитесь на своем собственном пути в своем учебном путешествии. Не расстраивайтесь, чувствуя себя отстающим по сравнению с другими.
  • Распознавайте базовые шаблоны, не запоминайте ответы. Легко попасть в ловушку, запоминая конкретные вопросы и надеясь, что они появятся на собеседовании. Не делайте этого. Вместо этого сосредоточьтесь на развитии своей интуиции, чтобы понять, какие структуры данных и алгоритмы подходят для решения той или иной проблемной области.
  • Общайтесь как можно больше. Ваши слова — единственный портал, через который интервьюер может проникнуть в ваше мышление. Обязательно всегда сообщайте о своем мыслительном процессе, даже если мысль все еще формируется.
  • Оцените случайность процесса. Существует высокая степень удачи, связанная с техническими интервью. У интервьюера или у вас может быть ужасный день. Вам могут задать вопрос, который вы забыли осветить во время учебы. Развитие позитивного отношения к этой реальности поможет вам справиться с этими обстоятельствами и продуктивно двигаться вперед.

Имея это в виду, давайте начнем с фазы I.

📚 Этап I: заполнение пробелов в знаниях и выявление слабых мест

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

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

  • Обозначение Big O (сложность времени и пространства)
  • Множество
  • Струны
  • Связанный список (одиночный/двойной)
  • Хеш-карты
  • Стеки и очереди
  • Деревья
  • Графики
  • Поиск (двоичный, поиск в глубину, поиск в ширину)
  • Сортировка (пузырьком, слиянием, быстрой сортировкой, сортировкой кучей)
  • Куча (мин/макс)
  • Рекурсия
  • Возвращение
  • Динамическое программирование

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

Я нашел эти два ресурса невероятно полезными для создания этой теории:

  • Торт-интервью. Бесплатный глоссарий с большим обзором тем. Также есть платная опция, если вам нравится их формат.
  • Плейлист MIT Introduction to Algorithms. Удивительный ресурс для более глубокого понимания, особенно видео с Эриком Демейном.

Вот дополнительные платные ресурсы, которые также могут оказаться полезными:

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

🟢 Этап II: начните задаватьпростые вопросы в Leetcode.

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

На этом этапе часто спотыкаются на самых простых вопросах. Я помню, как в самом начале своего пути поставил в тупик один из самых простых вопросов Leetcode («Драгоценности и камни»). Это совершенно нормально. Это мышца, которую нужно тренировать.

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

Постарайтесь ответить не менее чем на 40 простых вопросов о Leetcode. Дополнительные вопросы вы можете найти в плейлисте этого интервью HackerRank. Вы должны перейти к следующему этапу, когда вам будет удобно отвечать на простые вопросы без посторонней помощи.

🟡 Этап III: начните задавать средние вопросы в Leetcode

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

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

Вы можете начать инстинктивно замечать закономерности в решении проблем, например:

  • Видя, что наивное решение грубой силы обычно существует с неблагоприятным временем и сложностью.
  • Признание того, что что-то из вашего инструментария позволяет выполнить решение за один проход, что обеспечивает O(n) пространственную и временную сложность.
  • Обнаружение того, что вы можете достичь пространственной сложности O (1) с использованием умного алгоритма.

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

👥 Фаза IV: Практикуйтесь в живом интервью с реальным человеком

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

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

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

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

Еще одна замечательная платформа — Interviewing.io, которая анонимно объединяет вас для фиктивных интервью со старшими инженерами. Отзывы отличные, и, если собеседование прошло хорошо, вас даже могут пригласить прямо на собеседование на месте.

На этом этапе вы будете уверены в преодолении технических и человеческих проблем, связанных с собеседованиями по стилю кодирования. Свяжитесь с этими рекрутерами или разместите свой профиль на сайтах, ориентированных на кандидатов, таких как Hired.com. Ты получил это!

Заключение

Собеседования по стилю кодирования — неотъемлемая часть индустрии. Опыт подготовки к этим интервью был сложным, но в конечном итоге очень полезным. Вы разовьете вычислительное мышление, быстрое решение проблем и коммуникативные навыки, которые важны как для карьеры, так и для жизни!