Расширенный материал по 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 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.
Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
Методы в интерфейсах, ссылки на методы, множественное наследование Лямбды (Project Lambda) Stream API Функциональные алгоритмы Аннотации Генерики Reflection API Загрузка классов Надеюсь кто-то сочтет их полезными.Детальная информацияМетоды в интерфейсах, ссылки на методы, множественное наследованиеСтатические методы в интерфейсах Методы по умолчанию (default methods) в интерфейсах Как жить с множественным наследованием: возможности, разрешение конфликтов Ссылки на методы Лямбды (Project Lambda)Предыстория, синтаксис лямбд Детали: lexical scope, effectivelly final, closures, type inference, target typing, сериализация лямбд Stream APIВнешняя и внутренняя итерация: map, filter, forEach Более сложные операции: flatMap, reduce, collect Свойства потоков и свойства операций: immediate/terminal, lazy/eager, stateless/stateful, short-circuiting, serial/parallel, ordered/unordered, associative Параллельные Stream-ы и неявная интеграция с Fork/Join Функциональные алгоритмыПараллельная редукция работает на моноидах (ассоциативностью, нейтральный элемент). Что это значит? Optional, CompletableFuture, … и другие монады. Что это значит? Карринг, функции высшего порядка. Что это значит? Комбинаторные алгоритмы на Java 8 АннотацииОпределяем свои аннотации Мета-аннотации: @ Target, @ Retention, @ Inherited, @ Repeatable, … Аннотации для компилятора: @ Override, @ SafeVarargs,@ SuppressWarnings, @ FunctionalInterface, … Вычитываем аннотации при помощи Reflection API JSR 308: Type Annotations and Pluggable Type Systems Расширяем проверку типов с помощью Checker Framework: @ NotNull, @ GuardedBy, … ГенерикиBounded type parameters Self-bounding generics Wildcards Как реализованы в Java, ограничения (type erasure, bridge methods, non-reifiable types) Reflection APIjava.lang.reflect Как framework-и используют Reflection API (JUnit, Mockito, Servlet API 3) Загрузка классовФормат 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: GolovachCoursesskype: GolovachCourses