预定类 reservation
May 8, 2024About 1 min
预定类 reservation
预定类面试题型特点分析
实战面试真题:
- 酒店预订系统设计 Hotel Reservation
- 航空机票预订系统设计 Airline/Flight/Bus/Train Ticket Reservation
- Restaurant reservation system
- Booking.com
频率:中
难度:高
解题思路
What
考虑预定的东西
例子:机票,机舱/座位号/...
Use case
Search
Select
Cancel
Search criteria -> Search() -> List<Result> -> Select() -> Receipt
有哪些需要和面试官统一的contract?
Search criteria -> Search() -> List<Result>
-> Select() -> Receipt
Restaurant reservation system
Search criteria
- 人数:无拼桌,每张桌子大小相同,不会有超过桌子大小的人数
- 日期:是否允许预定多日以后的? - 允许
- 时间:是否所有时间都允许预定?- 24/7
- Design: FindTableForReservation(Timeslot t)
- Timeslot contains Date and time
List<Result>
当选择的时间段可以/不行时,系统应该给出什么反馈?
Error
做法一:
Result == Timeslot
- Design:
List<Timeslot> findTableForReservation(Timeslot t)
- Possible Challenge: 跟面试官讨论如何获得这个List
- Design:
做法二:
可以预定:直接进入Confirm阶段
不能预定:Throw exception / Show message
Design: Pair<Table, Timeslot> findTableForReservation(Time slot) throws NoTableForReservationException
Design: void confirmReservation(Pair<Table, Timeslot> reservation)
为什么我们可以跳过
List<Result>
这个步骤?因为 Table 是一样的,用户不用选择也不会知道是订1号桌还是2号桌