Вернуться в видеотекуКоротко о видео
Это учебное моковое собеседование на Middle Go-разработчика: после знакомства с кандидатом интервьюер проверяет Go, базы данных, сети, ОС и Docker. Практическая часть посвящена проектированию LRU-кэша на Go через map и двусвязный список, с методами получения, обновления и вытеснения записей. В финале ментор отмечает уверенное практическое решение задачи, но рекомендует освежить теорию по внутренностям БД, каналам и смежным темам.
Затронутые темы
Что взять на заметку
- Объясняйте передачу аргументов в Go как копирование значений: у slice копируется его заголовок, содержащий указатель на общий backing array, поэтому изменения элементов могут быть видны через обе переменные.
- Для map подготовьте ответ про среднюю сложность доступа O(1), хеширование, бакеты, коллизии и рост структуры при достижении порога заполнения.
- Не отождествляйте небуферизированный канал с буферизированным каналом ёмкости 1: первый send блокируется до чтения, а во второй можно записать первое значение без читателя.
- Нужно уверенно разбирать операции с каналами: чтение из закрытого возвращает нулевое значение и ok=false после опустошения, отправка в закрытый канал вызывает panic, операции с nil-каналом блокируются.
- Context применяют для отмены, дедлайнов и таймаутов; context.WithValue не стоит использовать для обычных параметров функции — в стриме его рекомендуют для сквозной служебной информации вроде логгера или метрик.
- По БД стоит повторить устройство индексов, транзакции, различие WHERE и HAVING, агрегаты, триггеры и хранимые процедуры; отдельно прозвучал пример триггера для аудита изменений таблицы.
- Для LRU-кэша отработайте связку map[key]*list.Element и двусвязного списка: при Get и обновлении перемещать запись в начало, а при переполнении удалять хвост и соответствующий ключ из map.