Skip to content

amanzhola/cppbackend

Repository files navigation

🚀 C++ Backend — учебный репозиторий


📌 Описание

Репозиторий содержит учебные проекты и решения задач по backend-разработке на C++.

Внутри:

  • lessons — пошаговые эксперименты и учебные проекты по Asio, lifetime, HTTP, многопоточности и архитектуре сервера
  • sprint1 — практические задачи с precode и solution
  • во многих папках есть отдельные README.md с подробным объяснением

👉 Этот корневой README нужен как центральная навигация по всему уже сделанному материалу.


⚙️ Начало работы

🔧 Шаг начала работы с репозиторием после клонирования на локальную машину или сервер 📖 Что именно нужно сделать на этом шаге, чтобы начать навигацию по проекту и перейти к нужным материалам 🧠 Зачем этот шаг нужен в общей логике работы с репозиторием ✅ Итог
1 Склонировать репозиторий Код появится локально и станет доступен для изучения, сборки и запуска Без клонирования невозможно перейти к урокам и задачам Репозиторий доступен локально
2 Перейти в нужную папку Можно выбрать конкретный lesson, problem, solution или sample Это позволяет работать не со всем репозиторием сразу, а с конкретным разделом Доступ к нужному разделу получен
3 Открыть README.md или папку Можно читать разбор задачи или сразу смотреть исходники README даёт объяснение, а папка даёт прямой доступ к коду Навигация по проекту начинается удобно
git clone https://github.com/amanzhola/cppbackend.git
cd cppbackend

🔄 Обновление шаблона

🔄 Действие по обновлению template-части репозитория для получения новых автотестов и служебных изменений 📖 Конкретная команда или последовательность действий, которую нужно выполнить в терминале 🧠 Почему этот шаг важен для совместимости с template и автопроверкой ✅ Итог
Добавить template remote git remote add -m main template https://github.com/cpppracticum/cpp-backend-template-practicum-november.git Это подключает дополнительный удалённый репозиторий шаблона, из которого можно подтягивать обновления Появляется доступ к официальному template-источнику
Получить обновления git fetch template && git checkout template/main .github Эта команда подтягивает свежие изменения и обновляет служебную директорию .github Автотесты и CI-конфигурация остаются актуальными
Зафиксировать изменения git add .github && git commit -m "update template" Изменения после обновления template сохраняются уже в твоём репозитории Обновление шаблона закреплено в git

🧪 GitHub Actions

При push в main запускается пайплайн GitHub Actions.

Ссылка на template Actions:

https://github.com/cpppracticum/cpp-backend-template-practicum-november/actions
🧪 Что происходит в GitHub Actions после отправки изменений в основную ветку репозитория 📖 Какой эффект это даёт для проверки решений и сопровождения проекта в учебном процессе 🧠 Почему это важно при работе с задачами и шаблоном practicum ✅ Итог
Запускаются автотесты Проверяется корректность решений, сборка, тесты и соответствие требованиям шаблона Это позволяет быстро увидеть, что именно прошло, а что сломалось Репозиторий можно проверять автоматически
Появляется статус CI Видно, завершилась ли проверка успешно или с ошибкой Это удобно как быстрый индикатор состояния проекта после push Статус проверки прозрачен
Доступны логи выполнения Можно открыть логи конкретного шага и посмотреть детали ошибок или предупреждений Это особенно полезно для отладки, если локально всё выглядит иначе Ошибки можно разбирать по логам

📂 Главные разделы

cppbackend/
├── lessons/
└── sprint1/

Структура собрана по реальному дереву проекта.


📘 LESSONS

🧩 Что находится в lessons

📘 Основные группы материалов внутри каталога lessons и их роль в общей учебной траектории 📖 Что именно находится в этой группе уроков и какие темы она покрывает по мере усложнения 🧠 Почему эта группа важна для понимания backend-разработки на C++ ✅ Итог
Ранние HTTP уроки Первые шаги по учебным HTTP-серверам, запросам, ответам и базовой серверной логике Это начальная точка входа в тему серверов и HTTP на C++ Формируется базовая картина работы сервера
Эксперименты по Asio Простые шаги по async-модели, event loop и базовым механизмам Boost.Asio Эти эксперименты дают фундамент для дальнейшей асинхронной архитектуры Понимание Boost.Asio закладывается с ранних примеров
Эксперименты по lifetime Управление временем жизни объектов в асинхронном коде, shared_ptr и сохранность объектов Это критически важно, потому что async-код ломается именно на lifetime-ошибках Подготовка к реальным session/listener моделям
Серия web_server_lesson_10_x Поэтапное развитие учебного HTTP-сервера от простых версий к более продвинутым Это длинная практическая линия с постепенным наращиванием возможностей Формируется пошаговое серверное мышление
Уроки 11–18 Асинхронность, потоки, strand, post/defer/dispatch, async accept, async HTTP server Это уже более зрелый backend-уровень и архитектура production-like сервера Продвинутый блок lessons завершает основную линию

🌐 Ранние HTTP уроки

🌐 Папка раннего HTTP-урока или промежуточного шага из каталога lessons 📖 Что это за шаг в эволюции учебного HTTP-сервера и как к нему перейти из корневого README 🧠 Что можно там посмотреть: README, код или промежуточное состояние проекта ✅ Переход
lessons/http_server_lesson9 Один из ранних оформленных HTTP-уроков с собственным README Можно сразу открыть описание и затем перейти к коду README
lessons/http_server_lesson9_1 Промежуточный шаг серии без отдельного полноценного README Здесь логично открывать саму папку и смотреть код напрямую Папка
lessons/http_server_lesson9_2 Следующий оформленный шаг серии с отдельным README Можно перейти сразу к текстовому разбору README
lessons/http_server_lesson9_3 Ещё один ранний оформленный HTTP-урок Доступен через README внутри папки README
lessons/http_server_lesson9_4 Завершающий ранний шаг в этой группе HTTP-уроков Можно открыть README и потом код README

⚡ Ранние эксперименты по Asio

⚡ Папка с ранним экспериментом по Boost.Asio и базовой async-модели в lessons 📖 Что это за экспериментальный шаг и чем он полезен при последовательном изучении Asio 🧠 Что логично смотреть внутри: структуру, код, минимальные примеры и эволюцию идей ✅ Переход
lessons/hello Самый ранний минимальный пример в каталоге lessons Удобен как самая простая стартовая точка Папка
lessons/lesson03_asio Один из первых шагов по теме Asio Показывает базовую работу с Asio и минимальный код Папка
lessons/lesson03_asio_1 Следующий шаг в серии ранних Asio-экспериментов Позволяет видеть постепенное усложнение примеров Папка
lessons/lesson03_asio_2 Продолжение ранней серии Asio Подходит для чтения подряд вместе с соседними шагами Папка
lessons/lesson03_asio_3 Ещё один шаг по базовому Asio Закрепляет ранние понятия asynchronous I/O Папка

🧠 Эксперименты по lifetime

🧠 Папка с экспериментом по lifetime в асинхронном коде и управлению временем жизни объектов 📖 Какой это шаг в серии lesson04_asio_lifetime и почему его полезно держать в общей навигации 🧠 Что именно можно там изучать: проблемы lifetime, сохранность объектов, связь с async-операциями ✅ Переход
lessons/lesson04_asio_lifetime_0 Самый ранний шаг серии lifetime Полезен как старт серии по времени жизни объектов Папка
lessons/lesson04_asio_lifetime_1 Следующий шаг серии lifetime Продолжает разбор базовых lifetime-вопросов Папка
lessons/lesson04_asio_lifetime_2 Последующий шаг по lifetime Удобно читать как часть непрерывной линии Папка
lessons/lesson04_asio_lifetime_3 Продолжение серии Показывает развитие идеи управления lifetime Папка
lessons/lesson04_asio_lifetime_4 Ещё один шаг серии Полезен как часть общей группы lifetime-экспериментов Папка
lessons/lesson04_asio_lifetime_5 Следующий lifetime-эксперимент Сохраняется в навигации как реальная часть проекта Папка
lessons/lesson04_asio_lifetime_6 Продолжение серии lifetime Подходит для последовательного перехода по шагам Папка
lessons/lesson04_asio_lifetime_7 Предпоследний шаг из видимой серии Полезен для непрерывности навигации Папка
lessons/lesson04_asio_lifetime_8 Последний видимый шаг серии lifetime Завершает эту группу в корневой навигации Папка

🌍 Серия web_server_lesson_10_x

🌍 Папка серии web_server_lesson_10_x, представляющая отдельный шаг развития учебного HTTP-сервера 📖 Что это за конкретный шаг в последовательной линии lesson 10 и как лучше к нему переходить 🧠 Что находится внутри: README с объяснением и исходный код текущего состояния сервера ✅ Переход
lessons/web_server_lesson_10_0 Начальный шаг серии lesson 10 с отдельным README Можно открыть объяснение и смотреть первую версию кода README
lessons/web_server_lesson_10_0_1 Ранний промежуточный шаг серии lesson 10 Содержит отдельный README и код README
lessons/web_server_lesson_10_1 Следующий шаг серии lesson 10 Отдельный README доступен для чтения README
lessons/web_server_lesson_10_2 Следующий оформленный урок серии Удобен для последовательного изучения README
lessons/web_server_lesson_10_3 Продолжение серии HTTP-сервера README описывает этот шаг отдельно README
lessons/web_server_lesson_10_4 Следующий этап развития сервера Содержит отдельный разбор README
lessons/web_server_lesson_10_5 Продолжение маршрутизации и логики сервера Открывается через README README
lessons/web_server_lesson_10_6 Следующий оформленный шаг Отдельный README внутри папки README
lessons/web_server_lesson_10_7 Следующий шаг series 10 Доступен через README README
lessons/web_server_lesson_10_8 Продолжение архитектуры lesson 10 Внутри есть README README
lessons/web_server_lesson_10_9 Следующий практический шаг Можно сразу переходить к README README
lessons/web_server_lesson_10_10 Следующий урок серии README внутри папки README
lessons/web_server_lesson_10_11 Продолжение lesson 10 Отдельный README доступен README
lessons/web_server_lesson_10_12 Последующий шаг lesson 10 Переход к README внутри README
lessons/web_server_lesson_10_13 Следующий шаг развития Открывается через README README
lessons/web_server_lesson_10_14 Продолжение серии README доступен README
lessons/web_server_lesson_10_15 Следующий шаг серии Есть отдельный разбор README
lessons/web_server_lesson_10_16 Последующий шаг lesson 10 Доступен через README README
lessons/web_server_lesson_10_17 Следующий урок в цепочке README внутри папки README
lessons/web_server_lesson_10_18 Последующий шаг Переход к README README
lessons/web_server_lesson_10_19 Следующий урок серии Доступен по README README
lessons/web_server_lesson_10_20 Следующий оформленный шаг Есть README README
lessons/web_server_lesson_10_21 Завершающий видимый шаг этой серии Открывается через README README

🚀 Уроки 11–18

🚀 Папка более продвинутого урока из серии web_server_lesson_11–18 с отдельным README и собственной темой 📖 Что это за продвинутый урок и почему он важен в общей backend-линии lessons 🧠 Что в нём можно изучать: асинхронность, потоки, strand, dispatch, shutdown, async accept, HTTP session ✅ Переход
lessons/web_server_lesson_11 Урок по архитектуре и асинхронной модели заказа/обработки Полезен как переход к более серьёзной async-логике README
lessons/web_server_lesson_13 Урок про многопоточность, гонки, ThreadChecker и strand Важен для понимания async + multithreading README
lessons/web_server_lesson_14 Урок про boost::asio::post и поведение очереди задач Покрывает базу executor-модели README
lessons/web_server_lesson_15 Урок про boost::asio::defer и отличие от post Полезен для понимания планирования задач README
lessons/web_server_lesson_16 Урок про boost::asio::dispatch и порядок выполнения Даёт понимание sync/async поведения dispatch README
lessons/web_server_lesson_17 Async HTTP server part 1: graceful shutdown, signal_set, async accept stub Подготавливает каркас полноценного async HTTP-сервера README
lessons/web_server_lesson_18 Async HTTP server part 2: Listener, SessionBase, Session, ServeHttp Формирует уже рабочий асинхронный HTTP-сервер README

🚀 SPRINT 1

📦 Что находится в sprint1

📦 Основные группы материалов внутри sprint1 и их роль в практическом блоке репозитория 📖 Что именно лежит в этих каталогах и как это используется при решении задач 🧠 Почему sprint1 важен как основной практический раздел текущего репозитория ✅ Итог
problems/*/precode Исходные заготовки задач, от которых начинается решение Это стартовая точка перед реализацией собственного решения Видно, от чего начиналась задача
problems/*/solution Реализованные решения задач с исходниками и README Это основной учебный результат и оформленные ответы Главный практический блок репозитория
samples Дополнительные примеры, например TCP/UDP Это вспомогательная практика, полезная для закрепления базовых сетевых идей Есть отдельные примеры вне задач

🔑 Основные solution

🔑 Папка основной solution-задачи из sprint1, которая представляет важный этап практики по C++ backend 📖 Что это за задача и почему она считается одной из ключевых внутри sprint1 🧠 Что можно открыть внутри: README, код solution, архитектуру и тесты ✅ Переход
sprint1/problems/sync_server/solution Синхронный сервер как базовая серверная практика Удобен как стартовая задача по HTTP-серверу README
sprint1/problems/async_server/solution Асинхронный сервер как следующий шаг после sync-версии Показывает переход к async HTTP-обработке README
sprint1/problems/map_json/solution JSON API сервер по картам и игровому конфигу Важен как REST/JSON практика поверх HTTP-сервера README
sprint1/problems/final_task/solution Финальная задача с Docker и деплоем game_server Сводит вместе C++ backend, Docker и VPS-развёртывание README

➕ Дополнительные solution

➕ Папка дополнительной solution-задачи из sprint1, которая тоже имеет отдельный README и полезна для практики 📖 Что представляет собой эта задача и какую часть навыков она тренирует внутри спринта 🧠 Почему она сохраняется в центральной навигации наряду с основными задачами ✅ Переход
sprint1/problems/cafeteria/solution Задача про асинхронную симуляцию кафетерия и распределение ресурсов Полезна для понимания таймеров, параллелизма и архитектуры README
sprint1/problems/restaurant_single_threaded/solution Однопоточная модель ресторана как ранний этап архитектурного мышления Хороша как простая модель процессов без многопоточности README
sprint1/problems/radio/solution Дополнительная задача sprint1 с собственным README Сохраняется как часть реального массива решений README
sprint1/problems/radio/solution_wsl_5s Альтернативная solution-версия radio под WSL/5s Тоже имеет отдельный README и включается в навигацию README
sprint1/problems/seabattle/solution Дополнительная задача sprint1 с отдельным README Полезна как часть полного набора решённых задач README
sprint1/problems/sum/solution Простая solution-задача с README Тоже включена как часть общей практики спринта README

🧪 Samples

🧪 Папка примера из sprint1/samples, которая не является задачей problem/solution, но полезна для закрепления темы 📖 Что находится в этом sample и как он помогает в изучении сетевого программирования 🧠 Почему sample тоже стоит держать в центральной навигации репозитория ✅ Переход
sprint1/samples/tcp-udp Дополнительный пример TCP/UDP-клиентов и серверов Полезен как вспомогательная практика по сетевому взаимодействию README

🧭 Как пользоваться репозиторием

🧭 Шаг использования корневого README как навигации по lessons и sprint1 📖 Что именно делать пользователю на этом шаге, чтобы быстро перейти к нужному материалу 🧠 Почему такой порядок работы удобен для большого учебного репозитория ✅ Итог
1 Открыть нужную группу: lessons или sprint1 Это позволяет сразу выбрать между учебными уроками и практическими задачами Навигация начинается с правильного уровня
2 Перейти по ссылке на README.md или папку В зависимости от наличия README можно открыть либо разбор, либо сам каталог с кодом Переход занимает один клик
3 Читать README внутри конкретной задачи Подробный разбор даётся там, где он относится к реальному коду Объяснение остаётся рядом с кодом
4 Смотреть main.cpp или src/ рядом После README можно сразу переходить к исходникам без поиска по репозиторию Изучение становится последовательным

💡 Идея корневого README

💡 Основная идея организации корневого README как центральной карты всего уже сделанного материала 📖 Почему такой подход лучше, чем пытаться дублировать большие подробные объяснения прямо в корневом файле 🧠 Что это даёт для чтения, навигации и поддержки репозитория в будущем ✅ Итог
Не дублировать все подробности Подробные объяснения уже лежат в отдельных README внутри уроков и решений, поэтому корень не должен копировать всё заново Это сохраняет структуру чистой и уменьшает лишнее дублирование текста Корневой README остаётся компактной картой
Дать полную навигацию Из корня можно быстро перейти почти в любой важный раздел, включая README и даже папки без README Это особенно важно, когда репозиторий стал большим и нелинейным Репозиторий читается как оглавление
Показывать реальные группы Здесь собраны и README-уроки, и ранние Asio/lifetime эксперименты, и sprint1-задачи, а не только “красивые” оформленные части Это делает навигацию честной и полной Видна реальная структура проекта

🏁 Итог

🏁 Что уже есть в репозитории и как это отражено в корневом README после полной навигационной сборки 📖 Какой именно материал охватывается этим корневым файлом и почему он теперь удобен как стартовая точка 🧠 Что это означает для дальнейшего использования репозитория как учебной и демонстрационной базы ✅ Итог
lessons Полная учебная линия: HTTP, Asio, lifetime, async, multithreading, strand, dispatch, async HTTP server Центральный README теперь даёт доступ и к README-урокам, и к ранним экспериментам без README Навигация по lessons собрана полностью
sprint1 Практические задачи с готовыми solution, README и дополнительными samples Корень стал удобной точкой входа ко всем реально реализованным задачам sprint1 Навигация по sprint1 собрана полностью
Корневой README Работает как центральное оглавление по всему уже сделанному материалу без дублирования подробных разборов Это делает репозиторий удобнее для чтения, демонстрации и дальнейшего роста Корневой README теперь выполняет роль полной карты проекта

About

Учебные проекты по C++ backend: HTTP-серверы, Boost.Asio/Beast, асинхронная архитектура, JSON API, Docker и деплой на VPS.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors