Learning Outcome & Exercises: Final Project: Ticket Booking
Tổng kết chương Final Project: Ticket Booking: học xong mình phải làm được gì, và làm bài tập nào để chứng minh?
Đọc hiểu chưa đủ để đi phỏng vấn. Mỗi chương kết thúc bằng những việc làm được và chứng minh được: có code chạy, có test cho cả trường hợp lỗi, có log hoặc số đo. Bài tập nằm trong repo riêng java-backend-interview-labs, thư mục projects/ticket-booking.
1. Mục tiêu đầu ra
Học xong chương này, bạn tự làm được:
- Hoàn thành từng milestone M0–M12 với acceptance test và bằng chứng (log, benchmark).
- Giữ nhất quán schema (events, seats, bookings, payments, outbox, inbox…) và topic (booking.events, payment.events, flash.reservations).
- Trình bày project trong buổi phỏng vấn: kiến trúc, quyết định, sự cố đã xử lý.
2. Basic: M0–M2
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Dựng hạ tầng, chống bán trùng ghế, giữ chỗ có hết hạn.
Bài liên quan: M0 · Requirements, capacity, dựng hạ tầng, M1 · Chống bán trùng ghế, M2 · Hold + expiry
Hoàn thành khi:
- Test 1000 request cùng một ghế → đúng 1 booking
- Test hết hạn giữ chỗ
3. Intermediate: M3–M6
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Thanh toán an toàn, chống lỗi dây chuyền, saga + outbox + inbox, notification.
Bài liên quan: M3 · Thanh toán an toàn, M4 · Lỗi dây chuyền A→B→C, M5 · Saga + Outbox + Inbox, M6 · Notification
Hoàn thành khi:
- Failure test cho từng milestone
- Tận dụng code lab distributed/concurrency
4. Challenge: M7–M12
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Flash sale, benchmark, HA, game day và mock interview.
Bài liên quan: M7 · Flash sale, M9 · Benchmark mô hình chạy, M11 · High availability, M12 · Game day + mock interview
Hoàn thành khi:
- Báo cáo benchmark
- Biên bản game day
5. Tiêu chí hoàn thành chung
- Tự giải thích được bài toán và vì sao chọn giải pháp.
- Code chạy được bằng lệnh ghi trong README, không chứa secret.
- Có test tự động cho happy path và failure path.
- Có log hoặc số đo trong
evidence/chứng minh kết quả. - Có câu trả lời phỏng vấn ngắn bằng tiếng Việt và tiếng Anh.
- README của lab có link ngược về bài học tương ứng.
6. Lab và trạng thái
| Mức | Bài tập | Trạng thái | Test / bằng chứng |
|---|---|---|---|
| Basic | M0–M2 | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Intermediate | M3–M6 | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Challenge | M7–M12 | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
Repo lab: java-backend-interview-labs/projects/ticket-booking. TODO: link GitHub là placeholder cho tới khi repo được push.
evidence/; chỉ đánh dấu xong khi có bằng chứng.Phỏng vấn hỏi về Final Project: Ticket Booking, câu nào hay gặp nhất và trả lời sao?
Q1. Kể về project lớn nhất bạn đã làm.
🇻🇳 Tiếng Việt:
Em giới thiệu Ticket Booking theo trình tự: bài toán, kiến trúc, hai quyết định khó nhất (chống bán trùng ghế, thanh toán idempotent), một sự cố đã tái hiện và số liệu benchmark.
🇬🇧 English:
I present Ticket Booking in order: the problem, the architecture, the two hardest decisions (preventing double booking and idempotent payments), one failure I reproduced, and the benchmark numbers.
Cách nhớ ngắn gọn
- Mỗi bài tập = code + test + log.
- Luôn có ít nhất một failure case.
- Chưa có bằng chứng thì chưa xong.
Tự kiểm tra
Bài tập Basic (M0–M2) được coi là xong khi nào?
Test 1000 request cùng một ghế → đúng 1 booking; Test hết hạn giữ chỗ. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Intermediate (M3–M6) được coi là xong khi nào?
Failure test cho từng milestone; Tận dụng code lab distributed/concurrency. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Challenge (M7–M12) được coi là xong khi nào?
Báo cáo benchmark; Biên bản game day. Chưa có code chạy và bằng chứng thì chưa tính là xong.