Подготовка по специальности
Собеседование Go-разработчика (Golang):
вопросы и ответы.
Go-интервью почти целиком крутится вокруг конкурентности и внутреннего устройства: горутины, каналы, планировщик, слайсы, map, интерфейсы. Вопросов меньше, чем в Java-мире, но копают глубже — «как устроено под капотом» здесь норма, а не исключение.
Не пытайтесь выучить все ответы: интервьюеры проверяют понимание, а не память. Разберите темы ниже, прорешайте типичные вопросы вслух и свяжите каждый ответ с примером из собственного опыта.
01 · Процесс
Как обычно проходит интервью
Обычно: скрининг, секция по языку с разбором кода (найти гонку, утечку горутин, багу со слайсом), секция по инфраструктуре — базы данных, Kafka/очереди, gRPC, Docker/Kubernetes, для middle и выше — системный дизайн. Живой код с горутинами есть почти всегда.
02 · Темы
Что нужно знать перед интервью
Язык и рантайм
- слайсы: устройство, append, ловушки шаринга массива
- map: устройство, эвакуация, почему не потокобезопасна
- интерфейсы: внутреннее представление, nil-интерфейс
- defer, panic, recover
- GC и планировщик: GMP-модель
Конкурентность
- горутины и каналы: буферизованные, закрытие, select
- sync: Mutex, WaitGroup, Once, errgroup
- паттерны: worker pool, fan-in/fan-out, pipeline
- утечки горутин и race detector
- context: отмена, дедлайны, передача значений
Сервисы и инфраструктура
- HTTP-сервер: middleware, таймауты, graceful shutdown
- gRPC против REST, protobuf
- работа с БД: database/sql, пулы соединений, транзакции
- очереди (Kafka), кеши (Redis), метрики и трейсинг
03 · Вопросы
Реальные вопросы с разбором ответов
Пометка у вопроса — как часто он встречается на реальных интервью: почти всегда часто иногда
01. Как устроен слайс? Что произойдёт при append?
почти всегдаЗаголовок: указатель на массив, длина, ёмкость. Append при нехватке ёмкости аллоцирует новый массив и копирует; при достаточной — пишет в тот же, и это ловушка: два слайса разделяют память, append в один портит другой. Пример такой ошибки — почти обязателен.
02. Почему map не потокобезопасна и что будет при конкурентной записи?
почти всегдаРантайм детектирует конкурентную запись и падает с fatal error — это не паника, recover не спасёт. Решения: мьютекс вокруг map, sync.Map для специфичных сценариев (много чтений, редкие записи), шардирование. Упомяните, что порядок обхода map намеренно рандомизирован.
03. Опишите GMP-модель планировщика Go.
частоG — горутины, M — потоки ОС, P — процессоры-контексты с локальными очередями. Планировщик кооперативный с вытеснением по сигналам; блокирующий сисколл открепляет M от P. Work stealing балансирует очереди. Глубина здесь отличает middle от senior.
04. Когда nil-интерфейс не равен nil?
почти всегдаИнтерфейс — пара (тип, значение). Если в интерфейс положили типизированный nil-указатель, тип не пуст — сравнение с nil даёт false. Классика: функция возвращает error через конкретный тип *MyError. Покажите, как избегать: возвращать явный nil.
05. Что такое утечка горутин и как её найти?
почти всегдаГорутина заблокирована навсегда: чтение из канала, в который никто не пишет, забытый receiver, отсутствие отмены. Поиск: pprof (goroutine profile), метрика runtime.NumGoroutine. Профилактика: context с отменой, select с ctx.Done(), явное владение каналом.
06. Как работает context и зачем он в каждой сигнатуре?
почти всегдаДерево отмены: отмена родителя доходит до всех детей, плюс дедлайны и значения. Передаётся первым аргументом по конвенции; горутины и запросы к БД/HTTP обязаны его уважать. Антипаттерны: хранить context в структуре, класть в него бизнес-данные.
07. Буферизованный канал против небуферизованного: семантика и применение.
частоНебуферизованный — синхронная встреча отправителя и получателя; буферизованный развязывает их до заполнения буфера. Примеры: сигнал о готовности — небуферизованный; очередь заданий worker pool — буферизованный. Закрывает канал только владелец-отправитель.
08. Напишите worker pool с ограничением параллелизма и обработкой ошибок.
почти всегдаКанал заданий, N горутин-воркеров, WaitGroup или errgroup с контекстом для первой ошибки и отмены остальных. Проговорите завершение: закрытие канала заданий после отправки всех, ожидание воркеров. Это самая частая практическая задача Go-интервью.
09. defer: порядок выполнения и вычисление аргументов.
частоLIFO, аргументы вычисляются в момент объявления defer, а не выполнения. Ловушки: defer в цикле копит вызовы до выхода из функции; изменение именованного возвращаемого значения в defer работает. Пример с закрытием ресурсов в цикле — типичный вопрос.
10. Поведенческий: расскажите про сервис, который вы спроектировали или значимо переработали.
почти всегдаСхема: задача и нагрузка → ключевые решения (протокол, хранилище, конкурентность) → компромиссы → результат в метриках. Для Go-вакансий сильно звучат кейсы про пропускную способность, устойчивость к сбоям зависимостей и наблюдаемость.
04 · Практика
Live coding: чего ожидать
Типичные задачи: найти гонку или утечку в готовом коде, написать worker pool или pipeline на каналах, merge N каналов (fan-in), rate limiter, обработка данных с конкурентностью и отменой по context.
Пишите с race detector в голове: явное владение каналами, отмена через context, ошибки наверх без паник. Проговаривайте выбор: почему канал, а не мьютекс, почему буфер такого размера — оценивают инженерные решения, а не скорость печати.
Общая подготовка — резюме, техника, звук и демонстрация экрана — разобрана в чек-листе подготовки к онлайн-собеседованию. Как осознанно использовать AI-подсказки во время звонка — в гайде «Как использовать AI на собеседовании».
05 · FAQ
Частые вопросы
Что спрашивают у джуна и у мидла по Go — в чём разница?
Джун: слайсы, map, горутины и каналы на базовом уровне, defer, обработка ошибок. Middle: планировщик и GMP, внутреннее устройство структур, паттерны конкурентности, pprof, устройство сервисов в проде — таймауты, graceful shutdown, наблюдаемость. Системный дизайн начинается с middle.
Нужно ли знать другие языки до Go?
Нет, но контекст помогает: многие вопросы построены на контрасте — почему в Go нет наследования, зачем явные ошибки вместо исключений, чем горутины легче потоков. Умение объяснить эти решения дизайна языка производит хорошее впечатление.
Какая инфраструктура ожидается вокруг Go?
Стандартный набор вакансий: PostgreSQL, Redis, Kafka или другая очередь, gRPC, Docker и Kubernetes, Prometheus с Grafana. Глубина по каждому инструменту зависит от роли, но уверенная работа с БД и очередями через призму конкурентности ожидается почти везде.
Тренировка перед интервью
Репетируйте ответы вслух с Mira
Mira слышит вопрос и подсказывает опору для ответа прямо во время звонка. 30 минут бесплатно каждый месяц, банковская карта не нужна.
Mira