Defining how the Java language achieves platform independence
Defining how the Java language continues to evolve
Creating simple Java classes
Using operators
Using if-else and switch statements
Creating arrays
Using encapsulation in Java class design
Making classes immutable
Overloading methods
Using access levels: private, protected, default, and public.
Using virtual method invocation
Using the instanceof operator to compare object types
Modeling business problems by using the static keyword
Designing general-purpose base classes by using abstract classes
Applying final keyword in Java
Defining a Java interface
Extending an interface
Anonymous inner classes
Creating a custom generic class
Creating a collection by using generics
Implementing a TreeSet
Implementing a Deque
Describing the Builder pattern
Describing the Stream interface
Calling an existing method using a method reference
Defining pipelines in terms of lambdas and collections
Listing the built-in interfaces included in java.util.function
Using primitive versions of base interfaces
Extracting data from an object using map
Describing the Optional class
Sorting a stream
Grouping and partition data using the Collectors class
Defining the purpose of Java exceptions
Using the try and throw statements
Autoclose resources with a try-with-resources statement
Creating custom exceptions
Creating and manage date-based events
Combining date and time into a single object
Managing changes resulting from daylight savings
Applying formatting to local and zoned dates and times
Describing the basics of input and output in Java
Using streams to read and write files
Using the Path interface to operate on file and directory paths
Using Stream API with NIO2
Describing operating system task scheduling
Using an ExecutorService to concurrently execute tasks
Using synchronized and concurrent atomic to manage atomicity
Using the java.util.concurrent collections
Parallelism
Work stealing
RecursiveTask
Reviewing the key characteristics of streams
List the key assumptions needed to use a parallel pipeline
Describing why reduction requires an associative function
Describing the process for decomposing and then merging work
Defining the layout of the JDBC API
Submitting queries and get results from the database
Performing CRUD operations using the JDBC API
Describing the advantages of localizing an application
Read and set the locale by using the Locale object
Calling a resource bundle from an application