Java Backend Career Track: Полная программа — 24 недели
Шесть этапов от первой программы до защищённого backend-проекта. В каждой неделе есть конкретная лабораторная работа и практическое задание, большинство заданий сдаётся как Pull Request.
Это планируемая программа для первой группы. Порядок и глубина могут корректироваться до начала и во время обучения в зависимости от уровня группы. Недельная нагрузка и расписание объявляются вместе с группой.
01 · Недели 1–4
Основы
Цель этапа: Писать и отлаживать небольшие программы на Java и пользоваться Git.
Неделя 1
Как работают программы
- JDK, JVM и IDE
- Компиляция и запуск программы
- Переменные, типы и операторы
- Чтение ошибок компилятора
- Первые коммиты в Git
Лабораторная: Настройте JDK, IntelliJ IDEA и Git, затем напишите небольшой консольный калькулятор и закоммитьте его осмысленными шагами.
Задание: Конвертер единиц (например, температуры и длины) с аккуратной историей коммитов в репозитории на GitHub.
Неделя 2
Управление потоком, методы и отладка
- Условия и циклы
- Методы и параметры
- Отладка с breakpoint
- Разбиение задачи на шаги
Лабораторная: Напишите игру «угадай число», разбив её на небольшие методы, и найдите заранее заложенную ошибку с помощью отладчика.
Задание: Программа с текстовым меню (например, простой учёт расходов в памяти) и короткая заметка о том, как вы разбили задачу на шаги.
Неделя 3
Массивы, строки и простые алгоритмы
- Массивы и строки
- Линейный и бинарный поиск
- Интуиция сортировки
- Мышление о стоимости (интуиция Big-O)
Лабораторная: Реализуйте поиск и простую сортировку вручную, затем сравните, сколько шагов каждому нужно на растущих входных данных.
Задание: Инструмент статистики слов для текста (количество слов, самые частые слова) и письменное сравнение двух подходов.
Неделя 4
ООП I и первый Pull Request
- Классы и объекты
- Инкапсуляция
- Конструкторы
- Ветки Git
- Первый Pull Request
Лабораторная: Смоделируйте небольшую предметную область (например, банковский счёт или книгу в библиотеке) классами и отправьте её из feature-ветки как Pull Request.
Задание: Перепишите консольное приложение этапа с использованием классов, сдайте как Pull Request и учтите замечания ревью.
Контрольная точка: Консольное приложение, сданное как Pull Request, прошедшее ревью и доработанное по замечаниям.
02 · Недели 5–9
Java Core
Цель этапа: Моделировать предметную область чистым и протестированным кодом на Java.
Неделя 5
ООП II и первые принципы SOLID
- Интерфейсы и полиморфизм
- Наследование и композиция
- Single responsibility и open/closed
- Проектирование с учётом изменений
Лабораторная: Отрефакторите небольшой пример уведомлений или платежей с наследования на интерфейсы и композицию.
Задание: Спроектируйте небольшую предметную область (например, расчёт цены заказа с несколькими правилами скидок) за интерфейсами и сдайте как Pull Request.
Неделя 6
Коллекции и generics
- List, Set, Map и Deque
- Выбор коллекции по характеру доступа
- Generics и типобезопасность
- Итерация и сортировка с Comparator
Лабораторная: Решите одну задачу (например, поиск заказов по клиенту) разными коллекциями и объясните, какая подходит лучше.
Задание: Каталог в памяти с поиском, группировкой и сортировкой и короткая заметка о том, почему вы выбрали каждую коллекцию.
Неделя 7
Исключения, равенство, record и enum
- Checked и unchecked исключения
- equals и hashCode
- Record и enum
- Неизменяемость
- Проектирование обработки ошибок
Лабораторная: Замените коды ошибок в прежнем проекте осмысленными исключениями и превратите объекты-значения в record.
Задание: Добавьте в модель предметной области валидацию, собственные исключения и неизменяемые объекты-значения, сдайте как Pull Request.
Неделя 8
Лямбды, stream и чистый код
- Лямбды и функциональные интерфейсы
- Stream: map, filter, collect
- Optional
- Именование и небольшие функции
- Читаемые условия
Лабораторная: Перепишите код с множеством циклов на stream там, где это улучшает читаемость, и разбейте один длинный метод на небольшие именованные.
Задание: Функция отчёта в вашей предметной области на stream (например, суммы по клиентам) и самопроверка читаемости.
Неделя 9
Тестирование, Maven и основы конкурентности
- Unit-тесты с JUnit 5 и AssertJ
- Сборка Maven и зависимости (и чем отличается Gradle)
- Дизайн теста: arrange, act, assert
- Потоки и ExecutorService
- Почему общее состояние — это сложно
Лабораторная: Переведите проект на Maven, напишите unit-тесты для ключевых правил и запустите небольшую задачу через ExecutorService.
Задание: Увеличьте покрытие осмысленного поведения тестами, продемонстрируйте race condition и покажите один способ её устранить.
Контрольная точка: Протестированная библиотека предметной области (например, библиотека или заказы), code review и короткая защита проектных решений.
03 · Недели 10–12
Данные
Цель этапа: Проектировать реляционную модель, делать по ней запросы и использовать её из Java.
Неделя 10
Основы SQL с PostgreSQL
- PostgreSQL в Docker
- SELECT и фильтрация
- Join
- Агрегация и группировка
Лабораторная: Запустите PostgreSQL в Docker, загрузите небольшой набор данных и ответьте на бизнес-вопросы запросами.
Задание: Набор SQL-запросов по заданной схеме, у каждого однострочное пояснение, сдаётся как Pull Request.
Неделя 11
Моделирование данных и транзакции
- Первичные и внешние ключи
- Нормализация
- Ограничения (constraints)
- Первые индексы и чтение плана запроса
- Транзакции и ACID
Лабораторная: Спроектируйте схему для домена заказов, добавьте ограничения и индекс и сравните план запроса до и после.
Задание: ER-диаграмма и SQL-схема для вашей небольшой предметной области и заметка о том, какое ограничение защищает какое правило.
Неделя 12
От JDBC к JPA/Hibernate
- Основы JDBC
- Сущности и связи
- Репозитории
- Проблема N+1
- Миграции Flyway
Лабораторная: Сначала прочитайте данные через чистый JDBC, затем отобразите их через JPA, спровоцируйте запросы N+1 и исправьте.
Задание: Сохраните вашу предметную область через JPA и миграции Flyway; сдайте как Pull Request вместе со скриптами миграций.
Контрольная точка: Ревью модели данных: ER-диаграмма, миграции и объяснённые запросы.
04 · Недели 13–17
Spring и REST API
Цель этапа: Построить защищённый, валидируемый и протестированный REST API.
Неделя 13
Spring Core
- Inversion of Control
- Dependency injection и bean
- Конфигурация и properties
- Профили
Лабораторная: Свяжите небольшой сервис вручную, затем доверьте это Spring и переключите поведение между двумя профилями.
Задание: Настраиваемый компонент (например, калькулятор цены с параметрами для разных сред), сдаётся как Pull Request.
Неделя 14
Spring Boot REST
- Контроллеры и DTO
- HTTP-методы и семантика
- Дизайн ресурсов и коды статуса
- Пагинация и фильтрация
- Работа с HTTP-клиентом
Лабораторная: Откройте вашу предметную область как REST API с созданием, чтением, обновлением и удалением и проверьте её HTTP-клиентом.
Задание: Спроектируйте и реализуйте endpoint-ы для одного ресурса с корректными кодами статуса и пагинацией, с короткой заметкой о дизайне API.
Неделя 15
Валидация, ошибки и сервисный слой
- Bean Validation
- Единообразные ответы об ошибках (Problem Details)
- Сервисный слой
- @Transactional и его границы
Лабораторная: Добавьте валидацию и глобальный обработчик исключений, возвращающий Problem Details, и перенесите бизнес-правила в сервис.
Задание: Сделайте так, чтобы API единообразно отклонял неверный ввод, а каждая бизнес-операция выполнялась в одной транзакции; сдайте как Pull Request.
Неделя 16
Spring Security
- Аутентификация и авторизация
- Хеширование паролей
- Роли и защищённые endpoint-ы
- Сессии и JWT (базовый уровень)
- Типичные ошибки, которых стоит избегать
Лабораторная: Добавьте регистрацию и вход, хешируйте пароли и защитите endpoint-ы по ролям.
Задание: Защитите API так, чтобы пользователи видели только разрешённое, и добавьте короткую заметку об угрозах с перечнем того, что дизайн не покрывает.
Неделя 17
Тестирование Spring-приложений и документация API
- Slice-тесты
- Интеграционные тесты с Testcontainers
- Моки с Mockito там, где уместно
- Документация OpenAPI
Лабораторная: Напишите slice-тест контроллера и интеграционный тест репозитория с PostgreSQL в Testcontainers и сгенерируйте документ OpenAPI.
Задание: Покройте тестами основные сценарии API и опубликуйте его описание OpenAPI; сдайте как Pull Request.
Контрольная точка: Защищённый REST API, прошедший ревью в виде Pull Request и защищённый перед ревьюером.
05 · Недели 18–21
Доставка и системы
Цель этапа: Запускать сервис так, как это делает команда, и понимать следующий слой систем.
Неделя 18
Docker и конфигурация
- Образы и контейнеры
- Dockerfile для API
- docker compose для API и базы данных
- Основы конфигурации и секретов
Лабораторная: Упакуйте API в контейнер и запустите его вместе с PostgreSQL через docker compose, получая конфигурацию из окружения.
Задание: Воспроизводимая локальная среда: одной командой запускаются API и база данных, описано в README, сдаётся как Pull Request.
Неделя 19
CI/CD и основы наблюдаемости
- Pipeline, который собирает, тестирует и упаковывает
- GitHub Actions
- Структурированные логи
- Health check и метрики через Actuator
- Чтение логов для поиска проблемы
Лабораторная: Создайте workflow GitHub Actions, который собирает и тестирует проект и собирает образ, и откройте endpoint-ы health и метрик.
Задание: Добавьте в проект pipeline и endpoint-ы Actuator и исправьте намеренно сломанную сборку; сдайте как Pull Request.
Неделя 20
Redis, messaging и основы Kafka
- Кеширование в Redis и TTL
- Что не стоит кешировать
- Зачем нужен асинхронный обмен сообщениями
- Топики Kafka, producer и consumer
- По одному практическому упражнению на каждый инструмент
Лабораторная: Закешируйте в Redis один часто читаемый endpoint, затем опубликуйте событие в локальную Kafka и получите его во втором небольшом приложении.
Задание: Короткая записка о том, где кеширование и messaging помогли бы вашему проекту, а где нет, и рабочие упражнения.
Неделя 21
Микросервисы и основы облака
- Границы сервисов
- Когда систему не стоит делить
- Регионы и управляемые базы данных
- Запуск контейнера в облаке
Лабораторная: Набросайте, как мог бы делиться ваш проект, приведите аргументы против деления и пройдите шаги запуска его контейнера в облачной среде.
Задание: Одностраничная архитектурная записка со сравнением единого приложения и разделённого дизайна для вашего проекта и вашей рекомендацией.
Контрольная точка: Демонстрация работающей системы (API, база данных, контейнер и pipeline) с коротким разбором.
06 · Недели 22–24
Итоговый проект и карьера
Цель этапа: Сдать и защитить законченный backend-проект и подготовиться к собеседованиям.
Неделя 22
Планирование итогового проекта и первые инкременты
- Требования
- Модель предметной области
- Дизайн API
- Записи о решениях (ADR)
- Разработка через Pull Request
Лабораторная: Напишите требования, модель предметной области и набросок API итогового проекта, зафиксируйте ключевые решения в ADR и откройте первые Pull Request.
Задание: Спланированный и прошедший ревью backlog итогового проекта и влитый первый работающий вертикальный срез.
Неделя 23
Разработка итогового проекта, ревью и подготовка к собеседованию
- Разработка и ревью через Pull Request
- Вопросы по Java, SQL и Spring
- Рассказ о собственном проекте
- Ревью кода коллеги
Лабораторная: Завершите основные функции с тестами и pipeline и потренируйтесь вслух объяснять одно проектное решение.
Задание: Стабильная ветка итогового проекта с README, тестами и pipeline и письменные ответы на набор технических вопросов.
Неделя 24
Итоговая практическая оценка
- Защита итогового проекта
- Live-упражнение по code review
- Симуляция собеседования
- Личный план следующих шагов
Лабораторная: Представьте и продемонстрируйте итоговый проект, проведите ревью незнакомого кода вживую и пройдите пробное техническое собеседование.
Задание: Личный план следующих шагов по итогам оценки: сильные стороны, пробелы и что практиковать дальше.
Контрольная точка: Итоговая практическая оценка.
Как оценивается обучение
- Еженедельное ревью Pull Request с письменной обратной связью по именованию, структуре, тестам и дизайну.
- Контрольная точка в конце каждого этапа с короткой защитой ваших решений.
- Практические задачи вместо заучивания: оценивается код, который вы написали и можете объяснить.
- Итоговая практическая оценка: итоговый проект, live code review и симуляция собеседования.
- Обратная связь — это рекомендация по следующим шагам; результат зависит от вашей собственной работы и регулярности.
- Ни одна программа не может гарантировать трудоустройство, и эта тоже не гарантирует.
Инструменты, которые вы будете использовать
- JDK 21
- IntelliJ IDEA
- Git и GitHub
- Maven (с обзором Gradle)
- JUnit 5
- AssertJ
- Mockito
- PostgreSQL
- Flyway
- Spring Boot 3
- Spring Security
- Testcontainers
- Docker и docker compose
- HTTP-клиент (например, Postman или IntelliJ HTTP Client)
- GitHub Actions
- Redis
- Kafka (локально)
Нагрузка
Недельная нагрузка и расписание объявляются вместе с группой. Кроме живых занятий, планируйте регулярную самостоятельную практику каждую неделю: основная часть обучения проходит в лабораторных работах и заданиях.