Pull to refresh

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

GolovachCourses corporate blogJava
Не секрет, что многие 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 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
  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
Tags:JavaJava 8Reflection APGenericsClassLoaderзагрузка классов
Hubs: GolovachCourses corporate blog Java
Total votes 43: ↑34 and ↓9 +25
Views50.2K

Comments 35

Only those users with full accounts are able to leave comments. Log in, please.

Top of the last 24 hours

Information

Founded
Location
Украина
Website
www.golovachcourses.com
Employees
2–10 employees
Registered