P
prepair.app
Пройти интервью →
EnglishУкраїнськаРусскийDeutsch
🦫

Senior Go BackendВопросы на собеседовании Golang

Senior · 5+ лет опыта

Собеседование Go фокусируется на горутинах, каналах, интерфейсах и обработке ошибок — язык маленький, поэтому вопросы идут вглубь, а не вширь. Ниже — самые частые с эталонными ответами. Senior: архитектуру, трейд-оффы, менторство и принятие решений.

Попробовать — без регистрации
Готовим вопрос…

Темы для подготовки

Горутины и планировщик
Каналы и select
Интерфейсы и композиция
Обработка ошибок
Слайсы и мапы
Контекст и отмена

6 вопросов уровня Senior с ответами

1

Как ограничить параллелизм при обработке большой очереди?

Ответ

Пулом воркеров: фиксированное число горутин читает один канал, и параллелизм становится числом, которое выбрали вы, а не которое решил вход. Для более тонкого контроля годится канал-семафор. Избегать надо горутины на каждый элемент — выглядит изящно и кладёт то, что ниже по потоку, обычно пул соединений к базе.

2

Откуда утечки памяти в языке со сборщиком мусора?

Ответ

Из ссылки, которая остаётся достижимой: растущая карта в роли кеша без вытеснения, горутина, навсегда вставшая и держащая свой стек, слайс огромного массива, удерживающий всё хранилище. Последнее удивляет: срез большого буфера до трёх байт держит его целиком, пока вы не скопируете.

3

Как профилировать Go-сервис, который замедлился?

Ответ

pprof по живому процессу, а не догадки: CPU-профиль показывает, куда уходит время, heap-профиль — аллокации, профиль горутин — если пахнет блокировкой. В Go частый виновник именно аллокации: сокращение мусора нередко выигрывает у оптимизации алгоритма, потому что работа сборщика пропорциональна тому, что вы создаёте.

4

Как гасить сервис, не теряя работу в полёте?

Ответ

Поймать SIGTERM, перестать принимать новые соединения, отменить корневой контекст, чтобы воркеры свернулись, дождаться WaitGroup с таймаутом и выйти. Таймаут важен: остановка, вечно ждущая один зависший запрос, — это отдельная авария. Readiness-проба должна упасть до начала всего этого, чтобы балансировщик перестал слать трафик первым.

5

Когда дженерики уместны, а когда нет?

Ответ

Уместны, когда одна и та же логика действительно повторяется по типам: контейнер, map или filter по слайсам, ограничение на числовые типы. Неуместны, когда требование уже выражает интерфейс, потому что интерфейс проще читать и менять. Go прожил без них десять лет не случайно, и большей части кода они по-прежнему не нужны.

6

Как структурировать растущий Go-проект?

Ответ

По тому, что код делает, а не чем он является: пакет на предметную область, а не пакет models, куда сложили всё. Направление зависимостей держать внутрь, всё, что не предназначено для импорта, класть в internal/, и сопротивляться пакету utils — там умирает связность. Стандартная библиотека — руководство по стилю, которое стоит копировать.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью Senior Go Backend →
Бесплатно · 3 интервью в месяц

Другие уровни — Go Backend

Junior Go BackendMiddle Go BackendВсе вопросы Go Backend

Другие специализации

🔍Senior QA Manual🤖Senior QA AutomationSenior Java Backend🐍Senior Python Backend🐘Senior PHP Backend🟢Senior Node.js Backend💎Senior Ruby on Rails🟣Senior .NET Backend Developer🔷Senior C++🟨Senior JavaScript