Как готовиться к Leetcode-собеседованию.
В предыдущих поста мы поговорили о том, зачем FANNG проводит Leetcode-собеседования, и в чем заключается задача кандидата на собеседовании. Сегодня мы сделаем выводы и превратим их в план подготовки.
Напомню задачи компании на собеседовании:
1. Проверить общее умение программировать, отвлеченное от опыта в конкретных областях
2. Убедиться в достаточном уровне общего интеллекта кандидата
3. Достичь всего этого за час времени любого разработчика компании
4. Добавим к вышеперечисленному иметь возможность сравнивать кандидатов между собой
Отсюда видно, что не следует ожидать:
- Задач на специальные знания -- вас не будут спрашивать про алгоритм умножения матриц за O(N^2.37) и тому подобные специальные знания
- Очень сложных задач -- нужно сравнивать кандидатов, что тяжело сделать, если почти никто задачу не решает
- Головоломки вне программирования -- индустрия уже лет десять как пережила период теннисных мячей в школьных автобусах и круглых люков
Важно заметить, что "не следует ожидать" -- это не значит, что чего-то такого не может быть. Процесс собеседования хоть и стандартизован, но все-таки страдает от неприятных осечек. Например, неопытных собеседующих. Тем не менее, этих вещей действительно не стоит именно ожидать (а значит, к ним готовиться). Вы потратите огромное количество времени, чтобы подготовиться к сложным задачам, а вероятность их встретить очень мала. К тому же, о проблемах в процессе интервью знают и hiring комитеты. Не решить тяжелую задачу -- не значит провалить собеседование. Комитет умеет калибровать результат на сложность или нестандартность задачи.
Дополнительно, я хочу развеять миф, что чем лучше вы решаете Leetcode задачи, тем выше вам предложат уровень. Это не так. Предлагаемый уровень решается почти всегда на behavioral части, за исключением разницы между двумя-тремя нижними уровнями, которая может решаться также на system design части. Ни факт, ни скорость решения Leetcode задач сами по себе не влияют на предлагаемый уровень.
Напомню задачу кандидата -- помочь компании надежно оценить ваш уровень и исключить неуверенность. Да, гораздо лучше оставить впечатление "Твердый L3", чем "Похож на L4, но не уверен". Второй вариант почти всегда приведет к отказу, первый же к офферу.
Помимо этого, не стоит рассчитывать на поднятие своего уровня за несколько недель подготовки к собеседованиям. Это почти невероятная затея. Вместо этого сфокусируйтесь на приведении в форму уже существующего уровня и полировке его до избавления от запинок и осечек, которые могут привести к неуверенности.
Итого, алгоритм подготовки:
1. Сфокусироваться на easy задачах с Leetcode. Не справляться с ними -- большой минус и их нужно отполировать. Разобраться с базовыми терминами -- сложность алгоритмов, binary tree, heap, matrix, binary search
2. Когда easy решаются без запинки, дополнить medium задачами. Можно добавить продвинутые концепции: dynamic programming, DFS, BFS. Сфокусироваться на задачах попроще
3. Переходить на hard не нужно. Решать medium задачи со специальными знаниями (например, сложная математика) тоже не нужно
Гласное правило -- вместо подъема сложности нужно сфокусироваться на полировке той сложности, на которую вы уже способны.
Важно заметить, что эта инструкция написана не для олимпиадников по программированию, которые уже натренированы именно на такие задачи, а на обычных инженеров, которые готовятся в FAANG. Если вы уже олимпиадник -- сфокусируйтесь на других типах собеседований.
Post #13
2.21K
- 👍 27
- 🔥 13
- ❤ 5