Перейти к основному содержимому
DevScallix
← ПрограммыПланируется

Акселератор 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. Неделя 1

    Чтение и безопасное изменение существующего кода

    • Карта незнакомого проекта: модули, точки входа, конфигурация
    • Трассировка запроса: controller → service → repository → DB
    • Тесты как документация и characterization-тесты
    • Поиск причин с debugger, stack trace и логами
    • Принцип малых обратимых изменений

    Лабораторная: Впервые запустить выданный преподавателем проект ticket tracker, пошагово проследить один запрос в debugger, затем написать characterization-тест, воспроизводящий баг пагинации, и исправить его.

    Задание: Подготовить CODEBASE_MAP.md (модули, диаграмма потока запроса), воспроизвести и исправить баг пагинации тестом, добавить небольшой фильтр; сдать Pull Request.

  2. Неделя 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. Неделя 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 тесты на нужных уровнях.

  1. Неделя 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.

  2. Неделя 5

    PostgreSQL: индексы и планы запросов

    • EXPLAIN (ANALYZE, BUFFERS): чтение плана
    • B-tree индексы, composite индексы и порядок столбцов, partial index
    • Когда Seq Scan уместен; статистика и селективность
    • Пагинация: OFFSET vs keyset
    • Безопасные миграции Flyway и создание индексов online

    Лабораторная: Проанализировать по плану медленный запрос на таблице в миллион строк, добавить индекс и измерить до/после.

    Задание: Спроектировать индекс для endpoint поиска с миграцией Flyway, заменить OFFSET на keyset-пагинацию и сравнить планы в короткой заметке; Pull Request.

  3. Неделя 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.

  1. Неделя 7

    Clean code и рефакторинг

    • Code smells: длинный метод, feature envy, primitive obsession
    • Рефакторинг малыми шагами под защитой тестов
    • Правильное использование sealed type, record и Optional
    • Именование, размер функций и комментарии 'почему'
    • Безопасный вход в legacy: seams и подход strangler

    Лабораторная: Защитить characterization-тестами сервис на 300 строк и разделить его на небольшие части с чёткой ответственностью.

    Задание: Отрефакторить выданный legacy-модуль в 4–6 небольших коммитов, тесты зелёные в каждом коммите; Pull Request.

  2. Неделя 8

    Основы логирования и observability

    • Structured logging, уровни логов и correlation id (MDC)
    • Что нельзя логировать: персональные данные и секреты
    • Метрики Micrometer и Spring Boot Actuator
    • Health check, readiness и liveness
    • Диагностика проблемы по логам и метрикам

    Лабораторная: Продиагностировать специально сломанный сервис (медленный запрос, исчерпание пула) только по логам и метрикам и написать краткий postmortem.

    Задание: Добавить в tracker фильтр correlation-id, 3 бизнес-метрики и группы health; тестом показать, что секреты не логируются; Pull Request.

  3. Неделя 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, оценить и декомпозировать тикет и самостоятельно поставить фичу от начала до конца.

  1. Неделя 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.

  2. Неделя 11

    От тикета к фиче: оценка и планирование

    • Уточнение тикета: acceptance criteria и вопросы
    • Декомпозиция на вертикальные срезы
    • Оценка: неопределённость, диапазоны и риск
    • Feature flag и поэтапная поставка
    • Сообщение статуса: блокеры, риски, зависимости

    Лабораторная: По расплывчатому тикету составить список вопросов, декомпозицию и оценку в диапазоне и обсудить с преподавателем в роли product owner.

    Задание: Взять capstone-тикет, написать план (вопросы, срезы, оценка, риски) и отправить первый срез Pull Request.

  3. Неделя 12

    Capstone: самостоятельная поставка фичи и демо

    • Поставка оставшихся срезов фичи
    • Self-review и подготовка Pull Request
    • Реакция на замечания review и доработка
    • Демо: что показать, как и какие компромиссы назвать
    • Ретроспектива и план дальнейшего роста

    Лабораторная: Завершить фичу, пройти review преподавателя и коллег и провести 10-минутное демо при зелёном CI.

    Задание: Полный Pull Request фичи (код, тесты, миграция, документация), ответы на review и заметки к демо; презентация и ретроспектива.

Контрольная точка: Самостоятельно поставленная в реалистичной кодовой базе фича, прошедшая review и показанная на демо (код, тесты, зелёный CI, краткое описание).

Оставьте интерес

Это не заявка и не платёжное обязательство. Мы свяжемся, когда программа будет запланирована или чтобы обсудить удобный вам формат.

Как с вами связаться?