Для кого этот курс
- Java-программисты Middle-уровня, желающие глубоко освоить приемы создания асинхронно-реактивного кода для событийно-ориентированной и потоковой обработки данных, в т.ч. в Spring-приложениях.
Начальные требования
- Уверенное владение Java, желательно знание Spring и принципов взаимодействия с СУБД.
Состав учебной программы:
Модуль 1 (факультативный) — функциональная java (~6 часов видеолекций)
- Лямбда-выражения и встроенные функциональные интерфейсы
- Примитивные специализации, унарные и бинарные версии функциональных интерфейсов
- Метод map(), в т.ч. Его примитивные специализации
- Поиск «короткозамыкающими» операторами
- Применение класса Optional, в т.ч. Его примитивных специализаций
- Фильтрация и обработка данных на stream-объектах, в т.ч. Работа с методом flatmap()
- Сортировка коллекций с применением stream api
- Сегментирование / классификация элементов с помощью утилитарного класса collectors
- Немутирующие редукторы при параллельной и последовательной обработке
- Каррированные функции
- Динамическая типизация и произвольные лямбда-выражения
- Глубокое погружение в ссылки на методы
Модуль 2 — асинхронная java (~6 часов видеолекций)
Подмодуль 2. 1 – completable future
- Проблемы синхронного кода в блокирующих сценариях
- Sync и async методы в классе completablefuture
- Combine-, composе- и anyof-операции
- Специфика обработки исключений в completablefuture
- Completablefuture в сценариях с пользовательскими executorservice-пулами
- Отмена completablefuture
- Применение completablefuture в потоках данных на практике
- Подмодуль 2. 2 – неблокирующий ввод/вывод на базе nio
- Основные различия между java nio и io
- Потоко- и буфер-ориентированный ввод/вывод
- Блокирующий и неблокирующий ввод/вывод
- Java nio buffer, channel и selector
- Direct и non-direct буферы
- Mappedfilebuffer
- Асинхронный ввод / вывод средствами nio
- Класс filelock и избирательная блокировка файлов
- Примеры промышленной nio-архитектуры (сервер netty, node. Js и др. )
Модуль 3 — реактивная java (~21 часов видеолекций)
Подмодуль 3. 1 – библиотека rxjava
- Понятие «реактивность» и цели реактивного манифеста
- Основы rxjava: observable и observer
- Реактивные потоки в java 9
- Методы с побочными эффектами
- Обработка ошибок в полностью функциональном стиле
- «горячие» и «холодные» паблишеры
- Расшаренные и connectable-паблишеры
- Утилизация реактивного конвейера (disposing)
- Каталог наиболее востребованных реактивных операторов rxjava
- Subjects
- Многопоточность в реактивных стимах на базе schedulers
- Противодавление (backpressure) и flowable-паблишеры
- Тестирование реактивных конвейеров в rxjava
Подмодуль 3. 2 – библиотека reactor
- Флагманские паблишеры flux / mono и их операторы
- Работа с backpressure в reactor
- Поддержка многопоточности в reactor
- Распараллеливание flux-конвейеров
- Обертки для синхронных вызовов
- Reactor-процессоры
- Тестирование реактивных конвейеров в reactor
Подмодуль 3. 3 – spring webflux и практическое реактивное программирование
- Spring rest контроллеры, возвращающие реактивные данные как mono и flux
- Функциональные контроллеры в webflux
- Server-sent events (sses)
- Webclient для получения потока реактивных данных от сервера
- Реактивный доступ к субд
- Реактивный драйвер r2dbc
- Реактивные репозитории в spring data
- Работа с реактивным репозиторием в spring data на примере mongodb
- Бенчмаркинг для r2dbc и webflux против web mvc с jdbc
- Рекомендуемые практики реактивного программирования
- Бонусные лекции: реактивная имплементация брокера сообщений kafka
Модуль 4 (факультативный) — многопоточная java (~6 часов видеолекций)
- Создание рабочих подпроцессов (threads) на базе runnable- и callable-объектов, и применение интерфейсов executorservice и future для асинхронного исполнения задач
- Выявление потенциальных проблем конкурентного режима, в т. Ч. Статическая блокировка (deadlock), зависание по недоступу к ресурсу (starvation), динамическая блокировка (livelock) и состояние гонки (race conditions / data race)
- Применение ключевого слова synchronized и пакета java. Util. Concurrent. Atomic для управления порядком исполнения подпроцессов
- Работа с синхронизационными примитивами, в частности, на базе интерфейса lock и классов reentrantlock, condition, cyclicbarrier, semaphore и др.
- Fork/join framework и рекурсивная парадигма, в т. Ч. Top-down и bottom-up