Java Advanced I: функциональное, асинхронное и реактивное программирование
Длительность
36 ак.ч.
Локация
Онлайн
Код
JVA-074
16.05.2023 - 26.05.2023
61 500 руб.
* Для физических лиц действует скидка 10% Закажите корпоративное обучение с учетом ваших потребностей
Описание
Курс посвящен современным функциональным и реактивным подходам к разработке на Java, повышающем производительность бекэнда, и включает изучение неблокирующего ввода-вывода NIO2, асинхронных промисов CompletableFuture, библиотек реактивного программирования RxJava и Reactor, интерфейса асинхронного доступа к БД R2DBC, потоковый протокол SSE, реактивные репозитории Spring Data reactive, WebClient, протоколы WebSocket и RSocket, а также практические примеры применения.
После прохождения курса выдается
удостоверение о повышении квалификации государственного образца
удостоверение о повышении квалификации государственного образца
Цели
- Познакомить слушателей с современными асинхронным и реактивным программированием.
- Дать примеры применения.
Целевая аудитория
Разработчики Java, архитекторы Java
Предварительная подготовка
Уверенное владение Java, желательно знание Spring.
Разбираемые темы
-
Модуль 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 часа).
Раcписание курсов
Вид:
Тренеры

Соколов Михаил
Эксперт в области разработки и архитектуры ПО
Михаил работает в области разработки ПО уровня Enterprise с 2004 года. С 2010 года Михаил работает в компании Luxoft. За это время участвовал в нескольких проектах для крупной американской авиастроительной компании в различных ролях от разработчика до архитектора. Михаил интересуется технологиями создания масштабируемых, высокопроизводительных, распределенных приложений, а также функциональными языками программирования.
Также у Михаила большой преподавательский опыт. Он разрабатывал учебные материалы, проводил семинары, пракитческие занятия и экзамены в ОмГУ на темы: СУБД, защита СУБД, криптографические методы защиты информации.
Михаил работает в области разработки ПО уровня Enterprise с 2004 года. С 2010 года Михаил работает в компании Luxoft. За это время участвовал в нескольких проектах для крупной американской авиастроительной компании в различных ролях от разработчика до архитектора. Михаил интересуется технологиями создания масштабируемых, высокопроизводительных, распределенных приложений, а также функциональными языками программирования.
О проектах:
В рамках своих проектов Михаил работал в компании "ЭТИС"и Luxoft, где занимался java/web-разработкой, архитектурой и pl/sq.Также у Михаила большой преподавательский опыт. Он разрабатывал учебные материалы, проводил семинары, пракитческие занятия и экзамены в ОмГУ на темы: СУБД, защита СУБД, криптографические методы защиты информации.
Публикации в СМИ
Отзывы (7)
Тренинг мне очень понравился, узнал много нового для себя. Самым полезным лично для меня были модули про WebFlux, RxJava и ExecutorService, информация о том, что такое реактивное программирование, дополнительные материалы и практические задания. Комплексная подача материала, видно, как все связано. Думаю, что этот тренинг будет особенно полезен для тех, что хочется углубить свои знания.
Курс был весьма познавательным и интересным. Не думал, что в современной Java такие возможности. Понравилось, что нам дали возможность углубиться под капот реализаций, что был акцент на практическом применении изучаемых технологий и много примеров. Отдельное спасибо преподавателю за его компетентность и подробное изложение материала. Буду рекомендовать знакомым Luxoft.
Я изучил новые предметы и получил возможность применять их в упражнениях, предоставленных тренером. У меня была возможность вернуться к некоторым темам Java, о которых я знал, но не работал с ними, поэтому курс лучше изучить теорию и вспомнить, как ее использовать. Было много примеров, все могли задать вопросы.
Для меня самыми полезными были упражнения, посвященные каждому разделу курса и с большинством из предложенных кейсов я еще ни разу не сталкивался на работе. Понравилось, что нам разрешили сначала самостоятельно попробовать выполнить упражнения, чтобы проверить, не сломаем ли мы их 😊
Замечательный курс! Преподаватель действительно очень хороший, доходчиво объясняет, отвечает на все вопросы, видно, что очень опытный разработчик в прошлом. Впечатлила его способность объяснять материал разносторонне, четко и доступно. Спасибо ему за это!
Много интересной информации, полезные примеры кода с пояснениями, хотя некоторые вещи были бы понятнее, будь у меня больше опыта в теме обучения. Преподаватель очень хорошо разбирается в теме, было видно, что он практикующий разработчик. Понравилось, что между тренером и учебной группой наладилась хорошая связь и мы обменивались опытом.
Полезный курс, который помогает лучше понять Java. Тренер подробно объяснял информацию, приводил примеры и каждое занятие начинал с повторения предыдущего. Это все помогло быстрее запомнить информацию, особенно для тех, кто уже отвык учиться 😊 очень хорошо, что нам присылали презентации и проекты после каждого занятия, чтобы можно было их просмотреть и подготовиться к следующей встречи.
Связанные курсы
Java Advanced II: высокопроизводительная Java
Курс посвящен повышению производительности Java-приложений: выявлению узких мест, подходам и методам для повышению производительности, а также инструментам и библиотекам, позволяющим добиться высокой производительности.
Онлайн:
19.06.2023 - 30.06.2023