Files

2.3 KiB

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.

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

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.