这场 Uber 的 Virtual Onsite(Coding 环节)是我近期带过印象最深的一场之一。
45 分钟、三道题,题型从算法基础到 SQL & Pandas 再到 cohort 分析,全程几乎没有废话题。对于任何想冲 Uber DS / Scientist / DE 岗的人,这套题都值得仔细拆一遍。
第一题:Implement sqrt() without using any external library
题目要求:不用任何库函数,实现一个计算平方根的函数 sqrt(x)。
学员当时卡在这里,直接写了个从 0 到 x/2 的 grid search,虽然逻辑没问题,但复杂度 O(n),在大数输入下跑不动。面试官虽然没立刻打断,但脸上表情已经说明问题了。
正确思路应该是:
- 用 binary search 做二分查找。
- 每次取
mid = (left + right) / 2,判断mid * mid与 x 的关系,不断收缩区间直到误差足够小。 - 若允许小数,设精度 1e-6。
这题其实不在于实现平方根,而是看你会不会自己构造出算法思路。Uber 很喜欢出这种 “禁止用库函数” 的手写题,比如 log()、pow()、sqrt()、abs(),全靠你脑内算法逻辑。
第二题:找出上个月每个城市赚最多的前三名司机
表结构如下:
(driver_id, date, trip_id, payment, city_id, is_completed)
要求用 SQL 或 pandas 找出「上个月每个城市赚得最多的前三名司机」。
这题一看就有强烈的 Uber 味儿——很业务导向,但其实考的是你 数据分组 + 排名函数 的熟练度。
SQL 写法:
WITH monthly AS (
SELECT
city_id,
driver_id,
SUM(payment) AS total_payment
FROM trips
WHERE date >= DATE_TRUNC('month', CURRENT_DATE - interval '1 month')
AND date < DATE_TRUNC('month', CURRENT_DATE)
AND is_completed = TRUE
GROUP BY city_id, driver_id
)
SELECT *
FROM (
SELECT
city_id, driver_id, total_payment,
ROW_NUMBER() OVER(PARTITION BY city_id ORDER BY total_payment DESC) AS rn
FROM monthly
) t
WHERE rn <= 3;
面试官重点看:
- 你对窗口函数(
ROW_NUMBER,RANK,DENSE_RANK)是否熟练 - 是否能在 Pandas 中灵活复现 SQL 的逻辑
- 是否考虑过过滤条件(如
is_completed = TRUE)
第三题:每月 signup 的司机中,找出各城市赚得最多的前三名
新增一张表:
(driver_id, signup_date)
要求:
找出在每个月 sign-up 的司机中,在各城市里赚得最多的前三名司机。
这题是 第二题的进阶版,多了 “signup_month” 的 cohort 维度。Uber 很喜欢考这类 cohort 题,特别在 Scientist 岗面试里。
SQL 解法:
WITH cohort AS (
SELECT
s.driver_id,
DATE_TRUNC('month', s.signup_date) AS signup_month,
d.city_id,
SUM(d.payment) AS total_payment
FROM trips d
JOIN signup s
ON d.driver_id = s.driver_id
WHERE d.is_completed = TRUE
GROUP BY 1,2,3
),
ranked AS (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY signup_month, city_id ORDER BY total_payment DESC) AS rn
FROM cohort
)
SELECT *
FROM ranked
WHERE rn <= 3;
这一题考的核心是:
- 你能否理解 “每月注册司机” 的 cohort 逻辑
- 能否正确结合两张表(join + 分组 + 窗口函数)
- 有没有业务 sense,比如过滤掉未完成订单
很多候选人写完第二题后就卡死在这里了,其实只要先聚合再分组排序,逻辑是一样的。
Uber 面试的考点逻辑
这 45 分钟里,Uber 实际上在考三个能力:
- 算法思维 —— 不依赖库函数的数学实现
- SQL / Pandas 实战功底 —— 处理大规模交易数据的能力
- Cohort 分析意识 —— 结合注册、订单数据做 cohort performance
整体难度中上,但对熟练度要求极高。如果没有提前刷过类似题,45 分钟内很难全写完。
Programhelp 为你的成功保驾护航
这场 VO 我们全程远程助攻陪跑,尤其在第二、三题部分。
- 当学员一开始在 pandas 排序逻辑写混时,我们语音提醒了 groupby + rank 的用法,立刻拉回节奏;
- 第三题 cohort 部分,我们提示了 “要用 signup_month + city_id 双维度分区”,避免了 rank 错误。
最后成功三题全过。
Programhelp 的远程语音助攻服务,专注 Uber / DoorDash / Lyft / Amazon / Instacart 等数据和算法岗的 OA + VO 实战陪练。
通过实时语音提示和无痕联机辅助,帮你在关键时刻稳定输出,让你从“知道怎么写”变成“面试现场真能写出来”。