A custom accelerated training course was developed and conducted for people with sufficient programming experience on other platforms and languages, who need a complete and in-depth introduction into Java SE 8 technology. The main topics are:
- Java Platform Overview
- Defining how the Java language achieves platform independence
- Defining how the Java language continues to evolve
- Differentiating between the Java ME, Java SE, and Java EE Platforms
- Evaluating Java libraries, middle-ware, and database options
- Java Syntax and Class Review
- Using operators
- Creating primitive variables
- Creating simple Java classes
- Using if-else and switch statements
- Creating and manipulate strings
- Iterating with loops: while, do-while, for, enhanced for
- Creating arrays
- Using Java fields, constructors, and methods
- Encapsulation and Subclassing
- Creating and use Java subclasses
- Using encapsulation in Java class design
- Overloading methods
- Making classes immutable
- Modeling business problems using Java classes
- Overriding Methods, Polymorphism, and Static Classes
- Using the instanceof operator to compare object types
- Using varargs to specify variable arguments
- Using access levels: private, protected, default, and public.
- Overriding methods
- Implementing the singleton and factory design patterns
- Modeling business problems by using the static keyword
- Using upward and downward casts
- Using virtual method invocation
- Abstract and Nested classes
- Constructing abstract Java classes and subclasses
- Designing general-purpose base classes by using abstract classes
- Applying final keyword in Java
- Distinguish between top-level and nested classes
- Interfaces and Lambda expressions
- Defaulting methods
- Defining a Java interface
- Anonymous inner classes
- Defining a Lambda Expression
- Extending an interface
- Choosing between interface inheritance and class inheritance
- Collections and Generics
- Creating a collection by using generics
- Implementing an ArrayList
- Implementing a HashMap
- Implementing a Deque
- Using the type inference diamond to create an object
- Creating a custom generic class
- Implementing a TreeSet
- Ordering collections
- Collections Streams and Filters
- Describing the Stream interface
- Calling an existing method using a method reference
- Chaining multiple methods together
- Filtering a collection using lambda expressions
- Defining pipelines in terms of lambdas and collections
- Iterating through a collection using lambda syntax
- Describing the Builder pattern
- Lambda Build-in Functional Interfaces
- Using primitive versions of base interfaces
- Using binary versions of base interfaces
- Listing the built-in interfaces included in java.util.function
- Core interfaces – Predicate, Consumer, Function, Supplier
- Lambda Operations
- Extracting data from an object using map
- Describing the Optional class
- Sorting a stream
- Describing lazy processing
- Describing the types of stream operations
- Grouping and partition data using the Collectors class
- Saving results to a collection using the collect method
- Expressions and Assertions
- Recognizing common exception classes and categories
- Autoclose resources with a try-with-resources statement
- Creating custom exceptions
- Using the catch, multi-catch, and finally clauses
- Defining the purpose of Java exceptions
- Using the try and throw statements
- Testing invariants by using assertions
- Java Date-Time API
- Working with dates and times across time zones
- Combining date and time into a single object
- Creating and manage date-based events
- Applying formatting to local and zoned dates and times
- Creating and manage time-based events
- Managing changes resulting from daylight savings
- Defining and create timestamps, periods and durations
- I/O Fundamentals
- Writing and read objects using serialization
- Using streams to read and write files
- Read and write data from the console
- Describing the basics of input and output in Java
- File I/O (NIO.2)
- Using the Files class to check, delete, copy, or move a file or directory
- Using the Path interface to operate on file and directory paths
- Using Stream API with NIO2
- Concurrency
- Creating worker threads using Runnable and Callable
- Describing operating system task scheduling
- Using an ExecutorService to concurrently execute tasks
- Using the java.util.concurrent collections
- Identifying potential threading problems
- Using monitor locks to control the order of thread execution
- Using synchronized and concurrent atomic to manage atomicity
- The Fork-Join Frameworks
- The need for Fork-Join
- RecursiveTask
- Work stealing
- Parallelism
- Parallel Streams
- Listing the key performance considerations for parallel streams
- Reviewing the key characteristics of streams
- Defining reduction
- List the key assumptions needed to use a parallel pipeline
- Calculating a value using reduce
- Describing the process for decomposing and then merging work
- Describing how to make a stream pipeline execute in parallel
- Describing why reduction requires an associative function
- Database Applications with JPA using Hibernate
- Connecting to a database by using a JDBC driver
- Specifying persistence unit information externally
- Defining mapped superclass, entity, mapping, inheritance strategy, fetching
- Performing CRUD operations using entity manager
- Submitting queries and get results from the database