Uber VO Coding 面经|三题全拆解 + 实战避坑总结

576閱讀
沒有評論

这场 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 实际上在考三个能力:

  1. 算法思维 —— 不依赖库函数的数学实现
  2. SQL / Pandas 实战功底 —— 处理大规模交易数据的能力
  3. Cohort 分析意识 —— 结合注册、订单数据做 cohort performance

整体难度中上,但对熟练度要求极高。如果没有提前刷过类似题,45 分钟内很难全写完。

Programhelp 为你的成功保驾护航

这场 VO 我们全程远程助攻陪跑,尤其在第二、三题部分。

  • 当学员一开始在 pandas 排序逻辑写混时,我们语音提醒了 groupby + rank 的用法,立刻拉回节奏;
  • 第三题 cohort 部分,我们提示了 “要用 signup_month + city_id 双维度分区”,避免了 rank 错误。

最后成功三题全过。

Programhelp 的远程语音助攻服务,专注 Uber / DoorDash / Lyft / Amazon / Instacart 等数据和算法岗的 OA + VO 实战陪练。
通过实时语音提示和无痕联机辅助,帮你在关键时刻稳定输出,让你从“知道怎么写”变成“面试现场真能写出来”。

author avatar
jor jor
正文完
 0