Mock-собеседование Go разработчика из OZON | Самое полное интервью
Мок-собеседование Go-разработчика по базовым темам языка и runtime. Кандидат отвечает на вопросы о структурах данных, конкурентности, контекстах, дженериках и интерфейсах.
Vladimir Balun - Programming
Открыть на YouTube- Опубликовано на YouTube:
- Просмотры на YouTube: 109,7 тыс.
- Лайки на YouTube: 2,1 тыс.
Таймлайн
Коротко о видео
Это мок-собеседование по Go без алгоритмических и системных задач: интервьюер последовательно спрашивает кандидата об устройстве строк, слайсов, map, runtime, конкурентности, контекстах, дженериках и ООП-подходах Go. В ответах разбираются детали реализации и практические компромиссы, включая UTF-8, рост слайсов, коллизии хеш-таблиц, планирование goroutine, блокировки и typed nil в интерфейсах. В конце кандидат делится впечатлением от перехода с C++ на Go: по его мнению, на Go удобнее писать промышленный код, хотя C++ он продолжает практиковать на личных задачах.
Затронутые темы
Что взять на заметку
- Повторить, что строка Go неизменяема и хранит байты; отдельно уметь объяснить разницу между len, индексированием по байтам, rune и переменной длиной UTF-8.
- Уметь описать заголовок слайса: указатель на массив, len и cap; после append вызывающая сторона должна использовать возвращённый слайс, так как возможна реаллокация.
- Разобрать сложности операций динамического массива: доступ по индексу, append с амортизированной константной стоимостью, сдвиги при вставке и удалении; удаление заменой на последний элемент допустимо, только когда порядок не важен.
- Подготовить объяснение map: хеширование, бакеты, коллизии, цепочки и открытую адресацию; для денежных ключей разумно хранить сумму в минимальных единицах, например в копейках, а не во float.
- Повторить различия goroutine и потоков ОС, роль GOMAXPROCS, вытеснение длительно работающих goroutine и поведение при блокирующих системных вызовах.
- Уметь сравнить буферизированные и небуферизированные каналы, объяснить блокировку отправителя/получателя и способы не допускать дедлоков при нескольких mutex через единый порядок захвата.
- Повторить context с cancel, deadline и timeout, а также композицию вместо наследования, интерфейсы, typed nil, type switch и ограниченное применение reflection.