← 返回博客列表 Uber OA 入门指南:四道仿真练习题 + 平台与节奏全解
Uber

Uber OA 入门指南:四道仿真练习题 + 平台与节奏全解

2026-06-02

如果你是第一次准备 Uber OA,最容易卡住的不是题难,而是不知道平台长什么样、节奏怎么分配、什么样的题目算"正常水平"。Uber 的 OA 整体是 LeetCode Medium 偏中等,但因为同一时间窗内会下发到 SDE / Data Engineer / Data Scientist 多条线,新手如果按错误的题型方向准备,就会浪费一大半时间

这篇是站内首篇 Uber OA 入门级指南:先把"平台 + 时长 + 评分逻辑"讲清楚,再给四道完全可练手的仿真题(不是站内已有的真题复盘),覆盖前缀和、二叉树、并查集、DP 四个核心方向。读完你应该能直接进入 90 分钟模考状态。

Uber OA 全景:平台、时长、题量

字段 详情
平台 HackerRank(绝大多数批次) + 个别批次走 CodeSignal
时长 90 分钟(SDE) / 75 分钟(DS, DE)
题量 2-3 道编程 + 偶尔 5-10 道 MCQ
编程语言 Python / Java / C++ / Go 主流
评分逻辑 分数 = AC 测试用例数 / 总用例数;时间复杂度过 hidden case

一条最重要的规则:HackerRank 的"运行"按钮只跑前几个 sample,通过 sample ≠ 通过提交——必须等"提交"后看到完整 hidden test 结果。

备考心态:什么样的水平算"够格"?

自评维度 入门 合格 优秀
LeetCode Medium AC 速度 30-40 分钟 20-25 分钟 12-15 分钟
数据结构熟练度 3 种以下 5-6 种 8 种以上
边界 case 主动思考 常忘 写完后补 写之前列
平台 IO 熟练度 抓瞎 能写 模板化

结论:合格水平就足够过 Uber OA。不需要把自己练到 LeetCode Hard 一血

仿真题 1:前缀和——Trips 区间统计

给定 N 天每天的订单数 trips[],给 Q 个查询 (l, r),返回区间 [l, r] 的订单总和。N, Q ≤ 1e5。

思路:经典前缀和。

def range_trip_sum(trips, queries):
    pref = [0] * (len(trips) + 1)
    for i, t in enumerate(trips):
        pref[i+1] = pref[i] + t
    return [pref[r+1] - pref[l] for l, r in queries]

时间复杂度:预处理 O(N),每次查询 O(1)。 练习目标:在 5 分钟内写出来。

仿真题 2:二叉树——城市路径重建

输入一个序列化字符串 "1,2,#,3,#,#,4,#,#"(前序 + null 标记 #),重建二叉树,返回根节点。

思路:用迭代器消费 token,递归构建。

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def deserialize(data: str):
    tokens = iter(data.split(','))
    def build():
        v = next(tokens)
        if v == '#':
            return None
        node = TreeNode(int(v))
        node.left = build()
        node.right = build()
        return node
    return build()

时间复杂度:O(N)。 练习目标:理解为何要用 iter 而不是索引。

仿真题 3:并查集——司机网络连通性

给 N 个司机 + M 条互相认识的关系。问最大的认识群体大小。

思路:union-find + 计数 root size。

class DSU:
    def __init__(self, n):
        self.p = list(range(n))
        self.sz = [1] * n
    def find(self, x):
        while self.p[x] != x:
            self.p[x] = self.p[self.p[x]]
            x = self.p[x]
        return x
    def union(self, a, b):
        ra, rb = self.find(a), self.find(b)
        if ra == rb:
            return
        if self.sz[ra] < self.sz[rb]:
            ra, rb = rb, ra
        self.p[rb] = ra
        self.sz[ra] += self.sz[rb]

def largest_group(n, edges):
    d = DSU(n)
    for a, b in edges:
        d.union(a, b)
    return max(d.sz[d.find(i)] for i in range(n))

时间复杂度:近似 O(α(N) · M)。 练习目标:在 8 分钟内写出 path compression + union by size。

仿真题 4:DP——Surge Pricing 最大化

给 N 个时段每个时段加价系数 mul[i],要求选出 K 个不相邻时段,最大化加价系数之和。

思路:经典"打家劫舍"扩展到 K 选不相邻。

def max_surge_choices(mul, K):
    n = len(mul)
    NEG = float("-inf")
    dp = [[NEG]*(K+1) for _ in range(n+1)]
    for i in range(n+1):
        dp[i][0] = 0
    for i in range(1, n+1):
        for k in range(1, K+1):
            dp[i][k] = dp[i-1][k]
            if i >= 2:
                dp[i][k] = max(dp[i][k], dp[i-2][k-1] + mul[i-1])
            else:
                dp[i][k] = max(dp[i][k], mul[i-1])
    return dp[n][K]

时间复杂度:O(N·K)。 练习目标:能在 12 分钟内推导转移方程并写出来。

90 分钟节奏推荐

时间段 任务
0-5 分钟 通读所有题面,按"我能多快做出"打分
5-30 分钟 先做最有把握的一题,争取 100% AC
30-65 分钟 第二题,先暴力解过 sample,再优化
65-85 分钟 第三题(如果有),写到能 AC 一半即停
85-90 分钟 检查所有提交、关闭浏览器前确认

OA 之后:还有哪些坎?

阶段 内容 时长
Recruiter Screen 行为 + 项目深挖 30 分钟
Tech Phone 算法 medium + 简单系统 45 分钟
Onsite 4-5 轮:算法 + 系统 + 行为 + Hiring Manager 1 个工作日

FAQ

Q1:Uber OA 通过率大致多少? 官方未公布,社区估算 30-40%。两道题接近全 AC 的同学几乎都能进 Tech Phone。

Q2:HackerRank 平台 IO 怎么写最稳? 建议用 sys.stdin.readline + sys.stdout.write,比 input() / print() 快 5-10 倍,但别忘了 strip()

Q3:如果第一题卡 30 分钟还没出 sample,怎么办? 立刻切到第二题。Uber OA 评分按 AC 用例数累加,先 AC 一半优于卡死一题。

Q4:DS / DE 路线和 SDE 一样难吗? DS / DE 的 OA 多了 SQL 与 Pandas 题,时长少 15 分钟。算法题数量减少,但SQL 经常是 hard window function

Q5:Uber OA 之后多久收 Tech Phone? 通常 5-10 个工作日。HM hold 等情况 会延到 3 周。


正在准备 Uber OA?

如果你刚收到 OA 链接但担心 90 分钟节奏拿不下,或者想要面试日真人 OA代面 / VO代面 全程陪跑,可以聊聊看完整的 OA辅助 / VO辅助 方案。


联系方式

需要面试真题与定制备战计划?立刻联系微信 Coding0201获取真题

Email: [email protected] Telegram: @OAVOProxy