Uber VO Coding 面經|三題全拆解 + 實戰避坑總結

這場 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
END
 0