- Create and use final classes
- Create and use inner, nested and anonymous classes
- Create and use enumerations
- Create and use interfaces with default methods
- Create and use interfaces with private methods
- Define and write functional interfaces
- Create and use lambda expressions including statement lambdas, local-variable for lambda parameters
- Use interfaces from java.util.function package
- Use core functional interfaces including Predicate, Consumer, Function and Supplier Use primitive and binary variations of base interfaces of java.util.function package
- Migrate the application developed using a Java version prior to SE 9 to SE 11 including top-down and bottom-up migration, splitting a Java SE 8 application into modules for migration
- Run a modulaized application on classpath and on modulepath
- Use jdeps to determine dependencies and identify way to address the cyclic dependencies
- Create worker threads using Runnable, Callable and use an ExecutorService to concurrently execute tasks
- Use java.util.concurrent collections and classes including CyclicBarrier and CopyOnWriteArrayList
- Write thread-safe code
- Identify threading problems such as deadlocks and livelocks
- Read data from and write console and file data using I/O Streams
- Use I/O Streams to read and write files
- Read and write objects by using serialization
- Use Path interface to operate on file and directory paths
- Use Files class to check, delete, copy or move a file or directory
- Use Stream API with Files
- Database Applications with JDBC
- Connect to databases using JDBC URLs and DriverManager
- Use PreparedStatement to perform CRUD operations
- Use PreparedStatement and CallableStatement APIs to perform database operations
- Describe the purpose of annotations and typical usage patterns
- Apply annotations to classes and methods
- Describe commonly used annotations in the JDK
- Declare custom annotations
- Use try-with-resources construct
- Create and use custom exception classes
- Test invariants by using assertions
- Use wrapper classes, auto-boxing and auto-unboxing
- Create and use generic classes, methods with diamond notation and wildcards
- Describe Collections Framework and use key collection interfaces
- Use Comparator and Comparable interfaces
- Create and use convenience methods for collections
- Describe the Stream interface and pipelines
- Use lambda expressions and method references
- Extract stream data using map, peek and flatMap methods
- Search stream data using search findFirst, findAny, anyMatch, allMatch and noneMatch methods
- Use Optional class
- Perform calculations using count, max, min, average and sum stream operations
- Sort a collection using lambda expressions
- Use Collectors with streams, including the groupingBy and partitioningBy operation
- Describe the components of Services including directives
- Design a service type, load services using ServiceLoader, check for dependencies of the services including consumer and provider modules
- Develop the code that use parallel streams
- Implement decomposition and reduction with streams
- Secure Coding in Java SE Application
- Prevent Denial of Service in Java applications
- Secure confidential information in Java application
- Implement Data integrity guidelines- injections and inclusion and input validation
- Prevent external attack of the code by limiting Accessibility and Extensibility, properly handling input validation, and mutablity
- Secure constructing sensitive objects
- Secure Serialization and Deserialization
- Use Locale class
- Use resource bundles
- Format messages, dates, and numbers with Java