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

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

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

У меня было около 3,5 лет опыта, когда я начал и проходил собеседование на должности SSE / SDE2 / L4, в основном для платформы Android, поскольку это моя область знаний. Но я твердо уверен, что этот пост одинаково полезен для тех, кто подает заявку на получение общего SDE. Единственное, что вы не найдете ресурсов для проектирования серверных систем (которые, я думаю, вам не понадобятся после грокинга).

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

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

Предложения: Booking, Truecaller, Google, Amazon, Phonepe, Curefit, Dunzo, GoJek.

Процесс не завершен: Захват, Квадрат.

Отклонить: Agoda, Uber

Процесс с Grab так и не был завершен. Рекрутер так и не ответил после моего третьего собеседования. Оставим подробности на другой день.

Что касается Square, мне сказали, что отзывы на все мои интервью были отличными. Они хотели двигаться вперед, но в то время не было подходящей вакансии, и они вернутся ко мне через 2–3 месяца.

Я лично задокументировал все свои интервью со всеми этими компаниями. Так что не стесняйтесь обращаться ко мне за помощью в этом процессе.

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

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

А теперь давайте начнем с обучающей части. Я разделил на разные разделы.

Решение алгоритмических проблем

Это была САМАЯ занимающая много времени (и самая приятная) часть процесса. Я практиковался в решении задач только на Leetcode, и считаю, что этого более чем достаточно.

Я решил около 200, когда начал интервьюировать, и около 350 (50 сложных и ~ 175 средних), когда начал с Google и Amazon.

Вот некоторые из вещей, которые я рекомендую делать:

  • Обсудить с другими

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

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

  • Имитация интервью

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

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

  • Участвуйте в конкурсах

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

  • Сохраняйте личные заметки

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

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

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

  • Планирование

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

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

В вопросах решения проблем существует ограниченный набор шаблонов / категорий.

Большинство проблем относятся к одному из этих паттернов. Позвольте мне объяснить на нескольких примерах.

Если вы возьмете тему графиков, большинство проблем можно разделить на:

  • Поиск компонентов
  • Обнаружение / поиск цикла.
  • Поиск кратчайшего пути между узлами.
  • Минимальное остовное дерево.
  • Топологическая сортировка.

Точно так же многие проблемы в DP можно отнести к категории« Крупнейшие проблемы подпоследовательности ».

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

Https://leetcode.com/problems/binary-tree-cameras/ https://leetcode.com/problems/distribute-coins-in-binary-tree/

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

Руководство во время интервью.

Итак, вы достигли этой стадии. Скоро твои интервью.

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

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

Это именно то, на чем вам нужно сосредоточиться во время собеседования. Более подробно остановимся на некоторых моментах:

  • Попросите подсказок, если вы не можете найти решение. Нет ничего плохого в том, чтобы просить подсказок. И если вы сумеете уловить подсказку и после этого предложить решение, в большинстве случаев оно будет засчитано в вашу пользу. Я просил намеков во многих своих интервью.
  • Если вы закончите интервью с придурком, НЕ позволяйте ему испортить ваше собеседование. Вы не хотите лишать себя перспектив работы в компании только потому, что человек, проводивший ваше собеседование, не был самый опытный интервьюер! Как ты с этим справляешься? Здесь сложно обобщить единое решение, но важно то, что вы должны сделать все возможное. И вы сможете выкладываться на полную, только если будете спокойны, способны правильно мыслить и действовать проактивно. Вы не можете этого сделать, если нервничаете. Вот тут-то и пригодятся имитационные интервью.
  • Убедитесь, что ваш собеседник работает с той же частотой, что и вы, все время. Делайте это заранее. Если вы выясните, что последние 25–30 секунд говорили только вы, остановитесь прямо здесь и спросите их: если они хотят, чтобы вы двигались в том же направлении, или глубоко погрузитесь в то, что вы сказали ранее, или остановитесь на этот момент. Дайте им возможность высказаться.
  • Им нужно знать ваши положительные моменты за эти 45 минут. Я видел много кандидатов, которые пытались уклониться от интервьюера, задавая то, что им не нравится. Не делай этого. Это намного хуже, чем позволить им спросить и признать, что вы не знаете. После собеседования они должны написать подробный отзыв, объясняющий, почему, по их мнению, вы подходите. Простое решение вопроса не поможет, если вы не предоставите достаточно доказательств своей пригодности.
  • Всегда старайтесь сначала придумывать решение с помощью грубой силы. На это есть несколько причин. Во-первых, в начале самого собеседования вы предложили решение, по крайней мере, функционально правильное. Это дает вам положительные моменты и позволяет вам занять более уверенное положение. Во-вторых, теперь у вас есть база, на которой вы можете опираться и определять BUD (узкие места, повторяющаяся работа, ненужная работа) для дальнейшей оптимизации. В-третьих, ваш собеседник знает, что вы делаете, поэтому он также может дать некоторые указания, если он думает, что вы застряли.
  • Для этапов HR и HM ведите документ, содержащий все возможные вопросы и ответы на них. В этих раундах иногда возникают сложные вопросы, и даже если их нет, лучше подготовить контент заранее. Если вы думаете об ответе во время выполнения, вы можете упустить некоторые детали. Эти интервью также уделяют большое внимание вашей способности выражать свои мысли. Итак, если у вас уже есть представление о том, о чем вы собираетесь говорить, вам лучше сосредоточиться на других вещах, подобных этому. Вот пример документа, который содержит все вопросы, к которым, я думаю, вам следует подготовиться.

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

Проекты

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

Если вы не можете объяснить «отличный» проект своему рекрутеру простым языком менее чем за 10 минут, то это бесполезно на собеседовании.

Фактически, это просто напрасная трата вашего времени. Именно из-за этого я облажался со своим uber-собеседованием. Проект был сложным, и я не мог объяснить его простыми словами.

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

Образовательные ресурсы

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

  • Основной язык программирования. Мой - Java, поэтому вот что я приготовил:

Все основные структуры данных, такие как HashMap, TreeSet, ConcurrentHashMap, ArrayList

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

Дженерики, Отражение, Коллекции

Ясность в отношении некоторых основных понятий, таких как: почему коллекции не допускают примитивов, почему в java есть пул строк, как вы можете нарушить шаблон синглтона в java, как работают перечисления

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

Компоненты архитектуры, варианты хранения, фоновая обработка, местоположение, потоки и процессы, оптимизация батареи, оптимизация сети, эспрессо и мокито, recyclerview и основные компоненты Android, такие как действия, службы, фрагменты, поставщики контента.

Я составил список всех вопросов, которые мне задавали на раундах разработки и разработки Android. Буду делиться ими в отдельном посте.

  • Сети. Вы должны знать основы, в основном связанные с транспортным и прикладным уровнями (TCP, UDP, HTTP, TLS, DNS). High-performance Browser Networking - одна из лучших книг, которые я когда-либо встречал по сетевым технологиям. Вы можете прочитать всю книгу, если вам интересно, но для интервью достаточно раздела Networking 101.
  • Параллелизм. Независимо от роли, на которую вы претендуете, необходимо четкое понимание основных принципов параллелизма. Параллелизм в Java считается в сообществе библией. Я считаю, что эту книгу должен прочитать каждый инженер-программист. Опять же, первых пяти глав должно хватить для интервью. Если у вас мало времени, я собрал несколько заметок из первых четырех глав здесь, но настоятельно рекомендуется прочитать главы полностью.
  • Операционные системы: как инженер-программист, я думаю, вы должны знать об этих темах, поскольку эти знания будут использоваться в вашей повседневной работе. Новичкам в колледже необходимо хорошо разбираться в этих концепциях. Знаменитый учебник для колледжа Основные понятия об операционных системах является здесь исчерпывающим и надежным источником. Первых 4–5 глав должно быть достаточно для собеседований, но выделите время, чтобы закончить их после собеседований.

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

Придерживаться плана

Мне было непросто придерживаться этого плана в течение 4–5 месяцев. Итак, в течение этого периода я как бы органично разработал / наблюдал некоторые методы, которые помогли мне остаться так долго и сделать его менее беспокойным (Практическая проповедь :)):

  • Найдите друга, с которым вы можете обсудить вещи, обсудить каждую деталь процесса, который происходит. В процессе будет много моментов, в которых будет полезно узнать мнение третьих лиц. Решая, когда назначить собеседование, как обсудить предложение ИЛИ, на каком-то этапе этого процесса вы будете в основном выгорать, может быть, несколько раз. В этот момент, конечно, будет полезно поговорить с кем-нибудь об этом. Но если есть такая инерция, чтобы сначала объяснить кому-то весь процесс, а затем спросить его мнение, это будет сложно выполнить, чем просто позвонить другу и спросить его мнение.
  • Цикл обратной связи. В целом это применимо к любому жизненному процессу, который длится более 3 месяцев. Вам необходимо проактивно внедрить цикл обратной связи. Например, если собеседования не проходят, не сомневайтесь и откладывайте предстоящие собеседования. Тщательно документируйте и анализируйте все свои собеседования, чтобы вы знали, в каких областях требуется дополнительная работа. Это может показаться очевидным советом, но выполнение этого требует строгой самоотдачи. Выбор очередности компаний, в которых вы хотите провести собеседование, - это еще один сценарий, в котором на первый план выходит петля обратной связи.
  • Если вы уже уволились с предыдущей работы (как и я) и ничего не делаете, кроме подготовки к собеседованию, сделайте что-нибудь, чтобы направить свою энергию. Это сильно повлияет на вашу продуктивность и сведет к минимуму выгорание. Бег, спорт, медитация ... все, что вам подходит.
  • Маленькие контрольные точки. На первый взгляд все это может показаться довольно сложным, и это так. Так что не стремитесь достичь всего сразу. Ставьте небольшие, постепенные цели и сосредотачивайтесь только на них. Примеры этих целей могут быть такими простыми, как 100 вопросов с leetcode ИЛИ решение 2 вопросов в конкурсе. И празднование этих маленьких побед обеспечит вам необходимый перерыв.

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

Не стесняйтесь обращаться ко мне здесь или в linkedin, если у вас возникнут какие-либо вопросы или отзывы.

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

Свяжитесь с нами, если хотите, чтобы я затронул любую другую связанную тему!

Ура!