Розширений матеріал по 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.  
  3. лямбда (Project Lambda)
  4.  
  5. Stream API
  6.  
  7. Функціональні алгоритми
  8.  
  9. Анотації
  10.  
  11. Генерики
  12.  
  13. Reflection API
  14.  
  15. Завантаження класів
  16.  
Сподіваюся хтось вважатиме їх корисними.
 
 

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

 
     
  1. Методи в інтерфейсах, посилання на методи, множинне спадкування
     
       
    • Статичні методи в інтерфейсах
    •  
    • Методи за замовчуванням (default methods) в інтерфейсах
    •  
    • Як жити з множинним спадкуванням: можливості, вирішення конфліктів
    •  
    • Посилання на методи
    •  
      
  2.  
  3. лямбда (Project Lambda)
     
       
    • Передісторія, синтаксис лямбда
    •  
    • Деталі: lexical scope, effectivelly final, closures, type inference, target typing, сериализация лямбда
    •  
      
  4.  
  5. Stream API
     
       
    • Зовнішня і внутрішня ітерація: map, filter, forEach
    •  
    • Більш складні операції: flatMap, reduce, collect
    •  
    • Властивості потоків і властивості операцій: immediate / terminal, lazy / eager, stateless / stateful, short-circuiting, serial / parallel, ordered / unordered, associative
    •  
    • Паралельні Stream-и і неявна інтеграція з Fork / Join
    •  
      
  6.  
  7. Функціональні алгоритми
     
       
    • Паралельна редукція працює на моноідах (асоціативністю, нейтральний елемент). Що це означає?
    •  
    • Optional, CompletableFuture,… та інші монади. Що це означає?
    •  
    • каррінг, функції вищого порядку. Що це означає?
    •  
    • Комбінаторні алгоритми на Java 8
    •  
      
  8.  
  9. Анотації
     
       
    • Визначаємо свої анотації
    •  
    • Мета-анотації: @ Target, @ Retention, @ Inherited, @ Repeatable,…
    •  
    • Анотації для компілятора: @ Override, @ SafeVarargs, @ SuppressWarnings, @ FunctionalInterface,…
    •  
    • вичитують анотації за допомогою Reflection API
    •  
    • JSR 308: Type Annotations and Pluggable Type Systems
    •  
    • Розширюємо перевірку типів за допомогою Checker Framework: @ NotNull, @ GuardedBy,…
    •  
      
  10.  
  11. Генерики
     
       
    • Bounded type parameters
    •  
    • Self-bounding generics
    •  
    • Wildcards
    •  
    • Як реалізовані в Java, обмеження (type erasure, bridge methods, non-reifiable types)
    •  
      
  12.  
  13. Reflection API
     
       
    • java.lang.reflect
    •  
    • Як framework-і використовують Reflection API (JUnit, Mockito, Servlet API 3)
    •  
      
  14.  
  15. Завантаження класів
     
       
    • Формат class-файлу і процедура завантаження класів (load, link (verify, prepare, resolve), init)
    •  
    • ClassLoader: визначаємо свій завантажувач, будуємо ієрархію завантажувачів
    •  
    • Динамічна кодогенерацію, компілюємо "на льоту": Compiler API, javaassist
    •  
    • Динамічна кодогенерацію, збираємо з байткода: BCEL, cglib
    •  
    • Динамічна кодогенерацію, трансформація існуючого байткода в процесі завантаження класів
    •  
      
  16.  
 
 

Вебінари

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

Контакти

email: GolovachCourses
skype: GolovachCourses
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.