О чём курс
Курс посвящен современным функциональным и реактивным подходам к разработке на Java, повышающем производительность бекэнда, и включает изучение неблокирующего ввода-вывода NIO2, асинхронных промисов CompletableFuture, библиотек реактивного программирования RxJava и Reactor, интерфейса асинхронного доступа к БД R2DBC, потоковый протокол SSE, реактивные репозитории Spring Data reactive, WebClient, протоколы WebSocket и RSocket, а также практические примеры применения.
Цели
Познакомить слушателей с современными асинхронным и реактивным программированием.
Дать примеры применения.
Целевая аудитория
Разработчики Java, архитекторы Java
Предварительная подготовка
Уверенное владение Java, желательно знание Spring.
Для кого
Разработчик
Улучшаемые навыки
Функциональное программирование в Java
Асинхронное программирование
Реактивное программирование
NIO2
CompletableFuture
RxJava
Reactor
R2DBC
SSE
Spring Data reactive
WebClient
Reactive WebSocket
RSocket
Инструменты
VS Code
Kafka
RabbitMQ
IntelliJ IDEA
Java
NetBeans
Eclipse
Apache Maven
Spring Boot
gRPC
Расписание курсов
Программа курса
Функциональные интерфейсы
Ссылки на метод
Потоки данных
Map / filter / reduce
Агрегационные функции
Reduce при параллельной и последовательной обработке
Цепочки потребителей
Потоковые коллекторы
02
Executor framework. Fork-Join pool
Использование Executors
Future интерфейс
Использование интерфейса Callable
Отмена задач
ForkJoin Framework
Создание пула задач ForkJoin
Параллельные потоки в Java 8+
ForkJoin vs. параллельные потоки vs. последовательные потоки
03
Неблокирующий ввод-вывод NIO
Основные различия между Java NIO и IO
Потоково-ориентированный или буферно-ориентированный
Блокирующий против неблокирующего ввода-вывода
Java NIO Buffer
Java NIO Channel
Direct буфер
Mapped file буфер
Java NIO Selector
Асинхронный ввод / вывод с NIO
Блокировка файла
Cервер NIO
Архитектура сервера Netty
04
Асинхронная Java (Completable Future)
Проблемы синхронного кода
NodeJS архитектура
Параллельная обработка потока данных
CompletableFuture: sync и async методы
Объединение (combine), составление (composing) и быстрейший побеждает (quicker wins)
Обработка исключений в CompletableFuture
Отмена CompletableFuture
Использование CompletableFuture для реального потока данных
Домашняя работа. Практика (2 часа).
05
Реактивное программирование
Что такое реактивность?
Основы RxJava: наблюдатель и наблюдаемый (Observable и Observer)
Реактивные потоки в Java 9 (Java Reactive Streams)
Методы для побочных эффектов (side effects)
Обработка ошибок
Горячие и холодные потоки (hot/cold)
Разделяемые и подключаемые потоки (shared/connectable)
Освобождение потоков (disposing)
Реактивные операторы (полный каталог)
Subjects
Распараллеливание потоков (Schedulers)
Противодавление (backpressure) и интерфейс Flowable
Тестирование реактивных потоков
Операторы Flux / Mono в Reactor
Работа с backpressure в Reactor
Reactor и многопоточность (Reactor Schedulers)
Parallel Flux потоки
Оборачивание синхронных вызовов
Тестирование Reactor
Процессоры (Reactor processors)
07
Spring WebFlux и практическое реактивное программирование
Реактивный доступ к БД
Реактивные драйверы R2DBC
Spring Data - реактивные репозитории
Поддержка страниц (paging) в Spring Data reactive
WebFlux: функциональные контроллеры
Spring REST контроллеры, возвращающие реактивные данные (Mono / Flux)
Spring REST контроллеры, возвращающие SSE (server-sent event)
WebClient: получение реактивных данных с сервера
SSE и протоколы WebSocket
Использование WebSocket для передачи / получения данных JSON
Использование WebSocket для передачи / извлечения двоичных данных
Протокол RSocket
Контроллер RSocket на стороне сервера
RSocket клиент: обмен JSON и двоичными данными
RSocket с балансировкой нагрузки
RSocket с взвешенной балансировкой нагрузки
Использование реактивных потоков с брокером сообщений (RabbitMQ)
Spring Data MongoDB реактивные репозитории
Бенчмарки: R2DBC против JDBC и WebFlux против Web MVC
Архитектура и шаблоны реактивного программирования
Домашняя работа. Практика (2 часа).
Чему вы научитесь
01
Применять функциональные интерфейсы и потоки данных в Java
02
Создавать асинхронные приложения с использованием CompletableFuture
03
Разрабатывать реактивные приложения с RxJava и Reactor
04
Использовать R2DBC для реактивного доступа к базам данных
05
Создавать серверные и клиентские приложения с использованием WebFlux и RSocket
06
Оптимизировать производительность бекэнда с помощью реактивных подходов
Курс проводят
Судакевич Игорь
Эксперт в области разработки ПО (Java).
Senior