Uber SWE OA 面经|Marketplace Simulation、ETA Graph 与 Debug 题型解析

作者:

编辑于:

July 3, 2026

阅读时长:

2 minute read
Uber OA 面经配图

Uber SWE OA 很适合考 marketplace 场景:司机、乘客、路线、订单、价格、状态流转都能自然变成算法题。准备时别只刷模板题,要把题目改成 ride request、driver location、fare event 这些对象来练。可以先看 Uber Software Engineer interview guide,再把数组、图和状态机放到业务题里复盘。

第一题:Driver Availability Window

Question description

给定一批司机状态事件,每条事件包含 driver_id,city_id,timestamp And event_type.event_type 只有 online,offline,on_trip,available 四种。要求统计指定城市在 [start, end] 时间窗口内,每分钟可接单司机数量的最大值和平均值。

Problem-solving ideas

先按 driver_id 分组并按时间排序,把每个司机的状态流转转成可接单区间。只有从 online Or available 开始,到 offline Or on_trip 结束的时间段进入统计。每段区间裁剪到查询窗口内,再用差分数组或扫描线做区间加一。窗口很大时不能真的开分钟数组,可以把端点事件放进列表排序,按相邻端点的长度加权计算平均值。重复事件直接覆盖当前状态,不生成新片段;结束早于开始的异常日志跳过并计数。Complexity:排序 O(n log n),扫描 O(n),空间 O(n)。

第二题:ETA Shortest Path

Question description

给定城市路网,节点是路口,边包含距离和实时拥堵系数。输入乘客起点、终点和一批候选司机位置,返回 ETA 最短的 K 个司机。边权等于 distance * traffic_factor,所有权重为正数。

Problem-solving ideas

从乘客起点反向跑 Dijkstra,到所有候选司机位置拿距离,再选 ETA 最短的 K 个。候选司机数量少时,也可以从每个司机位置跑到乘客起点,但反向一次 Dijkstra 更稳。Top K 用小顶堆或排序都能做,K 远小于候选数量时用大小为 K 的堆。Follow-up 会加入路网更新,这时把图存成邻接表,实时边权从 traffic map 读取;频繁查询可以按 geohash 先筛掉远距离司机,再跑精确路径。Complexity:Dijkstra 为 O((V + E) log V),选 K 为 O(d log K),d 是候选司机数。

第三题:Trip State Debug

Question description

给一段 trip 结算代码,代码会读取 requested,accepted,started,completed,cancelled 事件并计算最终收入。隐藏测试里出现重复事件、取消晚于完成、完成早于开始、以及同一个 trip 被两个司机接受。要求修复 bug,保持函数签名不变。

Problem-solving ideas

先定义合法状态机:requested -> accepted -> started -> completed,requested/accepted 阶段可以进入 cancelled,completed 后不再接受状态变化。实现时用 trip_id -> state,trip_id -> driver_id And trip_id -> fare 保存历史。重复事件返回当前状态,不重复结算;第二个司机接受同一 trip 时拒绝;completed 必须检查已经 started 且 fare 合法。Debug 题的关键是少改主流程,先补状态检查,再加测试覆盖乱序、重复、非法金额和冲突司机。Complexity:单次扫描 O(n),空间 O(t),t 是 trip 数。

Exam preparation advice

Uber OA 可以按三组题准备:日志窗口聚合、图上最短路或区域筛选、状态机 Debug。刷题时把普通数组题改成 driver/trip/fare 语境,练习在 40 分钟内写出可读代码和边界测试。图题要熟悉 Dijkstra、BFS、堆和邻接表;状态机题要先画状态,再写代码。

FAQ

Uber SWE OA 要重点练哪些数据结构?

哈希表、堆、排序、扫描线、图搜索、Dijkstra 和状态机都要练。题面会带业务对象,但核心还是数据结构选择和边界处理。

Debug 题怎么写测试?

至少覆盖重复事件、乱序事件、非法状态跳转、空输入、同一订单重复结算和金额异常。测试名写清场景,方便面试官看懂你的修复意图。

图题不会优化怎么办?

先写正确的 Dijkstra,再解释筛选候选司机、缓存热点区域、按地理格子缩小搜索范围。优化要建立在正确路径计算上。

关于 CSOFFERPREP

进 VO 之前,可以找 CSOFFERPREP 做实时面试助攻和备考辅导。CSOFFERPREP 深耕北美 IT 行业多年,已帮助万余名学生进入全球 500 强企业。导师来自一线大厂资深工程师和面试官,对 Uber 这类注重工程文化的公司的面试套路很熟悉。无论是 OA辅助、OA 辅导、VO 辅助、VO 模拟面试、VO 辅助还是系统设计辅助,都可以获得更有针对性的准备方案:CSOFFERPREP · 服务详情

参考来源