🎓
FARM:Функциональная, асинхронная, реактивная, многопоточная Java
Информационные технологии

- Уроков: 301
- Сложность: normal
- Аудитория: Java-программисты Middle-уровня, желающие глубоко освоить приемы создания асинхронно-реактивного кода для событийно-ориентированной и потоковой обработки данных, в т.ч. в Spring-приложениях.
Информационные технологии
Платный
Курс направлен на формирование глубоких знаний и продвинутых практических навыков использования асинхронных и реактивных механизмов при разработке ПО на Java-платформе. Поскольку эти механизмы опираются на функциональный подход и многопоточность, в курс добавлены соответствующие уч.модули, причем они являются бесплатными и факультативными: если курсант хорошо знаком с такой тематикой, их можно пропустить без ущерба для понимания.
Совокупная продолжительность лекций: 39+ часов; из них на ядро отведено ~75%.
Состав учебной программы:
Модуль 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
Требования:
Уверенное владение Java, желательно знание Spring и принципов взаимодействия с СУБД.