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

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

Junior · без опыта / до 1 года

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

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

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

7 вопросов уровня Junior с ответами

1

Что такое горутина и чем она отличается от потока ОС?

Ответ

Горутина — это функция, которую планирует рантайм Go, а не операционная система. Она стартует с крошечным стеком в пару килобайт, растущим по мере надобности, тогда как поток ОС резервирует мегабайты, поэтому программа спокойно держит сотни тысяч горутин. Рантайм мультиплексирует их на небольшой пул потоков ОС и переключает в точках блокировки без переключения контекста ядра.

2

В чём разница между буферизованным и небуферизованным каналом?

Ответ

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

3

Как работает select? Что произойдёт, если готовы несколько case?

Ответ

select ждёт нескольких операций с каналами и продолжает с той, что готова. Если готовы сразу несколько, выбор делается равномерно случайно, что не даёт ни одному case голодать. Ветка default превращает конструкцию в неблокирующую, а select вообще без case блокируется навсегда — иногда это используют намеренно, чтобы «припарковать» горутину.

4

Объясните разницу между слайсом и массивом. Как работает append?

Ответ

У массива фиксированная длина, входящая в его тип, и он копируется по значению. Слайс — это заголовок с указателем на подлежащий массив, длиной и ёмкостью, поэтому при передаче копируется только заголовок. append пишет в свободную ёмкость, если место есть; иначе выделяет больший массив и копирует, из-за чего возвращённый слайс может больше не разделять память с исходным — и поэтому результат append всегда нужно присваивать.

5

Что такое интерфейс в Go? Почему их называют имплицитными?

Ответ

Интерфейс — это набор сигнатур методов; любой тип, у которого эти методы есть, удовлетворяет ему без всякого объявления. Именно это и значит имплицитность — нет ключевого слова implements, поэтому интерфейс можно объявить в потребляющем пакете, и существующие типы ему уже соответствуют. Идиоматичный совет: держать интерфейсы маленькими и объявлять их там, где используют, а не рядом с реализацией.

6

Как обрабатывать ошибки в Go? Что такое error wrapping через %w?

Ответ

Ошибки — обычные значения, возвращаемые рядом с результатом и проверяемые явно в каждом месте вызова. Обёртывание через fmt.Errorf с глаголом %w сохраняет исходную ошибку внутри нового сообщения, поэтому вызывающий код по-прежнему может применить errors.Is для проверки на сентинел или errors.As для извлечения типизированной ошибки. Обёртывание добавляет контекст по мере подъёма ошибки, не лишая её программной проверяемости.

7

Что такое context.Context и зачем он нужен?

Ответ

Context переносит сигнал отмены, дедлайн и значения уровня запроса через границы API. Когда клиент отключился или сработал таймаут, отмена контекста распространяется на все производные горутины, так что запросы к базе и HTTP-вызовы прерываются, а не утекают. По соглашению его передают первым параметром и никогда не хранят в структуре.

🦎

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

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

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

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

Middle Go BackendSenior Go BackendВсе вопросы Go Backend

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

🔍Junior QA Manual🤖Junior QA AutomationJunior Java Backend🐍Junior Python Backend🐘Junior PHP Backend🟢Junior Node.js Backend⚛️Junior React Frontend💚Junior Vue Frontend🅰️Junior Angular FrontendJunior Next.js