Detailed Course Outline
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
- Logbac
k 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
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
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
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
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