Курс на 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. ЭКСТРА: Знакомство с виртуальными подпроцессами ↗