Connect with us

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

Моя подготовка к собеседованию в Google

Во время моего недавнего поиска работы я посетил несколько интервью и получил предложения от Google и Amazon. За последние несколько лет онлайн-сообщество очень помогло мне в подготовке. В этом посте я поделюсь со всеми своим подготовительным путешествием и своими знаниями — сполна расплачусь за помощь :)

Опубликовано

/

     
     

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

Во время моего недавнего поиска работы я посетил несколько интервью и получил предложения от Google и Amazon. За последние несколько лет онлайн-сообщество очень помогло мне в подготовке. В этом посте я поделюсь со всеми своим подготовительным путешествием и своими знаниями — расплата за помощь :)

Процесс собеседования инженера по разработке ПО

Процесс обычно начинается с того, что рекрутер компании составляет список потенциальных кандидатов. Затем кандидат проходит первоначальный отбор(ы), в ходе которого определяется, подходит ли он/она для этой роли. Как только это будет понятно, типичное собеседование SWE проводится в следующих этапах.

  • Программирование — от 3 до 5 раундов
  • Системный дизайн — 1 раунд
  • Принципы лидерства — 1 раунд

P.S. Я сосредоточусь больше на подготовке к программным интервью, так как они занимают большую часть процесса собеседования. Однако мы кратко рассмотрим системный дизайн и лидерство.

A. Программирование

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

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

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

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

Стратегия подготовки

1. Оцените время подготовки

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

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

Общая продолжительность может варьироваться в зависимости от вашего опыта. В общем, я разделил их на категории ниже.

  • Новичок — может с комфортом писать код как минимум на одном языке программирования. Не хватает базовых знаний о структурах и алгоритмах. С трудом (или требует значительного времени) решает легкие задачи.
  • Средний — хорошее знание структур и алгоритмов. Нет проблем с легкими задачами. Может решить большинство средних проблем. Испытывает проблемы со сложными задачами.
  • Продвинутый — нет проблем со средней сложностью. Способен решить большинство сложных проблем.

Перед собеседованиями я поставил себя на средний уровень.

Моя подготовка к собеседованию в Google

2. Платформы для программирования и обучения

LeetCode, InterviewBit и GeeksForGeeks были моими главными платформами для практики в программировании. Перед собеседованием я решил около 320 задач LeetCode, 80 на InterviewBit и 30 вопросов в GFG.

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

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

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

  • LeetCode: Без сомнения, одна из лучших платформ. Лучшее в LeetCode — это его сообщество. Дискуссионные форумы очень полезны и предлагают несколько подходов. Не думайте дважды, выбирая LeetCode Premium, подписка стоит каждой копейки.
  • InterviewBit: Я настоятельно рекомендую следовать треку Программирование. Опыт работы на этой платформе максимально приближен к настоящему собеседованию. Иногда ваш код проходит все тестовые примеры, но может быть не оптимальным по времени/объему (как требуется во время реального собеседования). InterviewBit учитывает это и предоставляет вам дополнительную информацию.
  • GFG: Я использовал эту платформу в основном для обнаружения проблем и изучения основ данных и алгоритмов. Объяснения тем и языковые реализации действительно хороши. GFG также предлагает набор реальных задач из конкретных компаний и тем.

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

  • Специализация на алгоритмах — этот трек Coursera потрясающий! Всего в нем 4 курса, охватывающих все основные и несколько продвинутых тем. Отлично подходит для новичков.
  • Видео-туториалы на Youtube — мое отдохновение! Назову несколько каналов с полезным контентом — Рахит Джайн, Абдул Бари, Тушар Рой (отличные пошаговые руководства!) и BackToBack SWE.
  • CTCI и EPI — я использовал их как дополнение к подготовке. Эти книги дали мне возможность быстро освежить в памяти теорию и задачи. Иногда может показаться, что нацеливание на отдельные темы здесь занимает много времени. Но я решил просто освежить свои знания перед интервью.
  • CLRS — иногда используется для поиска псевдокода. Удобный ресурс для получения подробных знаний об общем времени алгоритмов (Time complexity) и теории.

И последнее, но не менее важное, статьи Вайдехи Джоши BaseCS. Она пишет интуитивно понятные и простые объяснения по нескольким темам.

3. Использование таймера

Поскольку продолжительность собеседований сокращается, очень важно работать над тем, как вы решаете проблемы. Как правило, программное интервью длится 45–50 минут, и от кандидата ожидается, что он решит — две средние ИЛИ одну сложную ИЛИ одну легкую плюс одну сложную задачу.

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

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

  • Средняя задача: 20 минут
  • Сложная задача: 40–45 минут

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

4. Имитационные интервью

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

«Если вы последовательно проходите имитации интервью, считайте это положительным знаком».

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

5. Подготовьте роадмап

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

Рассмотрим ниже снимок моего календаря за месяц до собеседования.

Моя подготовка к собеседованию в Google

Я разбил всю подготовку на набор задач/этапов. Я ставил ежедневные цели на недели (или даже месяцы) до собеседования. Этот метод помог мне избежать случайности и не заблудиться по пути.

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

Моя подготовка к собеседованию в Google

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

B. Системный дизайн

В этом раунде у кандидата проверяют навыки технического проектирования. Их можно далее разделить на дизайн низкого уровня (LLD) и дизайн высокого уровня (HLD). Знания в этой области растут с опытом работы в отрасли.

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

C. Лидерство/поведение

В отличие от предыдущих этапов, этот не является техническим. Компания рассчитывает узнать больше о кандидате его/ее словами. Поведенческие вопросы могут быть связаны с:

  • Личностью кандидата
  • Предыдущими проектами и опытом работы
  • Действиями, предпринятыми в сложных ситуациях
  • Ответами на положительные и отрицательные отзывы

Ключ здесь — оставаться прозрачным и просто быть собой.

Я выделю раздел S.A.R. (Situation, Action, Result — Ситуация, Действие, Результат), упомянутый в CTCI. Идея состоит в том, чтобы выявить важные темы для обсуждения, классифицируя истории на основе предыдущей работы. Чтобы узнать больше об этом, ознакомьтесь с таблицей софт скилов.

Моя подготовка к собеседованию в Google

Советы

  • Участвуйте в конкурсах программирования на LeetCode и Codeforces. Следите за задачами, которые вы не смогли решить, и всегда старайтесь их решать потом.
  • Я много использовал «Случайное» на LeetCode. Также избегайте решения проблем со множеством дизлайков. Обычно они никогда не стоят вашего времени.
  • Многие интервью проводятся в редакторах, не относящимися к IDE, например. Google Docs или CollabEdit. Так что попробуйте написать код в простом блокноте.
  • Думайте вслух во время интервью. Если вы идете в неправильном направлении — это помогает интервьюеру перенаправить вас на правильный путь.
  • Я часто начинаю с того, что записываю несколько подходов к любой задаче в собеседовании. Начиная с простейшего перебора и заканчивая наиболее оптимальным, определяя структуры данных и сложность времени/размера для каждого. Этот систематический способ разбить проблему помогает мне объяснить свой мыслительный процесс.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Популярное

Спасибо!

Теперь редакторы в курсе.