Программа и содержание

Сайт: Сайт автора

Для кого этот курс

Java-программисты Middle-уровня, желающие глубоко освоить приемы создания асинхронно-реактивного кода для событийно-ориентированной и потоковой обработки данных, в т.ч. в Spring-приложениях.

Начальные требования

Уверенное владение Java, желательно знание Spring и принципов взаимодействия с СУБД.

Состав учебной программы:

Модуль 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

Преподаватель: Игорь Судакевич

Свою первую строчку кода написал в нежном 11-летнем возрасте в уже легендарном 1973-м году. По первому образованию (МИСиС) инженер-исследователь, специалист в области автоматизации физико-химического эксперимента. Затем учился в MBA-колледже Эдинбургского универа, также в МГУ (лингвистика). Master of Computer and Internet Technology от унив-та шт.Пенсильвания (Ivy League). 15 лет жил и работал в Японии, где занимался вопросами обработки больших массивов данных (Big Data) в Институте статистики ООН для стран Азиатского и Тихоокеанского региона (SIAP). Oracle Certified Professional, Authorized Oracle Instructor. Java-методист c 20-летним стажем. Вел вебинары и очные занятия в учебных центрах \"Люксофт\", \"ФОРС\", \"Инвека\", \"Academy IT\". В наст.время преподает в Учебном центре IBS (Москва).