Вопрос на собеседовании · Go-разработчик
Как устроен слайс? Что произойдёт при append?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
Слайс в Go — небольшой дескриптор, который содержит ссылку на backing array, длину и ёмкость. Сам слайс не хранит элементы отдельно: несколько слайсов могут смотреть на один массив и видеть изменения друг друга.
append добавляет элементы в существующий массив, пока хватает capacity. Когда места недостаточно, runtime выделяет новый массив, копирует элементы и возвращает новый дескриптор. Поэтому результат append нужно присваивать, а предположения о совместном массиве после роста становятся ненадёжными.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
Функция получает slice по значению и делает append. Если capacity хватило, изменение элементов может быть видно вызывающему коду; если произошёл рост, функция работает уже с новым массивом. Чтобы вернуть изменившуюся длину, функция должна вернуть новый slice.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Чем nil slice отличается от пустого?
- Как работает copy?
- Почему небольшой subslice может удерживать много памяти?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с опорой.
Mira