Последнее обновление:2026-10-12
Демо сервиса коротких ссылок на C++¶
Настоящие сервисы коротких ссылок довольно сложны: там и алгоритмы hash, и системы выдачи номеров и т.д.
Сегодня же с позиции небольшого проекта просто смоделируем реализацию коротких ссылок.
Как быстро реализовать её буквально в нескольких десятках строк кода? Ключевые моменты:
- как укоротить длинную ссылку
- как хранить отношение отображения
Про отображение и говорить нечего: заводим map в персистентной памяти; если задействована база данных, доступ и запись осуществляются через интерфейсы jdbc/odbc и т.п.
Для укорачивания длинной ссылки здесь используется подход: случайный алгоритм + фиксированная длина.
1. Случайность¶
С помощью uniform_int_distribution генерируем случайное число из интервала [a, b]: здесь каждый раз берём один случайный символ из приведённой ниже строки, а затем склеиваем их — получается короткая ссылка.
- цифры
- строчные буквы
- прописные буквы
uniform_int_distribution<int> distribution(0, characters.size() - 1);
string code;
for (int i = 0; i < length; ++i)
code += characters[distribution(generator)];
2. Хранение¶
Каждый раз просто сохраняем всё в map, например:
if (links.count(originalLink)) {
return links[originalLink];
}
shortCode = generateRandomCode(len);
string shortenedLink = base_url + shortCode;
links[shortenedLink] = originalLink;
string baseUrl = "https://www.google.com.hk/search";
LinkShortener shortener(baseUrl);
string originalLink = "https://www.google.com.hk/search?q=asdsad&oq=asdsad&aqs=chrome.0.69i59j69i57j69i59l2.634j0j4&sourceid=chrome&ie=UTF-8";
string shortenedLink = shortener.shortenLink(originalLink, 8);
Похожие темы¶
- Пишем C++ FnOnce вручную | C++那些事
- Небольшой проект на C++ gRPC | C++那些事
- Межпроцессное взаимодействие в C++ на практике | C++那些事
- C++17 и SQLite: подсчёт размера каталога | C++那些事
- Тестирование производительности Google Benchmark | C++那些事
- HTTP-сервер на корутинах C++20 | C++那些事
- Сериализация Protobuf ZeroCopy | C++那些事
- Ускорение Python с помощью pybind11 | C++那些事
- Проектирование стекового калькулятора на C++ | C++那些事