> Как справляться с коллизиями при генерации коротких ссылок (Python)

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

Компании: Международный аэропорт Шереметьево

Стек: Python

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

При коллизиях в генерации коротких ссылок (когда два разных URL дают одинаковый хеш) применяют несколько стратегий.

1. Повторная генерация с модификацией
Самый простой подход - при обнаружении коллизии (например, при вставке в БД с уникальным индексом) изменить входные данные и сгенерировать новый хеш. Например, добавить к исходному URL случайную соль или инкрементальный счётчик:

PYTHON
import hashlib
import base62
def generate_short(url, salt=""):
hash_input = url + salt
hash_digest = hashlib.md5(hash_input.encode()).hexdigest()[:6]
return base62.encode(int(hash_digest, 16))
# При коллизии вызываем generate_short(url, salt=str(counter))

2. Увеличение длины хеша
Если коллизии часты, можно увеличить длину короткого кода (например, с 6 до 8 символов), что экспоненциально расширяет пространство значений.

3. Использование счётчика
Вместо хеширования можно генерировать последовательные идентификаторы (например, из глобального счётчика в Redis) и кодировать их в base62. Коллизии исключены, так как ID уникальны.

4. Проверка перед вставкой
Перед сохранением проверять, не занят ли уже сгенерированный код. Если занят - повторить генерацию с новыми параметрами (например, с другим salt). Это гарантирует уникальность без исключений.

На практике чаще всего комбинируют хеширование с повторной генерацией при коллизии, так как это просто и эффективно для большинства нагрузок.

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

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