Содержание курса
1. Факультативный модуль: Функциональная Java
21 урок
210
197
403м
1
Открытый
1.1
Введение
↗
21
17
35м 27с
0
Закрытый
1.2
Встроенные функциональные интерфейсы
↗
16
12
30м 20с
0
Закрытый
1.3
Обзор операций
↗
12
12
14м 32с
0
Закрытый
1.4
Методы map() и peek()
↗
12
12
12м 39с
0
Закрытый
1.5
Класс Optional и «короткозамыкающие» операторы
↗
12
12
10м 33с
0
Закрытый
1.6
Редукция и операторы преобразования данных
↗
11
9
29м 2с
0
Закрытый
1.7
Утилитарный класс Collectors: обзор
↗
11
11
14м 45с
0
Закрытый
1.8
Классификация с помощью groupingBy()
↗
10
10
14м 17с
0
Закрытый
1.9
Бинарная сегментация с помощью partitioningBy()
↗
9
9
3м 38с
0
Закрытый
1.10
Генераторы
↗
9
9
18м 45с
0
Закрытый
1.11
Оператор flatMap()
↗
10
10
20м 2с
0
Закрытый
1.12
Параллелизация стримов
↗
9
9
11м 47с
0
Закрытый
1.13
Понятие statefulness
↗
9
9
9м 1с
0
Закрытый
1.14
Параллельная редукция
↗
10
7
22м 37с
1
Закрытый
1.15
Эксплуатационные хар-ки параллельных конвейеров
↗
8
8
6м 31с
0
Закрытый
1.16
Практикум: лямбда-трейдеры
↗
9
9
37м 26с
0
Закрытый
1.17
ЭКСТРА: Лямбда-нотация
↗
9
9
10м 4с
0
Закрытый
1.18
ЭКСТРА: Каррированные функции
↗
7
7
14м 29с
0
Закрытый
1.19
ЭКСТРА: Глубокое погружение в ссылки на методы – Часть 1
↗
8
8
31м 37с
0
Закрытый
1.20
ЭКСТРА: Глубокое погружение в ссылки на методы – Часть 2
↗
5
5
34м 42с
0
Закрытый
1.21
ЭКСТРА: Подробнее о методах интерфейса Function
↗
3
3
32м 42с
0
2. Асинхронная Java --- подмодуль CompletableFuture
23 урока
169
167
181м
0
Закрытый
2.1
Введение
↗
9
7
30м 12с
0
Закрытый
2.2
Практика: старомодная Java и Future
↗
8
8
18м 34с
0
Закрытый
2.3
Практика: CompletableFuture
↗
8
8
6м 27с
0
Закрытый
2.4
Практика: несколько конвейеров
↗
7
7
4м 29с
0
Закрытый
2.5
Практика: операция compose
↗
9
9
8м 30с
0
Закрытый
2.6
Практика: операция combine
↗
8
8
5м 35с
0
Закрытый
2.7
Практика: асинхронно, затем последовательно
↗
7
7
4м 14с
0
Закрытый
2.8
Практика: асинхронно, затем параллельно
↗
7
7
14м 6с
0
Закрытый
2.9
В каком смысле, "синхронно"?
↗
7
7
6м 12с
0
Закрытый
2.10
Практика: найдем победителя забега
↗
7
7
3м 58с
0
Закрытый
2.11
Практика: применим функцию с победителю
↗
7
7
2м 58с
0
Закрытый
2.12
Операторы CompletableFuture: сводка
↗
7
7
3м 35с
0
Закрытый
2.13
Обработка исключений через exceptionally()
↗
7
7
10м 47с
0
Закрытый
2.14
Обработка исключений через handle()
↗
8
8
5м 7с
0
Закрытый
2.15
Чекпойнты
↗
7
7
6м 26с
0
Закрытый
2.16
Отмена (cancellation)
↗
7
7
8м 30с
0
Закрытый
2.17
Завершение через completeExceptionally()
↗
7
7
2м 26с
0
Закрытый
2.18
Завершение «вручную»
↗
7
7
8м 24с
0
Закрытый
2.19
Завершение на Executor-пуле
↗
7
7
18м 32с
0
Закрытый
2.20
Завершение на Executor-пуле по таймауту
↗
7
7
14м 35с
0
Закрытый
2.21
Сходство и различия join() и get()
↗
7
7
3м 0с
0
Закрытый
2.22
О кодовых базах к этому разделу
↗
7
7
1м 15с
0
Закрытый
2.23
Заключение
↗
7
7
2м 9с
0
3. Асинхронная Java --- подмодуль NIO (неблокирующий ввод/вывод)
32 урока
135
135
203м
0
Закрытый
3.1
Освежаем в памяти: обзор базового функционала ввода/вывода
↗
8
8
14м 30с
0
Закрытый
3.2
Практика: чтение/запись небольшого файла
↗
7
7
6м 38с
0
Закрытый
3.3
Введение в NIO
↗
7
7
10м 4с
0
Закрытый
3.4
Флагманские дата-типы NIO
↗
7
7
10м 43с
0
Закрытый
3.5
Практика: работа с буфером
↗
7
7
7м 18с
0
Закрытый
3.6
Практика: операция flip() на буфере
↗
7
7
3м 35с
0
Закрытый
3.7
Практика: операция mark() на буфере
↗
6
6
5м 16с
0
Закрытый
3.8
Что такое Channel
↗
5
5
8м 27с
0
Закрытый
3.9
Практика: копирование через ченнел
↗
5
5
4м 7с
0
Закрытый
3.10
Практика: передача данных через ченнел
↗
5
5
4м 2с
0
Закрытый
3.11
Практика: ChannelServer и ChannelClient
↗
5
5
9м 28с
0
Закрытый
3.12
Direct- и Mapped-буферы
↗
5
5
5м 57с
0
Закрытый
3.13
Практика: чтение и запись файла через маппинг в память
↗
5
5
12м 54с
0
Закрытый
3.14
Векторизация ввода/вывода
↗
5
5
3м 7с
0
Закрытый
3.15
Практика: Scatter- и Gather-ченнелы
↗
4
4
6м 22с
0
Закрытый
3.16
Интерфейс Selector
↗
4
4
12м 11с
0
Закрытый
3.17
Практика: клиент-серверная связка с селектором
↗
4
4
22м 29с
0
Закрытый
3.18
Пояснение: побитовый AND и численное продвижение
↗
3
3
8м 49с
0
Закрытый
3.19
Практика: решение для клиент-серверной связки с селектором
↗
3
3
6м 51с
0
Закрытый
3.20
Асинхронные ченнелы
↗
2
2
2м 57с
0
Закрытый
3.21
Практика: AsyncFileChannel
↗
2
2
4м 8с
0
Закрытый
3.22
Практика: AsyncFileHandler
↗
2
2
3м 44с
0
Закрытый
3.23
Практика: AsyncClient
↗
3
3
3м 45с
0
Закрытый
3.24
Практика: AsyncServer
↗
2
2
5м 19с
0
Закрытый
3.25
Практика: AsyncToCompletableFuture
↗
2
2
4м 10с
0
Закрытый
3.26
Расшаренная блокировка доступа к файлу
↗
2
2
5м 3с
0
Закрытый
3.27
Практика: FileLock
↗
2
2
7м 15с
0
Закрытый
3.28
IO и NIO: сводка
↗
3
3
2м 59с
0
Закрытый
3.29
Практика: бенчмаркинг копирования
↗
3
3
3м 47с
0
Закрытый
3.30
Знакомство с Netty
↗
4
4
4м 18с
0
Закрытый
3.31
Практика: NettyClient и NettyServer
↗
3
3
5м 56с
0
Закрытый
3.32
О кодовой базе к этому разделу
↗
3
3
1м 52с
0
4. Реактивная Java: Суть реактивной парадигмы
13 уроков
55
52
98м
0
Закрытый
4.1
Введение
↗
5
5
4м 33с
0
Закрытый
4.2
О кодовой базе к этому разделу
↗
5
5
3м 0с
0
Закрытый
4.3
Практика: Параллельные стримы
↗
5
5
5м 47с
0
Закрытый
4.4
Практика: CompletableFuture
↗
4
4
10м 56с
0
Закрытый
4.5
Практика: CompletableFuture с Executor-пулом
↗
4
4
3м 29с
0
Закрытый
4.6
Асинхронность
↗
4
4
5м 29с
0
Закрытый
4.7
Сходство и различия Rx и Stream
↗
4
4
3м 24с
0
Закрытый
4.8
Reactive Stream Initiative
↗
4
4
3м 20с
0
Закрытый
4.9
О регуляторах (противо)давления
↗
4
4
6м 13с
0
Закрытый
4.10
«Реактивный манифест»
↗
4
4
14м 1с
0
Закрытый
4.11
API реактивных стримов в Java
↗
4
4
16м 10с
0
Закрытый
4.12
Практика: паттерн Observer
↗
5
2
19м 26с
0
Закрытый
4.13
Заключение
↗
3
3
5м 29с
0
5. RxJava: Первое знакомство
35 уроков
53
53
164м
0
Закрытый
5.1
Введение
↗
4
4
4м 20с
0
Закрытый
5.2
Практика: суммирование в функциональном и реактивном стилях
↗
4
4
3м 58с
0
Закрытый
5.3
Observable допускает свое переиспользование!
↗
4
4
5м 59с
0
Закрытый
5.4
Практика: неоднократно юзаем Observable
↗
3
3
2м 0с
0
Закрытый
5.5
Практика: наблюдатель должен быть разным
↗
2
2
11м 11с
0
Закрытый
5.6
И где тут Observer?
↗
2
2
3м 2с
0
Закрытый
5.7
Работаем с командной строки
↗
2
2
4м 4с
0
Закрытый
5.8
Практика: кеширование на Observable
↗
2
2
2м 31с
0
Закрытый
5.9
Категории обзёрваблов
↗
2
2
5м 52с
0
Закрытый
5.10
Практика: блокирующая подписка
↗
1
1
3м 56с
0
Закрытый
5.11
Практика: неблокирующая подписка
↗
1
1
14м 50с
0
Закрытый
5.12
Практика: «холодный» Observable
↗
1
1
4м 32с
0
Закрытый
5.13
Практика: «горячий» Observable
↗
1
1
6м 27с
0
Закрытый
5.14
Практика: OutOfMemoryError
↗
2
2
6м 48с
0
Закрытый
5.15
Практика: Flowable без обработки противодавления
↗
1
1
5м 13с
0
Закрытый
5.16
Практика: тривиальный сценарий обработки противодавления
↗
1
1
2м 40с
0
Закрытый
5.17
Практика: утилизация (disposing)
↗
1
1
5м 57с
0
Закрытый
5.18
Как создавать Observable
↗
1
1
8м 54с
0
Закрытый
5.19
Практика: оператор create()
↗
1
1
2м 20с
0
Закрытый
5.20
Классификация Rx-операторов
↗
1
1
4м 59с
0
Закрытый
5.21
Практика: пребразователи
↗
1
1
4м 8с
0
Закрытый
5.22
Практика: преобразование с небинарным селектором
↗
2
2
3м 43с
0
Закрытый
5.23
Фильтрующие операторы
↗
1
1
5м 39с
0
Закрытый
5.24
Практика: пример фильтрации
↗
1
1
6м 33с
0
Закрытый
5.25
Комбинирующие операторы
↗
1
1
3м 50с
0
Закрытый
5.26
Практика: комбинаторы
↗
1
1
7м 58с
0
Закрытый
5.27
Практика: конвертация из ...
↗
1
1
4м 45с
0
Закрытый
5.28
Практика: обработка исключений
↗
1
1
3м 24с
0
Закрытый
5.29
Практика: жизненный цикл реактивного конвейера
↗
1
1
7м 31с
0
Закрытый
5.30
Утилитарные операторы
↗
1
1
6м 47с
0
Закрытый
5.31
Практика: применение утилит
↗
1
1
3м 40с
0
Закрытый
5.32
Утилизация http-ресурса
↗
1
1
4м 25с
0
Закрытый
5.33
Принципы работы условных и булевых операторов
↗
1
1
3м 29с
0
Закрытый
5.34
Практика: Условные и булевые операторы
↗
1
1
2м 36с
0
Закрытый
5.35
Противодавление и connectivity
↗
1
1
8м 53с
0
6. RxJava: Глубокое погружение
110 уроков
43
42
233м
0
Закрытый
6.1
Введение
↗
1
1
0м 23с
0
Закрытый
6.2
Оператор just()
↗
1
1
1м 20с
0
Закрытый
6.3
Разновидности источников
↗
1
1
3м 12с
0
Закрытый
6.4
just() с маппером
↗
1
1
1м 37с
0
Закрытый
6.5
Оператор interval()
↗
1
1
6м 40с
0
Закрытый
6.6
Оператор create()
↗
1
1
16м 50с
0
Закрытый
6.7
Оператор filter()
↗
1
1
8м 50с
0
Закрытый
6.8
События наблюдателя
↗
1
1
4м 17с
0
Закрытый
6.9
Оператор subscribe()
↗
1
1
4м 52с
0
Закрытый
6.10
События жизенного цикла
↗
1
1
2м 49с
0
Закрытый
6.11
Обработка исключений в функциональном стиле
↗
1
1
41м 28с
0
Закрытый
6.12
Оператор doOnError()
↗
1
1
1м 4с
0
Закрытый
6.13
Оператор onErrorReturn()
↗
1
1
1м 11с
0
Закрытый
6.14
Оператор onErrorResume()
↗
1
1
1м 20с
0
Закрытый
6.15
Оператор retry()
↗
1
1
1м 3с
0
Закрытый
6.16
Оператор retryUntil()
↗
1
1
2м 33с
0
Закрытый
6.17
Подробнее о «холодном» обзёрвабле
↗
1
1
3м 15с
0
Закрытый
6.18
Подробнее о «горячем» обзёрвабле
↗
1
1
2м 53с
0
Закрытый
6.19
«Холодный» обзёрвабл и sleep()
↗
1
1
2м 43с
0
Закрытый
6.20
Оператор share()
↗
1
1
4м 33с
0
Закрытый
6.21
Оператор connect()
↗
1
1
2м 58с
0
Закрытый
6.22
Сходство и различия «горячего» и connectable-обзёрваблов
↗
1
1
8м 12с
0
Закрытый
6.23
Оператор refCount()
↗
1
1
13м 28с
0
Закрытый
6.24
Оператор autoConnect()
↗
1
1
6м 30с
0
Закрытый
6.25
Фабрики обзёрваблов
↗
1
1
6м 6с
0
Закрытый
6.26
Оператор defer()
↗
1
1
6м 4с
0
Закрытый
6.27
Обзёрвабл категории Single
↗
1
1
2м 14с
0
Закрытый
6.28
Обзёрвабл категории Maybe
↗
1
1
3м 6с
0
Закрытый
6.29
Обзёрвабл категории Completable
↗
1
1
2м 54с
0
Закрытый
6.30
Оператор onErrorComplete()
↗
1
1
2м 51с
0
Закрытый
6.31
Подробнее про утилизацию (disposing)
↗
0
0
-
0
Закрытый
6.32
Применение CompositeDisposable
↗
0
0
-
0
Закрытый
6.33
Операторы-подавители
↗
0
0
-
0
Закрытый
6.34
Операторы-преобразователи
↗
0
0
-
0
Закрытый
6.35
Оператор delay()
↗
0
0
-
0
Закрытый
6.36
Оператор scan()
↗
0
0
-
0
Закрытый
6.37
Имплементируем «ползунок»
↗
0
0
-
0
Закрытый
6.38
Оператор groupBy()
↗
0
0
-
0
Закрытый
6.39
Оператор timestamp()
↗
0
0
-
0
Закрытый
6.40
Операторы-редукторы
↗
0
0
-
0
Закрытый
6.41
Операторы-коллекторы
↗
0
0
-
0
Закрытый
6.42
Слияние
↗
0
0
-
0
Закрытый
6.43
Конкатенация
↗
0
0
-
0
Закрытый
6.44
И снова про flatMap()!
↗
0
0
-
0
Закрытый
6.45
Зипперы
↗
0
0
-
0
Закрытый
6.46
Оператор switchMap()
↗
0
0
-
0
Закрытый
6.47
Оператор switchIfEmpty()
↗
0
0
-
0
Закрытый
6.48
Оператор combineLatest()
↗
0
0
-
0
Закрытый
6.49
Оператор replay() и класс ReplaySubject
↗
0
0
-
0
Закрытый
6.50
Класс PublishSubject
↗
0
0
-
0
Закрытый
6.51
Класс BehaviorSubject
↗
0
0
-
0
Закрытый
6.52
Класс AsynchSubject
↗
0
0
-
0
Закрытый
6.53
Класс UnicastSubject
↗
0
0
-
0
Закрытый
6.54
«Подводные камни» Subject-конвейеров
↗
0
0
-
0
Закрытый
6.55
Введение в Rx-многопоточность
↗
0
0
-
0
Закрытый
6.56
Последовательное исполнение
↗
0
0
-
0
Закрытый
6.57
Многопоточность через subscribeOn()
↗
0
0
-
0
Закрытый
6.58
Поподробнее про blockingSubscribe() вместо Thread.sleep()
↗
0
0
-
0
Закрытый
6.59
Знакомство с Scheduler-фабриками
↗
0
0
-
0
Закрытый
6.60
Фабрика io()
↗
0
0
-
0
Закрытый
6.61
Фабрика newThread()
↗
0
0
-
0
Закрытый
6.62
Фабрика single()
↗
0
0
-
0
Закрытый
6.63
Многопоточность на пользовательском Executor-пуле
↗
0
0
-
0
Закрытый
6.64
Многопоточность с несколькими наблюдателями
↗
0
0
-
0
Закрытый
6.65
Все на одном подпроцессе
↗
0
0
-
0
Закрытый
6.66
Как проигнорировать subscribeOn()
↗
0
0
-
0
Закрытый
6.67
Первый subscribeOn() побеждает
↗
0
0
-
0
Закрытый
6.68
Знакомство с оператором observeOn()
↗
0
0
-
0
Закрытый
6.69
observeOn() в действии
↗
0
0
-
0
Закрытый
6.70
flatMap() и многопоточность
↗
0
0
-
0
Закрытый
6.71
Оператор unsubscribeOn()
↗
0
0
-
0
Закрытый
6.72
Буферизация
↗
0
0
-
0
Закрытый
6.73
Наложение «окошек»
↗
0
0
-
0
Закрытый
6.74
Дросселирование, выборка и устранение дребезга
↗
0
0
-
0
Закрытый
6.75
Секундомер на операторе switchMap()
↗
0
0
-
0
Закрытый
6.76
Как сгруппировать нажатия клавиш
↗
0
0
-
0
Закрытый
6.77
Знакомство с Flowable
↗
1
1
2м 33с
0
Закрытый
6.78
Для чего нужен Flowable
↗
1
1
9м 54с
0
Закрытый
6.79
Flowable и Спецификация на реактивные конвейеры
↗
1
1
3м 24с
0
Закрытый
6.80
Сходство и отличия Observable и Flowable
↗
1
1
2м 11с
0
Закрытый
6.81
Интерфейс FlowableSubscriber
↗
1
1
4м 18с
0
Закрытый
6.82
Стратегия противодавления Buffer
↗
1
1
13м 15с
0
Закрытый
6.83
Стратегия противодавления Drop
↗
1
1
10м 2с
0
Закрытый
6.84
Стратегия противодавления Latest
↗
1
1
4м 34с
0
Закрытый
6.85
Конвертация Observable во Flowable
↗
1
1
4м 44с
0
Закрытый
6.86
Генерация на Flowable
↗
1
1
4м 54с
0
Закрытый
6.87
Генератор случайных чисел
↗
1
1
5м 8с
0
Закрытый
6.88
Как реверснуть генерируемую последовательность на Flowable
↗
0
0
-
0
Закрытый
6.89
Введение в реактивное тестирование
↗
0
0
-
0
Закрытый
6.90
Тестируем blockingSubscribe()
↗
0
0
-
0
Закрытый
6.91
Концепция блокирующих подписчиков
↗
0
0
-
0
Закрытый
6.92
Оператор blockingFirst()
↗
0
0
-
0
Закрытый
6.93
Оператор blockingLast()
↗
0
0
-
0
Закрытый
6.94
Оператор blockingGet()
↗
0
0
-
0
Закрытый
6.95
Оператор blockingIterable()
↗
0
0
-
0
Закрытый
6.96
Оператор blockingForEach()
↗
0
0
-
0
Закрытый
6.97
Оператор blockingNext()
↗
0
0
-
0
Закрытый
6.98
Оператор blockingLatest()
↗
0
0
-
0
Закрытый
6.99
Оператор blockingMostRecent()
↗
1
1
3м 47с
0
Закрытый
6.100
Тестирование с TestObserver
↗
0
0
-
0
Закрытый
6.101
Тестирование с TestScheduler
↗
0
0
-
0
Закрытый
6.102
Отладочная демка
↗
0
0
-
0
Закрытый
6.103
Подводим итоги
↗
0
0
-
0
Закрытый
6.104
RxJava при смерти, или кому верить...
↗
0
0
-
0
Закрытый
6.105
Предваряющее слово к самостоятельному практикуму
↗
0
0
-
0
Закрытый
6.106
Решения задач из Практикума 1
↗
1
0
2м 4с
0
Закрытый
6.107
Ответы на вопросы курсантов по Практикуму 1
↗
0
0
-
0
Закрытый
6.108
Решения задач из Практикума 2
↗
0
0
-
0
Закрытый
6.109
RxJava: подводим итоги обсуждения
↗
0
0
-
0
Закрытый
6.110
RxJava: доп.примеры (будут пополняться по мере появления)
↗
0
0
15м 1с
0
7. Project Reactor
9 уроков
11
10
98м
0
Закрытый
7.1
Обзор библиотеки Reactor
↗
2
2
27м 41с
0
Закрытый
7.2
Базовые приемы работы
↗
1
1
5м 59с
0
Закрытый
7.3
Обработка противодавления в Reactor
↗
1
1
18м 16с
0
Закрытый
7.4
Schedulers в Reactor
↗
2
2
8м 35с
0
Закрытый
7.5
Параллельный Flux
↗
1
1
2м 35с
0
Закрытый
7.6
Процессоры
↗
1
1
9м 58с
0
Закрытый
7.7
Тестирование
↗
1
1
2м 18с
0
Закрытый
7.8
Решение задач из Практикума
↗
1
0
27м 12с
0
Закрытый
7.9
Reactor: подводим итоги обсуждения
↗
1
1
0м 28с
0
8. Spring-модуль WebFlux
13 уроков
27
20
196м
0
Закрытый
8.1
Знакомство с WebFlux
↗
6
6
24м 49с
0
Закрытый
8.2
Практика с WebFlux
↗
6
2
63м 44с
0
Закрытый
8.3
Знакомство с WebClient
↗
2
2
4м 40с
0
Закрытый
8.4
Практика с WebClient
↗
2
2
14м 31с
0
Закрытый
8.5
Подробнее о различиях между WebClient и RestTemplate
↗
2
2
4м 54с
0
Закрытый
8.6
WebFlux и СУБД
↗
2
2
7м 42с
0
Закрытый
8.7
Практика: WebFlux в связке с MongoDB --- Часть 1/2
↗
2
1
30м 10с
0
Закрытый
8.8
Практика: WebFlux в связке с MongoDB --- Часть 2/2
↗
1
0
3м 7с
0
Закрытый
8.9
Бенчмаркинг с WebFlux
↗
1
1
4м 5с
0
Закрытый
8.10
Тестирование реактивных Spring-приложений
↗
1
0
4м 32с
0
Закрытый
8.11
Простейший R2DBC-проект
↗
1
1
12м 54с
0
Закрытый
8.12
WebFlux: подводим итоги обсуждения
↗
1
1
29м 39с
0
Закрытый
8.13
Рекомендуемые практики создания реактивного кода и Заключение
↗
0
0
-
0
9. Бонусные лекции Reactive Extras
1 урок
4
2
75м
0
Закрытый
9.1
Реактивная имплементация брокера сообщений Kafka
↗
4
2
75м 37с
0
10. Факультативный модуль – Многопоточная Java
46 уроков
104
103
341м
0
Закрытый
10.1
Архитектура фон Неймана
↗
3
3
8м 35с
0
Закрытый
10.2
Пользовательские процессы
↗
3
3
11м 53с
0
Закрытый
10.3
Оценка потребного размера ОЗУ
↗
3
2
10м 38с
0
Закрытый
10.4
Процессы и их роли
↗
1
1
5м 3с
0
Закрытый
10.5
Сегменты памяти
↗
3
3
5м 21с
0
Закрытый
10.6
Знакомство с подпроцессами (threads)
↗
3
3
6м 48с
0
Закрытый
10.7
Подпроцессы пользователя и ОС
↗
2
2
8м 41с
0
Закрытый
10.8
Сходства и отличия процессов и подпроцессов
↗
2
2
4м 50с
0
Закрытый
10.9
Что может пойти не так
↗
3
3
5м 47с
0
Закрытый
10.10
Мониторы
↗
3
3
5м 47с
0
Закрытый
10.11
Синхронизирующие абстрации
↗
3
3
3м 1с
0
Закрытый
10.12
Создание подпроцесса
↗
3
3
6м 26с
0
Закрытый
10.13
Состояния подпроцесса
↗
3
3
10м 31с
0
Закрытый
10.14
Приоритет подпроцесса
↗
2
2
6м 21с
0
Закрытый
10.15
Метод join()
↗
3
3
5м 38с
0
Закрытый
10.16
Метод interrupt()
↗
2
2
2м 21с
0
Закрытый
10.17
Связка wait() и notify()
↗
3
3
10м 51с
0
Закрытый
10.18
Ключевое слово volatile
↗
2
2
4м 23с
0
Закрытый
10.19
Что стоит за volatile
↗
2
2
16м 38с
0
Закрытый
10.20
Ключевое слово synchronized
↗
2
2
7м 25с
0
Закрытый
10.21
Блоки синхронизации
↗
2
2
3м 47с
0
Закрытый
10.22
Статическая блокировка (deadlock)
↗
2
2
8м 58с
0
Закрытый
10.23
Счетчик с монитором
↗
3
3
14м 27с
0
Закрытый
10.24
Интерфейс Lock
↗
3
3
4м 14с
0
Закрытый
10.25
Класс ReentrantLock
↗
3
3
9м 32с
0
Закрытый
10.26
Атомарный счетчик
↗
3
3
3м 48с
0
Закрытый
10.27
Паттерн Producer-Consumer на связке wait/notify
↗
2
2
3м 43с
0
Закрытый
10.28
С Новым годом! на связке wait/notify
↗
2
2
28м 47с
0
Закрытый
10.29
Паттерн Producer-Consumer на связке Lock/Condition
↗
3
3
2м 56с
0
Закрытый
10.30
ExecutorService с Runnable
↗
3
3
6м 5с
0
Закрытый
10.31
ExecutorService с Semaphore
↗
2
2
4м 52с
0
Закрытый
10.32
ExecutorService с Callable
↗
2
2
4м 46с
0
Закрытый
10.33
ExecutorService и метод awaitTermination()
↗
1
1
6м 11с
0
Закрытый
10.34
Класс CyclicBarrier
↗
2
2
2м 30с
0
Закрытый
10.35
CyclicBarrier в действии
↗
2
2
2м 59с
0
Закрытый
10.36
Фреймворк Fork/Join
↗
2
2
9м 7с
0
Закрытый
10.37
Рекурсия: top-down и bottom-up
↗
2
2
12м 18с
0
Закрытый
10.38
Рекурсия: пример доказательства по индукции
↗
2
2
9м 7с
0
Закрытый
10.39
Рекурсивное вычисление площади
↗
1
1
8м 44с
0
Закрытый
10.40
Простейший пример с Fork/Join
↗
2
2
5м 54с
0
Закрытый
10.41
Бенчмаркинг суммирования на Fork/Join
↗
1
1
9м 34с
0
Закрытый
10.42
ЭКСТРА: Concurrent, multithreaded и parallel
↗
1
1
7м 56с
0
Закрытый
10.43
ЭКСТРА: Race Conditions и Data Races
↗
1
1
10м 42с
0
Закрытый
10.44
ЭКСТРА: Состояние гонки в бинарных семафорах и мьютексах
↗
1
1
16м 20с
0
Закрытый
10.45
ЭКСТРА: Liveness и синхронизация
↗
2
2
20м 42с
0
Закрытый
10.46
ЭКСТРА: Знакомство с виртуальными подпроцессами
↗
3
3
4м 22с
0