Question Study

Uber 面试题专题

本地面经库有 84 条来源 URL 去重后的记录,其中 84 条有正文;目前整理出 55 道代表练习题,其中 55 道已完成独立深文。题目清单仍在逐帖核对和补充。

Reading Guide

如何使用这份题目清单

题目根据面经方向重新表述,其中可能包含站内攻略建议的训练题;它们不是公司的官方题库,也不保证下一场面试重复出现。

先分岗位

Uber 的不同岗位和团队可能考不同内容。先核对 JD 与面试邀请,再选对应题型。

合并同题变体

相同核心考点只保留一条,后续的附加约束放在原题里练,避免把同一道题当成多道题刷。

练习顺序

先口述输入、输出和边界,再写核心方案;最后解释复杂度、失败路径和面试官可能追加的约束。

Deduplicated Question Map

按考点去重的代表题

同一题的追加条件合并在一条里。题目清单用于确定训练范围;具体流程和准备优先级见公司攻略。

Phone Screen Coding · 02

给 O/E/X 机器人网格和 [left,top,bottom,right] 最近障碍距离,边界也算障碍,求全部匹配的机器人坐标

给 O/E/X 机器人网格和 [left,top,bottom,right] 最近障碍距离,边界也算障碍,求全部匹配的机器人坐标。

解题切入:机器人网格四向扫描各记录最近 X 或虚拟边界,再只对 O 单元比较 [left,top,bottom,right];边界距离计数须先声明。

阅读这道题的独立深文 →
OA Coding · 03

商品价格数组中,每件商品减去右侧第一个不高于它的商品价格

商品价格数组中,每件商品减去右侧第一个不高于它的商品价格;求逐件售价与最终总花费。

解题切入:右侧首个小于等于原价的折扣用单调递增下标栈,当前价格弹出所有不低于它的待处理商品;等价价格也触发折扣。

阅读这道题的独立深文 →
Mobile OA · 04

给每月股价与 k,统计所有连续 k 个月严格递增的窗口数

给每月股价与 k,统计所有连续 k 个月严格递增的窗口数;重叠窗口也分别计数。

解题切入:严格递增 k 月窗口用以当前月结尾的上升段长度计数;每当长度至少 k 就增加一个窗口,等价价格使段长重置。

阅读这道题的独立深文 →
Mobile OA · 05

给定 1..n 的排列,逐个 k 判断 1..k 是否恰好占据一个长度 k 的连续窗口

给定 1..n 的排列,逐个 k 判断 1..k 是否恰好占据一个长度 k 的连续窗口;原帖样例与文字定义有冲突。

解题切入:平衡排列逐个加入值 1..k 的位置,仅当最右与最左位置的跨度恰为 k 时才有连续窗口;原帖 1011 样例与文字定义矛盾。

阅读这道题的独立深文 →
Org Chart · 06

给 manager-employee 关系,查询某个经理全部跨层级下属 ID

给 manager-employee 关系,查询某个经理全部跨层级下属 ID;额外讨论重复边、坏数据成环与多次查询。

解题切入:组织关系建 manager→下属邻接表,从目标经理迭代 DFS/BFS 找跨层可达 ID;坏数据环路需 visited,真实组织树约束单独验证。

阅读这道题的独立深文 →
Phone Screen Coding · 07

实现过期 Counter 的 put、get_count、get_total_count

实现过期 Counter 的 put、get_count、get_total_count;同一元素多次放入分别计数,查询时也要清理过期事件。

解题切入:过期 Counter 用按插入时间排序的事件队列清理过期项,哈希表保存每个元素计数,total 单独维护;操作时间要非递减且过期端点先确认。

阅读这道题的独立深文 →
OA Coding · 08

非递减价格摊位中,从指定 1-based 起点往右最多各买一件

非递减价格摊位中,从指定 1-based 起点往右最多各买一件;对每个预算求最多能买的件数。

解题切入:Purchase Optimization 的有序后缀最便宜 t 件必是起点之后的前 t 件;用前缀和把成本化为区间差,再二分预算允许的最远端。

阅读这道题的独立深文 →
OA DP · 09

数组中从下标 0 跳 1 步或尾数为 3 的特殊步长,必须落在末格并最大化累计分数

数组中从下标 0 跳 1 步或尾数为 3 的特殊步长,必须落在末格并最大化累计分数;确认特殊步长是否还须是质数。

解题切入:跳跃最大得分按落脚点做 DP,前驱来自 1 步或个位为 3 的允许步长;不同面经对是否必须为质数不一致,33 等步长会区分答案。

阅读这道题的独立深文 →
VO Coding · 10

按天给出出发价与返程价,返程日必须严格晚于出发日

按天给出出发价与返程价,返程日必须严格晚于出发日;求最低往返价,追问至少间隔 3 天。

解题切入:往返机票先做返程价后缀最小值,再对出发日 i 查询 B[i+1..](隔 d 天用 B[i+d..]);原帖写 B[i..] 会误选同日返程。

阅读这道题的独立深文 →
Graduate OA · 11

正整数 n 每次可加或减任意 2 的非负整数幂,求归零所需最少操作数

正整数 n 每次可加或减任意 2 的非负整数幂,求归零所需最少操作数;允许中间值暂时变大。

解题切入:±2^i 整数归零等价最少非零带符号二进制位;偶数右移,奇数按 mod 4 选进位或退位,7=8−1 只需两步。

阅读这道题的独立深文 →
Graduate OA · 12

给整数数组和 k,求至少包含 k 个不同整数的最短连续子数组长度

给整数数组和 k,求至少包含 k 个不同整数的最短连续子数组长度;不存在返回 -1。

解题切入:最短至少 k 不同值窗口用左右指针和频次表;窗口已达标时先记长度再缩左侧,次数归零必须删键,目标区别于恰好 k 的子数组计数。

阅读这道题的独立深文 →
Tree OA · 13

树的字符在节点上

树的字符在节点上;对每个查询起点,统计到哪些祖先终点的路径字符可重新排列成回文。

解题切入:节点字符的祖先回文路径用根路径奇偶掩码;DFS 活跃表只存当前祖先链前缀,查询 prefix[u] 相同或相差一位的频数,退栈必须撤销。

阅读这道题的独立深文 →
Coding · 14

实现单向 Follow/Unfollow、创建快照和按版本查询关注关系

实现单向 Follow/Unfollow、创建快照和按版本查询关注关系;原帖示例还查询活动中的当前版本。

解题切入:关注快照按有向边保存版本化状态变化,同版本只保留最终写入;查询二分目标版本之前最后一次变化,原帖活动版本可查的语义要明说。

阅读这道题的独立深文 →
Phone / VO Coding · 15

二维矩阵不断加陆地,更新岛屿数量与当前最大岛面积

二维矩阵不断加陆地,更新岛屿数量与当前最大岛面积;若允许删陆地,应重新确认算法。

解题切入:动态岛屿若只加陆地可用 DSU 合并四邻根并维护岛数/最大面积;若 modify matrix 允许删陆地,DSU 不能拆分,必须改离线或重算策略。

阅读这道题的独立深文 →
VO / OOD · 16

会议预约请求逐个且可乱序到达,返回房间或会议 ID,支持取消

会议预约请求逐个且可乱序到达,返回房间或会议 ID,支持取消;讨论离线最少房间与并发双订。

解题切入:离线 Meeting Rooms II 按开始时间排序用结束时间堆;在线乱序分配须按房间查询时间区间前驱/后继,取消靠 meetingId 索引,并发检查与插入原子化。

阅读这道题的独立深文 →
System Design · 17

司机每秒百万位置更新,十秒刷新一次热力图

司机每秒百万位置更新,十秒刷新一次热力图;按最新司机状态计数并支持历史数据、过期与热点区域。

解题切入:司机热力图要按 driverId 维护最新格子/状态并在跨格时一减一加,不能把每秒 GPS 上报数当司机数;十秒快照、历史回放与热点分片分层设计。

阅读这道题的独立深文 →
System Design · 18

设计附近司机查询服务

设计附近司机查询服务:高频位置更新、地理格索引、跨格边界、位置过期、可接单状态和路网距离复排。

解题切入:附近司机服务按覆盖半径枚举所有相交地理格,合并后用最新位置/状态/TTL 最终核验;只查同格或固定 8 邻格可能漏司机,路网 ETA 需另做候选复排。

阅读这道题的独立深文 →
Data Platform Design · 19

设计 App 用户行为数据处理系统

设计 App 用户行为数据处理系统:从事件采集、清洗去重到 session/funnel 与下游模型可用特征。

解题切入:App 行为数据平台先定义事件 ID/时间/schema 与身份口径,再做去重、迟到处理、session/funnel 和可回放标准层;模型特征必须按预测时点 join,避免未来信息泄漏。

阅读这道题的独立深文 →
VO OOD · 20

设计停车场 park/unpark/checkcar 与 checkin/checkout

设计停车场 park/unpark/checkcar 与 checkin/checkout;汽车仅普通车位,摩托可用专位或普通位。

解题切入:停车场把车位兼容和分配策略分开;摩托优先专位、汽车只占普通位,checkin/checkout 对 spot、vehicle、ticket 三个索引必须原子一致。

阅读这道题的独立深文 →
Phone Screen Coding · 21

给底层数据库查询与高层 Metric 任务的依赖,做拓扑排程

给底层数据库查询与高层 Metric 任务的依赖,做拓扑排程;同表查询可合并,高层任务同级仍串行。

解题切入:Metric Scheduler 先用依赖入度释放 ready 任务,再按 table 合并语义兼容的底层查询;高层任务即使同拓扑层也按原帖串行约束执行。

阅读这道题的独立深文 →
VO Coding · 22

Folder System 中按文件夹 ID 输出根到节点的名字链

Folder System 中按文件夹 ID 输出根到节点的名字链;孤儿返回空串,原帖重复 root ID 需澄清。

解题切入:Folder System 先校验唯一 ID/单父与根可达性,再沿 parent 链逆序输出路径;原帖对 ID=0 使用两个根名称,必须标注歧义而不能静默覆盖。

阅读这道题的独立深文 →
Phone Screen Coding · 23

从 Root directory 前序输出目录与文件,每层按深度缩进

从 Root directory 前序输出目录与文件,每层按深度缩进;保持给定 children 顺序。

解题切入:Print Directory 用前序遍历配合 depth 生成缩进;显式栈需逆序压 children 才保持输入顺序,它与按单个 folder ID 查询根路径是不同输出。

阅读这道题的独立深文 →
Phone / VO Coding · 24

有序正负数组平方后排序

有序正负数组平方后排序;追问第 k 大平方或最小 k 个平方,分别利用两端/零点两侧结构。

解题切入:有序数组平方最大值在左右端,填完整结果用两端指针;最小 k 个从零点两侧合并,第 k 大与最小 k 个是不同追问。

阅读这道题的独立深文 →
MLE VO Coding · 25

n 个单位时长任务组成依赖 DAG,允许多个任务同时执行,求全部完成的最短时间

n 个单位时长任务组成依赖 DAG,允许多个任务同时执行,求全部完成的最短时间。

解题切入:单位时长任务 DAG 且无限并行时,最短完工时间是最长依赖链长度;Kahn 拓扑传播各任务最早完成时刻,并检查环。

阅读这道题的独立深文 →
MLE ML Coding · 26

给 N 人二维坐标,选择 K 个 Shuttle 上车点,使每人到最近点的 Manhattan 距离总和最小

给 N 人二维坐标,选择 K 个 Shuttle 上车点,使每人到最近点的 Manhattan 距离总和最小。

解题切入:Shuttle 上车点的 L1 选址在 K=1 时分别取 x/y 中位数;K>1 需同时决定分组与中心,枚举可求小规模精确解,交替分配/中位数更新只给局部解。

阅读这道题的独立深文 →
Phone Screen Coding · 27

多个服务互相依赖,合并一份或多份 dependency array 后判断整个有向图是否成环

多个服务互相依赖,合并一份或多份 dependency array 后判断整个有向图是否成环。

解题切入:服务依赖判环必须先合并全部 dependency array 并去重,再用 Kahn 入度删除或三色 DFS;各数组单独无环不代表合并后无环。

阅读这道题的独立深文 →
Phone Screen Coding · 28

实现客户收入 add/referral、showRevenue 与收入高于阈值的最小 K 客户查询

实现客户收入 add/referral、showRevenue 与收入高于阈值的最小 K 客户查询;原帖新客户收入示例有冲突。

解题切入:Referral Revenue 更新推荐人收入时同步删除/插入有序索引的旧/新键,TopSmallestK 按 (收入,ID) 从严格阈值后取 k 项;新客户收入示例自相矛盾。

阅读这道题的独立深文 →
Phone Screen Coding · 29

两座岛之间最少翻水格,且输出一条最短桥路径

两座岛之间最少翻水格,且输出一条最短桥路径;用多源 BFS 与水格前驱回溯。

解题切入:最短桥路径把第一座岛所有格作 BFS 的距离 0 源,水格首次发现时记 predecessor;遇第二岛后回溯,避免在队列中复制整条路径。

阅读这道题的独立深文 →
Senior System Design · 30

设计司机 Payout,确保应付金额准确、并发不超付、外部重试不会重复支付并能对账

设计司机 Payout,确保应付金额准确、并发不超付、外部重试不会重复支付并能对账。

解题切入:Payout 先以稳定业务键和原子余额预留防并发超付,再以 outbox/外部幂等键处理重试;UNKNOWN 查询最终状态,账本与支付流水持续对账。

阅读这道题的独立深文 →
New Grad Coding · 31

输入仅由 S/M/L 组成的衣服尺码字符串,按 S<M<L 排序

输入仅由 S/M/L 组成的衣服尺码字符串,按 S<M<L 排序;比较通用排序与固定值域计数。

解题切入:S/M/L 字符串排序先明确业务顺序,再用三个计数 O(n) 输出;未知尺码是否忽略属于作者主动扩展,正式题目没要求。

阅读这道题的独立深文 →
OA Coding · 32

整数数组中找出严格高于相邻元素的数并求和

整数数组中找出严格高于相邻元素的数并求和;首尾只比较唯一的邻居。

解题切入:局部峰值求和逐项检查所有现有邻居,要求严格大于;首尾只比一个邻居,负数峰值之和也可能为负。

阅读这道题的独立深文 →
Phone Screen Coding · 33

Alien Dictionary 连续两问

Alien Dictionary 连续两问:先按已知字母序判断词表是否排序,再从已排序词表推断合法字母序,处理非法前缀与依赖环。

解题切入:Alien Dictionary 已知 order 时逐对比较词的首个差异并检查前缀;未知 order 时把相邻词首差异建成字母依赖图,去重边后拓扑排序并检查环。

阅读这道题的独立深文 →
VO API Coding · 34

访问 user ID 持续到达,随时返回当前第一个仅出现一次的用户

访问 user ID 持续到达,随时返回当前第一个仅出现一次的用户;追问第 N 个,比较有序哈希表与序数索引。

解题切入:流式首个未重复访客用频次表加按首访顺序的有序集合;首次访问入队、第二次删除、之后不恢复。第 N 个若频查需序数树,链表遍历是 O(N)。

阅读这道题的独立深文 →
VO Coding · 35

两份按起点排序的时间区间列表求交

两份按起点排序的时间区间列表求交;输入放不进内存时流式归并各自重叠段,再用双指针输出交集。

解题切入:两份已排序区间表求交先各自流式归并内部重叠,再比较两段交集并推进右端更早的一方;输入输出都可迭代器化,避免超长列表整体驻内存。

阅读这道题的独立深文 →
VO System Design · 36

设计在线购物车与商品评分服务,支持最近一小时、一天及任意时间窗最高均分商品

设计在线购物车与商品评分服务,支持最近一小时、一天及任意时间窗最高均分商品;说明评分去重、时间桶及榜单延迟。

解题切入:购物车写入与商品评分事件分离;评分按 eventId 去重并以 eventTime 聚合 sum/count,固定窗口可维护增量榜单,任意历史窗口需范围索引或明确较慢/近似契约。

阅读这道题的独立深文 →
VO System Design · 37

设计在线编程竞赛系统,重点给出比赛、题目、报名、提交、判题结果与排行榜的 schema,并处理判题重试和重判版本

设计在线编程竞赛系统,重点给出比赛、题目、报名、提交、判题结果与排行榜的 schema,并处理判题重试和重判版本。

解题切入:在线编程比赛要把 contest/problem/registration/submission/judge_run/score_projection 分表,提交与判题用稳定唯一键去重;排行榜是可从原始判题事实重算的投影。

阅读这道题的独立深文 →
Senior Tech Screen · 38

设计二叉树序列化与反序列化,再扩展到 N 叉树

设计二叉树序列化与反序列化,再扩展到 N 叉树;自定 token 格式并验证空树、截断与孩子数量边界。

解题切入:二叉树前序编码要显式写空子指针以消歧;N 叉树为每个节点写孩子数,再按序解析恰好那么多棵子树,并拒绝截断或尾随 token。

阅读这道题的独立深文 →
Phone Screen Coding · 39

整数网格从左上角出发,按每个阈值统计只经过严格小于阈值的四邻可达格

整数网格从左上角出发,按每个阈值统计只经过严格小于阈值的四邻可达格;用离线排序和最小堆复用扩张。

解题切入:网格阈值查询先用逐查询 BFS 定义答案,再按阈值升序处理;最小堆保留未激活边界格,只弹出值严格小于当前阈值的格并累计可达数。

阅读这道题的独立深文 →
OA Coding · 40

N 个任务给两人各有 reward,第一人必须恰好做 K 个

N 个任务给两人各有 reward,第一人必须恰好做 K 个;先假设全给第二人,再取最大的 K 个奖励差。

解题切入:两人任务奖励最大化先把全给第二人作为基线,按 reward_1−reward_2 排序取前 K;第一人必须恰好做 K 项,负差值也可能必须选。

阅读这道题的独立深文 →
Tech Screen Coding · 41

二值矩阵每行都是先 0 后 1,求整张矩阵最左含 1 的列

二值矩阵每行都是先 0 后 1,求整张矩阵最左含 1 的列;比较逐行二分与 O(m+n) 单调指针。

解题切入:行内先 0 后 1 的二值矩阵找最左含 1 的列,可逐行二分后取最小,也可让候选列从 n 向左单调移动,总计 O(m+n)。

阅读这道题的独立深文 →
Scientist Experiment · 42

评估 ETA 对 session rider conversion 的影响

评估 ETA 对 session rider conversion 的影响:按 geo×time switchback 分桶,定义比值指标与聚类 95% CI,安排多档 treatment 和放量护栏。

解题切入:ETA 对 session 转化率的实验先分清展示值与真实等待干预;双边市场按 geo×time 切换,ratio metric 汇总分子分母并按随机化块给聚类 CI,放量看司机侧和等待护栏。

阅读这道题的独立深文 →
VO Tree Coding · 43

二叉树求两片叶之间最长严格升序或降序路径,按节点到叶的两个方向 DP 在最近公共祖先拼接

二叉树求两片叶之间最长严格升序或降序路径,按节点到叶的两个方向 DP 在最近公共祖先拼接。

解题切入:二叉树叶到叶严格单调路径用后序 DP 维护每节点向下到叶的 inc/dec;在分叉节点把一侧 inc 与另一侧 dec 相拼,减去公共祖先重复的一格。

阅读这道题的独立深文 →
VO System Design · 44

设计 Messenger 消息服务

设计 Messenger 消息服务:服务器持久接收后单勾、接收方阅读后双勾;处理重试去重、会话顺序、离线补拉与 Redis 的缓存边界。

解题切入:Messenger 原帖把一个勾定义为服务端已接受、两个勾定义为已读;消息持久提交后才 ACK,clientMessageId 去重、会话 seq 保序、readUpToSeq 单调更新,Redis 负责热点状态。

阅读这道题的独立深文 →
Senior MLE Design · 45

设计 Uber Eats 餐馆推荐

设计 Uber Eats 餐馆推荐:营业与配送硬过滤、多路召回、完成订单排序、冷启动、曝光偏差和双边市场评估。

解题切入:Uber Eats 餐馆推荐先做营业/配送可行性过滤,再多路召回与完成订单排序;日志须记录曝光与位置,特征只取决策时可见值,并按地区/新店拆分评估。

阅读这道题的独立深文 →
VO System Design · 46

设计 AI Chatbot 的发消息、聊天历史和推理服务

设计 AI Chatbot 的发消息、聊天历史和推理服务:稳定 turn ID、上下文预算、流式部分输出、失败取消与重试幂等。

解题切入:AI Chatbot 的用户消息、生成任务和助手回复要分别建状态;clientMessageId 去重,历史按 token 预算构造 prompt,流式 token 与最终持久回复有不同完成语义。

阅读这道题的独立深文 →
Staff Scope & Impact · 47

用真实项目说明自己的组织范围、技术决策、跨团队采纳与可核指标

用真实项目说明自己的组织范围、技术决策、跨团队采纳与可核指标;区分个人推动与团队共同成果。

解题切入:Staff Scope & Impact 项目故事要先说明组织范围和真实指标基线,再给根因、备选方案、本人决策、跨团队采纳及结果证据;不能以项目规模代替个人影响。

阅读这道题的独立深文 →
Staff Architecture · 48

拿真实项目架构图逐层解释模块协作、端到端延迟、模型版本、基础设施编排、降级和自己做过的取舍

拿真实项目架构图逐层解释模块协作、端到端延迟、模型版本、基础设施编排、降级和自己做过的取舍。

解题切入:Staff Architecture 深挖按请求链路和训练部署链路分别画图,逐组件备好 latency、模型/特征版本、infra orchestration、故障降级与真实决策证据。

阅读这道题的独立深文 →
VO Coding · 49

平面上求 K 个最近点,K 远小于 N 时维护有界大顶堆

平面上求 K 个最近点,K 远小于 N 时维护有界大顶堆;追问移动司机索引与真实路网距离精排。

解题切入:K 最近静态点用大小 K 的大顶堆保留最优集合;千万移动点用空间格粗筛,但路网距离排序只有几何下界超过已算第 K 名上界时才能安全剪枝。

阅读这道题的独立深文 →
SDE II System Design · 50

设计 Uber Eats 餐厅列表的数据流

设计 Uber Eats 餐厅列表的数据流:目录、营业/可接单事件、区域索引、缓存失效与下单前最终核验。

解题切入:Eats 餐厅列表把商家目录与营业、菜单、配送等快变事件汇成区域物化视图;查询再做实时可行性过滤,响应暴露新鲜度,下单时重检事实源。

阅读这道题的独立深文 →
VO System Design · 51

设计基于评论的司机排行榜

设计基于评论的司机排行榜:评分事实去重、修改/撤销修正、时间窗聚合、Top K 索引与小样本公平性。

解题切入:司机评论榜单应从可审计 review 事实流更新分子/分母和窗口索引;修改/撤销要反向修正,排名政策明确最小样本与并列规则,不能和位置热力图混同。

阅读这道题的独立深文 →
Frontend React Coding · 52

格子逐个点亮、全亮后按点击逆序自动熄灭

格子逐个点亮、全亮后按点击逆序自动熄灭;用 reducer 状态机和一次一个 timeout,处理旧回调与 effect 清理。

解题切入:React 格子灯把点击顺序、亮灯集与 clearing 阶段放在 reducer;effect 每次只安排一个 timeout 并清理,TICK 携 generation 防旧回调污染新一轮。

阅读这道题的独立深文 →
Phone Screen Graph · 53

按时间处理两名 Rider 共享乘车日志,求所有已知 Rider 最早全连通时间

按时间处理两名 Rider 共享乘车日志,求所有已知 Rider 最早全连通时间;主问题用并查集,block 删边规则需另问。

解题切入:Rider 同乘日志按时间加无向边,DSU 分量数首次降为 1 的时间就是最早全连通;完整 Rider 全集须给定,block 若删除边则 DSU 不能拆分。

阅读这道题的独立深文 →
OA / Standard Training · 54

只给LC696编号的补充OA

只给LC696编号的补充OA:标准训练版统计0/1数量相等且各自连续分组的子串,为什么相邻run贡献min?

解题切入:LC696标准训练中合法子串只跨一个字符边界,每个边界贡献相邻run长度的min;编号来源的截图变体仍待核。

阅读这道题的独立深文 →
ML System Design · 55

区域乘客加价策略

区域乘客加价策略:供需信号、约束与反馈延迟:模型预测和实际定价决策分开,避免价格反馈造成震荡。

解题切入:区域按可服务空间/时间窗聚合请求、在线可用司机、接单/取消及ETA,数据更新有延迟;相邻区域司机移动会让只看当前区域供需不完整。

阅读这道题的独立深文 →

Next Step

把题目放回面试流程

题目只是准备的一部分;按公司攻略核对轮次、岗位差异和常见失分点。

查看 Uber 面试全攻略 →
✓已复制微信号!