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