Вернуться в видеотекуОткрытое собеседование на Go-разработчика | Навыки
Длинное открытое мок-интервью по Go с разбором фундаментальных тем языка, конкурентности, инфраструктуры и проектирования систем. В конце — обратная связь кандидату, карьерные вопросы и презентация менторской программы.
- Направление
- Backend
- Формат
- Техническое собеседование
- Компания
Ozon- Длительность
- 2 ч 1 мин
Коротко о видео
Это открытое учебное мок-интервью на Go-разработчика: собеседующий проверяет знания кандидата о внутреннем устройстве Go, конкурентности, сетях и system design. Обсуждаются slices, strings, maps, channels, context, интерфейсы, ошибки, goroutines, планировщик, сборщик мусора, тестирование и синхронизация. В финале участники дают обратную связь кандидату, отвечают на вопросы о подготовке и рынке junior Go-разработчиков, а ведущий презентует менторскую программу.
Затронутые темы
Что взять на заметку
- Для slice нужно уметь объяснить заголовок из указателя, длины и capacity: при передаче в функцию копируется заголовок, изменение элемента затрагивает общий backing array, а append может выделить новый массив — тогда результат append нужно вернуть или присвоить.
- Нулевой slice, объявленный через var, имеет len=0 и не допускает запись по индексу: это закончится panic `index out of range`, даже если заранее понятен желаемый объём.
- Индексирование строки в Go работает с байтами; для Unicode следует использовать `range` по строке или преобразование в `[]rune`. Длинная строка при передаче в функцию не копируется целиком: передаётся её заголовок.
- Обычный map не защищён от конкурентной записи: доступ нужно проектировать с `sync.Mutex`/`sync.RWMutex`, отдельной обёрткой либо, с учётом type assertion и накладных расходов, `sync.Map`.
- Каналы потокобезопасны, но отправка в закрытый канал вызывает panic, повторное закрытие тоже недопустимо, а закрытый канал можно дочитать. При нескольких writer’ах закрытие должен координировать один владелец.
- Для остановки набора goroutine обсуждаются `context`, отдельный канал завершения, `select` и heartbeat; отмена родительского context каскадно отменяет дочерние, а дочерний context позволяет добавить локальный timeout.
- При деградации сервиса сначала следует проверить метрики и логи, найти медленные запросы к БД и причины вроде миграций или отсутствующих индексов; затем выбирать между кэшированием, репликацией, партиционированием, rate limiting и масштабированием инстансов.