It's not a secret that many Java programmers, starting their way in the industry, pay great attention to "heavy" technologies - OpenJPA, Spring, JAX-RS, EJB, WS - *, ... This allows you to quickly integrate into modern corporate projects, and maximize the rate of wage growth.
Many of them eventually “go down” to the technologies underlying the specified frameworks - JDBC, Servlet API, NIO / NIO.2. However, it is regrettable that often there is no time left for a detailed study of the language itself and the capabilities of the platform.
This is not about subtleties or exotic, but about what constitutes a significant part of the framework: Servlet-container uses multiple ClassLoaders, JPA2-provider uses bytecode manipulation, the vast majority of libraries use Reflection API, universal use of Generics is only “aggravated” with the emergence of functional interfaces (java.lang.function. *) and lambda.
')
The new principles of Java 5 (Generics) and now Java 8 (methods in interfaces, links to methods, lambdas, Stream API, JSR 308: Pluggable Type Systems) are superimposed on the misunderstanding of the original platform (ClassLoader, Reflection API). It is necessary to pay attention to the fact that Generics + Java 8 is not just language features, it is partly a transition to a functional programming style.
I also teach
Scala for Java Developers on the udemy.com online education platform (equivalent to Coursera / EdX).
I collected a certain number of useful (in my opinion) links on the following topics.
- Methods in interfaces, references to methods, multiple inheritance
- Lambda (Project Lambda)
- Stream API
- Functional algorithms
- Annotations
- Generic
- Reflection API
- Class loading
I hope someone finds them useful.
Detailed information
- Methods in interfaces, references to methods, multiple inheritance
- Static methods in interfaces
- Default methods in interfaces
- How to live with multiple inheritance: opportunities, conflict resolution
- References to methods
- Lambda (Project Lambda)
- History, lambda syntax
- Details: lexical scope, effectivelly final, closures, type inference, target typing, serialization lambda
- Stream API
- External and internal iteration: map, filter, forEach
- More complex operations: flatMap, reduce, collect
- Stream properties and operation properties: immediate / terminal, lazy / eager, stateless / stateful, short circuiting, serial / parallel, ordered / unordered, associative
- Parallel Stream and Implicit Fork / Join Integration
- Functional algorithms
- Parallel reduction works on monoids (associativity, neutral element). What does it mean?
- Optional, CompletableFuture, ... and other monads. What does it mean?
- Currying, higher order functions. What does it mean?
- Java 8 combinatorial algorithms
- Annotations
- We define our annotations
- Meta annotations: @ Target, @ Retention, @ Inherited, @ Repeatable, ...
- Annotations to the compiler: @ Override, @ SafeVarargs, @ SuppressWarnings, @ FunctionalInterface, ...
- Subtract annotations using the Reflection API
- JSR 308: Type Annotations and Pluggable Type Systems
- Extending type checking with the Checker Framework: @ NotNull, @ GuardedBy, ...
- Generic
- Bounded type parameters
- Self-bounding generics
- Wildcards
- As implemented in Java, restrictions (type erasure, bridge methods, non-reifiable types)
- Reflection API
- java.lang.reflect
- How frameworks use Reflection API (JUnit, Mockito, Servlet API 3)
- Class loading
- Class file format and class loading procedure (load, link (verify, prepare, resolve), init)
- ClassLoader: define your loader, build a hierarchy of loaders
- Dynamic code generation, compile on the fly: Compiler API, javaassist
- Dynamic code generation, collected from bytecode: BCEL, cglib
- Dynamic code generation, transformation of existing bytecode during class loading
Webinars
On August 5, a series of 8 webinars will start on the topics indicated above. Webinars last 2.5-3 hours, during which they manage to be deeply immersed in problems and details. Classes are held 2 times a week for 4 weeks on Tuesday and Friday from 6 to 8 p.m. Moscow time.
Cost of
If paid before July 12: $ 225.
If paid before July 19: $ 250.
If paid before July 26: $ 275.
If paid after July 26: $ 300.
Contacts
email: GolovachCourses
skype: GolovachCourses