Go

Просунутий Go

Внутрішня будова компілятора, runtime, scheduler, cgo, пакет unsafe, assembly, build tags

20 питань зі співбесід·
Senior
1

Який інструмент Go toolchain дозволяє перевіряти код assembly, згенерований компілятором?

Відповідь

Команда go tool compile -S відображає код assembly, згенерований компілятором Go. Цей інструмент необхідний для розуміння оптимізацій компілятора та аналізу критичного для продуктивності коду. Також можна використовувати go build -gcflags=-S, щоб отримати той самий результат під час стандартної збірки.

2

Яка основна мета пакета unsafe у Go?

Відповідь

Пакет unsafe дозволяє обходити систему типів Go для виконання низькорівневих операцій з пам'яттю. Він надає функції на кшталт Pointer, Sizeof, Alignof та Offsetof, які дозволяють напряму маніпулювати адресами пам'яті. Його використання не рекомендується, окрім специфічних випадків, як-от взаємодія з кодом C чи критичні оптимізації.

3

Як scheduler Go (GPM) організовує виконання goroutine?

Відповідь

Scheduler Go використовує модель GPM: G представляє goroutine, P — логічні процесори (GOMAXPROCS), а M — системні потоки. Кожен P має локальну run queue goroutine. Коли M заблокований на syscall, P може бути від'єднаний і пов'язаний з іншим M для продовження виконання goroutine. Така конструкція забезпечує ефективне планування з мінімальною кількістю context switch.

4

Що таке cgo і в якому контексті його слід використовувати?

5

Яка директива дозволяє умовно компілювати код залежно від цільової OS або архітектури?

+17 питань зі співбесід

Опануй Go для наступної співбесіди

Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.

Почни безкоштовно