...

пятница, 4 июля 2014 г.

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

Не секрет, что многие 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

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий