Go: техническое собеседование Senior-разработчика
Запись технического собеседования на позицию Senior Go-разработчика. Интервьюер проверяет знание типов данных Go, строк, слайсов, map и интерфейсов, затем обсуждает горутины, context и синхронизацию, REST и аутентификацию, а также индексы PostgreSQL и задачу очистки большой таблицы.
- Опубликовано на YouTube:
- Просмотры на YouTube: 15,9 тыс.
- Лайки на YouTube: 231
Таймлайн
Коротко о видео
Интервьюер последовательно задаёт кандидату вопросы по Go и уточняет его ответы. В первой части обсуждаются встроенные типы, устройство строк и слайсов, map и интерфейсы. Затем разговор переходит к планировщику горутин и модели GMP, отмене через context, каналам и RWMutex. В заключении разбираются REST, способы аутентификации, индексы PostgreSQL и вариант сохранения 200 нужных записей из таблицы на 100 млн строк. Некоторые формулировки кандидата неточны, поэтому их стоит воспринимать как материал для разбора, а не как готовые ответы.
Затронутые темы
Что взять на заметку
- В Go строка неизменяема и не является слайсом; len строки считает байты, а для работы с Unicode-символами нужны руны.
- Обычная map небезопасна при одновременной записи и чтении: доступ нужно синхронизировать или обоснованно применять sync.Map.
- Отмена через context кооперативна: CancelFunc закрывает сигнал ctx.Done(), а каждая горутина должна сама проверять его через select или ctx.Err().
- RWMutex допускает несколько одновременных читателей, но запись требует эксклюзивной блокировки.
- Basic Auth кодирует логин и пароль в Base64, а не шифрует их, поэтому его следует использовать только поверх TLS; Bearer-токен сам по себе также не означает шифрование.
- В PostgreSQL B-tree — индекс по умолчанию и подходит для равенства и диапазонов; hash-индекс не является стандартным индексом первичного ключа.
- При сохранении небольшой выборки из очень большой таблицы перенос данных в новую таблицу и переключение на неё может быть практичной стратегией, но требует учёта зависимостей, схемы и окна переключения.