Описание
Курс посвящен современным функциональным и реактивным подходам к разработке на Java, повышающем производительность бекэнда, и включает изучение неблокирующего ввода-вывода NIO2, асинхронных промисов CompletableFuture, библиотек реактивного программирования RxJava и Reactor, интерфейса асинхронного доступа к БД R2DBC, потоковый протокол SSE, реактивные репозитории Spring Data reactive, WebClient, протоколы WebSocket и RSocket, а также практические примеры применения.удостоверение о повышении квалификации государственного образца
Цели
- Познакомить слушателей с современными асинхронным и реактивным программированием.
- Дать примеры применения.
Целевая аудитория
Предварительная подготовка
Разбираемые темы
-
Модуль 1. Функциональная Java (теория - 2 ч. + практика 1 ч.) ч)
- Функциональные интерфейсы
- Ссылки на метод
- Потоки данных
- Map / filter / reduce
- Агрегационные функции
- Reduce при параллельной и последовательной обработке
- Цепочки потребителей
- Потоковые коллекторы
-
Модуль 2. Executor framework. Fork-Join pool (теория - 3 ч.)
- Использование Executors
- Future интерфейс
- Использование интерфейса Callable
- Отмена задач
- ForkJoin Framework
- Создание пула задач ForkJoin
- Параллельные потоки в Java 8+
- ForkJoin vs. параллельные потоки vs. последовательные потоки
-
Модуль 3. Неблокирующий ввод-вывод NIO (теория - 3 ч. + практика - 2 ч.)
- Основные различия между Java NIO и IO
- Потоково-ориентированный или буферно-ориентированный
- Блокирующий против неблокирующего ввода-вывода
- Java NIO Buffer
- Java NIO Channel
- Direct буфер
- Mapped file буфер
- Java NIO Selector
- Асинхронный ввод / вывод с NIO
- Блокировка файла
- Cервер NIO
- Архитектура сервера Netty
-
Модуль 4. Асинхронная Java (Completable Future) (теория - 3 ч. + практика - 2 ч.)
- Проблемы синхронного кода
- NodeJS архитектура
- Параллельная обработка потока данных
- CompletableFuture: sync и async методы
- Объединение (combine), составление (composing) и быстрейший побеждает (quicker wins)
- Обработка исключений в CompletableFuture
- Отмена CompletableFuture
- Использование CompletableFuture для реального потока данных
Домашняя работа. Практика (2 часа). -
Модуль 5. Реактивное программирование (теория - 8 ч.)
- Что такое реактивность?
- Основы RxJava: наблюдатель и наблюдаемый (Observable и Observer)
- Реактивные потоки в Java 9 (Java Reactive Streams)
- Методы для побочных эффектов (side effects)
- Обработка ошибок
- Горячие и холодные потоки (hot/cold)
- Разделяемые и подключаемые потоки (shared/connectable)
- Освобождение потоков (disposing)
- Реактивные операторы (полный каталог)
- Subjects
- Распараллеливание потоков (Schedulers)
- Противодавление (backpressure) и интерфейс Flowable
- Тестирование реактивных потоков
-
Модуль 6. Проект Reactor (теория - 4 ч.)
- Операторы Flux / Mono в Reactor
- Работа с backpressure в Reactor
- Reactor и многопоточность (Reactor Schedulers)
- Parallel Flux потоки
- Оборачивание синхронных вызовов
- Тестирование Reactor
- Процессоры (Reactor processors)
-
Модуль 7. 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 часа).
Игорь — преподаватель-практик по программированию на языке Java, сертифицированный Java-разработчик, уполномоченный инструктор корпорации «Оракл», инструктор платформы Udemy, Java-методист c 15-летним опытом, консультант-репетитор по Java-сертификации.
Игорь начал карьеру как физик-экспериментатор, разрабатывая аппаратное и программное обеспечение для одного из самых первых в СССР сканирующих туннельных микроскопов в сфере, которая через 20 лет получила название «нанотехнология».
Один из экспертов-разработчиков проекта Java-сертификации под эгидой IBS.
Лауреат конкурса молодых ученых в области физики твердого тела (Япония, 1990).
Проекты:
-
разрабатывал аппаратное и программное обеспечение для одного из самых первых в СССР сканирующих туннельных микроскопов в сфере, через 20 лет получившей название «нанотехнология»
-
15 лет работал в Токио (Токийский технологический институт, затем Институт статистики ООН), где занимался внедрением технологий автоматической обработки больших массивов данных, в том числе на frontend- и backend-приложениях
-
6 лет работал инженером-разработчиком в Pioneer Co. в Токио.
Николай — Java-разработчик в компании АО «Синхро» (проект «Столото» ex СБЕР). Обладает опытом разработки высоконагруженных систем более 5 лет. Автор ряда научных публикаций в области распределённых и децентрализованных систем.
Проекты:
-
Архитектура 2.0 проекта «Столото» — переход от распределённого монолита к микросервисам по модели DDD.
-
База знаний Сбербанка Knowledge Assistant — разработка бэкенд-части системы взаимодействия операторов колл-центров с системой хранения знаний.
-
Печатный модуль для автоматизации печатных форм — разработка и поддержка.
-
Генератор новостных дайджестов для ООО «Медиа-Сервис» — разработка на PHP.
-
Разработка парсера для ООО «Медиа-Сервис» — разработка на PHP.
-
Серверная часть системы автоматизации документооборота групп для Учебно-курсового комбината «Мосгортранс» — разработка на yii2.
-
98-366:MTA: Networking Fundamentals
- 98-388:MTA: Introduction to Programming using Java CertiportId:90057035