题目重点:只设计实体与关系,分开车型、车位能力、停放会话和预留,避免用继承树硬编码所有组合。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练实体含 Garage、Floor、Slot、Vehicle、ParkingSession;Reservation/Payment 仅作为可能扩展,不宣称原题要求。
- Slot 有尺寸/高度/充电能力/无障碍标记等能力,Vehicle 有尺寸与需求;车型标签只作展示或默认规则,不是唯一兼容依据。
- 同一时间一个 Slot 最多一条 active ParkingSession,一辆车也最多一个 active session;空位是从会话和维护状态派生的事实。
解题路线
- 先画关系:Garage 1:N Floor、Floor 1:N Slot、Vehicle 1:N 历史 ParkingSession,Session 指向恰好一个 Slot 与 Vehicle。
- 给 Slot 建稳定 slotId、能力集合、状态版本;Vehicle 记录可比较的尺寸和需求。compatibility(vehicle,slot,policyVersion) 独立于实体类层级,便于加入 EV、摩托、货车或可变政策。
- ParkingSession 保存 start/end、分配规则版本和生命周期;入口时用唯一约束或条件写保证 slotId 和 vehicleId 没有并发 active 会话。
- 若要预留,Reservation 与实际占用分开建模:预留过期不能自动结束真实 ParkingSession,且必须定义晚到、爽约及到店确认规则。
- 面试只要模型时用几个实例和不变量解释即可;完整支付、传感器、寻位算法应先确认是否在范围内。
手动走一遍
紧凑车可能兼容普通与大型车位,电动车若需要充电则只兼容有充电能力的车位;大型车不能仅因名为 Standard 的车位空着就停车。车辆 V 进入车位 S 时创建 active Session,第二个入口并发分配 S 应被唯一约束拒绝。
规模与取舍
实体数量随车库车位数 S、车辆历史 V 和会话数 H 增长,存储 O(S+V+H)。兼容判断仅比较固定数量能力时 O(1);查找可用车位的代价取决于索引与分配策略,题目不要求实现。
易错点与追问
容易失分的边界
- 把车位当前空闲布尔值作为唯一真相,却没有占用会话和并发约束。
- 每增加一种车型和车位就新增一组类,兼容组合爆炸。
- 忽略同车/同车位同一时刻只允许一个 active 会话。
- 把支付、动态定价和车牌识别写成原题明确要求。
继续深挖
- 一辆紧凑车能否占大型车位,政策优先级如何定义?
- 充电桩故障时已有预留和入场车辆如何处理?
- 跨楼层分配时如何在并发入口保持车位唯一?
- 维护中车位和预约车位如何区别于已占用?
