LLD Dojo

Read-only companion

LLD Dojo

A fixed standard for low-level design, and 42 lessons that teach the things it measures. This copy is for reading — on a phone, on a machine with no JDK, with the app nowhere in sight.

Download the app2026.08.19-5 · zip The Standard →Five dimensions, twenty anchors, verbatim. Level 2 is the bar.

What is here, and what stays on the laptop

Two surfaces are published: the lessons below, and the Standard they are graded against. Both are the same text the app shows.

The two practice surfaces — the ledger of attempts and the readiness view — are not published, and not published behind a password either. They are a record of one person's practice, and the safe handling of that is for it never to leave the machine it was made on. A gate is a thing that can be misconfigured once and leak permanently; an absence cannot.

The faded stage is not here, on purpose

In the app, the third stage of a lesson hands you the worked design with a few lines replaced by // GAP: markers, then compiles your completion and runs a JUnit suite against it. That needs javac, and a static site has no compiler — so rather than show a control that cannot work, this page stops at the worked source.

Run the app for the drill: it is the download in the header, and it works offline once unpacked.

4 lessons are being written and are not published yet: D3, D4, E4, E5. A lesson appears here only once every artifact it promises exists, so a half-written one is absent rather than thin.

Java Bridge

12 lessons

Java mechanics for a C++ developer, read first. Each one carries a coming from C++ section that says what the language does differently, rather than teaching the concept from scratch.

J1 · File and class layout — no headers, and the filename is part of the code 4 Java files · 7 min J2 · Packages, imports, classpath — and compiling by hand 2 Java files · 8 min J3 · References, null and garbage collection — nothing owns anything, and one new leak 4 Java files · 8 min J4 · Construction — final fields, no initialiser lists, and static factories 6 Java files · 8 min J5 · Interfaces vs abstract classes — default methods, and where state is allowed to live 11 Java files · 8 min J6 · equals, hashCode, toString, compareTo — and the == trap 4 Java files · 8 min J7 · Collections, mapped from the STL 6 Java files · 8 min J8 · Generics vs templates — erasure, wildcards, and no List<int> 13 Java files · 8 min J9 · Exceptions and cleanup — checked vs unchecked, and try-with-resources instead of RAII 8 Java files · 8 min J10 · Enums as real classes — constants that carry state and behaviour 6 Java files · 8 min J11 · Modern Java a C++ dev has not met — sealed, record, switch patterns, and the rest 12 Java files · 8 min J12 · Concurrency primitives, mapped — synchronized, volatile, Atomic*, and happens-before 8 Java files · 8 min

Modelling primitives

7 lessons
A1 · Enum carrying state and behaviour — a name, a value, or a seam 8 Java files · 8 min · when not to · contrast pair A2 · Value object / record, immutable by construction 9 Java files · 8 min · when not to · contrast pair A3 · Sealed hierarchy for a closed set of variants — when to close the set 25 Java files · 8 min · when not to A4 · Entity vs value; identity and the equals/hashCode contract 5 Java files · 8 min · when not to A5 · Invariant placement — no invalid instance can exist 7 Java files · 8 min · when not to · contrast pair A6 · Domain exception hierarchy and error signalling — what is actually yours to design 10 Java files · 8 min · when not to A7 · Collection encapsulation — no mutable internals escape 7 Java files · 8 min · when not to · contrast pair

Seams

8 lessons
B1 · Policy interface — the Strategy seam, and when it is not worth its file 8 Java files · 8 min · when not to · contrast pair B2 · Factory — construction isolated from use 7 Java files · 8 min · when not to B3 · Builder for wide construction 21 Java files · 7 min · when not to B4 · Observer / listener — the side effect that does not know who is watching 7 Java files · 7 min · when not to B5 · Repository / storage abstraction — name the question, not the container 15 Java files · 7 min · when not to B6 · Explicit state machine with a transition table as data 12 Java files · 8 min · when not to · contrast pair B7 · Chain, decorator, middleware — composing steps that may stop each other 12 Java files · 8 min · when not to · contrast pair B8 · Template method or lifecycle hook — the skeleton that calls down into its subclasses 10 Java files · 7 min · when not to

Structural principles

5 lessons
C1 · Single responsibility — write the sentence, then look for the word "and" 13 Java files · 8 min · when not to · contrast pair C2 · Open/closed — the seam has to sit on the axis the change moves along 8 Java files · 8 min · when not to · contrast pair C3 · Dependency inversion and injection — the clock is a dependency 6 Java files · 8 min · when not to · contrast pair C4 · Composition over inheritance — wanting the code is not needing the type 14 Java files · 8 min · when not to · contrast pair C5 · Interface segregation and minimal public surface 8 Java files · 7 min · when not to

API shape

2 lessons
D1 · Method signature and naming design — what the call site can read 10 Java files · 8 min · when not to D2 · Error signalling choice — exception vs result vs Optional 7 Java files · 8 min · when not to

Concurrency

3 lessons
E1 · Identifying shared mutable state — the two-question census 5 Java files · 8 min · when not to · contrast pair E2 · Atomicity vs visibility — the invariant's shape picks volatile, an atomic, or a lock 5 Java files · 8 min · when not to · contrast pair E3 · Lock granularity and acquisition order — a deadlock needs two locks and two orders 3 Java files · 8 min · when not to · contrast pair

Process

5 lessons
F1 · Requirement extraction from an ambiguous prompt 1 Java file · 5 min F2 · Explicit scope negotiation — stating what you are not building 1 Java file · 5 min F3 · Clarifying-question quality 1 Java file · 5 min F4 · Decision defence and trade-off articulation 1 Java file · 5 min F5 · Clock management and finishing 1 Java file · 6 min