一亩三分地"DoorDash"板块在最近一个招聘季基本是周更几十帖的节奏。SDE / Data Scientist / Data Engineer / Marketplace Strategy 各种岗位都在出新面经,但是地里的帖子有几个一致的问题:
- 信息片段化——每帖只贴 1–2 道题,看不出整体流程
- 真假混杂——同一道题不同人写出截然不同的解法,难判断标准答案
- 临场表达细节缺失——拿到题之后到底每分钟该说什么,没有人讲
这篇把过去这段时间一亩三分地(1point3acres)板块上真实落到 offer的两条主流路径——SDE Backend 与 Data Scientist——按时间顺序复盘一遍,每个阶段都给你地里贴到的真题、对应代码、临场该说的话,以及 VO 辅助 / OA 辅助具体在哪一步介入。
一、DoorDash 这家公司在地里到底什么定位?
先把背景说清楚,避免你拿不准期望值:
- 薪资带宽:地里 NG SDE 总包多在 200–230k 区间,Senior 在 360–450k。比 Meta / Google 略低,但比 Uber 高。
- 题难度:地里普遍认为 DoorDash 题难度 ≈ Uber,比 Instacart 高,比 Stripe 低。
- 业务感:100% 题都和外卖业务挂钩,"closest restaurant"、"最近 dasher"、"配送 ETA"、"recommendation" 是关键词。
- Sponsor:地里观察 H1B sponsor 给得正常,部分组对 GC / 公民有偏好。
如果你刚开始关注 DoorDash,建议先看一遍我们 DoorDash 5 条 pathway 指南把入职路径摸清楚,再来看这篇的实战复盘。
二、SDE Backend 路线:从地里热门贴还原完整流程
阶段 1:Recruiter Call(地里高频反馈)
地里 SDE 候选人对 recruiter call 的最一致评价是:问得不深,但问得很多。一通典型电话覆盖:
- 你 vs DoorDash tech stack 的匹配(Kotlin / Go / Python / gRPC / Kafka)
- 是否有 Marketplace / on-demand 类项目经验
- Visa 状态、湾区 / NYC / Seattle 优先级
- "Why DoorDash"——必须能讲出业务感(不要只说"喜欢点外卖")
VO 辅助介入点:用 30 分钟跑一次 recruiter call sim,重点是把"为什么 DoorDash"答到 marketplace dynamics 这一层。
阶段 2:HackerRank OA(地里最常贴)
OA 形式:HackerRank,90 分钟,2 题。地里近期最高频的两道:
真题一:findNearbyRestaurants
实现
findNearbyRestaurants(userLocation, allRestaurants, maxDistance, minRating),先按距离过滤再按评分过滤,最后按距离升序、评分降序排序后返回。
这道题地里贴出来的版本至少有 4 个 follow-up 变种:
- 加上 categories 过滤(要不要支持 OR / AND 语义)
- 改成 streaming 输入(不能一次拿全部 restaurants)
- 距离从欧几里得改成 haversine(球面距离)
- 海量数据下要不要用 R-tree / 空间索引
参考实现(默认欧几里得 + 离线全量):
from math import sqrt
def find_nearby_restaurants(user_loc, restaurants, max_distance, min_rating):
ux, uy = user_loc
def dist(r):
dx = r["x"] - ux
dy = r["y"] - uy
return sqrt(dx * dx + dy * dy)
filtered = []
for r in restaurants:
d = dist(r)
if d <= max_distance and r["rating"] >= min_rating:
filtered.append((d, -r["rating"], r["name"]))
filtered.sort()
return [name for _, _, name in filtered]
时间复杂度:O(n log n) 空间:O(n)
地里典型踩雷:不问 tie-breaking 直接开写,写完发现"评分降序"和默认升序冲突;以及距离用 manhattan 写而面试官要的是 euclidean。
真题二:Closest Straight City
给一组城市坐标,每个 query 找到与给定城市同行或同列且欧几里得距离最近的城市;同距离取字典序最小。
这道题在我们 DoorDash 一亩三分地面经汇总文里有完整代码。OA 阶段考察重点不是算法本身,而是预处理 vs 单 query 的取舍——能不能想到按行/列分桶 + bisect。
OA 辅助介入点:OA 开始前把这两道题的所有 follow-up 变种过一遍;OA 期间通过共享屏幕做实时辅助(输入对齐 / 复杂度盘点 / edge case 提醒)。
阶段 3:Phone Screen(45 min, 1 题)
地里 SDE phone screen 高频题:
- LC 200 / 695 系列(Number of Islands / Max Area)
- LC 815(Bus Routes,BFS)
- 自定义"最近 dasher / 最近 dashmart"——本质多源 BFS
- LC 1235(Maximum Profit Job Scheduling,DP + 二分)
地里反馈最多的踩雷:写完代码沉默等反馈。DoorDash phone screen 的面试官几乎都会主动等你提 test case,如果你不主动,他默认你不会处理 edge case。
阶段 4:Onsite Loop(4 轮)
| 轮次 | 内容 | 时长 | 地里观察通过率 |
|---|---|---|---|
| Coding 1 | 算法 + 业务包装 | 45 min | ~50% |
| Coding 2 | 偏 design 的 coding(Rate Limiter / TTL Cache 等) | 45 min | ~45% |
| System Design | DoorDash 业务系统 | 45 min | ~40% |
| Behavioral | DoorDash 4 大价值观 | 45 min | ~60% |
Coding 2 高频题:In-memory KV with TTL
DoorDash 在 Coding 2 喜欢出"半设计半 coding"的题。最近一年地里贴得最多的就是 in-memory KV with TTL。
import heapq
import time
class TTLCache:
def __init__(self):
self.store = {} # key -> (value, expire_at)
self.heap = [] # (expire_at, key)
def _now(self):
return time.time()
def _evict_expired(self, now):
while self.heap and self.heap[0][0] <= now:
exp, k = heapq.heappop(self.heap)
v = self.store.get(k)
if v is not None and v[1] == exp:
del self.store[k]
def put(self, key, value, ttl_seconds):
now = self._now()
self._evict_expired(now)
expire_at = now + ttl_seconds
self.store[key] = (value, expire_at)
heapq.heappush(self.heap, (expire_at, key))
def get(self, key):
now = self._now()
self._evict_expired(now)
v = self.store.get(key)
if v is None or v[1] <= now:
return None
return v[0]
关键 follow-up:
- 单线程 vs 多线程,要不要加锁
- 内存压力下如何用 LRU + TTL 双策略
- TTL 改成 sliding window 怎么改
System Design:Design Order Dispatch
地里给出的高分模板:
| 组件 | 关键决策 |
|---|---|
| Order Service | 写入 Kafka 流 |
| Dispatch Optimizer | Push vs Pull 模型;按 geo-shard 分配 |
| Dasher Tracking | WebSocket vs polling;GPS 上传频率 |
| ETA Service | ML model 在线 vs 离线 |
| Surge Pricing | 实时计算 vs 预计算 |
面试官最在乎的点:能不能说清"多送一单"(batching)的设计——这是 DoorDash 的核心利润机制。
Behavioral:4 大价值观对应触发词
| 价值观 | 你的故事必须出现的关键词 |
|---|---|
| Get 1% Better | 持续学习、量化改进 |
| One Team, One Fight | Cross-functional 协作 |
| Customer Obsession | NPS / churn / 客户视角 |
| We're Owners | 主动 + accountability |
VO 辅助介入点:4 轮 onsite 全程提供节奏提示词、follow-up 第二条优化路径、以及 BQ 故事的实时关键词补全。
三、Data Scientist 路线:地里 DS 帖最易踩雷的两类题
DataSci 路线在地里的帖子比 SDE 少,但每个帖子信息密度更高。一个典型 DS 候选人地里贴出的流程是:
- Recruiter call(30 min)
- SQL + 实验设计 OA(60 min)
- Phone screen:A/B testing case(45 min)
- Onsite:SQL × 1 + 实验设计 × 1 + Product sense × 1 + BQ × 1
地里 DS 候选人最常翻车的两类题:
DS 题型一:实验设计(DoorDash 真题)
如何设计实验测试新 driver incentive 项目对配送时长的影响?
地里高分回答框架:
- 明确目标指标:是平均送达时长、接单率、还是订单完成率?
- 分桶策略:按 driver 随机分桶(不能按 order 分,会污染同一 driver)
- 核心指标:平均送达时长 + 标准差 + 接单率 + 取消率
- 样本量计算:基于历史方差、期望提升幅度、80% power
- 显著性检验:注意 sequential testing / SRM 检测
这道题在 phone screen 和 onsite 都会出现,地里反馈"分桶策略说不清"是最常见挂点。
DS 题型二:SQL 窗口函数与活跃度筛选
给定
delivery_orders(order_id, driver_id, order_time, pickup_time, dropoff_time, city_id),写 SQL 求每个城市过去 30 天内、由"完单 ≥ 100 单"的活跃 driver 完成的订单的平均配送时长。
参考写法:
WITH recent AS (
SELECT *
FROM delivery_orders
WHERE order_time >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)
),
active_drivers AS (
SELECT driver_id
FROM recent
GROUP BY driver_id
HAVING COUNT(*) >= 100
)
SELECT r.city_id,
AVG(TIMESTAMPDIFF(MINUTE, r.pickup_time, r.dropoff_time)) AS avg_delivery_min
FROM recent r
JOIN active_drivers a ON r.driver_id = a.driver_id
GROUP BY r.city_id;
地里 follow-up 变种:
- 改成 last 7 days / last 90 days
- 加 city × driver 双维度
- 改用窗口函数实现"每个 city 排名前 5 的 driver"
VO 辅助介入点:DS 路线特别吃实时表达节奏,因为很多 case 题没有标准答案,要靠你边讲边推。我们在 onsite 期间提供框架提示词(Goal → Bucketing → Metrics → Sample Size → Stat Test)来稳定你的回答结构。
四、地里这一季最常被问的 5 个问题
Q1:DoorDash OA 多少分能进 onsite?
地里观察 HackerRank 满分 100,75 分以上 onsite 邀请率约 60%,65–75 卡线,<65 几乎被刷。
Q2:地里说 DoorDash 喜欢出原题,是真的吗?
部分是。OA 阶段题型相对稳定(findNearbyRestaurants / Closest Straight City / Dasher Min Capacity 等),但每道题都会改输入格式或加 follow-up,背原题答案过不了。
Q3:DataSci 路线的 phone screen 通过率多少?
地里观察约 45%。最常见挂点是实验设计的"分桶策略"和 SRM 检测说不清。
Q4:地里 NG 和 Lateral 难度差多少?
NG OA 难度略低(2 道 medium)但 onsite 通过率更低(~25%);Lateral OA 一题中等一题中等偏难,onsite 通过率 ~15%。
Q5:地里每周更新的面经,VO 辅助怎么用进来?
我们的工作流是每周扫一次地里 DoorDash 板块新增高分帖,把新的题型变种、分桶细节、SD 组件做成 brief 给到当周面试的学员。这就是为什么 VO 辅助的 OA / VO 命中率比纯刷 LeetCode 高一截——题库是从地里实时更新的。
五、地里高分模式总结
把上面 SDE 与 DS 两条路一起看,能明显总结出地里 DoorDash 高分候选人的共性:
- OA 不靠刷题量,靠地里题库覆盖度——同一题不同 follow-up 都过一遍
- Phone screen 必须主动开口提 test case——沉默写代码 = lean no hire
- Onsite Coding 2 准备 in-memory KV / TTL Cache / Rate Limiter 三件套
- System Design 必须画"多送一单" —— DoorDash 真正在乎的是 batching 经济模型
- BQ 4 大价值观必须各匹配一个故事
如果你正在地里翻 DoorDash 帖子准备面试,把这 5 条作为自检清单。
正在排 DoorDash 面试?
如果你在一亩三分地翻了 50 帖还是不知道怎么动手,加微信 Coding0201 让我们帮你把这一季的地里高频题、follow-up 变种、SD 高分模板和 BQ 故事打磨打通。
我们提供:
- DoorDash OA 辅助 / OA 代面:HackerRank 全程实时辅助
- DoorDash VO 辅助 / VO 代面:phone screen + 4 轮 onsite 全程节奏支持
- DataSci 实验设计 + SQL Mock:DS 路线专门通道
- 地里地里题库实时同步:每周更新真题与 follow-up 变种
联系方式
- 微信:Coding0201 · 立即联系
- Email:[email protected]
- Telegram:@OAVOProxy