Course Overview
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.
Exams Whilst not strictly aligned to it, this course is a good choice for anyone intending to take Oracle's Java SE 11 Programmer II exam. Most of the headline exam topics are covered though additional preparation is likely to be required.
Who should attend
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.
Prerequisites
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.
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.
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