Эти пет проекты должен сделать каждый бэкенд разработчикУстроиться сейчас на топовые стажировки или вакансии без пет проектов очень сложно, кейсы будут решаться неуверенно и на финалах будете выглядеть слабее других. Никто не ждет гениального проекта с инфраструктурой— реализовать какие-то бейзлайны и понимать специфику задач уже достаточно для стажера и джуна. Сегодня поговорим о самых базовых проектах, они легко гуглятся и немало примеров реализации можно найти на гитхабе. А если хотите обогатить свое портфолио совсем мощными пет проектами, то советую наш курс бэкенд разработка старт и бэкенд разработка хард. Отзывы прошлого набора здесь.Микросервис для сокращения URLРеализация HTTP-сервер на Boost.Asio с интеграцией PostgreSQL/SQLite. В этом проекте акцентируем внимание на архитектуру проекта (разделяем сетевой слой, логику и БД), грамотно реализуем CMake файлы, а также добавим обработку конкурентных запросов через пул потоков.Создадим две нормализованные таблицы: urls (id, original_url, short_key, created_at) и users (id, username) с внешним ключом user_id в urls. Разделим систему на слои: 1. Сетевой слой: HTTP-сервер на Boost.Asio с обработкой GET/POST запросов2. Логика: Генерация короткого ключа через хеширование (xxHash) + base62 кодирование3. Слой данных: Репозиторий для работы с БД через pqxx/SQLiteCppДалее реализуем пул из 4-8 worker-потоков (std::thread), которые берут задачи из очереди сокетов, защищенной std::mutex и std::condition_variable.На этапе развертывания создадим Dockerfile с многоступенчатой сборкой и docker-compose.yml для совместного запуска с PostgreSQL.Многопоточный сборщик метрикРеализация TCP-сервер для приема/агрегации метрик. В этом проекте потребуем потокобезопасные структуры данных с std::mutex/std::atomic, сброс данных в TimescaleDB, обработку асинхронных операций через Boost.Asio. А также проведем тестирование с помощью юнитки, и аккуратно распишем документацию trade-offs между latency и throughput. Определим бинарный формат сообщения: [timestamp (8b)][metric_name_length (1b)][metric_name][value (8b)]. Настроим Boost.Asio для приема соединений с callback-обработчиками. Используем async_read с динамическим буфером. Реализуй класс MetricStore. Добавим поддержку персистентности (нужно реализовать фоновый поток, который каждые n секунд блокирует доступ к хранилищу, формирует batch запрос для timescaleDB и выполняет insert). Далее просто реализуем тестирование и всё.High-load TCP Echo-серверСравним производительность моделей thread-per-connection и асинхронного I/O под нагрузкой, а также реализуем настройку epoll через Boost.Asio, бенчмарки RPS/latency с помощью wrk, анализ потребления памяти в Valgrind. Результаты оформим в графиках GNUplot. Для thread-per-connection модели создадим основной цикл, принимающий сокеты через acceptor.accept(), и передающий каждый сокет в новый поток (std::thread), где данные читаются socket.read_some() и немедленно пишутся обратно socket.write_some(). Для асинхронной модели инициализируем boost::asio::io_context с пулом рабочих потоков, используя boost::asio::async_read и boost::asio::async_write с callback-обработчиками. Настроим epoll через acceptor.set_option(boost::asio::detail::socket_option::integer<SOL_SOCKET, SO_REUSEPORT>{1}). Замерим RPS и latency утилитой wrk с параметрами -t12 -c400 -d30s, сравнивая результаты двух моделей в отчёте.В процессе написания проектов стоит придерживаться стайлкоду и писать всё аккуратно, тщательно продумывать архитектору (можно даже uml диаграмму проекта построить). Архитектура проекта должна быть разделена (например на сетевой слой, логика, обработка бд, утилиты. Стоит писать эффективный современный код (то есть RAII, пользоваться умными указателями). Следуй паттернам программирования (SOLID и т п ).@postypashki_old
Оставить комментарий/отзыв