Расскажите о случае утечки памяти, который вы исправляли.

Как описать реальную диагностику и результат. Учебный пример Go: маленький срез удерживает большой базовый массив, пока данные не скопированы.

Короткий ответ

Что ответить на собеседовании

Расскажите о реальном симптоме, диагностике, причине, исправлении и повторной проверке; при отсутствии опыта прямо скажите об этом. Учебный пример Go — долгоживущий маленький срез, удерживающий большой backing array. Решение: скопировать только нужный фрагмент в отдельный массив. Освобождение старого массива возможно после исчезновения всех ссылок на него.

Подробный разбор

Ответ с пояснениями

Если вы действительно исправляли утечку, опишите последовательность: симптом, условия воспроизведения, измерения, подтверждённая причина, изменение и проверка результата. Отделите собственные действия от работы коллег. Если такого опыта не было, скажите об этом и разберите учебный пример, не выдавая его за рабочую историю.

Пример, а не биография кандидата: сервис читает большой буфер, а в долгоживущем кэше сохраняет небольшой срез этого буфера. Срез не копирует данные, поэтому ссылка на несколько байтов может удерживать весь базовый массив. Это избыточное удержание достижимой памяти, а не поломка сборщика мусора; механизм описан в 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-профиль показывает места выделения объектов, а путь удерживающей ссылки приходится устанавливать по коду и дополнительным наблюдениям. После исправления проверяют, исчез ли необъяснимый рост и не стала ли стоимость копирования неприемлемой.

В ответе называйте только измеренные результаты, не добавляя вымышленных процентов экономии памяти.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку