Mock-собеседование по Go от Team Lead Ozon
Тренировочное Go-собеседование с теорией по языку и практической задачей на объединение каналов. В конце интервьюер даёт кандидату разбор сильных сторон и пробелов по concurrency.
it-interview
Открыть на YouTube- Опубликовано на YouTube:
- Просмотры на YouTube: 17,1 тыс.
- Лайки на YouTube: 266
Таймлайн
Коротко о видео
Мок-собеседование по Go: кандидат с 1–2 годами коммерческого опыта отвечает на вопросы о базовых типах, интерфейсах, ошибках, defer, замыканиях и конкурентности. Затем он с подсказкой проектирует функцию merge, объединяющую произвольное число входных каналов в один, и разбирает корректное закрытие выходного канала через sync.WaitGroup. В финале интервьюер оценивает знание slice и map как хорошее, а concurrency и примитивы синхронизации — как основную зону для доработки.
Затронутые темы
Что взять на заметку
- У slice есть указатель на backing array, длина и capacity; append может изменить общий backing array, если места в capacity достаточно.
- Функция copy копирует элементы в уже выделенный буфер и сама память не выделяет: для независимой копии нужно сначала создать slice нужного размера через make.
- Чтение из nil map безопасно и возвращает нулевое значение типа вместе с признаком присутствия при форме value, ok; запись в nil map вызывает panic.
- В Go реализация интерфейса не объявляется явно: тип подходит интерфейсу, если имеет все требуемые методы. Пустой интерфейс (any) способен хранить значение любого типа.
- Тип error — интерфейс с методом Error() string; пользовательская ошибка должна реализовать именно этот метод.
- Небуферизированный канал синхронизирует отправителя и получателя: операции записи и чтения блокируются до парной операции. Буферизированный канал работает без блокировки, пока буфер не заполнен или не опустел.
- Для merge N каналов нужно запускать по goroutine, читающей каждый вход до закрытия, ждать завершения всех таких goroutine через sync.WaitGroup и только затем закрывать общий выходной канал.