Содержание курса
Intro + рекомендации к методике подготовки
5 уроков
1.
Почему сертификация --- это лучший подарок самому себе
↗
2.
Введение
↗
3.
Рекомендации
↗
4.
Подготовка учебной среды (апдейт для 2025)
↗
5.
Кодовая база, слайды, диаграммы, практич.задачи и т.д.
↗
Тематические группы 1 & 2: Базовый и продвинутый дизайн классов
9 уроков
1.
Ключевое слово final
↗
2.
Наследование и полиморфизм
↗
3.
Перечисляемые дата-типы (enums)
↗
4.
Внутренние классы
↗
5.
Шаблон Singleton
↗
6.
Немутирующие классы
↗
7.
Интерфейсы
↗
8.
Лямбда-выражения
↗
9.
Важный --- даже ГИПЕРВАЖНЫЙ --- комментарий
↗
Тематическая группа 3: Generics и коллекции
22 урока
1.
Введение
↗
2.
Параметризация
↗
3.
Пределы ? extends и ? super
↗
4.
Подробнее про extends и super
↗
5.
Интерфейсные пересечения
↗
6.
Ограниченность дженериков
↗
7.
Обзор коллекций в Java
↗
8.
Lists (списки)
↗
9.
Sets (множества)
↗
10.
Утечка памяти из-за equals()
↗
11.
Класс TreeSet
↗
12.
Maps (отображения, «мапы»)
↗
13.
Queues (очереди)
↗
14.
Упорядоченные коллекции
↗
15.
Асимптотическая сложность и ее последствия
↗
16.
Неуместная структура данных (пример с Java Mission Control)
↗
17.
Как выполнять сортировку
↗
18.
Естественный порядок
↗
19.
Подробнее об упорядочении
↗
20.
Аккуратней с компаратором!
↗
21.
Сортировка: подведем итоги разбора
↗
22.
И еще разок про параметризацию с extends
↗
Тематические группы 4 & 5: Встроенные функц.интерфейсы и Stream
20 уроков
1.
Введение
↗
2.
«Универсальный анализатор» на лямбдах
↗
3.
Пакет java.util.function
↗
4.
Что такое Stream
↗
5.
Метод map()
↗
6.
Метод peek() и «короткозамыкающие» операторы
↗
7.
Класс Optional
↗
8.
Методы для обработки данных
↗
9.
Класс Collectors
↗
10.
Источники
↗
11.
Метод flatMap()
↗
12.
Специфика обработки данных в функц.конвейерах
↗
13.
Параллельные стримы
↗
14.
«Подводные камни»
↗
15.
Понятие statefulness
↗
16.
Редукция и ее особенности
↗
17.
Пример «высушивания» кода на стримах: UniMaxDemo
↗
18.
Как сделать distinct() более «разборчивым»
↗
19.
Сегментация данных с помощью partitioningBy()
↗
20.
Классификация данных с помощью groupingBy()
↗
Кодовый практикум к разделу про ФП
1 урок
1.
Лямбда-трейдеры
↗
Факультативные топики к разделу про ФП
3 урока
1.
Динамические лямбды
↗
2.
Каррированные функции
↗
3.
Глубокое погружение в ссылки на методы
↗
Тренировочные вопросы: Тематические Группы 1 – 5
5 уроков
1.
Разбор тренировочных вопросов по Группе 1
↗
2.
Разбор тренировочных вопросов по Группе 2
↗
3.
Разбор тренировочных вопросов по Группе 3
↗
4.
Разбор тренировочных вопросов по Группе 4
↗
5.
Разбор тренировочных вопросов по Группе 5
↗
Тематическая группа 6: Assertions и обработка исключений
3 урока
1.
Обработка исключений и ключевое слово assert
↗
2.
(Факультативно) Видеолекция по обработке исключений из OCA-курса
↗
3.
Разбор тренировочных вопросов по Группе 6
↗
Тематическая группа 7: Date / Time API
3 урока
1.
Хроноклассы в пакете java.time
↗
2.
(Факультативно) Видеолекция по хроноклассам из OCA-курса
↗
3.
Разбор тренировочных вопросов по Группе 7
↗
Тематическая группа 8: Многопоточность
47 уроков
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.
ЭКСТРА: Знакомство с виртуальными подпроцессами
↗
47.
Разбор тренировочных вопросов по Группе 8
↗
Тематические группы 9 & 10: IO и NIO.2
31 урок
1.
Механизмы ввода/вывода в Java: базовые концепции
↗
2.
Входные и выходные потоки данных
↗
3.
Класс File
↗
4.
Примеры использования File-объекта
↗
5.
Класс FileInputStream
↗
6.
Упражняемся с FileInput/OutputStream
↗
7.
Класс FilterInputStream
↗
8.
Маркировка
↗
9.
«Перескок» (skipping over)
↗
10.
Буферизованные потоки
↗
11.
Класс DataInput/OutputStream
↗
12.
Readers и Writers
↗
13.
Упражняемся с BufferedReader/Writer
↗
14.
Классы PrintStream и PrintWriter
↗
15.
Понятие «персистентность»
↗
16.
Пример простейшей сериализации
↗
17.
Почему персистентность нужна
↗
18.
Требования к сериализуемому классу
↗
19.
Ключевое слово transient
↗
20.
Что такое SerialVersionUID
↗
21.
Пример полного цикла персистирования
↗
22.
Взаимодействие с пользователем
↗
23.
Пользовательский ввод на новый лад
↗
24.
Как украсть пароль
↗
25.
NIO.2: базовые концепции
↗
26.
Интерфейс Path
↗
27.
Методы resolve(), relativize() и normalize()
↗
28.
Симлинки в NIO.2
↗
29.
Манипуляции с файлами и директориями
↗
30.
Дополнения в NIO.2 для связки с Stream_API
↗
31.
Разбор тренировочных вопросов по Группам 9 и 10
↗
Тематическая группа 11: JDBC
8 уроков
1.
JDBC API: базовые концепции
↗
2.
Ключевые компоненты JDBC
↗
3.
Работа с ResultSet
↗
4.
CRUD-операции
↗
5.
ЭКСТРА: PreparedStatement и CallableStatement
↗
6.
Специфические особенности сертификационных вопросов по JDBC
↗
7.
Установка и подключение тренировочной СУБД Apache Derby
↗
8.
Разбор тренировочных вопросов по Группе 11
↗
Тематическая группа 12: Локализация приложений
12 уроков
1.
Зачем нужна локализация
↗
2.
Класс Locale
↗
3.
Класс Properties
↗
4.
Загрузка и сохранение свойств
↗
5.
Класс ResourceBundle
↗
6.
Форматирование дат и времени
↗
7.
Локализация приложения с календарными датами
↗
8.
Иерархия подбора нужного ресурса
↗
9.
Скомпилированные ресурсы
↗
10.
Форматирование и парсинг чисел
↗
11.
Упраженение с локализацией численных данных
↗
12.
Разбор тренировочных вопросов по Группе 12
↗
Outro
1 урок
1.
Заключительное слово
↗