Free lessons
Every lesson, free to read
222 skills for software engineering interviews, each with a lesson that starts in plain English and gets technical, and a quick revise page. Create a free account to practice, get graded and track your mastery.
Side by Side
Java
- Java: Numbers, Bits and Strings
- Java: Collections and Recursion
- Java: Objects, Equality, Immutability
- Java: Class Initialization and Singletons
- Java: Threads and Their Lifecycle
- Java: synchronized, volatile and the Memory Model
- Java: wait/notify, Deadlock and Liveness
- Java: Executors, Futures and CompletableFuture
- Java: Locks, Atomics and Synchronizers
- Java: Concurrent Collections and Fork/Join
- Java 8: Lambdas, Functional Interfaces and Default Methods
- Java 8: Streams and Collectors
- Java 8: Optional, java.time and the Rest
- Java 17: var, Switch Expressions, Text Blocks and instanceof Patterns
- Java 17: Records and Sealed Classes
- Java 17: New APIs, Modules and the Platform
- Java 21: Virtual Threads and Structured Concurrency
- Java 21: Pattern Matching for switch and Record Patterns
- Java 21: Sequenced Collections and the Rest of 18-21
Python
- Python: Numbers, Bits and Strings
- Python: Collections and Recursion
- Python: Objects, Equality, Immutability
- Python: Modules, Imports and Singletons
- Python: The GIL and the threading Module
- Python: concurrent.futures and multiprocessing
- Python: Free-Threaded Python and Subinterpreters
- Python: Coroutines, Tasks and the Event Loop
- Python: TaskGroup, Timeouts and Cancellation
- Python: Blocking Calls, Locks and Queues in asyncio
- Python 3.8-3.9: Walrus, Positional-Only Parameters and Dict Merging
- Python 3.8-3.9: Typing and the Standard Library
- Python 3.10: Structural Pattern Matching
- Python 3.11: Exception Groups, Speed and tomllib
- Python 3.12-3.13: Type Parameters, f-strings and Removals
- Python 3.14: Template Strings, Deferred Annotations and More
Arrays
- Array Traversal Basics
- Two Pointers
- Sliding Window
- Prefix Sums
- Kadane's Algorithm
- In-Place Manipulation
- Array Hashing
- Sorting-Based Techniques
- Single-Pass State Tracking
- Lexicographic Rearrangement
- Cyclic Sequence Detection
- Counting via Merge Sort
- Binary Exponentiation
- Matrix In-Place Marking
- Pascal's Triangle Construction
- Matrix Rotation via Transpose
- Grid Tabulation DP
- Matrix Binary Search
Linked Lists
Trees
- Binary Tree Traversal
- Binary Tree DFS Traversal Orders
- Morris Threaded Traversal
- Single-Pass Triple Traversal
- Binary Tree Height/Balance Check
- Binary Tree LCA Search
- Binary Tree Boundary Traversal
- Binary Tree Mirror & Symmetry
- Binary Tree Reconstruction
- Flatten Binary Tree to Linked List
- Binary Tree Children Sum Property
- Binary Tree Serialize and Deserialize
- Binary Tree Level View
- Binary Tree Vertical Ordering
- Binary Tree Level Linking
- BST Search and Insert
- BST Construct From Preorder
- LCA in a BST
- BST Inorder Successor and Predecessor
- BST Floor and Ceil
- BST Kth Smallest and Largest
- Two Sum in a BST
- BST Iterator Design
- Largest BST Subtree
Graphs
Recursion & Backtracking
Dynamic Programming
Searching & Sorting
Bit Manipulation
Strings
Hashing & Sets
Greedy Algorithms
Heaps
Stacks and Queues
Tries
OOP Fundamentals
SOLID Principles
Design Patterns: Creational
Design Patterns: Structural
Design Patterns: Behavioral
UML & Class Design Basics
Data Structure Design
Design Projects: Classic Systems
Design Projects: Concurrent Systems
SQL Fundamentals
Analytical SQL
SQL for Backend Engineers
System Design Fundamentals
Building Blocks
Design Problems
Start learning free
No card needed. Every lesson and practice question is free.
Free plan, no card · 7-day Pro trial · Cancel anytime