Go — Вопросы для собеседований
Алгоритмы на массивах и строках
Алгоритмические приёмы на последовательностях в Go — два указателя, стек, проверка скобок, слияние интервалов и компакция на месте.
11 вопросов
Поиск, хеширование и ДП
Поиск через хеш-таблицу и множество, LRU-кэш, динамическое программирование и полный перебор на Go — с разменом сложности.
8 вопросов
Атомики и модель памяти
Пакет sync/atomic, атомики на уровне CPU и модель памяти Go с happens-before.
6 вопросов
Основы и пакеты
Как устроена программа на Go — пакеты и импорты, объявления переменных и констант, базовые типы, нулевые значения, iota, видимость имён и инструменты сборки.
9 вопросов
Каналы
Механика каналов, запись в закрытый канал, select и пакет context.
21 вопросов
Конкурентность в Go
Стоимость горутин, планировщик GMP, очереди выполнения, work-stealing, обработка syscall и вытеснение в рантайме Go.
13 вопросов
Паттерны конкурентности
Fan-out, пулы воркеров, ограничение конкурентности, errgroup, пул HTTP-соединений и выбор между каналом и мьютексом в Go.
14 вопросов
Управление потоком
Управляющие конструкции Go — if/else с init-выражением, единственный цикл for во всех формах, switch без проваливания, range и panic/recover.
6 вопросов
Моделирование данных и транзакции
Нормализация и денормализация схемы, ограничения целостности, суррогатные ключи, документные и реляционные хранилища, OLAP против OLTP, изоляция транзакций, блокировка строк и оптимистичная блокировка, масштабирование базы.
18 вопросов
Слайсы, мапы и строки
Встроенные коллекции Go от основ до устройства — создание и индексирование слайсов, выражения среза, заголовок и рост среза, алиасинг, мапы с проверкой comma-ok и порядком обхода, внутреннее устройство map и nil-карта, строки как неизменяемые байты.
25 вопросов
SQL и индексы
Устройство и типы индексов PostgreSQL, составные индексы, агрегация в SQL, оконные функции, self- и anti-join, партиционирование таблиц и VACUUM.
22 вопросов
Контейнеры и Kubernetes
Контейнеры, Linux namespaces, cgroups, основы Kubernetes и процессная модель pod.
5 вопросов
Обработка ошибок в Go
Обработка ошибок в Go — обёртывание, errors.Is/As, sentinel-ошибки, defer-очистка, политики повторов.
5 вопросов
Ошибки (основы)
Ошибки как значения в Go — возврат и проверка ошибок, errors.New и fmt.Errorf, идиома `if err != nil` и почему ошибка — обычное значение, а не исключение.
4 вопросов
Функции
Функции в Go — множественные и именованные возвраты, вариативные параметры, функции как значения первого класса и рекурсия.
5 вопросов
Сборка мусора в Go
Трёхцветный mark-sweep сборщик, write-барьеры, темп GC и запуск сборки.
8 вопросов
Горутины
Введение в конкурентность Go — ключевое слово go, чем горутина «легче» потока ОС и ожидание группы горутин через sync.WaitGroup.
2 вопросов
Память в Go
Размещение на стеке и в куче, escape-анализ, принудительная куча, new против make и локальность кэша.
8 вопросов
Очереди сообщений
Брокеры сообщений, Kafka, гарантии доставки, паттерн outbox, dead-letter queue и идемпотентность в событийно-ориентированной системе.
12 вопросов
Сетевые протоколы
TCP против UDP, структура HTTP-запроса/ответа и его версии, а также QUIC поверх HTTP/3.
3 вопросов
Внутренности ОС и процессы
Внутренности операционной системы для Go-бэкенд-инженеров — виртуальная память, системные вызовы, процессы, файловые дескрипторы, сигналы, OOM killer и загрузка CPU.
9 вопросов
Производительность Go
Профилирование через pprof, анализ узких мест, PGO, стратегии масштабирования, тестирование и мокирование зависимостей.
8 вопросов
Указатели
Указатели в Go — операторы `&` и `*`, семантика передачи по значению против ссылки, нулевой указатель и когда указатель действительно нужен.
4 вопросов
Среда выполнения Go
Семантика среды выполнения Go — defer, panic/recover, порядок инициализации, тонкости языка.
9 вопросов
Масштабирование
Распределённый rate limiting, кеширование и защита от stampede, генерация ключей, связь между сервисами и realtime-транспорт.
10 вопросов
Кэширование в масштабе
Уровни кэша, паттерны чтения и записи, стратегии инвалидации, негативное кэширование, защита от cache stampede и наблюдаемость кэша.
7 вопросов
Согласованность и распределённые транзакции
Теорема CAP, модели согласованности, двух- и трёхфазный коммит, паттерны TCC и SAGA и идемпотентность распределённых операций.
8 вопросов
Шардирование и репликация
Зачем шардировать, выбор ключа шарда, горячие ключи, маршрутизация и ребалансировка шардов, кросс-шард операции, репликация и выбор SQL против NoSQL.
10 вопросов
Методология системного дизайна
Как вести системный дизайн на интервью — сбор функциональных и нефункциональных требований, оценка нагрузки, бюджеты доступности, выбор стиля API, HLD против LLD и типичные ошибки.
8 вопросов
Устойчивость и латентность
Латентность и перцентили, таймауты и распространение дедлайнов, ретраи с backoff и jitter, circuit breaker, bulkhead, backpressure, сброс нагрузки и hedged-запросы.
9 вопросов
Масштабирование и балансировка нагрузки
Вертикальное против горизонтального масштабирования, законы масштабируемости Амдала, Густафсона и USL, алгоритмы балансировки нагрузки, привязка сессий и обнаружение сервисов.
8 вопросов
Структуры и методы
Структуры и методы в Go — объявление структур, методы, value- и pointer-получатели, встраивание как композиция и идиома конструктора.
6 вопросов
Мьютексы и примитивы синхронизации
Mutex и RWMutex, WaitGroup, Once и потокобезопасный доступ к map.
13 вопросов
Архитектура Go-сервиса
Слоистая и чистая архитектура, направление зависимостей, паттерн adapter, DTO против доменной сущности и graceful shutdown.
7 вопросов
Интерфейсы и идентичность типов
Представление и диспетчеризация интерфейсов, утверждения типов, typed nil и сравнимость типов.
13 вопросов
Значения, константы и числа
Целые типы и переполнение, знаковые и беззнаковые, строки, руны и байты, константы iota и управление потоком.
7 вопросов