Zoox 是亚马逊旗下的 Robotaxi 公司,2026 年 Q1 起在 Foster City 和 Las Vegas 已开放第一批 paid rides。这家公司在自动驾驶赛道里有一个非常特殊的属性:自研整车 + 自研全栈软件——所以它的面试涉及面比 Waymo / Cruise 更广,从 C++ 嵌入式到 ML perception 再到 ROS-style 通信框架都可能被问到。
本文基于 2026 年三位候选人的 onsite 复盘(Perception SDE / Planning SDE / Embedded Systems),系统拆 Zoox 的 5 个面试环节,并给出 2 道高频 coding 真题的完整解法。
Zoox 面试流程全景
| 阶段 | 时长 | 内容 |
|---|---|---|
| 1. Recruiter Phone Screen | 30 min | 简历过、为什么 Zoox、岗位匹配 |
| 2. Hiring Manager Chat | 45 min | 项目深挖 + 跨团队协作经历 |
| 3. Technical Phone Screen | 60 min | 1 道 C++/Python coding(CoderPad) |
| 4. Onsite Loop | 5 × 60 min | Coding × 2、系统/Robotics 设计、ML 专项、BQ |
| 5. Team Match | 1-2 周 | 不重新面,只是匹配团队 |
Zoox 与 Waymo 最大的差异:Coding 题目偏向系统工程而非纯算法——比如"实现一个延迟 200ms 的传感器流时间对齐",而不是 LeetCode 风格的"两数之和"变种。
Coding 真题 1:传感器时间同步(Lidar + Camera)
题目描述
给定两路时间戳数据流:
- LiDAR 包:
(ts_l, point_cloud),频率 10 Hz - Camera 帧:
(ts_c, image),频率 30 Hz
要求实现一个 sync 函数:对每一个 LiDAR 包,找到时间戳最接近的 Camera 帧,要求时间差 ≤ 50 ms,否则跳过该 LiDAR 包。最终返回所有匹配对的列表。
数据可能乱序到达,需要在线(streaming)处理。
解题思路
这是一道典型 Zoox 风格题——表面看像 LC 牛 Two Pointer,但加了"流式""乱序""容忍窗口"三个真实工程约束。
- 用 deque 维护 camera buffer:丢弃比当前 lidar 时间戳早 50 ms 的帧
- 对每个 lidar 包,等到出现一个比它晚的 camera 帧时再决定(看前一帧还是当前帧更近)
- 用 heap 处理乱序:缓冲 200ms 窗口后再 pop
Python 解法
from collections import deque
import heapq
class SensorSync:
def __init__(self, tolerance_ms=50, reorder_window_ms=200):
self.tol = tolerance_ms
self.window = reorder_window_ms
self.cam_buf = deque() # (ts, frame)
self.lidar_q = [] # min-heap of (ts, packet)
self.matched = []
def push_camera(self, ts, frame):
self.cam_buf.append((ts, frame))
self._gc(ts)
def push_lidar(self, ts, packet):
heapq.heappush(self.lidar_q, (ts, packet))
self._gc(ts)
def _gc(self, now_ts):
# drop camera frames older than window
while self.cam_buf and now_ts - self.cam_buf[0][0] > self.window:
self.cam_buf.popleft()
# try to match lidar packets safe to commit
while self.lidar_q and now_ts - self.lidar_q[0][0] > self.window:
ts_l, packet = heapq.heappop(self.lidar_q)
self._match_one(ts_l, packet)
def _match_one(self, ts_l, packet):
best = None
best_diff = self.tol + 1
for ts_c, frame in self.cam_buf:
diff = abs(ts_c - ts_l)
if diff <= self.tol and diff < best_diff:
best, best_diff = (ts_c, frame), diff
if best is not None:
self.matched.append((ts_l, packet, best[0], best[1]))
def flush(self, max_ts):
self._gc(max_ts + self.window + 1)
return self.matched
时间复杂度:每个事件 O(W),W 为窗口内 camera 帧数
面试官追问:怎么用 segment tree / BST 把 _match_one 优化到 O(log W)?回答:用 SortedList 按 ts_c 索引,二分找 lower/upper bound 即可。
Coding 真题 2:路径点平滑(Trajectory Smoothing)
题目描述
给定 Planner 输出的 waypoints 列表 [(x, y, t)],由于离散决策抖动,相邻点间速度可能突变。要求实现一个滑动窗口加权平滑:
- 窗口大小 k(奇数)
- 中心点权重最大,向两侧线性衰减
- 边界用最近点延伸
只能在线维护,每收到一个新 waypoint 输出一个平滑点。
解题思路
经典滑动窗口加权平均,但有 Zoox 的实务需求:
- 在线流式 → 用 deque 维护最近 k 个点
- 权重做归一化,避免边界处除数为 0
- 平滑必须保持单调时间戳,否则下游 controller 会震荡
Python 解法
from collections import deque
class TrajectorySmoother:
def __init__(self, window=5):
assert window % 2 == 1
self.k = window
self.half = window // 2
self.buf = deque()
# 三角窗权重:中心 = half+1,向外递减到 1
self.weights = [self.half + 1 - abs(i - self.half) for i in range(window)]
def push(self, x, y, t):
self.buf.append((x, y, t))
if len(self.buf) > self.k:
self.buf.popleft()
return self._smooth()
def _smooth(self):
# 边界:buffer 不满时用现有点 + 镜像填充
pts = list(self.buf)
if len(pts) < self.k:
# 左侧用首点镜像,右侧用尾点镜像
pad = self.k - len(pts)
left = pad // 2
right = pad - left
pts = [pts[0]] * left + pts + [pts[-1]] * right
wsum = sum(self.weights)
sx = sum(p[0] * w for p, w in zip(pts, self.weights)) / wsum
sy = sum(p[1] * w for p, w in zip(pts, self.weights)) / wsum
return (sx, sy, pts[self.half][2])
时间复杂度:每个 waypoint O(k) Zoox 加分项:主动提到 B-spline、Savitzky-Golay 滤波器作为后续优化方向,会让 Planner 团队的面试官眼前一亮。
Robotics 系统设计高频题
| 题目 | 考察点 |
|---|---|
| 设计 Robotaxi 的 E-Stop(紧急停止)链路 | 安全冗余、双通道仲裁 |
| 多 sensor 数据如何在 ROS-style topic 间分发 | Pub/Sub、QoS、Back-pressure |
| 离线 logging 系统如何回放 1TB/小时 数据 | 分片存储、时间索引、降采样 |
| HD Map 更新如何在 fleet 内增量分发 | Delta 同步、签名校验 |
建议白板上画清"actor + topic"——Zoox 内部就是 actor-based 框架(类似 LCM/ROS2),系统图用这套语言会非常加分。
ML / Perception 专项
Perception 候选人会有一轮纯 ML 理论 + 工程面试:
- 经典:3D Object Detection(PointPillars、CenterPoint、BEVFusion)原理
- 推理优化:TensorRT、量化、ONNX 转换坑
- 数据增广:自动驾驶场景如何做"夜间合成""下雨合成"
- Active Learning:billions of frames 中怎么挑要标的样本
问得最细的是 evaluation metrics——mAP vs NDS(nuScenes),以及"为什么 NDS 加权重 5 个子指标"。
Behavioral / 价值观
Zoox 文化关键词:
- Customer Obsession(亚马逊 DNA)
- Earn Trust — 跨团队冲突如何解决
- Are Right, A Lot — 你做过哪个决策最后被证明是错的,怎么修正
- Frugality — 怎么用最小代价验证一个 risky idea
每个 BQ 控制在 STAR 结构 + 3 分钟内,留时间给面试官追问"如果当时另一种方案"。
FAQ
Q1:Zoox 和 Waymo / Cruise 的面试难度对比?
算法纯度:Waymo > Cruise > Zoox 工程实务:Zoox > Waymo > Cruise Zoox 的题更贴近"明天上车的代码",不太会出"LC 困难"。但系统设计 + ROS-style 框架理解要求高,做过纯 ML 研究的候选人可能在第 4 轮"卡"在工程化问题上。
Q2:Zoox 2026 是否还在 hiring freeze 后?
2026 Q1 Zoox 完成了 Foster City 商业化首发,目前 Perception / Planning / Vehicle Software 三个团队仍在积极招人,但 Mapping 和 Cloud 团队 headcount 收紧。建议申请前查 LinkedIn 看招聘状态。
Q3:onsite 全部是 Zoom 还是去 Foster City?
混合:Tech screen 全部线上,onsite 默认现场(Foster City),公司报销机票酒店。如果你住在偏远地区,可以协商 onsite 改为 Zoom,但接受率约 60%——hiring manager 会权衡是否需要看你"动手画白板"。
Q4:用什么语言写 coding 题?
Robotics / Perception / Planning 团队强烈推荐 C++——面试官就是用 C++ 写产品代码的。Cloud / Infra / Simulation 团队 Python 可以。ML Research 岗 PyTorch + Python 即可。
Q5:如何准备 ROS / 自动驾驶基础?
如果完全没接触过:
- 读 ROS2 文档的 "Concepts" 章节(2 小时)
- 跑通 Autoware.Auto demo(半天)
- 读 Apollo 开源代码的 Planning 模块(1 周)
- 看 nuScenes / KITTI 数据集 README(半小时)
完成后能聊得明白 publisher/subscriber、TF tree、launch file,已经够通过 Zoox 面试的"基本盘"。
Q6:Zoox 给 new grad / intern 吗?
给。但整车工程 + Robotics 背景的 PhD 优先级最高,纯 SWE 背景的 new grad 主要进 Cloud / Tools / Simulation 团队。Intern 项目每年招约 30 人,2025 conversion rate 约 50%。
正在准备 Zoox / Waymo / Cruise 的自动驾驶面试?
自动驾驶面试同时考验"算法深度 + 系统工程感",纯刷题已经远远不够。我们整理了 Zoox / Waymo / Cruise / Aurora / Wayve 五家公司的2026 真题题库和Perception / Planning / Embedded 三大方向的备考路径,欢迎联系交流。
立即添加微信 Coding0201,获取 Robotaxi 面试真题包。
联系方式
Email: [email protected] Telegram: @OAVOProxy