Расширенный материал по Java 8

в 12:38, , рубрики: classloader, generics, java, java 8, Блог компании GolovachCourses, Учебный процесс в IT

Не секрет, что многие Java-программисты, начиная свой путь в индустрии, уделяют большое внимание «тяжелым» технологиям — OpenJPA, Spring, JAX-RS, EJB, WS-*,… Это дает возможность как скорее влиться в современные корпоративные проекты, так и максимизировать скорость роста зарплаты.

Многие из них в конце концов «спускаются» до технологий лежащих в основе указанных фреймворков — JDBC, Servlet API, NIO/NIO.2. Однако прискорбно, что зачастую не остается время на детальное изучение самого языка и возможностей платформы.

Речь идет не о тонкостях или экзотике, а о том, что составляет существенную часть работы фреймворка: Servlet-контейнер использует множественные ClassLoader-ы, JPA2-провайдер использует манипулирование байткодом, абсолютное большинство библиотек используют Reflection API, всеобщее использование Generics только «усугубилось» с появлением функциональных интерфейсов (java.lang.function.*) и лямбд.

На недопонимание изначальной платформы (ClassLoader, Reflection API) накладываются «новвоведения» Java 5 (Generics), а теперь еще и Java 8 (методы в интерфейсах, ссылки на методы, лямбды, Stream API, JSR 308: Pluggable Type Systems). Надо обратить внимание на то, что Generics + Java 8 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.

Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам

  1. Методы в интерфейсах, ссылки на методы, множественное наследование
  2. Лямбды (Project Lambda)
  3. Stream API
  4. Функциональные алгоритмы
  5. Аннотации
  6. Генерики
  7. Reflection API
  8. Загрузка классов

Надеюсь кто-то сочтет их полезными.

Детальная информация

  1. Методы в интерфейсах, ссылки на методы, множественное наследование
    • Статические методы в интерфейсах
    • Методы по умолчанию (default methods) в интерфейсах
    • Как жить с множественным наследованием: возможности, разрешение конфликтов
    • Ссылки на методы

  2. Лямбды (Project Lambda)
    • Предыстория, синтаксис лямбд
    • Детали: lexical scope, effectivelly final, closures, type inference, target typing, сериализация лямбд

  3. Stream API
    • Внешняя и внутренняя итерация: map, filter, forEach
    • Более сложные операции: flatMap, reduce, collect
    • Свойства потоков и свойства операций: immediate/terminal, lazy/eager, stateless/stateful, short-circuiting, serial/parallel, ordered/unordered, associative
    • Параллельные Stream-ы и неявная интеграция с Fork/Join

  4. Функциональные алгоритмы
    • Параллельная редукция работает на моноидах (ассоциативностью, нейтральный элемент). Что это значит?
    • Optional, CompletableFuture,… и другие монады. Что это значит?
    • Карринг, функции высшего порядка. Что это значит?
    • Комбинаторные алгоритмы на Java 8

  5. Аннотации
    • Определяем свои аннотации
    • Мета-аннотации: @ Target, @ Retention, @ Inherited, @ Repeatable, ...
    • Аннотации для компилятора: @ Override, @ SafeVarargs,@ SuppressWarnings, @ FunctionalInterface, ...
    • Вычитываем аннотации при помощи Reflection API
    • JSR 308: Type Annotations and Pluggable Type Systems
    • Расширяем проверку типов с помощью Checker Framework: @ NotNull, @ GuardedBy, ...

  6. Генерики
    • Bounded type parameters
    • Self-bounding generics
    • Wildcards
    • Как реализованы в Java, ограничения (type erasure, bridge methods, non-reifiable types)

  7. Reflection API
    • java.lang.reflect
    • Как framework-и используют Reflection API (JUnit, Mockito, Servlet API 3)

  8. Загрузка классов
    • Формат class-файла и процедура загрузки классов (load, link (verify, prepare, resolve), init)
    • ClassLoader: определяем свой загрузчик, строим иерархию загрузчиков
    • Динамическая кодогенерация, компилируем “на лету”: Compiler API, javaassist
    • Динамическая кодогенерация, собираем из байткода: BCEL, cglib
    • Динамическая кодогенерация, трансформация существующего байткода в процессе загрузки классов

Вебинары

5 августа стартует серия из 8-ми вебинаров по темам, указанным выше. Вебинары длятся 2.5-3 часа, в течении которых удается глубоко погрузится в проблематику и детали. Занятия проходят 2 раза в неделю в течении 4-х недель во вторник и пятницу в 18.00-21.00 по московскому времени.
Стоимость
При оплате до 12 июля: 225$.
При оплате до 19 июля: 250$.
При оплате до 26 июля: 275$.
При оплате после 26 июля: 300$.

Контакты

email: GolovachCourses
skype: GolovachCourses

Автор: IvanGolovach

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js