Advanced Java Backend
Глубина по JVM, concurrency, JPA/SQL и тестированию, чтобы самостоятельно вести реальные сервисы.
Эта программа планируется и ещё не включена в расписание. Дата, цена и группа не объявлены. Если вы оставите интерес, мы свяжемся, когда программа будет запланирована, или чтобы обсудить индивидуальный формат.
Цель
Программа помогает перейти от уровня junior к разработчику, который самостоятельно ведёт реальный сервис. Основной упор: как работают JVM и память, как правильно строить concurrency и работу с базой данных и как диагностировать проблемы в условиях, близких к production. Code review отрабатывается с двух сторон: как автор и как ревьюер.
Для кого
- Junior-разработчики с опытом Java не менее 1 года, писавшие CRUD-сервисы на Spring Boot
- Инженеры, которые хотят понимать, почему код ведёт себя именно так (память, потоки, планы запросов)
- Те, кто хочет вести задачу от начала до конца и защищать свои решения на review
- Инженеры, которые системно закрывают пробелы на пути к уровню middle
Для кого не подходит
- Полные новички в Java: им лучше начать с Java Backend Career Track
- Те, кто ищет только рецепты настройки фреймворков: программа работает с глубинными основами
- Те, кто ищет Kubernetes и автоматизацию инфраструктуры: это не тема программы
Требования
- Уверенное владение синтаксисом Java 17+, коллекциями, исключениями и generics
- Практика с простым REST-сервисом на Spring Boot и базовым CRUD на JPA
- Основы SQL: JOIN, GROUP BY и понятие индекса
- Знакомство с Git и процессом Pull Request
Что вы сможете делать
Что вы сможете делать
- Объяснить heap, stack, GC и загрузку классов простой схемой и сделать первые выводы из heap dump
- Выбрать между executor, CompletableFuture и virtual threads для задачи и обосновать выбор
- Воспроизвести race condition или deadlock тестом и thread dump, затем исправить
- Находить N+1, проблемы lazy loading и границ транзакции и устранять их на уровне JPA/SQL
- Читать план EXPLAIN и обосновывать изменение индекса или запроса измерениями
- Построить разумную стратегию тестирования из unit-, slice- и integration-тестов
- Диагностировать проблему производительности, близкую к production, по логам, метрикам и профайлеру
- Подготовить Pull Request и конструктивно проревьюить чужой
Ни одна образовательная программа не может гарантировать трудоустройство или повышение.
Учебный план
Учебный план
- 01
JVM и память
Как JVM управляет кодом и памятью и как исследовать проблемы с памятью на основе измерений.
- Heap, stack, metaspace и время жизни объекта
- Сборщики мусора (G1, ZGC) и понятие пауз
- Загрузка классов и JIT-компиляция
- Чтение heap dump и GC-логов
- Типичные источники утечек (кэши, listener, ThreadLocal)
Практическая лабораторная: Проанализировать сервис с намеренной утечкой памяти по heap dump, найти источник и исправить.
- 02
Concurrency и virtual threads
От Java Memory Model до virtual threads: как писать корректный и безопасный параллельный код.
- Java Memory Model, happens-before и видимость
- synchronized, Lock, atomic и concurrent-коллекции
- ExecutorService, CompletableFuture и structured concurrency
- Virtual threads: когда они полезны, проблема pinning
- Диагностика deadlock, livelock и starvation
- Чтение thread dump
Практическая лабораторная: Создать race condition в коде, обновляющем общий счёт, воспроизвести его тестом, затем исправить двумя разными способами и сравнить.
- 03
JPA и Hibernate в глубину
Безопасно работать с JPA нельзя, не зная, как на деле ведут себя persistence context, flush и lazy loading.
- Persistence context, dirty checking и режимы flush
- Lazy и eager загрузка, проблема N+1
- Fetch join, entity graph и projection
- Batch insert/update и optimistic locking
- Границы транзакций и причины LazyInitializationException
Практическая лабораторная: Измерить по SQL-логам endpoint с проблемой N+1, исправить тремя способами и сравнить число запросов.
- 04
SQL и производительность запросов
Как по плану понять, почему запрос медленный, и выбрать правильный индекс.
- Чтение EXPLAIN / EXPLAIN ANALYZE
- B-tree индексы, составные индексы и порядок столбцов
- Covering index и селективность
- Пагинация: offset и keyset
- Уровни изоляции и поведение блокировок
Практическая лабораторная: Проанализировать медленный запрос на большой таблице по плану, добавить индекс и показать измерения до и после в письменной записке.
- 05
Стратегия тестирования
Определяем, что тестировать на каком уровне, чтобы тесты оставались дешёвыми и надёжными.
- Пирамида тестирования и её ограничения
- JUnit 5, Mockito и чрезмерное использование моков
- Integration-тесты на реальной БД с Testcontainers
- Slice-тесты (@DataJpaTest, @WebMvcTest)
- Причины flaky-тестов и как их устранять
Практическая лабораторная: Написать документ со стратегией тестирования для существующего сервиса и добавить integration-тест на Testcontainers для критичного сценария.
- 06
Чистый код в растущей кодовой базе
Как управлять структурой, именованием и зависимостями, когда кодовая база растёт.
- Структура пакетов и правила зависимостей между слоями
- Отделение доменной модели от сервисного кода
- Техники рефакторинга и изменения под защитой тестов
- Проектирование исключений и модели ошибок
- Как сделать технический долг видимым
Практическая лабораторная: Разбить сложный сервисный класс на небольшие части с чёткой ответственностью, сохраняя зелёные тесты.
- 07
Диагностика проблем, близких к production
Системный подход к медленной работе, росту памяти и тихим сбоям.
- Structured logging и correlation ID
- Метрики Micrometer и ключевые сигналы
- Чтение профайлеров и flame graph
- Исчерпание connection pool и насыщение thread pool
- Метод диагностики на основе гипотез
Практическая лабораторная: Продиагностировать намеренно сломанный сервис (исчерпание пула, медленный запрос) только по логам, метрикам и профайлеру и написать postmortem.
- 08
Практика code review
Review — это и навык, и командная привычка; отрабатываем её с обеих сторон.
- Подготовка небольших и понятно описанных Pull Request
- Чек-лист review: корректность, читаемость, тесты, риск
- Конструктивная обратная связь и ответы на неё
- Сигналы безопасности и производительности на review
Практическая лабораторная: Письменно проревьюить предложенный Pull Request, затем аргументированно ответить на комментарии к собственному Pull Request.
Практические задания
- Анализ heap dump с письменным выводом
- Тест, воспроизводящий и затем защищающий от concurrency-ошибки
- Измерение и сокращение числа запросов JPA
- Обоснование решения по индексу через EXPLAIN
- Review двух Pull Request
Результаты для портфолио
- Сервис с нагрузочным тестом и краткой запиской о ёмкости
- Документ о стратегии тестирования и тесты на Testcontainers
- Письменный postmortem диагностики производительности
- Портфолио-образец письменных code review
Как оценивается обучение
- Code review ваших Pull Request ментором
- Защита postmortem диагностики
- Практическая проверка по concurrency и JPA
- Короткое техническое обсуждение, где вы объясняете собственный код
Инструменты и технологии
- Java 21
- Spring Boot
- PostgreSQL
- JUnit 5 и Mockito
- Testcontainers
- VisualVM и JDK Flight Recorder
- Eclipse MAT
- Micrometer
- Git
Последовательность уровней
- До
- До этого: Java Backend Career Track или не менее 1 года практического опыта на уровне junior.
- После
- После: Enterprise Spring Boot, затем Microservices и Distributed Systems.
- Длительность и формат
- Длительность и формат ещё не определены; программа планируется и не включена в расписание.
Частые вопросы
Частые вопросы
Доступна ли программа сейчас?
Нет. Программа планируется и пока не стоит в расписании. Даты и цены не объявлены. Вы можете оставить интерес или запросить консультацию.
Я не проходил Java Backend Career Track. Можно присоединиться?
Возможно, если у вас есть не менее 1 года реальной работы с Java и Spring Boot. Если основы слабые, лучше сначала пройти Career Track. На консультации можно вместе оценить ваш уровень.
Нужна ли Java 21 для virtual threads?
Да, программа построена на Java 21. В более ранних версиях virtual threads нет, но остальные темы (JVM, JPA, SQL, тестирование) относятся и к ним.
Будет ли сертификат?
Сертификат не обещается. Оценка проходит в форме обратной связи ментора, review и защит и носит рекомендательный характер.
Статьи по теме программы
- Java CoreChoosing the right Java collection
- Advanced JavaJava concurrency basics
- Java CoreThe equals and hashCode contract in Java
- Java CoreDesigning exceptions in Java services
- Advanced JavaJava memory and garbage collection for service developers
- Java CoreJava streams: readable pipelines and common pitfalls