SDE II · VO System Design / Entity Model

Microsoft 车库管理实体建模:不同车型与车位兼容规则

只设计实体与关系,分开车型、车位能力、停放会话和预留,避免用继承树硬编码所有组合。

题目重点:只设计实体与关系,分开车型、车位能力、停放会话和预留,避免用继承树硬编码所有组合。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练实体含 Garage、Floor、Slot、Vehicle、ParkingSession;Reservation/Payment 仅作为可能扩展,不宣称原题要求。
  • Slot 有尺寸/高度/充电能力/无障碍标记等能力,Vehicle 有尺寸与需求;车型标签只作展示或默认规则,不是唯一兼容依据。
  • 同一时间一个 Slot 最多一条 active ParkingSession,一辆车也最多一个 active session;空位是从会话和维护状态派生的事实。

解题路线

  1. 先画关系:Garage 1:N Floor、Floor 1:N Slot、Vehicle 1:N 历史 ParkingSession,Session 指向恰好一个 Slot 与 Vehicle。
  2. 给 Slot 建稳定 slotId、能力集合、状态版本;Vehicle 记录可比较的尺寸和需求。compatibility(vehicle,slot,policyVersion) 独立于实体类层级,便于加入 EV、摩托、货车或可变政策。
  3. ParkingSession 保存 start/end、分配规则版本和生命周期;入口时用唯一约束或条件写保证 slotId 和 vehicleId 没有并发 active 会话。
  4. 若要预留,Reservation 与实际占用分开建模:预留过期不能自动结束真实 ParkingSession,且必须定义晚到、爽约及到店确认规则。
  5. 面试只要模型时用几个实例和不变量解释即可;完整支付、传感器、寻位算法应先确认是否在范围内。

手动走一遍

紧凑车可能兼容普通与大型车位,电动车若需要充电则只兼容有充电能力的车位;大型车不能仅因名为 Standard 的车位空着就停车。车辆 V 进入车位 S 时创建 active Session,第二个入口并发分配 S 应被唯一约束拒绝。

规模与取舍

实体数量随车库车位数 S、车辆历史 V 和会话数 H 增长,存储 O(S+V+H)。兼容判断仅比较固定数量能力时 O(1);查找可用车位的代价取决于索引与分配策略,题目不要求实现。

易错点与追问

容易失分的边界

  • 把车位当前空闲布尔值作为唯一真相,却没有占用会话和并发约束。
  • 每增加一种车型和车位就新增一组类,兼容组合爆炸。
  • 忽略同车/同车位同一时刻只允许一个 active 会话。
  • 把支付、动态定价和车牌识别写成原题明确要求。

继续深挖

  • 一辆紧凑车能否占大型车位,政策优先级如何定义?
  • 充电桩故障时已有预留和入场车辆如何处理?
  • 跨楼层分配时如何在并发入口保持车位唯一?
  • 维护中车位和预约车位如何区别于已占用?
✓已复制微信号!