Вернуться в видеотеку

Mock - собеседование от старшего разработчика из Ozon (секция Go)

Мок-собеседование по Go с теоретическими вопросами и разбором задач на предсказание поведения кода. Основной акцент — срезы, интерфейсы и конкурентность.

Источник: it-interview

Открыть на YouTube

Таймлайн

Коротко о видео

Это мок-интервью по Go: сначала разбирают срезы, ООП-подход Go, интерфейсы и устройство goroutine, затем переходят к задачам на чтение кода. В практической части кандидат вместе с интервьюером разбирает поведение append, копирование и разыменование указателей, приведения интерфейсов и замыкания в goroutine. По ходу беседы исправляются ошибочные предположения о разделяемом базовом массиве срезов, динамическом типе интерфейса и захвате переменной цикла.

Затронутые темы

Что взять на заметку

  • Повторить устройство slice как заголовка из указателя на базовый массив, len и cap; особенно последствия append при передаче среза в функцию.
  • Уметь вручную отслеживать, когда два среза используют один базовый массив и как append одного из них может перезаписать элементы другого без перевыделения памяти.
  • Разобрать Go-интерфейсы: неявную реализацию, сохранение динамического типа в interface value и type assertion одного интерфейса к другому.
  • Знать отличие goroutine от потока ОС, роль планировщика и то, что GOMAXPROCS не означает жёсткий лимит общего числа потоков ОС.
  • Для goroutine в цикле уметь объяснить захват переменной цикла, недетерминированный порядок выполнения и необходимость дождаться завершения через sync.WaitGroup; Add следует делать до запуска goroutine, а Done удобно откладывать через defer.
  • Для реализации множества в map использовать map[T]struct{}, а не пустой интерфейс как значение: пустая структура занимает ноль байт.

Рекомендуем посмотреть

30 мин
BackendSenior

Mock-собеседование старшего Go разработчика из Тинькофф | Самое полное интервью

Длинное мок-собеседование по внутреннему устройству конкурентности в Go. Вопросы переходят от горутин и планировщика к примитивам синхронизации, архитектуре серверов и низкоуровневым аспектам процессоров.