Ты решаешь LeetCode неправильно. Как пройти любое собеседование в BigTech?
- понедельник, 5 мая 2025 г. в 00:00:05
Привет! Я ex. Разработчик из VK, сейчас принял оффер от Ozon'a, и за последний месяц я прошел собеседования в 4х бигтех компаниях: Ozon, Avito, Wildberries и T-Bank и везде дошел до финалов/офферов. Пообщавшись во многих группах, посвященных Go-разработке, я понял, что много умных ребят готовясь к собесам не имеют четкой системы подготовки, и из-за этого заваливают технические собесы в компании. Не претендуя на истину в последней инстанции, предлагаю свою методику подготовки к собесам, которая помогла мне и моим знакомым подготовиться к техническим собесам во все популярные ру-бигтехи.
Прежде чем начать готовиться, давайте вообще определимся, к чему нам стоит готовиться?
Основные этапы собеседований, которые я встречал:
HR-скрининг — обсуждаете технологии, резюме, пожелания и опыт с HR, чтобы замэтчиться с текущими вакансиями.
Технический скрининг — тут быстро, в формате блиц, вам задают вопросы по платформе, БД, сетям, ОС, concurrency, а вы быстро на них отвечаете.
Алгоритмическая секция — пожалуй, благодаря Яндексу самая известная секция, тут вы решаете алгоритмы.
Платформа — секция, на которой вы глубоко разбираете платформу, на которой работаете. Если вы Go-разработчик, как я, то тут будут вопросы по Go и задачки.
SQL-секция — обычно входит в состав технического собеседования вместе с алгоритмами или платформой. Тут глубоко обсуждаете вопросы БД, проектируете схемы, составляете SQL-запросы. Сюда же, наверное, отнесу вопросы по Kafka, Redis и т.д. (задачки на них не видел, но теорию спрашивают).
System Design — так как я пока только мидл и отдельных секций по сисдизу у меня не было (они идут с уровня middle+), считаю, что раздавать советы по его прохождению не имею права. Дополню методику, когда стану сеньором).
До HR-скрининга есть такая важная вещь, как ваше CV. Над ним надо хорошо потрудиться и составить красиво. Не надо писать в него все подряд, что вы работали официантом или выгуливали собак. Первым делом четко определитесь, на какую технологию вы идете, на какой грейд. Отталкиваясь от этого, составьте свое резюме. Например, если вы идете на middle-грейд, учтите, что в резюме должно быть 2+ лет опыта (в вакансии обычно написан более четкий ценз по опыту), иначе вас скорее всего даже не посмотрят. Стоит описать места работы, технологии, которые вы использовали, и задачи, которые решали. Будет круто, если вы допишете какие-нибудь цифры, например, насколько ваш фикс поднял uptime приложения или насколько оптимизация пайплайна ускорила T2M.
Если у вас нет коммерческого опыта, стоит рассмотреть стажировки от крупных компаний, потому что на позиции мидлов вас вряд ли рассмотрят, а позиции джунов закрываются со стажировок. Стоит учитывать, что стажер — не значит "ничего не умеет", и резюме грамотно составлять все равно надо. Опишите в резюме как опыт свои пет-проекты: какие технологии в них использовали, что реализовали, с чем работали. Накидайте хотя бы 2-3 пет-проекта или проекта из вуза с релевантными технологиями для вакансии.
Как-то мега-оформлять ваше резюме не стоит. Не надо пилить свой сайт и т.д. Это должна быть простая PDF-ка на 1 страницу, открыв которую я должен четко понять, что вы за разраб, какие технологии юзали, сколько опыта, где учились — ВСЁ. Я в свои резюме даже фотку не вставляю. Могу посоветовать сверстать резюме в LaTeX'е, взяв простой шаблон, например, отсюда: https://ru.overleaf.com/gallery/tagged/cv.
Один из самых простых технических этапов, но к которому люди часто бывают не готовы, потому что готовятся к алгоритмам и глубоким вопросам по платформе. Тут я советую смотреть мок-интервью на ваш грейд. Например, есть очень хороший канал — https://www.youtube.com/@Skills_mentor с записями мок-интервью, посмотрев которые вы вполне будете готовы ко всем вопросам со скринингов и половине вопросов с платформы.
Но по сути на всех этих скринингах во всех компаниях вопросы всегда одинаковые, потому что есть пулл базовых вопросов, и ничего нового там не придумаешь. Пулл вопросов, которые я встречал или которые могут попасться на скрининге, я соберу и выложу на следующей неделе в свой Telegram-канал (https://t.me/siliconchannel), если вдруг кто не хочет смотреть многочасовые интервью или хочет просто разобрать все вопросы и составить себе шпоргалку на собес.
Тут большинство просто открывают литкод и начинают решать алгоритмы: решают задачу, если не получается — смотрят решение и идут дальше. В теории это работает супер, только вот на практике для большинства это выглядит как просто постоянная копипаста решения задачек, и никакого прогресса в самостоятельном решении нет.
Что предлагаю? Большинство задачек с собесов имеют разную легенду, но один паттерн решения. На самом деле этих паттернов не так уж и много, а задачки medium и hard — это просто либо более хитрое применение одного паттерна, либо комбинация нескольких паттернов. Предлагаю выделить эти паттерны, разбирать, как решается один паттерн, и нарешивать задачки конкретно на него, после чего переходить к следующему.
Чтобы решать задачки на конкретную тему, в LeetCode есть тэги. Например, если вы хотите закрепить метод двух указателей, то ставите тэг two pointers
и нарешиваете задачи одну за другой. Конкретно для себя и на своем опыте я составил вот такой roadmap по простоте и важности темы, по которому можно идти сверху вниз и подготовить 95% алгоритмов, которые могут попасться на алго-секциях.
В своем канале (https://t.me/siliconchannel) на следующей неделе выложу задачки с литкода к каждой теме, которые на мой взгляд обязательные к решению и часто попадаются на собеседованиях.
+ Мне нравятся разборы разных паттернов от Влада Тена, можете для начала просмотреть плейлист с его разборами и решить задачи из видео.
Самое, на мой взгляд, интересное. Тут много о чем есть поговорить, и подготовиться ко всему бывает тяжело, но есть база, зная которую вы пройдете платформу с шансом 95%.
Нужно знать, как устроена мапа в Go (новая и старая версия). Тут могу посоветовать видео, в котором понятно и круто разбираются оба варианта реализации.
Нужно хорошо разбираться в работе структур, мап, слайсов и в принципе как происходит работа с памятью в Go. Тут советую смотреть решение задачек из «Эйч Навыков».
Так же порешать задачки, которые я выкладывал до этого в свой ТГ-канал — эти задачки приближены к тому, что попадаются на собеседованиях в бигтехе.
Темы, которые советую почитать:
Сколько памяти занимает кастомная структура.
Почему пустая структура в Go занимает 0 байт (https://t.me/siliconchannel/64).
Передача структур в функции по ссылке, по значению и т.д.
Инициализация памяти (мапы, структуры, слайсы).
Читаем инфу с офф. доки:
https://go.dev/src/runtime/map.go
https://go.dev/src/runtime/slice.go
Нужно уметь решать задачки на concurrency:
Разобрать популярные паттерны: Fan in, Fan out, семафор, worker pool.
Посмотреть разборы задачек, опять же, с "Эйча":
https://www.youtube.com/watch?v=aJ74a1gydbQ
https://www.youtube.com/watch?v=U3fEaBDZvyE
Прорешать эту задачку, чтобы стать гуру конкурентности.
Читаем теорию: что лежит в sync
помимо Mutex и WaitGroup (например, Do Once, Cond, Pool, Atomic). Как работают Mutex под капотом. Также круто знать про ErrGroup.
Изучаем информацию о том, как устроен шедулер под капотом. У Коли Тузова недавно вышел ультимативный гайд по нему — обязательно к просмотру.
Нужно знать, как устроен GC: какой у него алгоритм под капотом, как он разукрашивает ноды, как понимает, что какие-то ноды корневые, в какой момент GC стопает горутины. Чтобы разобраться, можно посмотреть видео.
Или же почитать:
https://www.ardanlabs.com/blog/2018/12/garbage-collection-in-go-part1-semantics.html
https://tip.golang.org/doc/gc-guide
Могут попадаться задачки на код-ревью. Это достаточно новый формат, но супер-сложного в нем нет. Самое частое, что вам может попасться:
Утечка горутин.
Обработка ошибок.
Таймауты в контексты.
А дальше — по ситуации. Главное, смотри, чтобы:
Все каналы закрывались.
Никаких паник не было.
Во всех походах в другие сервисы были контексты и таймауты.
Тут можно поискать и посмотреть записи чужих собеседований (это, кстати, очень крутая практика для подготовки к собесам), например, в EasyOffer. Ну и есть разбор одной из задачек на уже известном канале «Эйча».
Популярные технологии, которые используются попутно с языком. Обязательно разбираемся, что такое:
gRPC
Protobuf
Grafana
Prometheus
Трейсинг
Метрики
Бонусом смотрите changelog новых версий Go. Очень круто, когда кандидат следит за тем, какие изменения происходят в его языке.
Скорее всего, эта секция будет объединена с платформой, но может вам выделят ее в отдельную, если БД в вашей будущей команде критична.
Если вы прошлись по предыдущим пунктам, то скорее всего 90% теории по БД вы ответите — она идет попутно в мок-собеседованиях/записях и т.д. Вопросы тоже достаточно базовые:
Виды БД.
Что такое индексы, какие бывают.
ACID.
Транзакции.
Уровни изоляции.
Нужно уметь решать задачки на SQL. Прям базовый SQL можно выучить во всяких тренажерах (благо их много), но оставим это для аналитиков. А мы как настоящие разработчики просто идем на любимый нами LeetCode и по очереди разбираем темы из этого топика + прорешиваем задачки оттуда. Этого хватит в 110% случаев.
Ты получил базовый набор победителя технических секций. Этих знаний + чуть-чуть коммерческого опыта хватило мне, чтобы пройти технические секции в крупные IT-компании и не вспотеть. Спасибо, что уделил время этой статье, надеюсь кому-то она внесла ясности в процесс технических собеседований сейчас и поможет устроиться в компанию мечты.