Языки программирования

Вопросы на собеседовании: Go

14 уроков · 5 разделов · бесплатно, без регистрации

Реальные вопросы с Go-собеседований: слайсы, горутины, каналы и типичные ловушки новичков.

Курс «Вопросы на собеседовании: Go» состоит из 5 разделов и 14 уроков: Типы и память, Горутины и каналы, Интерфейсы и структуры, Обработка ошибок и Особенности рантайма. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Типы и память

    1. Передача по значению или по указателю

      Разбираем классический вопрос Go-собеседования: когда функция получает копию структуры, а когда — доступ к оригиналу через указатель. Примеры кода и типичные ошибки.

    2. Как устроен слайс изнутри

      Разбираем внутреннее устройство слайса в Go: указатель на массив, len и cap, и почему append иногда создаёт новый массив, а иногда переиспользует старый.

    3. Массив против слайса

      Чем массив фиксированного размера в Go отличается от слайса: почему [5]int и [10]int — разные типы, как это влияет на копирование, и когда массив всё же уместен.

  2. 2 Горутины и каналы

    1. Горутины: лёгкие потоки Go

      Чем горутина отличается от потока ОС, как запустить её через go, и почему захват переменной цикла — классическая ловушка на собеседовании по Go.

    2. Каналы: как горутины общаются

      Буферизованные и небуферизованные каналы в Go: когда отправка и приём блокируются, как закрывать канал и читать его через range.

    3. select и WaitGroup

      Как оператор select ждёт несколько каналов сразу и как sync.WaitGroup позволяет корректно дождаться завершения группы горутин в Go.

  3. 3 Интерфейсы и структуры

    1. Интерфейсы и неявная реализация

      Разбираем на собеседовании по Go: почему нет слова implements, как компилятор понимает, что тип реализует интерфейс, и главная ловушка с nil-интерфейсом.

    2. Встраивание структур (composition over inheritance)

      Вопросы на собеседовании по Go: как встраивание структур заменяет наследование, что такое продвижение методов и что происходит при совпадении имён методов.

    3. any (interface{}) и приведение типов

      Вопросы на собеседовании по Go: когда использовать any вместо interface{}, безопасное приведение типов через comma-ok и разбор type switch.

  4. 4 Обработка ошибок

    1. Интерфейс error и его идиомы

      Почему в Go нет try/catch: интерфейс error, идиома if err != nil и обёртывание ошибок через fmt.Errorf с глаголом %w — разбор с примерами кода для собеседования.

    2. panic и recover

      Когда в Go действительно нужен panic, а когда это плохая практика, и как recover перехватывает панику внутри defer — с примерами и частыми ошибками на собеседовании.

    3. defer: порядок выполнения

      LIFO-порядок нескольких defer в одной функции и классическая ловушка с defer внутри цикла — разбор с примерами кода, который часто спрашивают на Go-собеседованиях.

  5. 5 Особенности рантайма

    1. Сборка мусора в Go простыми словами

      Как работает garbage collector в Go: алгоритм mark-and-sweep, почему GC в Go считается быстрым и что спрашивают на собеседованиях.

    2. Escape analysis: стек или куча?

      Escape analysis в Go: как компилятор решает, где разместить переменную — на стеке или в куче, и почему это влияет на производительность.