🎓

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

Информационные технологии
Обложка курса Купить за 15000 ₽
  • Уроков: 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 и принципов взаимодействия с СУБД.