Free lessons
Java and Python Lessons
Every lesson in the Java & Python course, free to read. Each skill has a lesson that starts simple and gets technical, and a quick revise page. Practice and progress tracking need a free account.
Side by Side
The interview toolkit in both languages at once - which structure, which call, and what it costs in each.
Java
Java on its own: the essentials interviews test, multithreading and java.util.concurrent, and what Java 8, 17 and 21 - the long-term-support releases most codebases run - added.
Java Essentials
- Java: Numbers, Bits and Stringsint and long overflow, Integer.MIN_VALUE, / and % on negatives, >> and >>>, shift distances; String identity and immutability, StringBuilder, UTF-16…
- Java: Collections and RecursionHashMap inside and its boxing traps, comparators that subtract, TreeMap, PriorityQueue and ArrayDeque, iterating while modifying, LinkedHashMap as an LRU…
- Java: Objects, Equality, Immutabilityequals, hashCode and compareTo; records, final and unmodifiable views; overload resolution, static hiding, default methods, constructors that call…
- Java: Class Initialization and SingletonsWhen a class initializes and in what order, what a failed static initializer leaves behind, why that makes eager, holder and enum singletons thread-safe…
Java Multithreading
- Java: Threads and Their Lifecyclestart versus run, the six thread states and reading a thread dump, interruption and the flag a blocking call clears, uncaught exceptions, daemon threads…
- Java: synchronized, volatile and the Memory ModelWhat a monitor locks and what it doesn't, why reads need the lock too, volatile for flags and publishing, happens-before edges, final fields and a…
- Java: wait/notify, Deadlock and LivenessGuarded blocks with wait and notifyAll (and why notify hangs a producer-consumer), wait versus sleep, deadlock and lock ordering, livelock and starvation.
Java Concurrency (java.util.concurrent)
- Java: Executors, Futures and CompletableFutureHow a thread pool grows and what its queue hides, sizing and backpressure, shutting down, futures and timeouts, and CompletableFuture pipelines - and why…
- Java: Locks, Atomics and SynchronizersReentrantLock, Conditions and read-write locks, compare-and-set and why update functions must be pure, LongAdder for hot counters, and latches, barriers…
- Java: Concurrent Collections and Fork/JoinConcurrentHashMap and its atomic methods, CopyOnWriteArrayList, blocking queues for producer-consumer handoffs, fork/join work stealing and when a…
Java 8 Features
- Java 8: Lambdas, Functional Interfaces and Default MethodsWhat a lambda captures and what this means inside one, checked exceptions in lambdas, the four kinds of method reference, composing functions, and how…
- Java 8: Streams and CollectorsHow a stream pipeline runs - lazily, one element at a time, once - map and flatMap, primitive streams, reduce, and the collectors whose defaults surprise…
- Java 8: Optional, java.time and the RestOptional as a return type and its eager orElse, java.time's immutable types and what DST does to a day, thread-safe formatting, and the platform changes…
Java 17 Features (9 to 17)
- Java 17: var, Switch Expressions, Text Blocks and instanceof PatternsThe release train and LTS versions, then the syntax that arrived between Java 8 and 17: var, arrow labels and exhaustive switch expressions, text blocks…
- Java 17: Records and Sealed ClassesWhat a record generates and what it forbids, compact constructors that validate and normalize, sealed hierarchies and their final, sealed and non-sealed…
- Java 17: New APIs, Modules and the PlatformThe collection factories and their strict rules, views versus copies, the String, Stream and Optional additions, HttpClient - and the module system…
Java 21 Features (18 to 21)
- Java 21: Virtual Threads and Structured ConcurrencyHow virtual threads unmount from their carriers, why you create one per task and never pool them, pinning inside synchronized on Java 21, ThreadLocals at…
- Java 21: Pattern Matching for switch and Record PatternsType patterns, guards and case null in switch, dominance and exhaustiveness rules, record patterns that deconstruct and nest, and data-oriented…
- Java 21: Sequenced Collections and the Rest of 18-21One vocabulary for first, last and reversed across ordered collections - and its surprises - plus UTF-8 as the default charset, the end of finalization…
Python
Python on its own: the essentials interviews test, threads, processes and asyncio, and what each release from 3.8 to 3.14 added.
Python Essentials
- Python: Numbers, Bits and StringsInts that never overflow, // and % rounding down, bit tricks without a sign bit, float traps; str immutability and join, code points, split and int().
- Python: Collections and RecursionHow dict and set work inside, insertion order, hashability, defaultdict and Counter, heapq with tuples, deque versus list, sorting by a key, changing a…
- Python: Objects, Equality, Immutabilityeq and hash, dataclasses and frozen instances, is versus ==, names and mutable defaults, copies, ABCs and protocols, the MRO, properties and dunder dispatch.
- Python: Modules, Imports and SingletonsWhat runs at import and why a module is already a singleton, how from-imports bind names, circular imports, reload and module-level getattr, and…
Python Threads and Processes
- Python: The GIL and the threading ModuleWhat the GIL serializes and what still races, Lock, RLock, Event, Queue, Condition and Semaphore, and how threads report errors, exit and keep…
- Python: concurrent.futures and multiprocessingFutures, map and as_completed, and what happens to errors; processes for CPU-bound work - start methods, pickling, unshared state and batching with chunksize.
- Python: Free-Threaded Python and SubinterpretersThe build without a GIL - its status in 3.13 and 3.14, the races it exposes and the C extensions that re-enable the GIL - and subinterpreters with their…
Python asyncio
- Python: Coroutines, Tasks and the Event LoopWhat calling an async function really does, why sequential awaits don't overlap, gather and create_task, where coroutines switch on the event loop's one…
- Python: TaskGroup, Timeouts and CancellationWhy gather doesn't stop on failure, TaskGroup and the ExceptionGroups it raises, timeouts with asyncio.timeout and wait_for, how cancellation works and…
- Python: Blocking Calls, Locks and Queues in asyncioWhat blocks the event loop and how to move it off, finding slow steps with debug mode, races across an await, and asyncio's Lock, Semaphore and Queue.
Python 3.8 and 3.9
- Python 3.8-3.9: Walrus, Positional-Only Parameters and Dict MergingPython's yearly release cycle, then the syntax and string tools that 3.8 and 3.9 added - and the precedence, scope and character-set traps that come with…
- Python 3.8-3.9: Typing and the Standard LibraryTypedDict, Final, Literal and Protocol - and what the interpreter doesn't check - generic built-ins, functools.cache and cached_property, zoneinfo and…
Python 3.10 and 3.11
- Python 3.10: Structural Pattern Matchingmatch and case - capture versus value patterns, sequence, mapping and class patterns, guards - and the rest of 3.10: union types, zip(strict=True) and…
- Python 3.11: Exception Groups, Speed and tomllibWhere 3.11's speed came from, exception groups and except*, exception notes, tomllib, Self and StrEnum - and the enum formatting change that breaks upgrades.
Python 3.12 to 3.14
- Python 3.12-3.13: Type Parameters, f-strings and RemovalsInline generics and type aliases, the f-string grammar change that sets a minimum version, @override, batched, copy.replace and @deprecated - and the…
- Python 3.14: Template Strings, Deferred Annotations and Moret-strings and why they aren't strings, lazily evaluated annotations and annotationlib, except without parentheses, the warning for return in finally, zstd…
Start the Java & Python course free
No card needed. Upgrade to Pro when you want the full problem bank.
Free plan, no card · 7-day Pro trial · Cancel anytime