На Хабре существует огромное множество статей на подобные темы, эта статья не будет исключением. Я лишь хотел бы поделиться своим опытом подготовки к кодинг интервью в крупные компании. Постараюсь описать процесс настолько подробно, насколько я его запомнил, со статистикой, таймлайном и моим отношением к нему.
Обо мне
Для того чтобы дать вам немного больше контекста и сделать эту публикацию более полезной, я немного расскажу о себе. Я закончил бакалавриат по математической специальности связанной с программированием в 2018 году. В университете были пары по алгоритмам, а так же я принимал участие в дополнительных занятия по олимпиадному программированию в одном семестре на первом курсе. На этом, собственно, мой бэкграунд в спортивном программировании заканчивается. После университета, да и во время, я занимался enterprise разработкой в различных российских компаниях, где не притрагивался к алгоритмам.
Моя история
В середине сентября 2021 года у меня произошел разговор с рекрутером одной из крупных продуктовых компаний, которая славится своими многоэтапными кодинг интервью. Я решил согласиться, но попросил полтора месяца на подготовку, предположив, что этого достаточно, чтобы освежить знания и закрыть пробелы.
Первым делом я принялся за поиск платформы, которая помогла бы мне попрактиковаться и полноценно подготовиться к интервью. Мне понравились две: hackerrank.com и leetcode.com, я нашел отзывы про каждую и решил остановиться на leetcode, хотя в целом они не сильно отличаются.
Leetcode имеет платную подписку, которая дает доступ к дополнительным возможностям, однако на тот момент я решил, что они мне не нужны и лучше сэкономить(хотя впоследствии передумал). По отзывам людей, которые уже проходили интервью в подобных компаниях, практиковаться стоит на задачах уровня medium, этому совету я и последовал.
Потратив неделю и решив(большинство с помощью подсказок из гугла) около 5 задач на случайные темы я понял, что если я собираюсь успеть подготовиться за месяц мне нужен структурированный план. В тот же день я обнаружил раздел Learn, который содержит задачи, распределенные по категориям вместе с теоретическим материалом. С помощью него я сделал диаграмму Ганта на ближайший месяц.
Мой план выглядел довольно плотным, так как я работал полный рабочий день и мог уделять на подготовку только выходные и вечера. В итоге мне удавалось решать в среднем 3-5 задачи каждый день, и в плюс к этому изучать базовую теорию по каждой теме. Чтобы получить доступ ко всем курсам из Learn, а еще к списку часто используемых задач распределенным по компаниям мне пришлось купить premium за 35$(который в итоге полностью окупился).
Кстати, забегая вперед, тот самый список популярных задач по компаниям, на мой взгляд, сыграл основную роль в успехе прохождения интервью, так как 80% задач на интервью были практически идентичны задачам оттуда. К сожалению, в своем плане я выделил на него только последнюю неделю подготовки, но зато я компенсировал маленький отрезок времени тем, что взял отпуск, и смог тратить на подготовку весь день.
Последний раздел с динамическим программированием я так до конца и не осилил, на него нужно сильно больше времени, чем у меня оставалось. В остальном я смог довольно четко придерживаться поставленного плана и закрывать разделы то отставая, то забегая вперед, что в среднем компенсировало общую скорость. Конечно, быстрота подготовки строго индивидуальна, но те, кто сейчас готовится к подобному интервью, может использовать мой план как шаблон. В нем покрыты все темы, используемые на классическом кодинг-интервью, за исключением, пожалуй, экзотических.
Статистика и примеры
Список задач, решенных за “средний” день выглядит следующим образом:
-
https://leetcode.com/problems/graph-valid-tree/ [medium/premium]
А вот так выглядит моя статистика на leetcode:
Результаты
Хотел бы рассказать пару слов о том, как прошли сами интервью. У меня было 3 кодинг сессии по 45 минут каждая с разными интервьюерами. Я сильно волновался, особенно первый раз, так как не считал себя полностью подготовленным. На каждом интервью было по 2 задачи easy/medium уровня. Самое интересное, что результат прохождения каждой сессии соответствовал одному паттерну: я успевал объяснить и написать код решения для одной задачи, а так же объяснить и успеть написать примерно 70% кода для второй задачи. Помимо кодинга, конечно, было еще system design интервью и общение с менеджером, но это уже другая тема. Ни смотря на то, что ни на одном интервью я так и не смог полностью закончить кодинг, офер все равно был получен и успешно принят.
Теперь я могу с уверенностью сказать, что получить предложение о работе в крупную международную компанию с релокацией гораздо проще, чем кажется. За это лишь надо заплатить 35$ и полтора месяца рутинной работы по вечерам(а еще неделю отпуска).
Автор: Vadim Beskrovnov