The interviewer just said…
“Design a movie ticket booking system.”
You have a whiteboard (or a shared doc) and roughly 45 minutes. This is a Low-Level Design (LLD) prompt — not a full system-design exercise about CDN, Kafka, or multi-region failover. The interviewer wants to see how you clarify scope, model the domain, sketch APIs, and walk through the booking flow before anyone mentions Redis.
What you should do next
Pause. Do not open your IDE mentally and start typing class Movie. Do not lead with “I’ll use Redis for distributed locking” — that tells the interviewer you skipped requirements and jumped to infrastructure.
Your first move is conversational:
- Acknowledge the prompt.
- Ask 3–5 clarifying questions (next chapter covers these).
- State what you will deliver in the time box: entities, service APIs, core booking flow, and — if time allows — how you handle two users grabbing the same seat.
That sequence mirrors the classic LLD delivery framework: LLD delivery in a hurry.
What this course promises
By the end of these chapters you will have a working Java project in the hub/scripts/movie-ticket-sourced/ repo — not pseudocode on a slide. The domain matches what you’d whiteboard in an interview:
- Entities:
Movie,Theater,Screen,Show,ShowSeat,Ticket - Seat states:
AVAILABLE→RESERVE→BOOKED - Services:
MovieService,ShowService,BookingService,TicketService,PaymentService(stub) - Core flow: reserve → pay → book → ticket, with compensating actions on failure
Later modules in this track extend the same codebase with locking strategies (synchronized, show-level locks, Redis, optimistic locking). This interview walkthrough gets you to a runnable happy path first — exactly what a strong first 25 minutes of an LLD round looks like.
A 60-second preview of the end state
When you’re done implementing, Main.java seeds Delhi theaters and runs this flow:
// Search movies playing in a city
movieService.searchMovieForCity("Delhi");
// See open seats, book two, cancel
showService.getAvailableSeats("sh1");
String ticketId = bookingService.bookShow("sh1", "user1", List.of("A1", "A2"));
bookingService.cancelTicket(ticketId);
That’s the demo you’ll wire in later chapters. For now, internalize the problem shape: users search by city, pick a show, pick seats, pay, get a ticket, optionally cancel.