Расскажите о реальном симптоме, диагностике, причине, исправлении и повторной проверке; при отсутствии опыта прямо скажите об этом. Учебный пример Go — долгоживущий маленький срез, удерживающий большой backing array. Решение: скопировать только нужный фрагмент в отдельный массив. Освобождение старого массива возможно после исчезновения всех ссылок на него.
Расскажите о случае утечки памяти, который вы исправляли.
Как описать реальную диагностику и результат. Учебный пример Go: маленький срез удерживает большой базовый массив, пока данные не скопированы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Если вы действительно исправляли утечку, опишите последовательность: симптом, условия воспроизведения, измерения, подтверждённая причина, изменение и проверка результата. Отделите собственные действия от работы коллег. Если такого опыта не было, скажите об этом и разберите учебный пример, не выдавая его за рабочую историю.
Пример, а не биография кандидата: сервис читает большой буфер, а в долгоживущем кэше сохраняет небольшой срез этого буфера. Срез не копирует данные, поэтому ссылка на несколько байтов может удерживать весь базовый массив. Это избыточное удержание достижимой памяти, а не поломка сборщика мусора; механизм описан в Go Blog.
Для допустимых границ 0 <= start <= end <= len(data) можно отделить нужный участок:
func copyFragment(data []byte, start, end int) []byte {
fragment := data[start:end]
result := make([]byte, len(fragment))
copy(result, fragment)
return result
}
Копируется именно фрагмент, а не весь исходный буфер. Ограничение capacity выражением с тремя индексами само по себе массив не отделяет. Старый массив сможет быть собран только после исчезновения всех остальных ссылок; немедленного уменьшения RSS это не гарантирует.
В реальном расследовании сравнивают живую кучу и профили на сопоставимой нагрузке. Heap-профиль показывает места выделения объектов, а путь удерживающей ссылки приходится устанавливать по коду и дополнительным наблюдениям. После исправления проверяют, исчез ли необъяснимый рост и не стала ли стоимость копирования неприемлемой.
В ответе называйте только измеренные результаты, не добавляя вымышленных процентов экономии памяти.