Сборник: вопросы с собеседований Go $10k+
Финальный урок Go-трека. Это не теория, а чеклист реальных вопросов, которые задают на собеседованиях на middle+ и senior Go-позиции с зарплатой $10k+/месяц. Источник, канал АйТи Красавчик плюс наш совокупный опыт.
Идея урока, не “выучить ответы”, а проверить, что ты прошёл остальные четыре урока трека (идиоматика, внутреннее устройство типов, concurrency, runtime и perf) и можешь говорить по каждой теме осмысленно.
1. Soft, общие вопросы
Без них не начнётся ни одно собеседование. Готовь короткие, структурированные ответы.
Расскажи про себя
Шаблон 90 секунд:
- Текущая роль и контекст компании в одну фразу.
- Ключевой проект или система за которую отвечаешь, в одну, две фразы.
- Стек, в одну фразу.
- Два достижения с цифрами (что было, что сделал, что получили).
- Почему ищешь работу, в одну фразу.
Запиши себя на телефон. Послушай. Перепиши.
Почему ищешь работу
Фокус на росте, новых вызовах, интересных задачах. Никакого негатива про текущего работодателя, даже если есть. Это первый отсев.
Хорошие формулировки:
- “Хочу попробовать high-load, у нас сейчас потолок 100 RPS, дальше неинтересно”,
- “Ищу команду с инженерной культурой ближе к BigTech, у нас не дотягивает”,
- “Технически вырос там где был, нужна следующая высота”.
Как ревьюишь PR
1. Логика и корректность, делает ли код то что заявлено.
2. Архитектура, не ломает ли границы между слоями.
3. Тесты и покрытие, есть ли тесты на edge cases.
4. Читаемость, поймёт ли это новый человек через год.
5. Error handling, обернули ли через %w, обработали ли все ветки.
6. Security и concurrency, нет ли очевидных гонок и инъекций.
7. Performance hot spots, нет ли O(n^2) на горячем пути.
Плюс автоматика: golangci-lint, тесты под -race, coverage gate в CI.
Как фича доезжает до прода
Стандартный pipeline в зрелой команде:
Backlog -> Grooming -> Sprint Planning -> Development
-> Code Review -> CI (lint+test+race+integration)
-> Staging deploy -> QA / smoke
-> Canary in prod (5% traffic)
-> Full rollout
-> Postmortem if shit happens
С feature flag, без feature flag, через blue-green, canary, rolling, говори про свой реальный опыт.
Завтра придёт x5 трафика, что делать
Канонический systems-design вопрос. Структура ответа:
- Уточнить, что значит “x5”. На каком endpoint? Длится сколько? Это запросы или фоновые задачи?
- Горизонтальное масштабирование, добавить реплики (k8s HPA).
- Кэш, Redis, CDN на статику, Cache-Control заголовки.
- Оптимизация БД, индексы, read-replicas, connection pool.
- Rate limiting, отсечь явно ненужный трафик на gateway.
- Async-обработка через Kafka/RabbitMQ для тяжёлого.
- Backpressure, graceful degradation вместо падения.
- Метрики до и после, smoke-test и нагрузочный тест.
Главное, уточнять перед ответом. Это часть оценки.
2. Go-вопросы по структуре языка
Что нравится и не нравится в Go
Плюсы:
- одна-единственная идиоматика, “один способ сделать вещь”,
- быстрая компиляция,
- встроенная concurrency через goroutines/channels,
- статическая типизация без gymnastics, как в TypeScript-ах,
- прекрасная stdlib, мало зависимостей,
- pull в простоту, “boring is a feature”.
Минусы:
- verbose error handling (
if err != nilповсюду), - generics добавили поздно, экосистема ещё привыкает,
- нет sum types / union types, моделировать состояния через структуры с флагами,
- ограниченная выразительность (это и плюс, и минус).
Никогда не говори “нет ничего что не нравится”. Это звучит как непонимание trade-off-ов.
Что такое interface в Go
См. 02-idioms-and-stdlib и 03-types-internals. Главные тезисы для интервью:
- интерфейс это набор методов,
- удовлетворение структурное, не nominal (не нужно
implements), - интерфейсы определяются у потребителя, не у поставщика,
- “the bigger the interface, the weaker the abstraction”,
- внутри интерфейс это пара
(itab, data), “толстый” указатель, - nil-interface, это
(nil, nil). Можно случайно получить(*ConcreteType)(nil)обёрнутый в интерфейс, и он не равен nil.
Defer, panic, recover, три вопроса в одном
Уже разобрано в 05-runtime-and-perf. Основные тезисы:
- defer в LIFO-порядке,
- аргументы defer вычисляются в момент defer,
- recover работает только внутри defer той же горутины,
- паниковать только для unrecoverable, бизнес-ошибки, через error,
- не использовать defer в горячем цикле.
Pointer vs value receiver
Правила:
- если хоть один метод pointer, все методы pointer,
- если структура содержит mutex или большое состояние, всегда pointer,
- если структура маленькая (1, 2 поля int/string) и не мутирует, value,
- интерфейс может быть удовлетворён указателем на тип, даже если методы определены с value-receiver.
3. Concurrency, как ставят на собесах
Покажи, что у тебя есть рабочая интуиция, не только сухая теория.
Q. Чем отличается goroutine от thread? A. Дешёвая (2 KB старт, ~300 нс создание), управляется Go-рантаймом не ОС, мультиплексируется на M:N, см. 04-concurrency-deep.
Q. Как работает scheduler? A. GMP-модель: G (goroutine), M (OS thread), P (logical processor). GOMAXPROCS контролирует число P. Work stealing между P. Netpoller для I/O.
Q. Что такое context.Context и зачем? A. Cancellation, deadline, request-scoped values. Первый параметр любого I/O. Дерево, отмена родителя отменяет потомков.
Q. Channel или mutex? A. Channel когда нужна коммуникация между горутинами. Mutex когда защищаешь общее состояние. Atomic для простых счётчиков. Канон Go: “share memory by communicating”, но mutex не запрещён, активно используется в stdlib.
Q. Как сделать таймаут?
A. context.WithTimeout плюс select с <-ctx.Done(). Альтернатива, time.After в select, но не забывать что time.After создаёт горутину которая не завершится до истечения таймера, в горячем цикле, утечка памяти.
Q. Как работает sync.Map и когда её брать?
A. Подходит для двух паттернов: write-once read-many, и disjoint keys per goroutine. Внутри две мапы (read и dirty), оптимизированы для своих сценариев. Для смешанной нагрузки на одних ключах обычный map+RWMutex может быть быстрее.
Q. Race condition vs data race? A. Data race, две горутины обращаются к памяти, минимум одна пишет, без синхронизации. Race condition, результат зависит от порядка выполнения. Все data race это race condition, не наоборот.
премиум-урок
Продолжение в премиуме: 1 200 ₽ в месяц или 10 000 ₽ в год. Вместе с ним серверные проверки задач и школьные токены AI-коуча.
Оплата пока не подключена: премиум и курсы открываются промокодом.