An introduction to "raw" threads in Java, looking at the Thread and Runnable classes and issues such as thread safety. See also: Java and threading performance on Apple Silicon (M1) vs Intel i7.
Aspects of synchronization and concurrency in Java that go beyond basic thread programming, including how to balance thread-safety and performance requirements.
Java's Collections framework provides a range of key classes for organising data in memory. How to hash maps work? When should you pick a list versus a set versus a queue...? How do you ensure your code is thread-safe?
How to use exceptions to manage error flow in Java: how do you throw and catch exceptions? When do you use the different exception classes? Which exceptions can be thrown by the JVM?
Doing math in Java: an overview to using math primitives and utility classes. How do different maths operations perform in Java? How do you perform arbitrary precision arithmetic?
How to generate random numbers in Java. What are the limitations of java.lang.Random and when is it not suitable? When and how should you use ThreadLocalRandom?
How to calculate or query the memory usage of Java objects. How much memory do strings and other objects take up in Java?
An overview of the main encryption and authentication facilities offered by Java. How do you encrypt data and files in Java? Which algorithm should you use? Which key length should you pick?
The standard Java I/O libraries: how to read and write to files, sockets; how to improve Java I/O performance.
Tutorial on using regular expressions in Java, including basic expressions with the String.matches() method plus performance considerations.
How to access databases at a lower level in Java using the JDBC API.
Performance profiling in Java: using Java's built-in profiling facilities to find bottlenecks in your production code.
Java Servlets provide a framework for serving dynamic web pages supported by many cloud services.
How to use the standard Java compression libraries, including some more advanced techniques.
How to use Swing, Java's rich and extensible user interface library.
Section on how to immitate in Java certain features of other languages, notably C and C++.
What to do with those awkward OutOfMemoryErrors, StackOverflowErrors...