WeRide(文远知行)是国内首批拿到 Robotaxi 商业化牌照的自动驾驶公司,近两年在硅谷办公室也大幅扩招 SDE / MLE。一亩三分地最近的 WeRide 面经里,OA 题目带有非常明显的「自动驾驶味儿」:传感器融合、点云聚类、最短路径规划。本文按高频度排序拆解题型,并补充 VO代面 / VO辅助 的实际准备路径。
WeRide OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | CodeSignal / HackerRank(不同岗位有差异) |
| 时长 | 70-90 分钟 |
| 题量 | 3 道(1 简单 + 2 中等-中等偏难) |
| 难度 | LC Medium 为主,少量 Hard |
| 考察方向 | 图论、模拟、几何、字符串 |
题型一:传感器数据滑动窗口去噪
题目描述
LiDAR / IMU 流式数据带有突发噪声。给定数据流 data[] 和窗口长度 k,请输出每个长度为 k 的窗口的「截尾中位数」(去掉最大/最小后求均值)。
思路
- 维护一个滑动窗口的有序结构(
SortedList) - 每次窗口右移:插入 1 个、删除 1 个
- 截尾后求和需要 O(1),所以用「总和 − 最大 − 最小」即可
Python 解法
from sortedcontainers import SortedList
def trimmed_mean_window(data, k):
if len(data) < k:
return []
sl = SortedList(data[:k])
window_sum = sum(data[:k])
res = [(window_sum - sl[0] - sl[-1]) / (k - 2)]
for i in range(k, len(data)):
sl.remove(data[i - k])
window_sum -= data[i - k]
sl.add(data[i])
window_sum += data[i]
res.append((window_sum - sl[0] - sl[-1]) / (k - 2))
return res
时间复杂度:O(n log k) 空间复杂度:O(k)
题型二:高精地图最短路径(带充电约束)
题目描述
Robotaxi 在城市图中跑单。节点 = 路口;边 = 道路(带耗电量 cost)。车辆电池容量 B,特定节点可充电(瞬时回满)。求起点到终点的最少道路代价路径,沿途任意时刻电量 ≥ 0。
思路
- 状态:
(节点, 当前电量) - 在该状态空间上跑 Dijkstra
- 充电站节点:访问后电量直接置为
B
Python 解法
import heapq
def min_cost_with_battery(graph, n, src, dst, B, chargers):
# graph[u] = [(v, cost, energy_drop)]
pq = [(0, src, B)]
visited = {}
while pq:
cost, u, e = heapq.heappop(pq)
if (u, e) in visited and visited[(u, e)] <= cost:
continue
visited[(u, e)] = cost
if u == dst:
return cost
for v, w, drop in graph[u]:
ne = e - drop
if ne < 0:
continue
if v in chargers:
ne = B
heapq.heappush(pq, (cost + w, v, ne))
return -1
时间复杂度:O(B · E log(B · V))
题型三:点云连通分量计数
题目描述
二维栅格 grid 上有 0/1 表示障碍物的占据情况;返回连通分量个数(4-邻接)。这是 LeetCode 200 的变体,但 WeRide 通常要求支持后续动态添加 / 删除点。
思路
- 静态部分:BFS / DFS 即可
- 动态部分:并查集(路径压缩 + 按秩合并)
- 注意:删除点时不能轻易回滚 DSU;常见做法是「时间旅行并查集」或者重建
Python 解法(静态)
def count_clusters(grid):
if not grid:
return 0
R, C = len(grid), len(grid[0])
seen = [[False] * C for _ in range(R)]
cnt = 0
for i in range(R):
for j in range(C):
if grid[i][j] == 1 and not seen[i][j]:
cnt += 1
stack = [(i, j)]
while stack:
x, y = stack.pop()
if 0 <= x < R and 0 <= y < C and grid[x][y] == 1 and not seen[x][y]:
seen[x][y] = True
stack.extend([(x+1,y),(x-1,y),(x,y+1),(x,y-1)])
return cnt
一亩三分地高频题速查
| 题型 | 频率 | 关键技巧 |
|---|---|---|
| 传感器去噪 / 滑动窗口 | ★★★★ | SortedList |
| 图最短路径(带约束) | ★★★★★ | Dijkstra + 状态扩展 |
| 点云聚类 / 连通分量 | ★★★★ | BFS / DSU |
| 字符串日志解析 | ★★★ | 正则 / 状态机 |
| 几何(凸包、最近点对) | ★★ | 分治 |
VO 流程与 VO代面 / VO辅助
WeRide 北美 VO 通常 4-5 轮:
- 算法面:LeetCode Medium-Hard
- 系统设计:感知 / 规划 / 控制中的一个子系统
- C++ / Python 深度:内存模型、移动语义、ROS 经验
- 行为面:跨组协作、debug 高压情境
- HM / 团队匹配
oavoservice 的 VO代面 + VO辅助 一体化服务
针对 WeRide 这种 4-5 轮、多领域(算法 + 系统设计 + C++/ROS + 行为)的 VO,oavoservice 提供完整套餐:
- VO辅助 / mock:把一亩三分地最近 6 个月 WeRide VO 帖整理成「问题集」,mentor 按真实节奏出题 + 提示,结束后录像复盘
- VO代面 / 实时辅助:面试当天提供实时答题辅助与思路核对,特别针对感知 / 规划 / 控制类系统设计题
- 行为面剧本:根据 WeRide 团队风格定制 STAR 故事
- 白板回放:mentor 针对系统设计表达漏洞,逐句打磨
具体方案与报价,加微信 Coding0201 沟通。
6 天冲刺方案
| 天数 | 任务 |
|---|---|
| D1 | 一亩三分地 WeRide 帖按题型分桶(图、滑动窗口、几何) |
| D2 | Dijkstra / Bellman-Ford / SPFA 各 1 题,状态空间扩展练习 |
| D3 | LeetCode 200 / 695 / 547 + 动态版变体 |
| D4 | 系统设计:感知 → 规划 → 控制管线 |
| D5 | C++ / ROS 基础回顾,必要时拿出旧项目 |
| D6 | 行为面 STAR:上线事故、跨组配合各 2 例 |
FAQ
WeRide 一亩三分地的 OA 帖能直接背吗?
不能直接背。WeRide 题库每个 batch 都会换 30% 左右,但主题(图算法 + 滑动窗口 + 模拟)非常稳定。背模板和思路比背题面更高效。
WeRide SDE 和 MLE 的 OA 有什么区别?
SDE 偏经典数据结构(图、字符串、栈/堆);MLE 偏机器学习 pipeline、点云处理与简单概率题。两者都会出至少一道带「自动驾驶味儿」的场景题。
没有自动驾驶背景能投 WeRide 吗?
可以。WeRide 北美岗位主要看通用 SDE 能力,自动驾驶领域知识可以通过 KITTI / Apollo / Autoware 等开源项目快速补;面试官更看重你能否用熟悉的工具解决新问题。
WeRide OA 没过冷却期多长?
一般 6 个月。换岗位(如从 Infra 改投 Perception)通常不算同一池子,可以更早再投。
正在准备 WeRide SDE OA / VO?
oavoservice 长期追踪 WeRide / Cruise / Waymo / Pony.ai 等自动驾驶公司的 OA + VO 真题。我们的 mentor 来自一线自动驾驶团队,可提供题型分桶、限时模拟、系统设计复盘、行为面录像反馈等 VO辅助 服务。
👉 立即添加微信:Coding0201,获取 WeRide 高频题与 VO辅助方案。
联系方式
Email: [email protected]
Telegram: @OAVOProxy