> Как происходит эвакуация элементов в хэш-таблице? (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: InDrive

Стек: Go

> Пример ответа

Эвакуация (rehashing) в хэш-таблице происходит, когда коэффициент загрузки (load factor) превышает заданный порог. В Go (стандартная реализация map) это происходит при вставке нового элемента, когда количество элементов превышает 6.5 * количество корзин (buckets). Процесс включает:

  1. Создание новой таблицы: Выделяется память под новый массив корзин, обычно вдвое большего размера (степень двойки).
  2. Постепенная эвакуация: Go использует инкрементальный рехешинг, чтобы избежать блокировки на всё время. При каждой вставке или удалении несколько старых корзин переносятся в новую таблицу. Это контролируется полями oldbuckets и nevacuate.
  3. Перенос элементов: Для каждой старой корзины вычисляется новый хэш (или используется уже сохранённый), и элемент помещается в соответствующую новую корзину. Если корзина переполнена, используется цепочка переполнения (overflow bucket).
  4. Завершение: Когда все старые корзины эвакуированы, oldbuckets обнуляется, и таблица полностью переключается на новую.

Ключевой момент: в Go эвакуация не блокирует все операции - она распределена во времени, что обеспечивает предсказуемую производительность даже при больших объёмах данных.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью