這場 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 實戰陪練。
通過即時語音提示和無痕連線輔助,幫你在關鍵時刻穩定輸出,讓你從“知道怎麼寫”變成“面試現場真能寫出來”。