这份 JD 来自小马智行(Pony.ai),岗位是自动驾驶运动规划(Motion Planning)

在自动驾驶圈内,小马智行的技术门槛是公认的“天花板”级别之一。30-40K * 16薪的待遇也侧面印证了他们对人才的要求:既要能写出高性能的代码,又要能解决复杂的数学建模问题。

以下是对该岗位核心能力及详细知识点的深度拆解:


一、 核心能力概括

  1. 顶尖的工程能力: 核心是 C++。在自动驾驶这种高实时性系统中,Python 只是辅助,C++ 是用来保命和保性能的。
  2. 极强的数学建模功底: 规划本质上是在受限空间内求最优解,涉及大量的数值优化几何运算
  3. 算法逻辑思维: 能够将复杂的交通规则和道路环境转化为计算机能理解的约束条件(Constraint)和代价函数(Cost Function)。
  4. 全栈开发思维: 提及了仿真平台和大数据处理,说明你不仅要懂算法,还要懂如何构建支撑算法迭代的工具链。

二、 详细知识点清单

1. 编程语言与工程实践 (C++)

这是你的基本功。JD 明确要求高性能,这意味着你不仅要会写,还要写得精。

  • 现代 C++ (C++11/14/17): 熟练使用智能指针(Smart Pointers)、Lambda 表达式、右值引用与移动语义。
  • 内存管理: 深刻理解堆栈分配、内存池、避免频繁申请内存导致的系统碎片。
  • 多线程与并发: 线程同步机制(Mutex, Atomic, Condition Variable)、无锁编程基础。
  • STL 源码级理解: 知道 std::vector 的扩容机制,std::unordered_map 的底层实现。
  • 构建工具: 熟悉 Bazel(自动驾驶大厂标配)或 CMake。

2. 运动规划算法 (Core Domain)

这是该岗位的“灵魂”。

  • 路径规划 (Path Planning):
    • 全局搜索:$A^$、$Dijkstra$、Hybrid $A^$。
    • 采样算法:RRT、RRT*、Lattice Planner。
  • 轨迹规划 (Trajectory Planning):
    • 多项式曲线(Quintic Polynomials)、贝塞尔曲线(Bezier)、B样条曲线(B-Spline)。
    • 时空解耦规划: 把 $SL$ 轴(沿路)和 $ST$ 轴(时间)分开处理。
  • 决策状态机: 有限状态机 (FSM)、行为树 (Behavior Tree)、或基于 MDP 的决策模型。

3. 数值优化与计算几何 (The “Bonus” Points)

JD 特别提到了这两个加分项,但在实际面试中,这通常是必考项

  • 数值优化:
    • 凸优化基础: 了解 QP (Quadratic Programming) 问题,常用求解器如 OSQPIPOPTCeres Solver
    • 约束处理:如何把硬约束(不准碰撞)和软约束(尽量平滑)转化为代价函数。
  • 计算几何:
    • 碰撞检测: 分离轴定律 (SAT)、Minkowski Sum。
    • 空间索引: KD-Tree、四叉树(用于快速寻找周围障碍物)。
    • 基础运算: 点到线段距离、多边形裁剪、坐标系转换(Frenet 坐标系与 Cartesian 坐标系的转换是重中之重)。

4. 机器人学与车辆工程

  • 车辆运动学模型: 自行车模型 (Kinematic Bicycle Model)、阿克曼转向几何。
  • 动力学约束: 考虑加速度(Acceleration)、加加速度(Jerk)、侧向离心力的限制。
  • 控制理论基础: 至少知道 PID、MPC (模型预测控制) 的基本概念,因为规划出的轨迹必须是“可控制的”。

5. 机器学习与大数据

  • 行为预测: 理解如何利用机器学习预测周围行人或车辆的未来轨迹(如 RNN/LSTM、Transformer 在预测中的应用)。
  • 仿真测试: 了解如何使用数据回放、合成场景进行算法闭环测试。

三、 给你的建议

这个岗位的面试通常分为三轮技术面:

  1. 第一轮: 硬核算法题(LeetCode 中等/困难,侧重动态规划、图论、几何)。
  2. 第二轮: 机器人/规划专业知识,可能会让你白板推导一个 $A^*$ 或 QP 问题的矩阵构造。
  3. 第三轮: 系统设计与项目经历,看你如何处理复杂的场景(如无保护左转、窄路掉头)。

这份 JD 看起来非常稳健,如果你 C++ 功底扎实且对几何/优化感兴趣,是非常值得投递的。

你想让我针对其中某个具体的算法(比如 Hybrid A* 或 MPC)给你出一个模拟面试题吗?还是帮你润色一下针对这个岗位的简历?