Курс на Stepik
Обложка курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java» на Stepik
15 200 ₽

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

Открыть на
STEPIK.ORG

Курс направлен на формирование глубоких знаний и продвинутых практических навыков использования асинхронных и реактивных механизмов при разработке ПО на Java-платформе. Поскольку эти механизмы опираются на функциональный подход и многопоточность, в курс добавлены соответствующие уч.модули, причем они являются бесплатными и факультативными: если курсант хорошо знаком с такой тематикой, их можно пропустить без ущерба для понимания. Совокупная продолжительность лекций: 39+ часов; из них на ядро отведено ~75%.

Показатель Текущие показатели Рост
Значение 🏆 Рейтинг 3 дн 7 дн 30 дн
Количество учеников на курсе «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Учеников на курсе 19
Сертификаты, выданные на курсе «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Сертификатов выдано 0
Отзывы о курсе «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Отзывов получено 0
Рейтинг курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Рейтинг курса 0.000
Уроки в курсе «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Количество уроков 303
Время прохождения курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Время прохождения курса
Стоимость курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Стоимость курса 15 200 ₽
Обновления курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Обновления курса
Дата публикации курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Дата публикации курса
Последнее обновление курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java»Последнее обновление
Сложность normal

Содержание курса

Разделы в курсе «FARM:Функциональная, асинхронная, реактивная, многопоточная Java» 10 разделов Уроки в курсе «FARM:Функциональная, асинхронная, реактивная, многопоточная Java» 303 урока Время прохождения курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java» 33 ч. Последнее обновление курса «FARM:Функциональная, асинхронная, реактивная, многопоточная Java» обн. 12 мая 2026

Факультативный модуль: Функциональная Java

21 урок
1. Введение
2. Встроенные функциональные интерфейсы
3. Обзор операций
4. Методы map() и peek()
5. Класс Optional и «короткозамыкающие» операторы
6. Редукция и операторы преобразования данных
7. Утилитарный класс Collectors: обзор
8. Классификация с помощью groupingBy()
9. Бинарная сегментация с помощью partitioningBy()
10. Генераторы
11. Оператор flatMap()
12. Параллелизация стримов
13. Понятие statefulness
14. Параллельная редукция
15. Эксплуатационные хар-ки параллельных конвейеров
16. Практикум: лямбда-трейдеры
17. ЭКСТРА: Лямбда-нотация
18. ЭКСТРА: Каррированные функции
19. ЭКСТРА: Глубокое погружение в ссылки на методы – Часть 1
20. ЭКСТРА: Глубокое погружение в ссылки на методы – Часть 2
21. ЭКСТРА: Подробнее о методах интерфейса Function

Асинхронная Java --- подмодуль CompletableFuture

23 урока
1. Введение
2. Практика: старомодная Java и Future
3. Практика: CompletableFuture
4. Практика: несколько конвейеров
5. Практика: операция compose
6. Практика: операция combine
7. Практика: асинхронно, затем последовательно
8. Практика: асинхронно, затем параллельно
9. В каком смысле, "синхронно"?
10. Практика: найдем победителя забега
11. Практика: применим функцию с победителю
12. Операторы CompletableFuture: сводка
13. Обработка исключений через exceptionally()
14. Обработка исключений через handle()
15. Чекпойнты
16. Отмена (cancellation)
17. Завершение через completeExceptionally()
18. Завершение «вручную»
19. Завершение на Executor-пуле
20. Завершение на Executor-пуле по таймауту
21. Сходство и различия join() и get()
22. О кодовых базах к этому разделу
23. Заключение

Асинхронная Java --- подмодуль NIO (неблокирующий ввод/вывод)

32 урока
1. Освежаем в памяти: обзор базового функционала ввода/вывода
2. Практика: чтение/запись небольшого файла
3. Введение в NIO
4. Флагманские дата-типы NIO
5. Практика: работа с буфером
6. Практика: операция flip() на буфере
7. Практика: операция mark() на буфере
8. Что такое Channel
9. Практика: копирование через ченнел
10. Практика: передача данных через ченнел
11. Практика: ChannelServer и ChannelClient
12. Direct- и Mapped-буферы
13. Практика: чтение и запись файла через маппинг в память
14. Векторизация ввода/вывода
15. Практика: Scatter- и Gather-ченнелы
16. Интерфейс Selector
17. Практика: клиент-серверная связка с селектором
18. Пояснение: побитовый AND и численное продвижение
19. Практика: решение для клиент-серверной связки с селектором
20. Асинхронные ченнелы
21. Практика: AsyncFileChannel
22. Практика: AsyncFileHandler
23. Практика: AsyncClient
24. Практика: AsyncServer
25. Практика: AsyncToCompletableFuture
26. Расшаренная блокировка доступа к файлу
27. Практика: FileLock
28. IO и NIO: сводка
29. Практика: бенчмаркинг копирования
30. Знакомство с Netty
31. Практика: NettyClient и NettyServer
32. О кодовой базе к этому разделу

Реактивная Java: Суть реактивной парадигмы

13 уроков
1. Введение
2. О кодовой базе к этому разделу
3. Практика: Параллельные стримы
4. Практика: CompletableFuture
5. Практика: CompletableFuture с Executor-пулом
6. Асинхронность
7. Сходство и различия Rx и Stream
8. Reactive Stream Initiative
9. О регуляторах (противо)давления
10. «Реактивный манифест»
11. API реактивных стримов в Java
12. Практика: паттерн Observer
13. Заключение

RxJava: Первое знакомство

35 уроков
1. Введение
2. Практика: суммирование в функциональном и реактивном стилях
3. Observable допускает свое переиспользование!
4. Практика: неоднократно юзаем Observable
5. Практика: наблюдатель должен быть разным
6. И где тут Observer?
7. Работаем с командной строки
8. Практика: кеширование на Observable
9. Категории обзёрваблов
10. Практика: блокирующая подписка
11. Практика: неблокирующая подписка
12. Практика: «холодный» Observable
13. Практика: «горячий» Observable
14. Практика: OutOfMemoryError
15. Практика: Flowable без обработки противодавления
16. Практика: тривиальный сценарий обработки противодавления
17. Практика: утилизация (disposing)
18. Как создавать Observable
19. Практика: оператор create()
20. Классификация Rx-операторов
21. Практика: пребразователи
22. Практика: преобразование с небинарным селектором
23. Фильтрующие операторы
24. Практика: пример фильтрации
25. Комбинирующие операторы
26. Практика: комбинаторы
27. Практика: конвертация из ...
28. Практика: обработка исключений
29. Практика: жизненный цикл реактивного конвейера
30. Утилитарные операторы
31. Практика: применение утилит
32. Утилизация http-ресурса
33. Принципы работы условных и булевых операторов
34. Практика: Условные и булевые операторы
35. Противодавление и connectivity

RxJava: Глубокое погружение

110 уроков
1. Введение
2. Оператор just()
3. Разновидности источников
4. just() с маппером
5. Оператор interval()
6. Оператор create()
7. Оператор filter()
8. События наблюдателя
9. Оператор subscribe()
10. События жизенного цикла
11. Обработка исключений в функциональном стиле
12. Оператор doOnError()
13. Оператор onErrorReturn()
14. Оператор onErrorResume()
15. Оператор retry()
16. Оператор retryUntil()
17. Подробнее о «холодном» обзёрвабле
18. Подробнее о «горячем» обзёрвабле
19. «Холодный» обзёрвабл и sleep()
20. Оператор share()
21. Оператор connect()
22. Сходство и различия «горячего» и connectable-обзёрваблов
23. Оператор refCount()
24. Оператор autoConnect()
25. Фабрики обзёрваблов
26. Оператор defer()
27. Обзёрвабл категории Single
28. Обзёрвабл категории Maybe
29. Обзёрвабл категории Completable
30. Оператор onErrorComplete()
31. Подробнее про утилизацию (disposing)
32. Применение CompositeDisposable
33. Операторы-подавители
34. Операторы-преобразователи
35. Оператор delay()
36. Оператор scan()
37. Имплементируем «ползунок»
38. Оператор groupBy()
39. Оператор timestamp()
40. Операторы-редукторы
41. Операторы-коллекторы
42. Слияние
43. Конкатенация
44. И снова про flatMap()!
45. Зипперы
46. Оператор switchMap()
47. Оператор switchIfEmpty()
48. Оператор combineLatest()
49. Оператор replay() и класс ReplaySubject
50. Класс PublishSubject
51. Класс BehaviorSubject
52. Класс AsynchSubject
53. Класс UnicastSubject
54. «Подводные камни» Subject-конвейеров
55. Введение в Rx-многопоточность
56. Последовательное исполнение
57. Многопоточность через subscribeOn()
58. Поподробнее про blockingSubscribe() вместо Thread.sleep()
59. Знакомство с Scheduler-фабриками
60. Фабрика io()
61. Фабрика newThread()
62. Фабрика single()
63. Многопоточность на пользовательском Executor-пуле
64. Многопоточность с несколькими наблюдателями
65. Все на одном подпроцессе
66. Как проигнорировать subscribeOn()
67. Первый subscribeOn() побеждает
68. Знакомство с оператором observeOn()
69. observeOn() в действии
70. flatMap() и многопоточность
71. Оператор unsubscribeOn()
72. Буферизация
73. Наложение «окошек»
74. Дросселирование, выборка и устранение дребезга
75. Секундомер на операторе switchMap()
76. Как сгруппировать нажатия клавиш
77. Знакомство с Flowable
78. Для чего нужен Flowable
79. Flowable и Спецификация на реактивные конвейеры
80. Сходство и отличия Observable и Flowable
81. Интерфейс FlowableSubscriber
82. Стратегия противодавления Buffer
83. Стратегия противодавления Drop
84. Стратегия противодавления Latest
85. Конвертация Observable во Flowable
86. Генерация на Flowable
87. Генератор случайных чисел
88. Как реверснуть генерируемую последовательность на Flowable
89. Введение в реактивное тестирование
90. Тестируем blockingSubscribe()
91. Концепция блокирующих подписчиков
92. Оператор blockingFirst()
93. Оператор blockingLast()
94. Оператор blockingGet()
95. Оператор blockingIterable()
96. Оператор blockingForEach()
97. Оператор blockingNext()
98. Оператор blockingLatest()
99. Оператор blockingMostRecent()
100. Тестирование с TestObserver
101. Тестирование с TestScheduler
102. Отладочная демка
103. Подводим итоги
104. RxJava при смерти, или кому верить...
105. Предваряющее слово к самостоятельному практикуму
106. Решения задач из Практикума 1
107. Ответы на вопросы курсантов по Практикуму 1
108. Решения задач из Практикума 2
109. RxJava: подводим итоги обсуждения
110. RxJava: доп.примеры (будут пополняться по мере появления)

Project Reactor

9 уроков
1. Обзор библиотеки Reactor
2. Базовые приемы работы
3. Обработка противодавления в Reactor
4. Schedulers в Reactor
5. Параллельный Flux
6. Процессоры
7. Тестирование
8. Решение задач из Практикума
9. Reactor: подводим итоги обсуждения

Spring-модуль WebFlux

13 уроков
1. Знакомство с WebFlux
2. Практика с WebFlux
3. Знакомство с WebClient
4. Практика с WebClient
5. Подробнее о различиях между WebClient и RestTemplate
6. WebFlux и СУБД
7. Практика: WebFlux в связке с MongoDB --- Часть 1/2
8. Практика: WebFlux в связке с MongoDB --- Часть 2/2
9. Бенчмаркинг с WebFlux
10. Тестирование реактивных Spring-приложений
11. Простейший R2DBC-проект
12. WebFlux: подводим итоги обсуждения
13. Рекомендуемые практики создания реактивного кода и Заключение

Бонусные лекции Reactive Extras

1 урок
1. Реактивная имплементация брокера сообщений Kafka

Факультативный модуль – Многопоточная Java

46 уроков
1. Архитектура фон Неймана
2. Пользовательские процессы
3. Оценка потребного размера ОЗУ
4. Процессы и их роли
5. Сегменты памяти
6. Знакомство с подпроцессами (threads)
7. Подпроцессы пользователя и ОС
8. Сходства и отличия процессов и подпроцессов
9. Что может пойти не так
10. Мониторы
11. Синхронизирующие абстрации
12. Создание подпроцесса
13. Состояния подпроцесса
14. Приоритет подпроцесса
15. Метод join()
16. Метод interrupt()
17. Связка wait() и notify()
18. Ключевое слово volatile
19. Что стоит за volatile
20. Ключевое слово synchronized
21. Блоки синхронизации
22. Статическая блокировка (deadlock)
23. Счетчик с монитором
24. Интерфейс Lock
25. Класс ReentrantLock
26. Атомарный счетчик
27. Паттерн Producer-Consumer на связке wait/notify
28. С Новым годом! на связке wait/notify
29. Паттерн Producer-Consumer на связке Lock/Condition
30. ExecutorService с Runnable
31. ExecutorService с Semaphore
32. ExecutorService с Callable
33. ExecutorService и метод awaitTermination()
34. Класс CyclicBarrier
35. CyclicBarrier в действии
36. Фреймворк Fork/Join
37. Рекурсия: top-down и bottom-up
38. Рекурсия: пример доказательства по индукции
39. Рекурсивное вычисление площади
40. Простейший пример с Fork/Join
41. Бенчмаркинг суммирования на Fork/Join
42. ЭКСТРА: Concurrent, multithreaded и parallel
43. ЭКСТРА: Race Conditions и Data Races
44. ЭКСТРА: Состояние гонки в бинарных семафорах и мьютексах
45. ЭКСТРА: Liveness и синхронизация
46. ЭКСТРА: Знакомство с виртуальными подпроцессами