Подготовка к Java-сертификации профессионального уровня (OCP)

- Уроков: 170
- Сложность: normal
- Аудитория: Курс рассчитан прежде всего на тех, кто желает сдать сертификационный экзамен ПРОФЕССИОНАЛЬНОГО уровня и/или подготовиться к техническому интервью на позицию Java-разработчика вплоть до уровня Middle.
Тематика курса охватывает фундаментальный API, применяемый при разработке объектно-ориентированных Java-приложений. Кроме того, курс затрагивает и кое-какие аспекты создания программ для взаимодействия с базами данных по технологии JDBC.
Курс предназначен в первую очередь для приобретения практических навыков и рассчитан на слушателей, не имеющих возможность участвовать в очных занятиях. Структура и методология курса обеспечивают контроль качества усвоения учебного материала на каждом этапе.
По завершении данного курса слушатели будут в состоянии:
- создавать Java-приложения на основе продвинутых объектно-ориентированных механизмов инкапсуляции, наследования и полиморфизма
- пользоваться структурами данных из Java Collections Framework
- применять фильтры и выполнять поиск нужных элементов в коллекциях с помощью лямбда-выражений
- имплементировать I/O-функционал для чтения и записи файлов, в т.ч. текстовых
- работать с файловыми системами с помощью средств NIO.2
- работать с базами данных в рамках механизма CRUD-операций (т.е. создание, чтение, актуализация и удаление записей) посредством JDBC API
- создавать высокопроизводительные многопоточные приложения, избегая при этом взаимной блокировки и недоступа к ресурсам
- пользоваться лямбда-выражениями для параллелизации операций
- успешно пройти ОСР-сертификацию по 8-й версии Java (Oracle Certified Professional, Java SE8 Programmer II, экзамен 1Z0-809)
- достойно показать себя на технических интервью при приеме на работу.
Для закрепления теоретических знаний в курсе предусмотрены:
- лабораторный практикум, состоящий из 46 лабораторных работ общим числом;
- контрольные опросы по пройденным темам (~380 вопросов) с последующим разбором экзаменационных задач (блок из 100 тестов);
- самостоятельная работа по отладке / рефакторингу программ из лабораторного практикума и решению тренировочных задач.
Общий объем видеолекций: более 35 часов
Ориентировочная продолжительность: 10 недель, если выделять от 6 до 10 часов в неделю (с учетом самостоятельной работы) в зависимости от текущей тематики.
Тематика учебной программы:
===== 1-я часть =====
Вступительные замечания
- Знай своего врага
- Методические рекомендации
- Обзор сторонних ресурсов
Группа 1: Фундаментальный дизайн Java-классов
- Механизм инкапсуляции
- Механизм наследования, в т.ч. модификаторы доступа и композиционный синтаксис
- Тонкости полиморфизма
- Переопределение методов hashCode(), equals() и toString() из класса Object
- Создание и применение немутирующих и Singleton-классов
- Применение ключевого слова static к блокам инициализации, переменным, методам и классам
Группа 2: Углубленный дизайн Java-классов
- Разработка кода с применением абстрактных классов и методов
- Разработка кода с применением ключевого слова final
- Создание внутренних классов, в т.ч. вложенных, локальных и анонимных
- Перечисляемые типы, их методы и конструкторы
- Разработка кода, который декларирует, имплементирует и/или расширяет интерфейсы; аннотация @Override
- Создание и применение лямбда-выражений
– Группа 3: Настраиваемые типы и коллекции
- Создание и применение настраиваемых (обобщенных) классов, т.н. Generics
- Создание и применение объектов ArrayList, TreeSet, TreeMap и ArrayDeque
- Интерфейсы java.util.Comparator и java.lang.Comparable
- Стримы и фильтры
- Итерация методом forEach() на Stream- и List-объектах
- Интерфейс Stream и функциональные конвейеры
- Фильтрация коллекций посредством лямбда-выражений
- Применение ссылок на методы со Stream-объектами
Группа 4: Лямбды и встроенные функциональные интерфейсы
- Применение интерфейсов из пакета java.util.function, в частности Predicate, Consumer, Function и Supplier
- Разработка кода, использующего примитивные специализации функциональных интерфейсов
- Разработка кода, использующего бинарные версии функциональных интерфейсов
- Разработка кода, использующего интерфейс UnaryOperator
Группа 5: Java Stream API
- Разработка кода для извлечения данных из объекта посредством методов peek() и map(), в т.ч. примитивных специализаций метода map()
- Поиск данных методами findFirst(), findAny(), anyMatch(), allMatch() и noneMatch()
- Разработка кода, использующего класс Optional
- Разработка кода, использующего методы обработки данных на Stream-объектах
- Сортировка коллекций с применением Stream API
- Сохранение результата в виде коллекции посредством метода collect() и сегментирование / классификация элементов по группам с помощью класса Collectors
- Работа с методом flatMap() из Stream API
Факультативная часть (не вынесена на экзамен)
- Каррированные функции
- Динамическая типизация и произвольные лямбда-выражения
- Глубокое погружение в ссылки на методы
===== 2-я часть =====
Группа 6: Исключения и проверка инвариантов
- Конструкции для перехвата нескольких исключений; блок finally
- Оператор try-with-resources
- Создание пользовательских исключений с AutoCloseable-ресурсами
- Проверка инвариантов посредством оператора assert
Группа 7: Java SE 8 Date/Time API
- Создание и управление событиями с привязкой к дате и времени, в т.ч. в рамках общего объекта посредством классов LocalDate, LocalTime, LocalDateTime, Instant, Period и Duration
- Работа с датами и временем в различных часовых поясах, в т.ч. с учетом перехода на летнее/зимнее время; форматирование календарных дат и времени
- Создание и управление событиями с привязкой к дате и времени посредством классов Instant, Period, Duration и TemporalUnit
Группа 8: Java Concurrency
- Создание рабочих подпроцессов (threads) на базе Runnable- и Callable-объектов, и применение интерфейсов ExecutorService и Future для асинхронного исполнения задач
- Выявление потенциальных проблем конкурентного режима, в т.ч. статическая блокировка (deadlock), зависание по недоступу к ресурсу (starvation), динамическая блокировка (livelock) и состояние гонки (race condition / data race)
- Применение ключевого слова synchronized и пакета java.util.concurrent.atomic для управления порядком исполнения подпроцессов
- Работа с синхронизационными примитивами, в частности, на базе интерфейса Lock и классов ReentrantLock, Condition, CyclicBarrier, Semaphore и др.
- Организация параллелизма на базе Fork/Join Framework
===== 3-я часть =====
Группа 9: Основы ввода/вывода в Java
- Чтение и запись через класс Console
- Работа с классами BufferedReader, BufferedWriter, File, FileReader, FileWriter, FileInputStream, FileOutputStream, ObjectOutputStream, ObjectInputStream и PrintWriter из пакета java.io
Группа 10: Java File I/O (NIO.2)
- Применение интерфейса Path для работы с файлами и папками
- Применение класса Files для проверки наличия, чтения, удаления, копирования и перемещения файлов или папок, в т.ч. управление метаданными
- Применение Stream API в тандеме с NIO.2
Группа 11: Работа с базами данных через JDBC
- Интерфейсы, лежащие в основе JDBC, в частности, Driver, Connection, Statement и ResultSet, в т.ч. их связь с имплементацией вендором БД
- Компоненты, необходимые для подключения к БД с использованием класса DriverManager, в т.ч. JDBC URL
- Создание запросов и чтение результатов из БД, в т.ч. создание и надлежащее закрытие ResultSet-, Statement- и Connection-объектов, а также итерация по результатам
Группа 12: Локализация
- Создание и изменение локали с помощью Locale-объекта
- Создание и чтение Properties-файла
- Формирование ResourceBundle-объекта для каждой локали и загрузка таких ресурсов в приложение
Курсант должен уверенно владеть механизмами, идиомами и конструкциями Java как минимум в пределах курса подготовки к сдаче серт.экзамена OCA (доступен на этой же платформе).