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

Middle Go Backendпитання на співбесіді Golang

Middle · 2–4 роки досвіду

Співбесіда Go фокусується на горутинах, каналах, інтерфейсах та обробці помилок — мова маленька, тому питання йдуть углиб, а не вшир. Нижче — найчастіші з еталонними відповідями. Middle: глибше розуміння, оптимізацію та реальні робочі ситуації.

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

Горутини та планувальник
Канали і select
Інтерфейси та композиція
Обробка помилок
Слайси та мапи
Контекст і скасування

8 питань рівня Middle з відповідями

1

У чому різниця між буферизованим і небуферизованим каналом?

Відповідь

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

2

Як працює select? Що станеться, якщо готові кілька case?

Відповідь

select чекає кількох операцій з каналами і продовжує з тією, що готова. Якщо готові одразу декілька, вибір робиться рівномірно випадково, що не дає жодному case голодувати. Гілка default перетворює конструкцію на неблокуючу, а select взагалі без case блокується назавжди — інколи це використовують навмисно, щоб «припаркувати» горутину.

3

Поясніть різницю між слайсом і масивом. Як працює append?

Відповідь

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

4

Що таке інтерфейс у Go? Чому їх називають імпліцитними?

Відповідь

Інтерфейс — це набір сигнатур методів; будь-який тип, у якого ці методи є, задовольняє його без жодного оголошення. Саме це й означає імпліцитність — немає ключового слова implements, тому інтерфейс можна оголосити в пакеті-споживачі, і наявні типи йому вже відповідають. Ідіоматична порада: тримати інтерфейси маленькими й оголошувати їх там, де використовують, а не поруч із реалізацією.

5

Як обробляти помилки в Go? Що таке error wrapping через %w?

Відповідь

Помилки — звичайні значення, що повертаються поруч із результатом і перевіряються явно в кожному місці виклику. Загортання через fmt.Errorf з дієсловом %w зберігає вихідну помилку всередині нового повідомлення, тому код-викликач досі може застосувати errors.Is для перевірки на сентинел або errors.As для видобування типізованої помилки. Загортання додає контекст у міру підйому помилки, не позбавляючи її програмної перевірності.

6

Що таке context.Context і навіщо він потрібен?

Відповідь

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

7

Що таке defer? У якому порядку виконуються відкладені виклики?

Відповідь

defer планує виклик на момент виходу з функції, незалежно від того, яким шляхом або через яку паніку вона завершилася. Відкладені виклики виконуються в порядку «останній прийшов — перший вийшов», тобто останній defer спрацьовує першим. Аргументи обчислюються в момент запису defer, а не при виконанні — частий джерело сюрпризів, коли відкладають виклик, що захоплює змінну циклу.

8

Як уникнути race condition? Mutex чи канали?

Відповідь

Гонка даних — це несинхронізований конкурентний доступ, де хоча б одна сторона пише, і вона детектується прапорцем -race. sync.Mutex беруть, коли горутини ділять шматок стану і треба просто серіалізувати доступ до нього. Канали беруть, коли володіння даними передається між горутинами — правило звучить як «діліться памʼяттю через спілкування, а не спілкуйтеся через спільну памʼять».

🦎

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

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Middle Go Backend →
Безкоштовно · 3 інтерв'ю на місяць

Інші рівні — Go Backend

Junior Go BackendSenior Go BackendУсі питання Go Backend

Інші спеціалізації

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🟢Middle Node.js Backend⚛️Middle React Frontend💚Middle Vue Frontend🅰️Middle Angular FrontendMiddle Next.js