Add lld-parking-lot module: thread-safe parking lot with Strategy, Observer and CAS-based spot claiming, 10 tests incl. 64-thread race

This commit is contained in:
2026-10-22 08:01:55 +00:00
parent d4b3a63615
commit a5fbf45971
24 changed files with 670 additions and 1 deletions
+53
View File
@@ -0,0 +1,53 @@
# lld-parking-lot
A thread-safe parking lot in plain Java, built the way a low-level-design interview expects:
requirements, entities, patterns, concurrency, extensions. Companion to
[Low-Level Design Interview in Java: Parking Lot System, Step by Step](https://ankurm.com/low-level-design-interview-parking-lot-system-java/).
No framework, no runtime dependencies. JUnit 6 is used for tests only.
## Versions
| Component | Version | Verified against |
|---|---|---|
| JDK | 25.0.4.1+1 (Temurin LTS); also compiled and run with `--release 21` on OpenJDK 21 | `java -version`; the walkthrough output is byte-identical on both |
| JUnit Jupiter | 6.1.3 | `org.junit.jupiter:junit-jupiter` metadata on Maven Central |
| Maven | 3.9.11 | `mvn -version` |
## Run it
```bash
cd lld-parking-lot
./scripts/run.sh # compiles with javac, prints the walkthrough (no Maven needed)
mvn test # 10 tests, including two concurrency tests
./scripts/run-all.sh # regenerates everything in output/
```
## Layout
```
src/main/java/com/ankurm/interviewlab/parking/
VehicleType, SpotSize enums; SpotSize.canHold(VehicleType) is the only "does it fit" rule
Vehicle, Ticket, Receipt immutable records
ParkingSpot occupancy is one AtomicReference compare-and-set
ParkingFloor ordered spots
AllocationStrategy Strategy: NearestFirstStrategy, BestFitStrategy
PricingStrategy Strategy: HourlyPricing (grace period, partial hours round up)
AvailabilityListener Observer: the entrance display board
ParkingException LotFull, AlreadyParked, UnknownTicket
ParkingLot the aggregate: park(), exit(), freeSpots()
Demo prints output/01-walkthrough.txt
src/test/java/.../ParkingLotTest 10 tests; Clock is injected so nothing sleeps
output/ captured real output
```
## Captured output
| File | What it shows |
|---|---|
| `output/01-walkthrough.txt` | Enter, leave, fail three ways, and the two allocation strategies placing the same motorcycle differently |
| `output/02-test-results.txt` | One line per test, generated from the Surefire XML report |
## License
MIT, see the repository root.