Содержание курса
Модуль 1. Введение: от джуна к продуктивному мидлу
5 уроков
1.
О курсе: как проходить обучение и канал «Логово Дата-Инженера»
↗
2.
Чем мидл отличается от джуна: не только «больше кода»
↗
3.
Что мы считаем пройденным: краткая ревизия базы Java
↗
4.
Инструменты продуктивного мидла: IDE, Git, Maven, отладка
↗
5.
Как устроен этот курс и как учиться эффективно
↗
Модуль 2. Продвинутое ООП
9 уроков
1.
Наследование глубже: проектируем иерархии осознанно и без…
↗
2.
Композиция против наследования: делаем правильный выбор
↗
3.
SOLID: пять принципов, которые меняют дизайн классов
↗
4.
Принцип подстановки Лисков и проектирование по контракту
↗
5.
Иммутабельные объекты и паттерн Builder в современной Java
↗
6.
Sealed classes: запечатанные иерархии наследования в Java 17
↗
7.
Pattern matching for switch: новый switch-expression в Java 21
↗
8.
Records глубоко: компактные конструкторы, валидация и…
↗
9.
Интерфейсы глубоко: private-методы, static-методы и эволюция API
↗
Модуль 3. Исключения и устойчивый код
6 уроков
1.
Иерархия собственных исключений: проектируем осмысленно
↗
2.
Checked против unchecked: когда и почему выбирать каждое
↗
3.
Try-with-resources глубоко: AutoCloseable и управление ресурсами
↗
4.
Optional: не только про null — цепочки вычислений в Java
↗
5.
Паттерн Result: функциональная обработка ошибок без исключений
↗
6.
Защитное программирование: предусловия, постусловия и инварианты
↗
Модуль 4. Коллекции глубоко
8 уроков
1.
Производительность коллекций: ArrayList, LinkedList, HashSet…
↗
2.
HashMap внутри: хеширование, коллизии, load factor и resize
↗
3.
LinkedHashMap и TreeMap: когда важен порядок ключей
↗
4.
ConcurrentHashMap: коллекция для безопасной многопоточности
↗
5.
PriorityQueue: когда приоритет важнее порядка добавления
↗
6.
Deque и ArrayDeque: стек и очередь в одном интерфейсе
↗
7.
Неизменяемые коллекции: List.of, Set.of, Map.of и…
↗
8.
Comparable и Comparator: тонкая настройка порядка сортировки
↗
Модуль 5. Stream API глубоко
9 уроков
1.
Stream как ленивый конвейер: промежуточные и терминальные…
↗
2.
map и flatMap: преобразование данных в потоке
↗
3.
filter, distinct, limit и skip: управление содержимым потока
↗
4.
sorted: сортировка и компараторы в Stream API
↗
5.
reduce: свёртка потока в одно значение
↗
6.
collect и Collectors: toList, toSet, toMap, joining, summarizing
↗
7.
groupingBy и partitioningBy: группы, подгруппы и…
↗
8.
Параллельные потоки: ForkJoinPool, ускорение и ловушки
↗
9.
Optional + Stream: как соединить два мира без…
↗
Модуль 6. Дженерики advanced
7 уроков
1.
Type erasure: что стирается и почему дженерики такие
↗
2.
Bridge methods: что компилятор добавляет невидимо
↗
3.
Reifiable типы: почему нельзя создать массив дженерика
↗
4.
Raw types: наследие Java 1.4 и как с ним работать безопасно
↗
5.
Wildcards и PECS: ? extends для чтения, ? super для записи
↗
6.
Дженерик-методы и автоматический вывод типов
↗
7.
Дженерик-фабрики и продвинутые паттерны с generics
↗
Модуль 7. Функциональное программирование в Java
7 уроков
1.
Лямбда-выражения глубоко: захват переменных и effectively final
↗
2.
Ссылки на методы: четыре формы — статические, экземпляра…
↗
3.
Функциональные интерфейсы: Predicate, Function, Consumer…
↗
4.
Композиция функций: andThen, compose и построение конвейеров
↗
5.
Каррирование и частичное применение в Java
↗
6.
Функции высшего порядка: методы, принимающие и возвращающие…
↗
7.
Практика: строим функциональный конвейер обработки данных
↗
Модуль 8. Аннотации и рефлексия
6 уроков
1.
Встроенные аннотации глубже: @Override, @Deprecated…
↗
2.
Создание собственных аннотаций: @interface, @Retention…
↗
3.
Обработка аннотаций в runtime через Reflection API
↗
4.
Annotation Processing на этапе компиляции: генерируем код
↗
5.
Reflection API глубоко: Class, Method, Field, Constructor и…
↗
6.
Динамические прокси: java.lang.reflect.Proxy и InvocationHandler
↗
Модуль 9. Многопоточность advanced
8 уроков
1.
ExecutorService глубоко: Fixed, Cached, Scheduled и жизненный…
↗
2.
CompletableFuture: асинхронное программирование без блокировок
↗
3.
Композиция CompletableFuture: thenApply, thenCompose…
↗
4.
ForkJoinPool и рекурсивные задачи: разделяй и властвуй
↗
5.
ThreadLocal и модель памяти Java: happens-before и видимость
↗
6.
volatile: когда ключевое слово решает проблему, а когда нет
↗
7.
Атомарные классы: AtomicInteger, AtomicReference, CAS и…
↗
8.
Lock, ReadWriteLock и Virtual Threads: новый мир…
↗
Модуль 10. Concurrency utilities
6 уроков
1.
CountDownLatch: ждём завершения всех задач
↗
2.
CyclicBarrier: синхронизация группы потоков в контрольной точке
↗
3.
Semaphore: ограничение одновременного доступа к ресурсу
↗
4.
Exchanger: двусторонний обмен данными между потоками
↗
5.
BlockingQueue: паттерн производитель-потребитель
↗
6.
Phaser: гибкая многофазная синхронизация
↗
Модуль 11. Работа с базами данных
7 уроков
1.
JDBC глубоко: PreparedStatement, пакетные операции и транзакции
↗
2.
Пул соединений: HikariCP — самый быстрый пул для Java
↗
3.
Управление транзакциями: уровни изоляции и распространение
↗
4.
Введение в ORM: зачем нужна прослойка между объектами и…
↗
5.
JPA и Hibernate: Entity, EntityManager, JPQL и отношения
↗
6.
Миграции схемы базы данных: Flyway
↗
7.
Паттерны DAO и Repository: отделяем бизнес-логику от доступа…
↗
Модуль 12. HTTP и REST сервисы
8 уроков
1.
java.net.http.HttpClient: современный HTTP-клиент в…
↗
2.
Принципы REST: ресурсы, глаголы, статус-коды и HATEOAS
↗
3.
Jackson: сериализация Java-объектов в JSON и обратно
↗
4.
Jackson глубже: аннотации, модули, пользовательские…
↗
5.
Валидация данных: Bean Validation и Hibernate Validator
↗
6.
Обработка ошибок HTTP-клиента: retry, timeout, circuit breaker
↗
7.
Тестирование HTTP-клиентов: подходы и инструменты
↗
8.
Работа с XML: от DOM и SAX к JAXB
↗
Модуль 13. Тестирование по-взрослому
8 уроков
1.
JUnit 5 глубоко: жизненный цикл, @Nested, @Tag, условные тесты
↗
2.
Параметризованные тесты: @ParameterizedTest и источники данных
↗
3.
Mockito: создание моков, стабов и шпионов
↗
4.
Mockito глубже: ArgumentCaptor, verify, when и лучшие практики
↗
5.
Test Doubles: Dummy, Stub, Spy, Mock, Fake — кто есть кто
↗
6.
Интеграционные тесты и Testcontainers
↗
7.
TDD на практике: красный — зелёный — рефакторинг
↗
8.
Code coverage и мутационное тестирование с JaCoCo и Pitest
↗
Модуль 14. Логирование и мониторинг
5 уроков
1.
SLF4J и Logback: архитектура логирования в Java
↗
2.
Уровни логирования, аппендеры и конфигурация Logback
↗
3.
Структурированное логирование и MDC: контекст в каждой строке
↗
4.
Метрики приложения: введение в Micrometer
↗
5.
Health checks: следим за здоровьем сервиса
↗
Модуль 15. Сборка и управление зависимостями
6 уроков
1.
Maven глубоко: жизненный цикл, фазы и плагины
↗
2.
Maven профили и фильтрация ресурсов: окружения и конфигурация
↗
3.
Gradle: Groovy DSL, Kotlin DSL и сравнение с Maven
↗
4.
Управление зависимостями: dependencyManagement, BOM и…
↗
5.
Многомодульные проекты: организация большого кода на Java
↗
6.
Публикация артефактов: Nexus, Artifactory и корпоративный…
↗
Модуль 16. Инструменты качества кода
5 уроков
1.
Checkstyle: единый стиль кода — договариваемся и автоматизируем
↗
2.
SpotBugs и статический анализ: находим баги до продакшна
↗
3.
SonarQube: метрики качества и технический долг
↗
4.
Код-ревью: что искать и как давать обратную связь
↗
5.
Статический анализ в CI/CD: автоматизируем проверки в пайплайне
↗
Модуль 17. Паттерны проектирования в Java
8 уроков
1.
Singleton: от классической реализации к enum — идиоматично и…
↗
2.
Builder: строим сложные объекты читаемо и безопасно
↗
3.
Factory Method и Abstract Factory: создание объектов по…
↗
4.
Strategy: заменяемое поведение через композицию
↗
5.
Observer: подписка на события и реактивное обновление
↗
6.
Decorator: добавляем поведение, не меняя интерфейс
↗
7.
Adapter и Facade: совместимость чужого кода и простота своего
↗
8.
Практика: рефакторинг кода с применением паттернов
↗
Модуль 18. Архитектура приложений
6 уроков
1.
Слоёная архитектура: presentation, business, data — границы и…
↗
2.
Чистая и гексагональная архитектура: порты, адаптеры и…
↗
3.
Domain-Driven Design: единый язык, сущности, value objects и…
↗
4.
CQRS: разделение команд и запросов — зачем и когда
↗
5.
Событийно-ориентированная архитектура: асинхронная интеграция…
↗
6.
Принципы чистого кода: именование, функции, комментарии и…
↗
Модуль 19. Итоговый проект мидла
7 уроков
1.
Постановка задачи: REST-сервис для управления проектами и…
↗
2.
Проектирование модели предметной области: сущности, value…
↗
3.
Реализация сервисного слоя: бизнес-логика без зависимости от…
↗
4.
Репозиторий и работа с базой данных: JPA, Hibernate, Flyway
↗
5.
Модульные и интеграционные тесты: Testcontainers для…
↗
6.
Документирование, упаковка и запуск готового сервиса
↗
7.
Куда дальше: анонс курсов «Java для сеньоров», «Scala для…
↗