Собеседования в крупные компании. Часть 2 - алгоритмы и теория
После одобрения разработчиками вас как кандидата, HR рассказывает про дальнейшие шаги по процессу собеседования. Вам назначают собеседование с разработчиком, как правило через пару дней после согласования кандидатуры.
Алгоритмы (задачи как на LeetCode) могут быть как в одной секции с теорией, так и отдельным этапом. В моем же случае все было совмещено - сначала была задача, а потом теория.
1️⃣ Задача
Решается в браузерной IDE либо самой компании, либо же в стороннем сервисе, так что автокомплита не ждите. Была проблема уровня Easy с LeetCode. Я собеседовался в разные компании, и выше легких задач никто не дает, но не могу гарантировать, что это всегда так. Суть задачи: даны 2 массива с числами, и нужно вернуть список тех значений, которые находятся в первом, но отсутствуют во втором (по-сути, удалить числа из второго массива в первом). Решать можно как-угодно, главное проговаривать, что ты делаешь, показывать ход своих мыслей. Как только решение будет готово, нужно будет рассказать о нем и ответить на вопросы про алгоритмическую сложность написанного кода. Если ваш подход будет не самым оптимальным, то попросят подумать, что можно улучшить, могут даже дать подсказку, но дальше все зависит от вас. Я сначала решил задачу с использованием Set и созданием нового списка, но можно обойтись без лишней памяти и с чуть лучшим временем. Обращайте внимание на подсказки, это не вы тупите, а смотрят на способность прислушиваться и реагировать на изменения требований + ваши знания. Будет желание - отдельным видео разберем задачу (пишите в комментарии, или ставьте реакции). По итогу решения вам скажут (но могут и пройти дальше), насколько хорошо вы все сделали, и полученное решение соотносится с тем, что хотел от вас получить собеседующий.
⚠️ Перед тем, как апплаиться на подобные штуки, лучше повторить сложность алгоритмов, так как она является важной составляющей при оценке вас как кандидата (задачу можно заучить, а умение думать и размышлять - нет).
2️⃣ Теория
Была разделена на 2 части: Dart и Flutter.
По Dart’y были стандартные вопросы типа классы, типизация, Future, порядок выполнения Future, Stream API. Таблицу с классами и их вариациями не спрашивают, но это видимо еще не ее время, скоро будут - учите. Спрашивают вглубь до момента, пока либо вы не сможете ответить, либо ответите до конца. Если думаете, что вас пытаются завалить, то это просто проверка глубины знаний. Самым, наверное, запомнившимся, был вопрос про то, как отловить ошибку отсутствия метода в классе (типа у тебя dynamic поле, и ты вызываешь метод, которого нет в объекте, который у тебя в этой переменной лежит). Ответом оказалось простое переопределение метода noSuchMethod в том классе, где нужно отловить ошибку, спасибо за новые знания. Вообще, такие секции часто строятся (когда начинал проводить собеседования тоже такое делал) на базовой теории + тема, которую собеседующий недавно узнал и она стала для него открытием, так что в зависимости от человека по ту сторону экрана, после базы по Dart может быть все, что угодно, но в рамках языка. Не стоит думать, что если вы не назвали ответ, то завалили собеседование. Если не знаете решение - думайте, предлагайте варианты. Простой ответ “Не знаю” покажет вас далеко не с лучшей стороны. Каверзные вопросы иногда задаются по личной инициативе, и их нет в списке требуемых знаний компании, и максимум, который вы можете сделать не зная темы - показать широту ваших знаний в CS вообще.
По Flutter’у не было каких-то супер-сложных вопросов. Поговорили про виджеты, внутренности фреймворка и менеджеры состояний. Сосредотачиваться на чем-то конкретном не стали, но если бы проект содержал что-то специфическое, то 100% были бы вопросы касательно этого специфического. Из того, что сходу не вспомнил - жизненный цикл State, но потом собрал в итоге всю картину в голове и рассказал как нужно. Вопросы строились как и в секции с Dart’ом - копаем вглубь до момента, пока либо я не знаю/не смотрел, либо отвечу развернуто и тему мы пройдем. Если вы проходили/проводили много собеседований или хорошо знаете теорию, то эту часть пройдете без каких-либо проблем.
Секция по Дарту была намного интереснее, но может быть это с моей стороны так было. Часть по Flutter’у, даже когда я собеседовал, казалась слегка заезженной, так как простора для вопросов там рано или поздно становится немного, в то время как Dart совершенствуется и всегда есть, что спросить. Готовиться можно как обычно, теория не выходит за рамки кучи материалов для повторения.
3️⃣ Итог
Далее мне предложили задать вопросы по продукту/проекту, но это вещь сугубо индивидуальная. Мой чек-лист такой:
❓ Стек. На самом деле не важно, какой он, мне всегда было интересно, что используют другие компании.
❓ Команда. Больше вопрос про процессы, формат работы, и бюрократию.
❓ Развитие проекта. Что планируется в перспективе, в каком состоянии продукт сейчас. Это больше про то, что вас не попросят уйти через полгода, и история долгоиграющая.
❓ Развитие. Что компания дает сотрудникам для этого - от посещения конференций до покупки курсов.
После данного этапа к вам вернутся с ответом в течение пары дней. Эта часть очень важна, так как она служит пропуском к этапу проектирования фичи, и отсекает многих людей без соответствующего опыта. Думаю, что при решении задачи и даже с несколькими неправильными ответами (если вы размышляли и показывали ход своих мыслей), прохождение этой части не будет большой проблемой, и вы сможете двигаться дальше.
ℹ️ Все посты по теме