This course, delivered using Java 11, is designed for existing Java developers whom are comfortable with the fundamentals and who want to
take the next step. We'll have you build a series of realistic apps that exploit the more complicated language elements and APIs including
generics, lambda expressions and methods references, streams, concurrency, asynchronous and reactive programming, non-blocking IO, and
reflection.
Exercises and examples are used throughout the course to give practical hands-on experience with the techniques covered.
Skills Gained
The delegate will learn and acquire skills as follows:
- Work with a build tool
- Configure and apply logging
- Make sense of and construct generic classes and methods
- Differentiate between the different types of Collection and Map; choose and use a collection/map appropriately
- Correctly override hashCode and equals, and compareTo/compare
- Code and use nested classes
- Code lambda expressions and method references
- Define and describe functional programming; make sense of Java's functional interfaces
- Transform collections using streams with lambdas and method references
- Produce robust multithreaded code using Executors, synchronisation techniques, concurrent and immutable collections, and parallel streams
- Exploit CompletableFuture to code asynchronously
- Define and describe reactive programming; code with Observables using RxJava
- Read from and write to files in a non-blocking manner
- Read from and write to a URL/socket; code a custom multithreaded/non-blocking server
- Declare custom annotations
- Perform introspection using Java's reflection API
Who will the Course Benefit?
The Java Advanced Developer course is aimed at existing Java developers seeking to take the next step beyond the fundamentals. It
may also be of value for those developers migrating to Java from another language, and who feel they need not do a course covering the
fundamentals.
Course Objectives
This course aims to provide the delegate with the skills needed to build complex and modern Java apps by exploiting techniques such as
concurrency, and functional and reactive programming.
Examinations
This Java Advanced Developer course helps to prepare for the following exam:
Oracle Certified Professional (OCP) Java SE8 Programmer II exam (1Z0-809)
This Java Advanced Developer course together with the Java Developer course helps to prepare for the following exam:
Oracle Certified Professional (OCP) Java SE 11 Developer exam (1Z0-819)
Attending these courses will help delegates gain many of the skills and product knowledge requirements as outlined in the exam objectives.
Studying these courses and their associated reference materials can form part of the preparation to achieve certification. Experience, practice,
self-study and aptitude are also key requirements for exam success.
Before taking any exam, ensure you have the recommended experience. The Oracle website lists all exam requirements and these are updated regularly.
Exams are not included as part of the course.
Requirements
Delegates attending this course should be Java developers with a good grasp of the fundamentals. This knowledge can be obtained by
attendance on the pre-requisite Java Developer
course. Developers familiar with another similar OO language may be suitable candidates but should carefully examine the objectives listed
in the prerequisite Java Developer course.
Pre-Requisite Courses
Follow-On Courses
- Unit Testing using JUnit
- Core Spring
Notes:
- Course technical content is subject to change without notice.
- Course content is structured as sessions, this does not strictly map to course timings. Concepts, content and practicals often span sessions.
Java Advanced Developer Training Course
Course Contents - DAY 1
Course Introduction
- Administration and Course Materials
- Course Structure and Agenda
- Delegate and Trainer Introductions
Session 1: BUILD TOOLS
- What is a build tool
- Maven
- Archetypes
- Directory structure
- The POM
- Dependencies
- RepositoriesLifecycles, phases, and goals
- Profiles
- Plugins
Session 2: LOGGING
- The Logger
- Logger hierarchy
- Log levels
- Formatters
- Filters
- Appenders
- Log4j2
- Logback
- SLF4J
Session 3: GENERICS
- Generic types
- Generic methods
- Bounded type parameters
- Generics and inheritance
- Type inference
- Wildcards
- Type erasure
- Restrictions
Session 4: COLLECTIONS
- The Collection interface hierarchy
- Iterable and Iterator
- Collection operations and traversal
- The Collections class
- Collection types (characteristics and implementations) incl. List, Set, and Queue
- The Map interface hierarchy
- Map operations and traversal
- Map types (characteristics and implementations)
Session 5: hashCode & equals AND compareTo/compare
- The Object class
- Overriding toString
- Equality and membership testing
- Hashing collections
- Overriding hashCode and equals
- The Comparable and Comparator interfaces
- Searching and sorting
- Overriding compareTo and compare
Java Advanced Developer Training Course
Course Contents - DAY 2
Session 6: NESTED CLASSES
- Static nested classes
- Inner classes
- Shadowing
- Local classes
- Anonymous classes
- Variable capture and effectively final
Session 7: LAMBDA EXPRESSIONS & METHOD REFERENCES
- What is a lambda expression
- Lambda use case: collection filter
- Lambda syntax
- What is a method reference
- Method reference use case: collection sort
- Method reference types x 4
Session 8: FUNCTIONAL PROGRAMMING
- What is functional programming
- Functions as first class objects
- Pure functions
- Higher order functions
- Immutable objects
- Java's functional interfaces
- Functional composition
Java Advanced Developer Training Course
Course Contents - DAY 3
Session 9: STREAMS
- What is a stream
- Obtaining/creating a stream
- Intermediate (non-terminal) operations
- Terminal operations
- The Optional class
- The Collectors class
- Stream concatenation
- Primitive streams
Session 10: CONCURRENCY
- Low-level threading incl. Runnable, sleep, join
- The Java memory model
- Threading problems incl. race conditions, deadlock, and starvation
- Immutable objects and ThreadLocal
- Thread synchronization incl. volatile, synchronized, atomic data types, and locks
- ExecutorService, thread pools, Callable, and Future
- The fork join framework
- Concurrent and immutable collections
- Parallel streams
Java Advanced Developer Training Course
Course Contents - DAY 4
Session 11: ASYNCHRONOUS & REACTIVE PROGRAMMING
- Asynchronous vs. concurrent programming
- CompletableFuture
- Executing tasks asynchronously
- Chaining tasks (synchronously or asynchronously)
- Specifying callbacks
- Combining futures
- Exception handling
- What is reactive programming?
- A note about the Flow API
- RxJavai>
- Creating and subscribing to an observable
- Transformaing, filtering, and combining observables
- Applying back pressure
- Other observable operators
- Singles
- Subjects
- Schedulers
Session 12: NON-BLOCKING IO
- What is non-blocking IO?
- Channels and buffers
- Scatter/gather
- Channel-to-channel transfer
- Selectors
- FileChannel
- Pipes
Java Advanced Developer Training Course
Course Contents - DAY 5
Session 13: NETWORKING
- Reading from and writing to a URL
- Reading from and writing to a socket
- Multithreaded ServerSocket
- Non-blocking ServerSocket
Session 14: ANNOTATIONS
- What is an annotation?
- Form and application
- Standard annotations
- Declaring an annotation
Session 15: REFLECTION
- What is reflection?
- Modules, classes, constructors, fields, and methods
- Private members
- Annotations
- Generics and arrays
- Dynamic proxies
- Dynamic class loading
This course, delivered using Java 11, is designed for existing Java developers whom are comfortable with the fundamentals and who want to
take the next step. We'll have you build a series of realistic apps that exploit the more complicated language elements and APIs including
generics, lambda expressions and methods references, streams, concurrency, asynchronous and reactive programming, non-blocking IO, and
reflection.
Exercises and examples are used throughout the course to give practical hands-on experience with the techniques covered.
Skills Gained
The delegate will learn and acquire skills as follows:
- Work with a build tool
- Configure and apply logging
- Make sense of and construct generic classes and methods
- Differentiate between the different types of Collection and Map; choose and use a collection/map appropriately
- Correctly override hashCode and equals, and compareTo/compare
- Code and use nested classes
- Code lambda expressions and method references
- Define and describe functional programming; make sense of Java's functional interfaces
- Transform collections using streams with lambdas and method references
- Produce robust multithreaded code using Executors, synchronisation techniques, concurrent and immutable collections, and parallel streams
- Exploit CompletableFuture to code asynchronously
- Define and describe reactive programming; code with Observables using RxJava
- Read from and write to files in a non-blocking manner
- Read from and write to a URL/socket; code a custom multithreaded/non-blocking server
- Declare custom annotations
- Perform introspection using Java's reflection API
Who will the Course Benefit?
The Java Advanced Developer course is aimed at existing Java developers seeking to take the next step beyond the fundamentals. It
may also be of value for those developers migrating to Java from another language, and who feel they need not do a course covering the
fundamentals.
Course Objectives
This course aims to provide the delegate with the skills needed to build complex and modern Java apps by exploiting techniques such as
concurrency, and functional and reactive programming.
Examinations
This Java Advanced Developer course helps to prepare for the following exam:
Oracle Certified Professional (OCP) Java SE8 Programmer II exam (1Z0-809)
This Java Advanced Developer course together with the Java Developer course helps to prepare for the following exam:
Oracle Certified Professional (OCP) Java SE 11 Developer exam (1Z0-819)
Attending these courses will help delegates gain many of the skills and product knowledge requirements as outlined in the exam objectives.
Studying these courses and their associated reference materials can form part of the preparation to achieve certification. Experience, practice,
self-study and aptitude are also key requirements for exam success.
Before taking any exam, ensure you have the recommended experience. The Oracle website lists all exam requirements and these are updated regularly.
Exams are not included as part of the course.
Requirements
Delegates attending this course should be Java developers with a good grasp of the fundamentals. This knowledge can be obtained by
attendance on the pre-requisite Java Developer
course. Developers familiar with another similar OO language may be suitable candidates but should carefully examine the objectives listed
in the prerequisite Java Developer course.
Pre-Requisite Courses
Follow-On Courses
- Unit Testing using JUnit
- Core Spring
Notes:
- Course technical content is subject to change without notice.
- Course content is structured as sessions, this does not strictly map to course timings. Concepts, content and practicals often span sessions.
Java Advanced Developer Training Course
Course Contents - DAY 1
Course Introduction
- Administration and Course Materials
- Course Structure and Agenda
- Delegate and Trainer Introductions
Session 1: BUILD TOOLS
- What is a build tool
- Maven
- Archetypes
- Directory structure
- The POM
- Dependencies
- RepositoriesLifecycles, phases, and goals
- Profiles
- Plugins
Session 2: LOGGING
- The Logger
- Logger hierarchy
- Log levels
- Formatters
- Filters
- Appenders
- Log4j2
- Logback
- SLF4J
Session 3: GENERICS
- Generic types
- Generic methods
- Bounded type parameters
- Generics and inheritance
- Type inference
- Wildcards
- Type erasure
- Restrictions
Session 4: COLLECTIONS
- The Collection interface hierarchy
- Iterable and Iterator
- Collection operations and traversal
- The Collections class
- Collection types (characteristics and implementations) incl. List, Set, and Queue
- The Map interface hierarchy
- Map operations and traversal
- Map types (characteristics and implementations)
Session 5: hashCode & equals AND compareTo/compare
- The Object class
- Overriding toString
- Equality and membership testing
- Hashing collections
- Overriding hashCode and equals
- The Comparable and Comparator interfaces
- Searching and sorting
- Overriding compareTo and compare
Java Advanced Developer Training Course
Course Contents - DAY 2
Session 6: NESTED CLASSES
- Static nested classes
- Inner classes
- Shadowing
- Local classes
- Anonymous classes
- Variable capture and effectively final
Session 7: LAMBDA EXPRESSIONS & METHOD REFERENCES
- What is a lambda expression
- Lambda use case: collection filter
- Lambda syntax
- What is a method reference
- Method reference use case: collection sort
- Method reference types x 4
Session 8: FUNCTIONAL PROGRAMMING
- What is functional programming
- Functions as first class objects
- Pure functions
- Higher order functions
- Immutable objects
- Java's functional interfaces
- Functional composition
Java Advanced Developer Training Course
Course Contents - DAY 3
Session 9: STREAMS
- What is a stream
- Obtaining/creating a stream
- Intermediate (non-terminal) operations
- Terminal operations
- The Optional class
- The Collectors class
- Stream concatenation
- Primitive streams
Session 10: CONCURRENCY
- Low-level threading incl. Runnable, sleep, join
- The Java memory model
- Threading problems incl. race conditions, deadlock, and starvation
- Immutable objects and ThreadLocal
- Thread synchronization incl. volatile, synchronized, atomic data types, and locks
- ExecutorService, thread pools, Callable, and Future
- The fork join framework
- Concurrent and immutable collections
- Parallel streams
Java Advanced Developer Training Course
Course Contents - DAY 4
Session 11: ASYNCHRONOUS & REACTIVE PROGRAMMING
- Asynchronous vs. concurrent programming
- CompletableFuture
- Executing tasks asynchronously
- Chaining tasks (synchronously or asynchronously)
- Specifying callbacks
- Combining futures
- Exception handling
- What is reactive programming?
- A note about the Flow API
- RxJavai>
- Creating and subscribing to an observable
- Transformaing, filtering, and combining observables
- Applying back pressure
- Other observable operators
- Singles
- Subjects
- Schedulers
Session 12: NON-BLOCKING IO
- What is non-blocking IO?
- Channels and buffers
- Scatter/gather
- Channel-to-channel transfer
- Selectors
- FileChannel
- Pipes
Java Advanced Developer Training Course
Course Contents - DAY 5
Session 13: NETWORKING
- Reading from and writing to a URL
- Reading from and writing to a socket
- Multithreaded ServerSocket
- Non-blocking ServerSocket
Session 14: ANNOTATIONS
- What is an annotation?
- Form and application
- Standard annotations
- Declaring an annotation
Session 15: REFLECTION
- What is reflection?
- Modules, classes, constructors, fields, and methods
- Private members
- Annotations
- Generics and arrays
- Dynamic proxies
- Dynamic class loading