[
 {
  "id": "go-01-language",
  "section": "go",
  "num": "01",
  "title": "Go: язык",
  "lead": "В этой теме ты разберёшь базовые значения Go и научишься выводить поведение программы из типов, правил копирования и времени вычисления.",
  "page": "go-01-language.html"
 },
 {
  "id": "go-02-concurrency",
  "section": "go",
  "num": "02",
  "title": "Конкурентность",
  "lead": "В этой теме ты научишься связывать конкурентный код с его синхронизацией: кто владеет данными, кто ждёт и как работа завершается.",
  "page": "go-02-concurrency.html"
 },
 {
  "id": "go-03-memory-gc",
  "section": "go",
  "num": "03",
  "title": "Память, GC и производительность",
  "lead": "В этой теме ты разберёшь жизненный цикл памяти и научишься выбирать измерение, которое отвечает на конкретный вопрос о расходе ресурсов.",
  "page": "go-03-memory-gc.html"
 },
 {
  "id": "go-04-errors",
  "section": "go",
  "num": "04",
  "title": "Ошибки и отказоустойчивость кода",
  "lead": "В этой теме ты научишься сохранять смысл ошибки через границы функций и выбирать реакцию на сбой по его последствиям.",
  "page": "go-04-errors.html"
 },
 {
  "id": "go-05-testing",
  "section": "go",
  "num": "05",
  "title": "Тестирование",
  "lead": "В этой теме ты научишься выбирать уровень теста и строить проверки, которые ловят ошибки контракта, изоляции и окружения.",
  "page": "go-05-testing.html"
 },
 {
  "id": "go-06-databases",
  "section": "go",
  "num": "06",
  "title": "Базы данных",
  "lead": "Разберись, как СУБД превращает SQL в план, хранит версии строк и защищает транзакции от гонок. Научись читать план запроса, выбирать индексы и работать с пулом соединений из Go, а затем оценивать варианты репликации и масштабирования по их цене.",
  "page": "go-06-databases.html"
 },
 {
  "id": "go-07-caching-redis",
  "section": "go",
  "num": "07",
  "title": "Кэширование и Redis",
  "lead": "Разбери, где кэш помогает, чем за него платит система и как он ведёт себя при гонках и сбоях. Пройди от cache-aside и структур Redis до stampede, персистентности и блокировок, чтобы выбирать подход под конкретную гарантию и нагрузку.",
  "page": "go-07-caching-redis.html"
 },
 {
  "id": "go-08-message-brokers",
  "section": "go",
  "num": "08",
  "title": "Брокеры сообщений и асинхронность",
  "lead": "Пойми общие гарантии брокеров, затем сравни Kafka как сохраняемый лог с RabbitMQ как маршрутизатором очередей. Научись связывать публикацию, транзакцию БД, ack, повторы и дедупликацию так, чтобы дубли и временный отказ не теряли бизнес-операцию.",
  "page": "go-08-message-brokers.html"
 },
 {
  "id": "go-09-networking",
  "section": "go",
  "num": "09",
  "title": "Сети",
  "lead": "Проследи путь запроса от имени хоста до сетевого соединения и HTTP-ответа: DNS, IP, transport, TLS и протокол приложения выполняют разные задачи. Разбери, что сеть гарантирует, где появляются задержки и как выбрать HTTP, gRPC или WebSocket по контракту и характеру обмена.",
  "page": "go-09-networking.html"
 },
 {
  "id": "go-10-web-services",
  "section": "go",
  "num": "10",
  "title": "Веб-сервисы на Go",
  "lead": "Спроектируй внешний контракт и путь запроса в Go-сервисе: от HTTP-метода, кодов и ошибок до middleware, таймаутов и остановки процесса. Разбери аутентификацию и реальные границы защиты от инъекций, IDOR, mass assignment, SSRF и CSRF.",
  "page": "go-10-web-services.html"
 },
 {
  "id": "go-11-architecture",
  "section": "go",
  "num": "11",
  "title": "Архитектура и системный дизайн",
  "lead": "Выбирай архитектурные границы по конкретным причинам изменения и отказа. Разбери направление зависимостей, монолит и микросервисы, сетевые контракты, распределённые гарантии и ход системного дизайна от требований к узким местам.",
  "page": "go-11-architecture.html"
 },
 {
  "id": "devops-01-linux",
  "section": "devops",
  "num": "01",
  "title": "Linux и ОС",
  "lead": "Разберёшь, какие части работы сервиса видит Go, а какие принадлежат ядру: процессы и потоки, память, файлы, сеть и сигналы. Научишься переходить от симптома к проверяемым данным Linux и безопасно запускать сервис под systemd.",
  "page": "devops-01-linux.html"
 },
 {
  "id": "devops-02-docker",
  "section": "devops",
  "num": "02",
  "title": "Docker",
  "lead": "Разберёшь, как Docker собирает образ из слоёв и запускает контейнер как ограниченный процесс на общем ядре. Научишься читать кэш сборки, выбирать базовый образ и проверять сеть, хранилище, лимиты и остановку контейнера.",
  "page": "devops-02-docker.html"
 },
 {
  "id": "devops-03-kubernetes",
  "section": "devops",
  "num": "03",
  "title": "Kubernetes",
  "lead": "Разберёшь, как Kubernetes приводит фактическое состояние к описанному в API и какие решения остаются за приложением. Проследишь путь от Pod и ресурсов до выкатки, DNS, сетевых политик и прав доступа.",
  "page": "devops-03-kubernetes.html"
 },
 {
  "id": "devops-04-cicd",
  "section": "devops",
  "num": "04",
  "title": "CI/CD и деплой",
  "lead": "Проследишь путь от коммита до запущенного сервиса: проверки, сборка, стратегия выкладки и контроль артефакта. Разберёшь граф GitLab CI, миграции без отката схемы и проверку образа по digest.",
  "page": "devops-04-cicd.html"
 },
 {
  "id": "devops-05-observability",
  "section": "devops",
  "num": "05",
  "title": "Observability",
  "lead": "Научишься идти от сигнала о проблеме к запросу и причине: через метрики, логи и трейсы. Разберёшь SLI и SLO, PromQL, алерты и настройку OpenTelemetry в Go-сервисе.",
  "page": "devops-05-observability.html"
 },
 {
  "id": "git-01-internals",
  "section": "git",
  "num": "01",
  "title": "Как устроен Git",
  "lead": "Разберёшь Git снизу вверх: объекты содержимого, ссылки на коммиты, индекс и хранение истории. После этого команды чтения и изменения истории можно объяснять через конкретные объекты и указатели.",
  "page": "git-01-internals.html"
 },
 {
  "id": "git-02-everyday",
  "section": "git",
  "num": "02",
  "title": "Повседневная работа",
  "lead": "Разберёшь повседневную работу через индекс, рабочую копию и историю: как собирать коммиты по частям, сохранять незаконченные правки и находить источник изменения. Потренируешься выбирать команду по состоянию файла, а не по привычке.",
  "page": "git-02-everyday.html"
 },
 {
  "id": "git-03-branching",
  "section": "git",
  "num": "03",
  "title": "Ветки, слияния и rebase",
  "lead": "Разберёшь, как Git сводит ветки, останавливается на конфликте и переписывает коммиты при rebase. Потренируешься читать общий предок, стадии index и последствия выбора merge, rebase или squash.",
  "page": "git-03-branching.html"
 },
 {
  "id": "git-04-remote",
  "section": "git",
  "num": "04",
  "title": "Удалённые репозитории и работа в команде",
  "lead": "Разберёшь обмен с remote, командную работу вокруг merge request и выпуск версий для Go-модулей. Потренируешься читать tracking refs и выбирать безопасный способ обновить ветку или опубликованный артефакт.",
  "page": "git-04-remote.html"
 },
 {
  "id": "git-05-recovery",
  "section": "git",
  "num": "05",
  "title": "Отмена, восстановление и расследование",
  "lead": "Разберёшь, когда переписать локальную историю, когда добавить обратный commit и как вернуть потерянные ссылки через reflog и fsck. Научишься отличать восстанавливаемые Git-объекты от секретов, которые уже надо отозвать.",
  "page": "git-05-recovery.html"
 },
 {
  "id": "extra-01-algorithms",
  "section": "extra",
  "num": "01",
  "title": "Алгоритмы и лайвкодинг",
  "lead": "Разберёшь типовые задачи на структуры данных, поиск, строки и конкурентную обработку. Научишься сначала задавать контракт, затем выбирать алгоритм и проверять граничные случаи, сложность и корректное завершение горутин.",
  "page": "extra-01-algorithms.html"
 },
 {
  "id": "extra-02-behavioral",
  "section": "extra",
  "num": "02",
  "title": "Поведенческая секция и рассказ об опыте",
  "lead": "Подготовишь короткие ответы о своём опыте, сложных ситуациях и критериях выбора работы. Практика помогает показать личный вклад, причинную связь и зрелость решений на конкретных фактах.",
  "page": "extra-02-behavioral.html"
 }
]