Акселератор Junior → Middle
12-недельная программа с преподавателем для работающих junior Java-разработчиков: чтение и изменение существующей кодовой базы, глубокий Spring Boot, ловушки JPA и PostgreSQL, правильное тестирование, основы безопасности и CI и самостоятельная поставка фичи от тикета до релиза. Это плановый силлабус, он может корректироваться под группу; гарантии трудоустройства нет.
Эта программа планируется и пока не стоит в расписании. Дата, группа и набор не объявлены, заявки мы не принимаем. Оставьте интерес или запросите консультацию: мы свяжемся с вами, когда программа будет запланирована.
- Длительность
- 12 недель
- Живые занятия
- 2 в неделю по 90 минут
- Структура
- Этапов: 4
12 недель
Программа по неделям
Это планируемая программа: порядок и глубина могут корректироваться под группу. Это не гарантия работы или должности.
01 · Недели 1–3
Работа с существующим кодом и Spring Boot
Цель этапа: Прочитать и понять незнакомый Spring Boot проект, безопасно вносить изменения, работать в Git/Pull Request потоке и выстраивать чистую слоистую архитектуру.
Неделя 1
Чтение и безопасное изменение существующего кода
- Карта незнакомого проекта: модули, точки входа, конфигурация
- Трассировка запроса: controller → service → repository → DB
- Тесты как документация и characterization-тесты
- Поиск причин с debugger, stack trace и логами
- Принцип малых обратимых изменений
Лабораторная: Впервые запустить выданный преподавателем проект ticket tracker, пошагово проследить один запрос в debugger, затем написать characterization-тест, воспроизводящий баг пагинации, и исправить его.
Задание: Подготовить CODEBASE_MAP.md (модули, диаграмма потока запроса), воспроизвести и исправить баг пагинации тестом, добавить небольшой фильтр; сдать Pull Request.
Неделя 2
Git workflow, Pull Request и культура code review
- Ветвление, rebase vs merge, чистка истории интерактивным rebase
- Маленькие читаемые Pull Request: описание, размер, сообщения коммитов
- Роль ревьюера: на что смотреть и как формулировать замечания
- Роль автора: реагировать на замечания и разрешать разногласия
- Разрешение merge-конфликтов и git bisect
Лабораторная: Разрешить специально созданный merge-конфликт, найти коммит с багом через git bisect и письменно отревьюить выданный Pull Request коллеги.
Задание: Внести изменение в своей feature-ветке тремя небольшими осмысленными коммитами, открыть Pull Request и оставить не менее 5 обоснованных замечаний в Pull Request коллеги по группе.
Неделя 3
Spring Boot глубже: слои, валидация, обработка ошибок
- Ответственность controller / service / repository и разделение DTO и entity
- Bean Validation, custom validator и validation groups
- @RestControllerAdvice и RFC 9457 ProblemDetail
- Конфигурация: @ConfigurationProperties и профили
- Жизненный цикл bean и ловушки dependency injection
Лабораторная: Переписать endpoint, отдающий entity напрямую, с DTO, валидацией и единым ответом об ошибке ProblemDetail.
Задание: Добавить в tracker endpoint 'создать тикет' и 'сменить статус' с валидацией, ошибками бизнес-правил и тестами; Pull Request.
Контрольная точка: Прошедший review Pull Request, добавляющий в выданную кодовую базу новый endpoint с валидацией и единым форматом ошибок.
02 · Недели 4–6
Слой данных и стратегия тестирования
Цель этапа: Понять транзакции, ловушки JPA (N+1, lazy loading) и планы запросов PostgreSQL; писать unit, slice и Testcontainers тесты на нужных уровнях.
Неделя 4
Транзакции и ловушки JPA: N+1, lazy loading
- @Transactional: границы, propagation, правила rollback и ловушка self-invocation
- Persistence context, dirty checking, flush
- Проблема N+1 и fetch join / EntityGraph / batch fetching
- LazyInitializationException и цена open-in-view
- Optimistic locking (@Version) против потерянных обновлений
Лабораторная: Измерить endpoint с N+1 через SQL-логи и Hibernate statistics, исправить тремя способами и сравнить число запросов.
Задание: Исправить N+1 в endpoint списка тикетов, добавить тест на число запросов и защитить параллельные правки через @Version; Pull Request.
Неделя 5
PostgreSQL: индексы и планы запросов
- EXPLAIN (ANALYZE, BUFFERS): чтение плана
- B-tree индексы, composite индексы и порядок столбцов, partial index
- Когда Seq Scan уместен; статистика и селективность
- Пагинация: OFFSET vs keyset
- Безопасные миграции Flyway и создание индексов online
Лабораторная: Проанализировать по плану медленный запрос на таблице в миллион строк, добавить индекс и измерить до/после.
Задание: Спроектировать индекс для endpoint поиска с миграцией Flyway, заменить OFFSET на keyset-пагинацию и сравнить планы в короткой заметке; Pull Request.
Неделя 6
Стратегия тестирования: unit, slice, Testcontainers
- Пирамида тестов и что проверять на каждом уровне
- Unit-тесты с Mockito и ловушка избыточных mock
- Slice-тесты @WebMvcTest и @DataJpaTest
- Интеграционные тесты на реальном PostgreSQL с Testcontainers
- Причины flaky-тестов и test data builder
Лабораторная: Написать документ по стратегии тестирования проекта и добавить интеграционный тест на Testcontainers для критичного сценария.
Задание: Для tracker: написать 5 unit, 2 slice и 2 Testcontainers теста и отметить риски flaky; Pull Request.
Контрольная точка: Измеренная диагностика медленного endpoint, его исправление (стратегия fetch + индекс) и набор тестов на Testcontainers, который его защищает.
03 · Недели 7–9
Качество, наблюдаемость и безопасность
Цель этапа: Рефакторить под защитой тестов, диагностировать проблемы через structured logging и метрики, закрывать базовые уязвимости authn/authz и OWASP.
Неделя 7
Clean code и рефакторинг
- Code smells: длинный метод, feature envy, primitive obsession
- Рефакторинг малыми шагами под защитой тестов
- Правильное использование sealed type, record и Optional
- Именование, размер функций и комментарии 'почему'
- Безопасный вход в legacy: seams и подход strangler
Лабораторная: Защитить characterization-тестами сервис на 300 строк и разделить его на небольшие части с чёткой ответственностью.
Задание: Отрефакторить выданный legacy-модуль в 4–6 небольших коммитов, тесты зелёные в каждом коммите; Pull Request.
Неделя 8
Основы логирования и observability
- Structured logging, уровни логов и correlation id (MDC)
- Что нельзя логировать: персональные данные и секреты
- Метрики Micrometer и Spring Boot Actuator
- Health check, readiness и liveness
- Диагностика проблемы по логам и метрикам
Лабораторная: Продиагностировать специально сломанный сервис (медленный запрос, исчерпание пула) только по логам и метрикам и написать краткий postmortem.
Задание: Добавить в tracker фильтр correlation-id, 3 бизнес-метрики и группы health; тестом показать, что секреты не логируются; Pull Request.
Неделя 9
Основы безопасности: authn/authz и OWASP
- Authentication vs authorization; session и JWT
- Spring Security: filter chain, method security, CSRF
- OWASP Top 10: injection, broken access control, sensitive data exposure
- IDOR и проверки авторизации на уровне ресурса
- Хранение паролей, уязвимости зависимостей, управление секретами
Лабораторная: Тестами доказать SQL injection и IDOR в выданном проекте, затем закрыть их.
Задание: Авторизация по ролям и владению в tracker (чужие тикеты не видны → 404), тесты авторизации и заметка security review; Pull Request.
Контрольная точка: Pull Request с рефакторингом legacy-модуля, добавлением логов/метрик и заметкой по security review (найденные и закрытые уязвимости).
04 · Недели 10–12
Поставка: Docker, CI и самостоятельная фича
Цель этапа: Упаковать приложение в контейнер, построить CI pipeline, оценить и декомпозировать тикет и самостоятельно поставить фичу от начала до конца.
Неделя 10
Docker и CI pipeline
- Multi-stage Dockerfile, layer cache и небольшие образы
- Локальное окружение через docker compose (app + PostgreSQL)
- GitHub Actions: build, test, cache, артефакты
- Testcontainers и quality gates в pipeline
- Конфигурация 12-factor и секреты в CI
Лабораторная: Написать multi-stage Dockerfile, уменьшить образ и настроить CI workflow, запускающий тесты.
Задание: Dockerfile, compose.yaml и зелёный CI workflow для tracker; в README инструкция 'запуск одной командой'; Pull Request.
Неделя 11
От тикета к фиче: оценка и планирование
- Уточнение тикета: acceptance criteria и вопросы
- Декомпозиция на вертикальные срезы
- Оценка: неопределённость, диапазоны и риск
- Feature flag и поэтапная поставка
- Сообщение статуса: блокеры, риски, зависимости
Лабораторная: По расплывчатому тикету составить список вопросов, декомпозицию и оценку в диапазоне и обсудить с преподавателем в роли product owner.
Задание: Взять capstone-тикет, написать план (вопросы, срезы, оценка, риски) и отправить первый срез Pull Request.
Неделя 12
Capstone: самостоятельная поставка фичи и демо
- Поставка оставшихся срезов фичи
- Self-review и подготовка Pull Request
- Реакция на замечания review и доработка
- Демо: что показать, как и какие компромиссы назвать
- Ретроспектива и план дальнейшего роста
Лабораторная: Завершить фичу, пройти review преподавателя и коллег и провести 10-минутное демо при зелёном CI.
Задание: Полный Pull Request фичи (код, тесты, миграция, документация), ответы на review и заметки к демо; презентация и ретроспектива.
Контрольная точка: Самостоятельно поставленная в реалистичной кодовой базе фича, прошедшая review и показанная на демо (код, тесты, зелёный CI, краткое описание).