WeRide(文远知行)是全球领先的 L4 级自动驾驶公司,总部位于广州,在硅谷、北京等地设有研发中心。其 SDE 岗位 OA 题目融合了自动驾驶场景与经典算法,考察候选人在实际工程问题中的建模与编码能力。本文基于一亩三分地最新面经,系统梳理 WeRide OA 的核心考点。
WeRide OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | HackerRank / 自研平台 |
| 时长 | 60-90 分钟 |
| 题量 | 2-3 道编程题 |
| 难度 | Medium |
| 考察重点 | 图算法、贪心、模拟、DP |
题型一:图像处理调度(Image Processing Scheduling)
题目描述
自动驾驶系统需要对摄像头采集的图像进行多种滤镜处理。每张图像有指定的处理时间窗口 [start, end],每种滤镜有不同的处理成本。需要设计一个调度策略,在满足时间约束的前提下,最小化总处理成本。
返回最小成本对 (10^9 + 7) 取模的结果。
解题思路
这是一个区间调度 + 贪心/DP 问题:
- 将图像按截止时间排序
- 对每张图像,选择成本最低的可用滤镜
- 使用优先队列维护当前可用的处理资源
Python 解法
import heapq
MOD = 10**9 + 7
def min_processing_cost(images, filters):
"""
images: [(start, end, filter_requirements)]
filters: [(cost, processing_time)]
"""
# 按截止时间排序
images.sort(key=lambda x: x[1])
total_cost = 0
available = [] # min-heap by cost
for start, end, req in images:
# 找到满足时间窗口且成本最低的滤镜
valid_filters = []
for cost, proc_time in filters:
if proc_time <= end - start:
valid_filters.append(cost)
if valid_filters:
total_cost = (total_cost + min(valid_filters)) % MOD
else:
return -1 # 无法完成处理
return total_cost
题型二:最短路径规划(Shortest Route Planning)
题目描述
给定一个城市路网图,节点代表路口,边代表道路(带权重表示通行时间)。自动驾驶车辆需要从起点到终点,但部分道路会动态变化(如交通管制)。需要找到考虑动态变化后的最短路径。
解题思路
这是 Dijkstra + 动态边权 的变体:
- 使用改进的 Dijkstra 算法
- 在松弛操作中考虑时间依赖的边权变化
- 使用优先队列优化
Python 解法
import heapq
from collections import defaultdict
def shortest_path_dynamic(n, edges, changes, start, end):
"""
n: 节点数
edges: [(u, v, weight)]
changes: [(time, u, v, new_weight)] 道路变化
start, end: 起终点
"""
graph = defaultdict(list)
for u, v, w in edges:
graph[u].append((v, w))
graph[v].append((u, w))
# 预处理道路变化
change_map = {}
for time, u, v, new_w in changes:
change_map[(min(u,v), max(u,v), time)] = new_w
# Dijkstra with time-dependent weights
dist = [float('inf')] * n
dist[start] = 0
pq = [(0, start)]
while pq:
d, u = heapq.heappop(pq)
if d > dist[u]:
continue
if u == end:
return d
for v, w in graph[u]:
# 检查是否有动态变化
edge_key = (min(u,v), max(u,v))
current_time = d
# 查找在当前时间点是否有边权变化
effective_w = w
for (eu, ev, t), nw in change_map.items():
if (eu, ev) == edge_key and t <= current_time:
effective_w = nw
new_dist = d + effective_w
if new_dist < dist[v]:
dist[v] = new_dist
heapq.heappush(pq, (new_dist, v))
return dist[end] if dist[end] != float('inf') else -1
时间复杂度:O((V + E) log V)
空间复杂度:O(V + E)
题型三:传感器数据融合
题目描述
自动驾驶车辆配备多个传感器(LiDAR、Camera、Radar),每个传感器以不同频率产生数据帧。需要设计一个数据融合算法,将时间戳最接近的多传感器数据帧配对,使得总时间偏差最小。
解题思路
这是一个双指针 / 排序 + 贪心问题:
def sensor_fusion(lidar_ts, camera_ts, radar_ts):
"""
将三种传感器的时间戳进行最优配对
返回配对方案使得总时间偏差最小
"""
lidar_ts.sort()
camera_ts.sort()
radar_ts.sort()
pairs = []
i, j, k = 0, 0, 0
while i < len(lidar_ts) and j < len(camera_ts) and k < len(radar_ts):
# 找到时间戳最接近的三元组
max_diff = max(lidar_ts[i], camera_ts[j], radar_ts[k]) - \
min(lidar_ts[i], camera_ts[j], radar_ts[k])
pairs.append((lidar_ts[i], camera_ts[j], radar_ts[k], max_diff))
# 推进时间戳最小的指针
min_val = min(lidar_ts[i], camera_ts[j], radar_ts[k])
if lidar_ts[i] == min_val:
i += 1
elif camera_ts[j] == min_val:
j += 1
else:
k += 1
return sum(p[3] for p in pairs)
WeRide 面试准备建议
技术栈要求
- 语言:C++ 为主(性能敏感),Python 用于 OA
- 核心领域:计算机视觉、SLAM、路径规划、传感器融合
- 系统能力:实时系统、多线程编程、ROS
面试流程
- OA(1-2 周内完成)
- 技术电话面(1 轮,45 分钟)
- 现场面试(3-4 轮,含系统设计)
- 团队匹配
FAQ
WeRide OA 考什么类型的题?
WeRide OA 主要考察图算法(最短路径、BFS/DFS)、贪心调度、动态规划等。题目通常会包装成自动驾驶相关的场景,如路径规划、传感器数据处理、图像处理调度等。
WeRide 面试用什么语言?
OA 阶段支持多种语言(Python、C++、Java),但后续技术面试更偏向 C++,因为自动驾驶系统对性能要求极高。如果你主要使用 Python,OA 阶段没有问题。
WeRide 和其他自动驾驶公司(Waymo、Cruise)的面试有什么区别?
WeRide 的面试更注重工程实现能力和对自动驾驶全栈的理解,题目难度相对 Waymo 略低,但对系统设计和实时性的考察更深入。同时 WeRide 有中文面试选项。
WeRide 的 OA 通过率大概是多少?
根据一亩三分地的面经反馈,WeRide OA 通过率约 40-50%,题目难度中等偏上。关键是要在限定时间内写出正确且高效的代码。
正在准备 WeRide 面试?
oavoservice 提供专业的自动驾驶公司 OA/VO 辅助服务,覆盖 WeRide、Waymo、Cruise、Pony.ai 等头部公司。我们的团队熟悉自动驾驶领域的算法面试特点。
👉 立即添加微信:Coding0201,获取真题与辅助方案。
联系方式
Email: [email protected]
Telegram: @OAVOProxy