Case study · Core

Design a Parking Lot

The classic machine-coding round. Multi-level lot, vehicles of different sizes, ticket on entry, fee on exit. We go requirements → classes → patterns → flow.

Asked atAmazonGoogleUberFlipkart
step 1 / 10
1/2Model the domain
levels*spots*parked0..1pricing
ParkingLot
+ park(v): Ticket
+ unpark(t)
Level
- spots: List
+ findSpot(size)
«interface»
FeeStrategy
+ calc(hrs): money
ParkingSpot
- size: Size
- vehicle
+ assign(v)
«abstract»
Vehicle
- size: Size
Ticket
- spot
- inTime
Model the domain
1enum Size { MOTORCYCLE, CAR, LARGE }
2 
3class ParkingLot {
4 List<Level> levels;
5 FeeStrategy pricing;
6 Ticket park(Vehicle v) { ... }
7}
State
requirementpark / unpark + ticket + fee

Start from the requirements' nouns. ParkingLot is the entry point — it parks and unparks vehicles. (Often a Singleton, or injected.)