Вернуться в видеотекуОткрытое интервью на Go разработчика | Эйч Навыки
Открытый разбор собеседования Go-разработчика с лайвкодингом и обсуждением внутренних механизмов Go, кэшей, баз данных и system design. В конце приводятся рекомендации кандидату и ответы на вопросы зрителей.
- Направление
- Backend
- Формат
- Видео
- Компания
Ozon- Длительность
- 1 ч 43 мин
Коротко о видео
Это открытое демонстрационное собеседование Go-разработчика, предварённое и прерываемое презентацией менторской программы «Эйч Навыки». Кандидат отвечает на вопросы о слайсах, goroutine, каналах и планировщике Go, затем решает задачи на потокобезопасный кэш, LRU и слияние каналов. Во второй части обсуждаются консистентное хеширование, репликация, индексы и Transactional Outbox; в финале интервьюер высказывает мнение, что кандидат тянет на middle, и рекомендует углубить базы данных, планировщик и system design.
Затронутые темы
Что взять на заметку
- Для Go-интервью нужно уверенно объяснять устройство slice: указатель на backing array, length и capacity, последствия append при перераспределении памяти и то, почему результат append следует возвращать из функции.
- В задачах с каналами важно отдельно проверить блокировку отправителя, преждевременное завершение main и корректную синхронизацию goroutine через WaitGroup, закрытие канала и чтение через range.
- Полезно разобрать планировщик Go глубже: локальные и глобальная очереди, work stealing, периодический забор задач из глобальной очереди, Netpoller и поведение goroutine при системных вызовах.
- Для потокобезопасного кэша стоит уметь обосновать выбор mutex/RWMutex, обработку отсутствующего ключа, context и error в интерфейсе, а при преобладании чтений — шардирование.
- LRU-кэш с операциями O(1) обычно строится на map из ключа в узел и двусвязном списке: обращённый элемент перемещается в актуальный конец, а наименее недавно использованный удаляется с другого конца.
- При подготовке к system design нужно понимать, что консистентное хеширование размещает ключ на ближайшем по часовой стрелке узле кольца и при изменении числа шардов переносит только часть данных; виртуальные шарды упрощают балансировку.
- Transactional Outbox отделяет фиксацию локального изменения и записи события в одной транзакции от последующей отправки воркером; нужны идемпотентный ключ, статусы и повторная обработка неотправленных событий.