> Какая должна быть длина короткой ссылки, чтобы избежать коллизий при заданной нагрузке и времени жизни (Python)

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

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

Стек: Python

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

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

Формула:
N = R * T, где:

  • R - количество запросов на создание ссылки в секунду (нагрузка),
  • T - время жизни ссылки в секундах.

Количество уникальных комбинаций для алфавита длиной A (например, 62 символа: [a-z, A-Z, 0-9]) и длины ссылки L равно A^L.

Условие отсутствия коллизий:
A^L >= N

Пример расчёта:

  • Нагрузка: 1000 ссылок/сек
  • Время жизни: 1 год = 31 536 000 секунд
  • N = 1000 * 31 536 000 = 31 536 000 000
  • Минимальное L при A=62:
    • 62^6 ≈ 56 800 000 000 (больше N)
    • 62^5 ≈ 916 000 000 (меньше N)
  • Ответ: длина 6 символов (например, aB3xY9).

Важно:

  • Если допускаются коллизии (например, с повторной попыткой генерации), длина может быть меньше.
  • Для повышения надёжности используют хеширование (MD5, SHA-256) с обрезанием до нужной длины, но это не исключает коллизий полностью - тогда применяют проверку уникальности в БД.

Итог:
Длина = ceil(log_A(N)). Для типовых нагрузок (100-10 000 ссылок/сек) и времени жизни до года достаточно 6-7 символов.

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

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