28 вопросов
Практика
Что такое goroutine и чем она отличается от обычного OS потока с точки зрения использования ресурсов и обработки параллелизма?
Что такое горутины и как их создавать в Go?
В чём разница между GOMAXPROCS и runtime.Gosched(), и как каждый из них влияет на поведение горутин в программе на Go?
Как предотвратить deadlock'и в конкурентных Go программах?
Как тебе предотвратить утечки горутин в Go?
Как ты можешь создать пул рабочих в Go, используя каналы для распределения задач между несколькими горутинами-рабочими?
Как sync.Pool снижает нагрузку на garbage collection, и в чём принципиальная разница между object pooling и автоматическим управлением памятью?
Что такое race condition и какими инструментами или методами можно их обнаружить в Go программах?
Какие основные различия между sync.Mutex и sync.RWMutex в Go, и в каких ситуациях ты бы выбрал один вместо другого?
Что такое утечка памяти и какие шаги ты можешь предпринять, чтобы её избежать при разработке на Go?
Можешь объяснить, как работает Go scheduler, включая work-stealing алгоритм и M:N scheduling модель?
Что такое pipeline в Go и как он использует Goroutines и channels, чтобы обрабатывать данные последовательно?
Зачем нужен ticker в Go и как его обычно используют, чтобы генерировать события через регулярные промежутки времени?
Что происходит, когда в select блоке нет default case'а?
Как ты правильно используешь тип `sync.Mutex` в Go, чтобы обеспечить потокобезопасность при доступе к общим ресурсам?
Какой смысл в sync.Mutex в Go и как он помогает управлять одновременным доступом к общим ресурсам?
Можешь объяснить, для чего нужен sync.WaitGroup и показать, как ты бы его использовал, чтобы координировать завершение нескольких goroutine в Go программе?
Зачем нужен sync.WaitGroup в Go и как его обычно используют для координации выполнения нескольких горутин?
Как ты используешь пакет context в Go, и можешь ли ты привести пример, например создание контекста с таймаутом и правильное его отмена?
Можешь объяснить, как использовать select в Go для работы с несколькими операциями на каналах и timeouts? И дай пример синтаксиса и use cases.
Какая цель у statement'а `select` в Go и как он позволяет Goroutine'у работать с несколькими операциями коммуникации?
Как ты можешь реализовать graceful shutdown для Go HTTP сервера, чтобы существующие запросы завершились, а сервер перестал принимать новые подключения?
Какая разница между буферизованными и небуферизованными каналами в Go, и как их поведение влияет на общение между горутинами?
Какой смысл в `select` statement'е когда работаешь с каналами в Go?
Можешь объяснить, как себя ведёт nil-канал в Go и какие у него характеристики? И что происходит, когда ты пытаешься отправить что-то в nil-канал или получить что-то из него?
Как ты закрываешь канал в Go и какие есть обычные способы проверить, закрыт ли канал?
Что такое буферизованный канал и чем он отличается от небуферизованного канала с точки зрения поведения при отправке данных?
Что такое channel в Go и как его объявить?