Course Content
Introduction
Multi-Threading
- Basics of Threads
- hreading Background
- Threading Models
- Process vs thread
- Parallel vs concurrent
- Creating New
- Thread Groups
- States
- Synchronized
- Locks
- Priorities
- Timers
- Daemon Threads
- hreading Background
- The Secrets of Concurrency
- Interrupted Status
- What threads are doing
- Limiting number of Threads
- Visibility Problem
- Early Writes
- Corrupt Data
- Contention
- Java Memory Model
- Hardware impact
- Deadlocks
- Applied Threading Techniques
- Executors
- Count-down latch
- Semaphore
- Blocking queues
- Atomic Variable
- Volatile
- Exceptions
- Thread local variables
- Stopping Threads
- Shutdown hooks
- Threading Problems
- Race Conditions
- Starvation
- Fairness
- Deadlock
- Livelock
Introduction to Advanced Concurrency
- Creating and understanding Thread pools
- Why doesn't Double check lock work?
- Optimistic memory locks (CAS)
- True meaning of "final"
- True meaning of "volatile"
- True meaning of "synchronized"
Data Structures and Introduction to Concurrent Data Structures
- Basics
- Introduction
- Abstract Classes
- Algorithm Complexity
- Data Structures & GC
- Primitive Data Structures
- Null Elements
- Type Safetyl
- Iteration
- Iterators
- Efficiency
- RandomAccess
- Multithreading
- ConcurrentModification
- CopyOnWrite Collections
- New "for-each" iteration
- Iterable interface
- Sorting
- Collections & Arrays
- Sorting Performance
- Comparisons
- Maps
- Trees
- Hashing
- JDK 1.4+ rehashing
- Compound Keys
- Map of Maps
- ConcurrentHashMap
- Linked Maps
- Searching
- Generics
- Other Structures
- Multimap
- Queues
- Deques
- Heaps
- LRU Cache
Java Transaction Internals
- Introduction
- ACID
- Transaction Basics
- Atomic
- Consistent
- Isolated
- Durable
- Types of Concurrency
- Pessimistic
- Optimistic
- Resource Local Transaction
- Distributed Transaction
- XA
- 2PC
- Transaction Logs
- Heuristics
- Managed Transactions
- JEE components interaction with transaction
Java IO
- IO Internals
- Understand the class design for Java IO (First major reason why developers feel IO in java is complex)
- Demystify Charset handling (Second major reason why developers feel IO in java is complex)
- Use of Streams
- File Streams
- Data Streams
- Network Streams
- Object Streams
- Readers and Writers
- Object Streams and Serialization
- Object Serialization
- Simple Object Serialization
- Serializable Fields
- readObject() / writeObject()
- Controlling Serialization
- Externalizable
- Serial Object Versioning
- Compatible Class Changes
- Incompatible Class Changes
- Overriding Versioning
- Circular References
- Serialization Performance
- Serialization Pitfalls
- Resetting Streams
Design and Implementation Techniques
- Static Factories
- Singletons
- Duplicate Objects
- Eliminate Obsolete Object references
- Finalizers
- Internals of Clone
- Minimizing Accessibility
- Immutability
- Object Composition
- Designing for inheritance
- Serialization as a Security Threat
- Serialization with inheritance
- Serialization and immutability
- Enums
Java Memory
- Garbage Collection
- Overview
- Generational Spaces
- GC Tasks
- Heap Fragmentation
- GC Pros and Cons
- Algorithms
- Reachability
- History
- JVM 1.4, 5, 6
- Young Space
- Old Space
- Summary
- Measuring GC Activity
- Behavior Based Tuning
Class-loading
- Introduction
- Class Loading Basics
- Three Stages of classloading
- Loading
- Linking
- Initialization
- Isolation
- Delegation
- What happens when delegation is not followed
- Class Visibility Rules
- Changing the rules of default class visibility
- Rules for Unloading Classes
- Why do we need Class Loaders?
Advanced Class loading
- Protecting Package Boundaries
- Understanding Illegal Access Issues
- Understanding Class Cast issues
- Understanding Linkage Error Issues
- Peer Class Loading
- Common Class loading Issues
- Custom Class Loaders
- Diagnosing and resolving class loading problems
- Dynamic Reloading of Classes
Reflection
- Downcasting
- "instanceof" keyword
- "class" object
- Using reflection
- Calling private methods
- Dynamic proxy
Invoke Dynamic
- First Taste
- The problem
- JVM Bytecode
- The Trick
- Knowing Bytecode
- Better mousetrap
- Anonymous ClassLoader
- Parametric Explosion
- Method Handles
- Brief History
- Invoke Dynamic