数据来源:真实面经整理 | 版本:final


一、公司画像 & 校招节奏

文远知行(WeRide)成立于,总部广州,创始人韩旭此前是百度无人驾驶业务核心成员。这个背景很重要:你能理解为什么文远知行在技术路线上和百度自动驾驶团队高度相似——高精度地图依赖度高,激光雷达路线坚持得最彻底。

核心业务范围比你想象的宽:

Robotaxi是主业,广州南沙区已经实现全无人商业运营(无安全员在车内)。这不是PPT,是可以打开APP叫车的那种真实运营。

Robobus是无人驾驶小巴,跑固定路线,类似公交车的逻辑但无人驾驶。

Robosweeper是无人驾驶清扫车,已经在多个城市有商业订单。

Robovan是货运无人车,最近两年增长很快,To B逻辑更清晰。

,文远知行在美国纳斯达克上市(代码WRD),是首家在美上市的中国Robotaxi公司。对于校招生来说,上市意味着期权有了流动性,不是画饼。

员工规模约人左右,比地平线小得多,但这正是文远的优势之一:团队扁平,实习生和校招生能接触到真实的自动驾驶项目,不是做外围工具。

主要招聘方向:

方向 技术侧重 备注
感知算法工程师 C++/Python,3D目标检测,激光雷达 最大方向,名额最多
SLAM工程师 激光SLAM/视觉SLAM,高精地图 技术门槛最高
规划控制工程师 路径规划,MPC,行为决策 需要控制理论背景
自动驾驶系统工程师 C++,ROS,系统集成 工程能力要求最高
后端工程师 数据平台,云端系统,Go/Python 竞争烈度相对低

校招节奏(参考):

阶段 时间 行动建议
暑期实习 最佳转正通道,提前3个月准备
正式网申 下旬 career.weride.ai,简历突出自动驾驶相关项目
面试 2-3轮技术面 + 1轮HR,流程比大厂快
Offer发放 美元期权+人民币薪资,谈薪有一定空间

一个需要提前想清楚的问题:文远知行是做自动驾驶的,不是做通用互联网产品的。这意味着你写的代码最终要跑在移动的车里,有实时性要求,有安全性约束,有硬件限制。如果你只对大数据、推荐系统感兴趣,文远可能不是最合适的地方。但如果你对激光雷达、SLAM、无人驾驶有发自内心的好奇,文远是国内能接触到最前沿工程落地的地方之一。


二、岗位 JD 解析:技术要求拆解

文远知行的岗位要求和通用互联网公司差异很大。先锁定方向,备考路径才有针对性。

感知算法工程师(名额最多)

能力维度 JD描述 真实考察重心 备考权重
C++工程能力 熟练C++11/14/17 多线程、内存管理、RAII,必考,不接受Python伪代码 ⭐⭐⭐⭐⭐
深度学习框架 PyTorch/TensorFlow 模型训练、损失函数设计、调参技巧 ⭐⭐⭐⭐
3D目标检测 激光雷达感知经验 PointPillars/CenterPoint原理,3D IoU计算,几乎每轮必问 ⭐⭐⭐⭐⭐
目标跟踪 MOT经验 卡尔曼滤波推导,SORT/DeepSORT实现逻辑 ⭐⭐⭐⭐
ROS ROS/ROS2使用经验 话题/服务/动作通信,tf2坐标变换,加分明显 ⭐⭐⭐
点云处理 PCL/Open3D经验 点云滤波、体素降采样、法向量估计 ⭐⭐⭐

特别说明:文远感知岗不是纯学术组,上来就问"你知道Transformer吗"这种问题基本没有。面试官更关心的是:你能不能把一个检测模型跑起来,知道调什么参,遇到点云稀疏的问题怎么处理。有真实ROS项目经验的候选人,比只做过PyTorch玩具项目的候选人优势明显。

SLAM工程师(门槛最高)

能力维度 JD描述 真实考察重心 备考权重
激光SLAM 熟悉主流激光SLAM系统 LOAM/LIO-SAM前端里程计原理,图优化后端(g2o/GTSAM) ⭐⭐⭐⭐⭐
数学基础 概率论、李群/李代数 旋转矩阵到SO(3)的映射,卡尔曼滤波推导,笔试必考 ⭐⭐⭐⭐⭐
高精地图 地图格式了解 OpenDRIVE/Lanelet2格式,地图元素分类 ⭐⭐⭐
C++ 同感知岗要求 同上,SLAM代码对性能要求更高 ⭐⭐⭐⭐⭐

规划控制工程师

能力维度 JD描述 真实考察重心 备考权重
路径规划 熟悉主流规划算法 Hybrid A*在自动驾驶中的实现,Frenet坐标系转换 ⭐⭐⭐⭐⭐
轨迹优化 MPC/优化方法 MPC的预测模型和代价函数设计,凸优化基础 ⭐⭐⭐⭐⭐
行为决策 有限状态机/行为树 FSM的状态转移设计,行为树节点类型(选择/序列/并行) ⭐⭐⭐⭐
控制理论 PID/LQR等控制方法 PID调参经验,LQR的代价矩阵设计 ⭐⭐⭐

三、LeetCode 高频题 Top 20(真实面经数据)

文远知行的算法题考察风格有一个明显特点:难度适中,Medium为主,但代码工程质量要求高。面试官不只看你能不能答出思路,还会看你的代码是否考虑了边界条件、内存分配是否合理。

另外,和地平线类似,感知岗会额外考察自动驾驶相关的手写算法题(卡尔曼滤波、IOU计算等),这部分在常规LeetCode题库里找不到,但一样必须准备。

第一梯队(必刷,几乎每次都考)

题目 考察频率 文远的考察重点
No.206 反转链表 ⭐⭐⭐⭐⭐ C++实现,迭代和递归两种都要掌握
No.102 二叉树层序遍历 ⭐⭐⭐⭐⭐ 队列实现BFS,变种题(按层返回、Z字形遍历)也要会
快速排序(手撕) ⭐⭐⭐⭐ C++完整实现,分区逻辑细节不能出错
No.53 最大子数组和 ⭐⭐⭐⭐ DP经典,考察基础DP思维
No.1143 最长公共子序列 ⭐⭐⭐⭐ DP二维数组,状态转移要能当场写清楚

第二梯队(高频,认真刷)

题目 考察频率 备注
No.23 合并K个排序链表 ⭐⭐⭐ 优先队列(std::priority_queue)写法
No.207 课程表 ⭐⭐⭐ 拓扑排序,DAG在规划图中有实际应用背景
No.236 二叉树最近公共祖先 ⭐⭐⭐ 递归理解,不只是背答案
No.215 数组中的第K大元素 ⭐⭐⭐ 堆排序 or 快速选择,两种都要会
No.15 三数之和 ⭐⭐⭐ 排序+双指针,去重逻辑容易出错
No.141 环形链表 ⭐⭐ 快慢指针基础
No.42 接雨水 ⭐⭐ 单调栈,考察思维深度
No.200 岛屿数量 ⭐⭐ DFS,可以扩展到点云连通域分析
No.239 滑动窗口最大值 ⭐⭐ 单调双端队列(deque)
No.300 最长递增子序列 ⭐⭐ DP + 二分优化两种解法

第三梯队:自动驾驶专项算法题(文远特色,感知/SLAM岗必须准备)

1. 卡尔曼滤波手写推导

这是文远感知岗和SLAM岗的高概率手写题。面试官不会让你背公式,而是从头推导:

标准卡尔曼滤波分两步:
预测步:x_k|k-1 = F * x_k-1|k-1 + B * u_k
        P_k|k-1 = F * P_k-1|k-1 * F^T + Q

更新步:K_k = P_k|k-1 * H^T * (H * P_k|k-1 * H^T + R)^(-1)
        x_k|k = x_k|k-1 + K_k * (z_k - H * x_k|k-1)
        P_k|k = (I - K_k * H) * P_k|k-1

能推导出来是基础,真正加分的是能解释:为什么卡尔曼增益K的形式长这样?Q和R对滤波结果有什么影响?

2. 3D IoU 计算

2D IoU大家都熟,3D IoU在自动驾驶中更重要。文远面试时可能让你描述3D框的表示方式(x, y, z, l, w, h, yaw),以及如何计算两个旋转框之间的IoU。精确算法涉及多边形相交,面试通常接受近似实现,但要能说清楚思路。

3. NMS手写实现

输入:一组3D检测框,每个框有位置和置信度score
输出:经过NMS筛选后保留的框索引

核心逻辑:
1. 按score降序排列所有框
2. 取score最高的框,放入结果
3. 计算该框与剩余框的IoU
4. 删除IoU > threshold的框
5. 重复,直到没有框

4. SORT多目标跟踪流程

SORT = 卡尔曼滤波 + 匈牙利算法。面试可能让你描述:检测框从上一帧到这一帧,是怎么完成跨帧关联的?匈牙利算法在这里解决的是什么问题(代价矩阵最小化分配)?

刷题策略总结:

  1. 第一梯队5题:必须能闭眼用C++写出正确代码
  2. 自动驾驶专项4类:卡尔曼/3D IoU/NMS/SORT,各手推/手写一遍
  3. 第二梯队10题:争取面试前都过一遍,重点理解思路

四、技术面试考点

感知算法专项(感知岗,权重最高)

3D目标检测核心问题:

  • PointPillars原理:把点云投影到柱状体(Pillar)做特征提取,再用2D卷积做检测。为什么用Pillar而不是Voxel?计算效率高,在嵌入式平台推理更快。
  • CenterPoint优势:Anchor-free,以目标中心点做预测,在旋转目标检测(如侧向行驶的车辆)上优于anchor-based方法。
  • 3D IoU:文远几乎每轮感知面必问。至少能解释BEV IoU(俯视角)和3D IoU的区别,以及为什么旋转框的IoU计算复杂。

目标跟踪核心问题:

  • 卡尔曼滤波:状态向量怎么设计?位置+速度 or 只有位置?Q矩阵(过程噪声)和R矩阵(观测噪声)哪个大,滤波器会更相信哪个来源?
  • DeepSORT vs SORT:SORT只用运动信息做关联,遮挡场景下ID频繁切换。DeepSORT加入外观特征(ReID网络提取的embedding),长遮挡后还能重新关联上。
  • 匈牙利算法:多目标跟踪的框-框匹配问题,本质是二分图最优匹配,时间复杂度O(n³)。

多传感器融合:

  • 前融合 vs 后融合:前融合(在传感器原始数据层面融合)精度高,但对时间同步要求严。后融合(各传感器独立出结果再融合)鲁棒性好,但信息损失多。文远的路线倾向前融合。
  • 激光雷达+摄像头同步:时间戳对齐是实际工程中的大问题,不是课本上的"直接拼接特征"那么简单。

C++ 专项(全方向必考)

内存管理:

  • RAII原则:资源获取即初始化,对象析构时自动释放。这是防止内存泄漏的核心机制。
  • unique_ptr vs shared_ptr:独占所有权 vs 共享所有权。shared_ptr有引用计数,线程安全但有开销。什么时候选哪个?对象传递路径清晰用unique_ptr,生命周期不确定用shared_ptr。
  • 对象池:自动驾驶感知流水线里,每帧都要创建大量检测框对象。频繁new/delete是性能杀手,对象池预分配内存可以把延迟降低一个数量级。

多线程:

// 文远感知系统的典型多线程场景:激光雷达和摄像头数据各一个线程,感知主线程消费
std::queue<PointCloud> lidar_queue;
std::mutex queue_mutex;
std::condition_variable data_ready;

// 生产者(激光雷达数据线程)
{
    std::lock_guard<std::mutex> lock(queue_mutex);
    lidar_queue.push(new_frame);
    data_ready.notify_one();
}

// 消费者(感知主线程)
{
    std::unique_lock<std::mutex> lock(queue_mutex);
    data_ready.wait(lock, [&]{ return !lidar_queue.empty(); });
    auto frame = lidar_queue.front();
    lidar_queue.pop();
}

这个模式是自动驾驶系统里最常见的感知数据流设计。面试被问到"你怎么处理传感器数据的异步到达",这就是标准答案。

ROS通信:

  • Topic(话题):发布/订阅模式,松耦合,适合传感器数据。
  • Service(服务):请求/应答模式,适合一次性查询(如地图加载)。
  • Action(动作):异步长时间任务,适合规划执行(如"导航到目标点")。
  • tf2坐标变换:自动驾驶里经常需要把激光雷达坐标系的点云转换到车体坐标系再转到世界坐标系,tf2的lookupTransform是核心API。

SLAM 专项(SLAM岗核心,感知岗加分)

激光SLAM关键问题:

  • LOAM的核心思想:把点云分成边缘点(edge points)和平面点(planar points),分别做特征匹配估计位姿。比全量点云ICP快很多,但在复杂室外场景有漂移。
  • LIO-SAM的改进:引入IMU预积分做初值估计,大幅降低点云匹配的搜索空间。在快速运动场景下鲁棒性明显好于LOAM。
  • 闭环检测:Scan Context是基于点云描述子的闭环检测方法,对旋转不变。闭环触发后,用图优化消除累积误差。

数学基础:

  • SO(3)群上的操作:旋转矩阵的指数映射、李代数的意义。SLAM后端优化需要在流形上做梯度下降,这是理解g2o/GTSAM的基础。
  • 卡尔曼滤波推导:见上一节,SLAM岗要求更深,需要掌握扩展卡尔曼(EKF)在非线性系统中的应用。

五、面经规律总结

面试风格:深度追问 + 实际项目导向

文远知行的技术面有一个非常鲜明的特点:面试官非常关心你有没有真正跑过自动驾驶代码。

说得出PointPillars的原理是第一层。面试官接着会问:你用过这个模型吗?在什么数据集上跑的?精度是多少?遇到哪些工程问题?

如果你只看过论文没跑过代码,这个追问链很快就会把你问到瓶颈。

五个高概率追问链

链条1:3D目标检测追问链

"介绍一下PointPillars的原理" → 追问:"Voxel方法和Pillar方法的主要区别?" → 追问:"3D IoU和2D IoU计算上有什么不同?" → 追问:"旋转框的IoU用什么方法近似计算?"

链条2:目标跟踪追问链

"SORT算法是怎么工作的" → 追问:"卡尔曼滤波的状态向量怎么设计?" → 追问:"预测步和更新步分别做了什么?" → 追问:"DeepSORT在SORT基础上加了什么?为什么能减少ID切换?"

链条3:C++多线程追问链

"感知系统里如何处理多传感器数据" → 追问:"生产者消费者模式怎么实现线程安全?" → 追问:"用mutex还是无锁队列?什么时候各自适合?" → 追问:"std::atomic的memory_order你了解吗?"

链条4:SLAM追问链(SLAM岗)

"介绍你用过的激光SLAM系统" → 追问:"LOAM的特征点提取逻辑是什么?" → 追问:"在什么场景下LOAM会失败?" → 追问:"LIO-SAM是怎么解决这个问题的?"

链条5:ROS工程追问链

"你的项目用了ROS吗?" → 追问:"Topic和Service怎么选?" → 追问:"tf2的坐标变换树是怎么维护的?" → 追问:"ROS bag文件你用过吗?怎么用来调试感知算法?"

加分项:真实的工程经历

文远面试官最欢迎的不是刷完多少论文的候选人,而是能聊出真实工程痛点的候选人。

以下表现会明显加分:

  • 跑过KITTI/nuScenes:提到在公开数据集上复现过某个检测模型,有具体mAP数据
  • 用过ROS:哪怕是在机器人课程项目里,能聊ROS的发布订阅模式就够了
  • 了解文远业务:提前看过文远在广州的无人运营视频,能聊Robotaxi的感知难点(雨天激光雷达降噪、行人预测等)
  • 英文能力:文远是中美双总部,有一定英文技术沟通场景,面试里偶尔会切英文

需要避开的误区

误区1:只准备通用算法题

文远感知岗的专项算法题(卡尔曼/SORT/NMS)是高概率必考,跳过就是送命。

误区2:只会Python

所有感知/SLAM/规划方向都要求C++手写代码。说"我平时用Python,C++思路我知道就行"在文远面试里是减分的。

误区3:没用过ROS但不了解

ROS是自动驾驶工程的基础设施。没用过完全可以提前学,几天时间能掌握Topic/Service/tf2的基本用法,面试里体现出来就够了。

误区4:对自动驾驶业务不感兴趣

文远团队的工作强度相对合理(比国内某些自动驾驶公司轻),但仍然需要对自动驾驶真正感兴趣才能做好。面试时能聊出"我对Robotaxi场景下行人意图预测的挑战"这类话题,比只说"我对算法感兴趣"分量重得多。


校招节奏

总体原则

文远备考和刷LeetCode型公司完全不同:自动驾驶核心技术的比重远超纯算法题。时间要向感知/SLAM方向倾斜,不能平均分配。

阶段 时间 重点任务 每日投入
C++ & ROS基础 C++多线程/内存管理/RAII;ROS Topic/Service/tf2 3-
算法专项 链表+二叉树+图论(拓扑排序)+DP基础
感知算法 3D目标检测(PointPillars/CenterPoint)+目标跟踪(卡尔曼/SORT/DeepSORT)
SLAM基础 激光SLAM(LOAM/LIO-SAM原理)+图优化基础+高精地图格式
规划控制 Hybrid A*/Frenet坐标系/MPC基本原理/行为树
冲刺收尾 专项算法手写(NMS/卡尔曼/SORT)+了解文远业务+模拟面试

每阶段详细任务

:C++ & ROS基础

  • C++内存管理:unique_ptr/shared_ptr/weak_ptr的区别和使用场景,手写简单的shared_ptr
  • C++多线程:mutex/condition_variable/atomic,手写生产者-消费者模式(生产者消费者是自动驾驶系统里最常见的数据流模式)
  • ROS基础:安装ROS Noetic或ROSumble,跑官方示例;写一个Publisher和Subscriber理解Topic通信;了解tf2的坐标变换树概念
  • 验收标准:能手写线程安全的消息队列;能解释ROS的Topic和Service什么时候各自适合

:算法专项

  • 第一梯队5题:反转链表/层序遍历/快排/最大子数组和/最长公共子序列,每题C++手写3遍
  • 图论:拓扑排序(课程表问题,DAG在自动驾驶行为决策中的应用)
  • 动态规划:二维DP(LCS/编辑距离),理解状态转移方程设计思路
  • 验收标准:第一梯队5题能在内用C++正确完成

:感知算法

  • 3D目标检测:深读PointPillars论文(重点:Pillar特征提取+BEV投影+检测头),再看CenterPoint(关注为什么Center-point比Anchor-based更适合旋转目标)
  • 目标跟踪:手推卡尔曼滤波的预测步和更新步(能推导出卡尔曼增益K的形式);理解SORT的匈牙利匹配;了解DeepSORT加入ReID特征的改进动机
  • NMS手写:C++实现标准NMS,理解IoU计算的边界条件
  • 验收标准:能在纸上推出卡尔曼滤波的五个公式;能用C++手写NMS完整代码

:SLAM基础

  • 激光SLAM:理解LOAM的特征提取(边缘点和平面点)和匹配方法;了解LIO-SAM的IMU预积分改进
  • 图优化基础:g2o的节点和边的概念,理解位姿图优化的问题建模
  • 高精地图:了解OpenDRIVE格式的主要结构(道路/车道/路口),Lanelet2格式的基本元素
  • 验收标准:能解释LOAM和LIO-SAM的核心区别;能描述高精地图里车道线是如何存储的

:规划控制

  • Hybrid A:理解为什么普通A不适合车辆规划(忽略运动学约束);Hybrid A*如何用车辆运动模型约束搜索方向
  • Frenet坐标系:为什么自动驾驶规划通常在Frenet坐标下描述轨迹?s-l坐标的含义
  • MPC基础:代价函数的设计(跟踪误差+控制量+控制量变化率);预测时域和控制时域的概念
  • 行为树:节点类型(条件/行为/选择器/序列/并行),与有限状态机相比的优缺点
  • 验收标准:能解释Hybrid A在哪些场景比A好;能描述MPC的基本框架

:冲刺

  • 专项手写:NMS/卡尔曼滤波/SORT流程各再手写一遍,确保速度和正确性
  • 了解文远:看文远知行的官方技术博客和无人驾驶演示视频;了解广州南沙Robotaxi运营情况
  • 整理项目经历:把自己做过的任何感知/SLAM/机器人项目整理成"问题→方法→结果"的结构
  • 模拟面试:把五个追问链各讲一遍,找朋友模拟或者录音自己回听

最低备考标准(入场门槛)

  • [ ] 卡尔曼滤波:能在纸上推出预测步和更新步的五个公式
  • [ ] NMS:能用C++手写正确的NMS代码(含IoU计算)
  • [ ] C++ RAII:能解释RAII,并说出unique_ptr和shared_ptr的使用场景差异
  • [ ] ROS通信:能说清楚Topic/Service/Action各自适合什么场景
  • [ ] 3D目标检测:能解释PointPillars的Pillar特征提取思路,以及为什么BEV检测比3D检测更主流

达不到以上5条,面试文远感知或SLAM岗的胜算很低。


📚 你可能还需要这些

自动驾驶大厂对比

如果你同时在准备多家自动驾驶公司: - 📌 地平线校招备考攻略(芯片+算法双轨,侧重模型量化和BPU部署) - 📌 百度校招备考攻略(Apollo生态,自动驾驶算法+工程并重)

感知算法基础

准备感知岗?这些基础不能跳过: - 📌 大厂C++技术面试常考题(文远的C++考察深度不亚于传统大厂) - 📌 大厂笔试面试八股文-算法-数组常考题


💡 关注我,少走弯路

我会持续分享: - ✅ 大厂高频题整理(按公司、岗位精准分类,自动驾驶专项) - ✅ 最新面经汇总(校招季第一时间更新) - ✅ 面试技巧实战(真实案例,追问链模拟) - ✅ 内推信息(不定期发布,自动驾驶行业优先)

这篇攻略整理花了不少时间,如果对你有帮助: - 👍 点个"赞"和"在看",让更多人看到 - 💬 评论区聊聊你在准备哪个方向,我来帮你看看备考路径 - 🔄 转发给同样在准备自动驾驶校招的朋友

有问题随时留言,我会尽量回复!


数据来源: - 文远知行官方招聘渠道(career.weride.ai)整理的岗位要求 - -届候选人面经汇总(技术面考点、追问链方向) - 文远知行公开技术分享与学术论文(PointPillars、CenterPoint、LIO-SAM等) - 自动驾驶行业技术博客整理