Mock - собеседование от старшего разработчика из Ozon (секция Go)
Мок-собеседование по Go с теоретическими вопросами и разбором задач на предсказание поведения кода. Основной акцент — срезы, интерфейсы и конкурентность.
it-interview
Открыть на YouTube- Опубликовано на YouTube:
- Просмотры на YouTube: 1,9 тыс.
- Лайки на YouTube: 28
Таймлайн
Коротко о видео
Это мок-интервью по 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{}, а не пустой интерфейс как значение: пустая структура занимает ноль байт.