数据来源:真实面经整理 | 版本:final
一、公司画像 & 校招节奏
地平线(Horizon Robotics)成立于,总部北京,由余凯创立——他此前是百度主任科学家,深度学习领域的顶尖学者之一。这个背景很重要:你能理解为什么地平线的技术基因如此纯正。
核心产品是征程系列芯片(征程5/征程6),这是专为自动驾驶设计的AI处理器,核心是地平线自研的BPU(Brain Processing Unit,脑处理单元)架构。简单类比:英伟达的GPU是通用并行计算,地平线的BPU是专为神经网络推理优化的定制芯片,功耗更低,在车端推理场景更有竞争力。
,地平线在港股上市(股票代码:9660.HK),估值约700亿港元。商业化进展非常扎实:大众汽车投资50亿欧元与地平线成立合资公司CARIZON,比亚迪、理想、长城、奇瑞等超过60家车企都在用地平线的芯片方案。这不是PPT公司,是真实跑量产的。
员工约1万人,技术人员占比超70%。这个比例在中国科技公司里算高的。你进去大概率跟工程师打交道,不用太担心内耗问题——当然也正因为此,技术能力要求非常高。
主要招聘方向:
| 方向 | 代表业务 | 技术侧重 |
|---|---|---|
| 算法工程师(最大方向) | 感知/规划/预测算法 | C++/Python,深度学习,点云 |
| 芯片架构工程师 | BPU设计,NPU微架构 | Verilog/SystemVerilog,微架构 |
| BSP/驱动工程师 | 芯片BSP,Linux驱动 | C,Linux内核,设备驱动 |
| 工具链工程师 | 模型量化/编译器 | C++/Python,编译器优化,量化 |
| 系统软件工程师 | 实时操作系统,中间件 | C/C++,RTOS,Autosar |
| 测试工程师 | 芯片验证,算法评测 | Python,仿真,数据标注 |
校招节奏(参考):
| 阶段 | 时间 | 行动建议 |
|---|---|---|
| 暑期实习 | 竞争激烈,是最佳转正通道,提前准备 | |
| 正式网申 | horizon.cc/campus,简历突出AI/深度学习项目 | |
| 笔试 | C++/算法/AI基础,90- | |
| 技术面试 | 2-3轮技术面 + 1轮HR面 | |
| Offer发放 | 薪资水平对标顶级互联网公司 |
一个需要提前想清楚的问题:地平线是做芯片的,不是做互联网产品的。这意味着你写的代码最终跑在嵌入式设备上,有实时性要求,有功耗约束,有内存限制。如果你只喜欢做纯后端、纯前端,地平线可能不是最合适的地方。但如果你对AI+硬件的结合感兴趣,地平线是国内最好的舞台之一。
二、岗位 JD 解析:技术要求拆解
地平线的岗位差异非常大,算法工程师和芯片架构工程师的备考路径几乎不重叠。先确定投哪个方向,再针对性准备。
算法工程师(最大方向,最多校招名额)
| 能力维度 | JD描述 | 真实考察重心 | 备考权重 |
|---|---|---|---|
| 深度学习理论 | 熟悉神经网络 | 卷积计算、BN层推理行为、Transformer原理,几乎每轮必问 | ⭐⭐⭐⭐⭐ |
| 感知算法 | 目标检测/分割 | YOLO/DETR原理、3D目标检测(PointPillar/CenterPoint)、BEV感知 | ⭐⭐⭐⭐⭐ |
| C++编程 | 熟练C++ | 智能指针、多线程、内存管理,必考,不接受Python伪代码 | ⭐⭐⭐⭐⭐ |
| 模型优化 | 量化/部署经验 | FP32→INT8量化原理、TensorRT优化、在嵌入式设备的推理 | ⭐⭐⭐⭐ |
| BEV感知 | 多传感器融合 | BEVDet/BEVFusion原理,为什么BEV比前视图适合自动驾驶 | ⭐⭐⭐⭐ |
| 数学基础 | 线性代数/概率 | 矩阵运算(GEMM实现)、贝叶斯推理基础,笔试会考 | ⭐⭐⭐ |
特别说明:地平线算法岗不是纯互联网算法岗。"怎么把PyTorch模型部署到BPU上"这个问题,比"介绍一下BERT的结构"更接近真实工作内容。面试时能讲清楚部署链路的候选人,比只会讲模型结构的候选人更受欢迎。
工具链工程师(地平线特色方向)
这个方向在其他公司很少见,但在地平线非常重要——地平线的竞争力之一就是Horizon OpenExplorer工具链,让车企能够方便地把模型部署到征程芯片。
| 能力维度 | JD描述 | 真实考察重心 | 备考权重 |
|---|---|---|---|
| 编译器原理 | 了解编译器 | AST、IR优化、算子融合(conv+bn+relu合并) | ⭐⭐⭐⭐⭐ |
| 量化技术 | 模型量化经验 | PTQ/QAT原理,INT8量化的scale/zero_point计算 | ⭐⭐⭐⭐⭐ |
| C++工程 | 熟练C++ | 与算法岗要求相同,性能优化更重要 | ⭐⭐⭐⭐⭐ |
| 模型格式 | ONNX/部署 | ONNX导出、算子支持情况、自定义算子 | ⭐⭐⭐⭐ |
芯片架构 / BSP工程师
| 能力维度 | JD描述 | 真实考察重心 | 备考权重 |
|---|---|---|---|
| 数字电路 | HDL设计 | Verilog/SystemVerilog设计,时序分析,状态机 | ⭐⭐⭐⭐⭐ |
| 计算机组成 | 微架构理解 | Cache一致性,DRAM带宽,流水线设计 | ⭐⭐⭐⭐⭐ |
| Linux驱动(BSP方向) | 内核开发 | 字符设备驱动、平台驱动、DMA传输 | ⭐⭐⭐⭐⭐ |
| RTOS(系统软件方向) | 实时操作系统 | 任务调度,优先级反转,Autosar架构分层 | ⭐⭐⭐⭐ |
三、LeetCode 高频题 Top 20(真实面经数据)
地平线的LeetCode考察有一个明显特点:算法题难度不是最高优先,但AI相关算法题(NMS、IOU、GEMM)出现频率很高,而且必须用C++写。面试官不接受"大概思路是这样",需要你当场写出正确、可运行的代码。
第一梯队(必刷,几乎每次都考)
| 题目 | 考察频率 | 地平线的考察重点 |
|---|---|---|
| No.206 反转链表 | ⭐⭐⭐⭐⭐ | C++实现,迭代+递归两种 |
| No.102 二叉树层序遍历 | ⭐⭐⭐⭐ | BFS基础,手写队列实现 |
| 快速排序(手撕) | ⭐⭐⭐⭐ | C++完整实现,分区逻辑要清晰 |
| No.146 LRU缓存机制 | ⭐⭐⭐⭐ | HashMap + 双向链表,工程设计能力 |
| No.23 合并K个排序链表 | ⭐⭐⭐⭐ | 优先队列(std::priority_queue)用法 |
第二梯队(高频,认真刷)
| 题目 | 考察频率 | 备注 |
|---|---|---|
| No.215 数组中的第K大元素 | ⭐⭐⭐ | 堆 or 快速选择,两种都要会 |
| No.15 三数之和 | ⭐⭐⭐ | 排序+双指针,边界条件容易出错 |
| No.141 环形链表 | ⭐⭐⭐ | 快慢指针,经典入门题 |
| No.236 二叉树最近公共祖先 | ⭐⭐⭐ | 递归理解,不只是背答案 |
| No.200 岛屿数量 | ⭐⭐⭐ | DFS/BFS两种,C++实现 |
| No.56 合并区间 | ⭐⭐⭐ | 排序后贪心,边界判断 |
| No.42 接雨水 | ⭐⭐⭐ | 单调栈或双指针,经典Hard |
| No.25 K个一组翻转链表 | ⭐⭐⭐ | 链表操作扎实程度的测试 |
| No.239 滑动窗口最大值 | ⭐⭐⭐ | 单调双端队列(deque) |
| No.300 最长递增子序列 | ⭐⭐ | DP + 二分优化两种解法 |
第三梯队:AI专项算法题(地平线特色,必须准备)
这是和其他公司最不一样的地方。地平线算法岗会考以下几类"AI算法题",本质上是手写实现,而不是刷LeetCode题库。
1. NMS(非极大值抑制)手写实现
这几乎是地平线算法岗的必考题。NMS是目标检测后处理的核心步骤。面试官会让你当场写C++代码:
输入:一组检测框 boxes(每个框有x1,y1,x2,y2坐标和置信度score)
输出:经过NMS筛选后保留的检测框索引列表
参数:iou_threshold(IOU阈值,通常0.5)
伪代码逻辑:
1. 按score降序排列所有框
2. 循环:取score最高的框,加入结果列表
3. 计算该框与剩余所有框的IOU
4. 删除IOU > threshold的框(认为它们与当前框重复)
5. 重复2-4,直到没有框
2. IOU(交并比)计算
IOU = 交集面积 / 并集面积
交集 = max(0, min(x2_a, x2_b) - max(x1_a, x1_b)) * max(0, min(y2_a, y2_b) - max(y1_a, y1_b))
并集 = 面积A + 面积B - 交集
这个公式短,但容易在边界条件上出错(两个框不相交的情况)。
3. Softmax数值稳定实现
普通Softmax在指数运算时会溢出。数值稳定版:先减去最大值再做指数运算。这个考察的是对数值计算细节的理解,而不是背公式。
4. GEMM矩阵乘法实现
最基础的矩阵乘法C++实现,考察内存访问模式和缓存友好性。高阶版本可能要求谈谈如何用SIMD指令(AVX2)加速。
刷题策略总结: 1. 第一梯队5题必须能闭眼写出正确C++代码(不是Python) 2. AI专项4类题(NMS/IOU/Softmax/GEMM)至少各手写一遍,理解逻辑 3. 第二梯队10题争取在面试前都过一遍
四、技术面试考点
深度学习专项(算法岗,权重最高)
卷积神经网络基础:
- Conv层输出尺寸计算:output = (input + 2*padding - kernel) / stride + 1,这个公式要能秒答
- Batch Normalization:训练时用batch统计量,推理时用running_mean/running_var——这个区别被问到的频率极高
- Depthwise Separable Conv:MobileNet的核心,参数量和计算量的节省比例
Transformer与Vision Transformer:
- Self-Attention的计算公式:Attention(Q,K,V) = softmax(QK^T/√d_k)V
- 为什么要除以√d_k:防止点积过大导致softmax梯度消失
- ViT是怎么把图片喂进Transformer的:patch embedding,把图片切成16×16的块
目标检测核心问题: - Anchor-based(YOLO)vs Anchor-free(FCOS/CenterPoint)的本质区别和适用场景 - NMS的作用和局限(遮挡场景下的问题),Soft-NMS如何缓解 - 2D检测和3D检测的主要差异(在自动驾驶中,3D检测才有实际意义)
BEV感知(地平线重点): - 为什么BEV(Bird's Eye View,鸟瞰图)比前视图更适合自动驾驶: - 坐标系统一,多摄像头的视角可以融合到同一平面 - 距离感更准确,不受近大远小的透视畸变影响 - 更容易与激光雷达的点云数据融合 - BEVFusion如何融合摄像头和激光雷达:图像特征投影到BEV空间,再与点云特征拼接
模型量化(工具链岗/算法岗都考): - FP32→INT8的量化原理:用scale和zero_point参数将浮点数映射到整数范围 - PTQ(训练后量化)vs QAT(量化感知训练):PTQ更快,QAT精度损失更小 - 量化引起精度损失的根本原因:信息压缩(32bit→8bit),激活值分布不均匀时损失更大 - 关键问题:如何判断哪层对量化敏感(逐层精度分析)
C++专项(全方向必考)
地平线的C++考察比一般互联网公司严格很多,因为代码最终要跑在资源受限的嵌入式设备上,性能是真实约束。
内存管理:
- RAII原则:资源获取即初始化,对象析构时自动释放资源——这是C++和C最大的区别之一
- unique_ptr vs shared_ptr:独占所有权 vs 共享所有权,前者零开销,后者有引用计数
- 对象池:推理框架中避免频繁new/delete的常见手段,面试可能要求手写简单实现
多线程:
- std::thread + std::atomic + std::mutex 的基本使用
- 无锁队列(lock-free queue):用于实时推理流水线的生产者-消费者场景,考察对memory_order的理解
- 死锁的四个必要条件和预防方法
性能优化: - SIMD指令(AVX2):一条指令处理8个float,向量化加速矩阵运算 - 内存对齐:64字节对齐,提升Cache命中率 - 缓存友好代码:行主序遍历矩阵 vs 列主序遍历的性能差异
模板编程(高级加分项): - 类型推导(auto、decltype) - 函数模板和类模板的基本使用
芯片/系统软件专项(对应方向必考)
计算机组成原理: - Cache一致性(MESI协议):多核处理器的缓存同步机制,芯片设计必须理解 - DRAM带宽计算:内存带宽 = 数据总线宽度 × 工作频率,是BPU性能的关键约束
Linux内核/驱动(BSP方向):
- 字符设备驱动的注册流程:alloc_chrdev_region → cdev_init → cdev_add
- DMA传输:绕过CPU,让外设直接访问内存,减少CPU占用
- 中断处理:上半部(IRQ handler)和下半部(tasklet/work queue)的分工
RTOS与Autosar(系统软件方向): - 实时操作系统的核心:任务调度(优先级调度/时间片调度),响应时间可预测 - 优先级反转问题和解决方法(优先级继承协议) - 经典Autosar分层架构:应用层 → RTE → BSW → MCAL
五、面经规律总结
面试风格:AI技术深度 + C++工程能力双轨制
地平线的技术面试有一个非常明显的规律:每个技术问题都有两层。
第一层是"知道不知道"——你了解这个技术概念吗? 第二层是"能不能用"——你能用C++手写出来吗?
停在第一层是不够的。说得出BN层推理时用running_mean,但写不出代码,在地平线的面试里算没过。
五个高概率追问链
链条1:目标检测追问链 "介绍一下YOLO的检测原理" → 追问:"NMS是怎么实现的?手写一下" → 追问:"遮挡场景下NMS有什么问题?Soft-NMS怎么解决?"
链条2:模型量化追问链 "介绍一下INT8量化" → 追问:"scale和zero_point是怎么计算的?" → 追问:"QAT训练流程和普通训练有什么区别?"
链条3:C++多线程追问链 "如何用mutex保证线程安全" → 追问:"无锁队列怎么实现?" → 追问:"std::atomic的memory_order参数有什么用?"
链条4:BEV感知追问链 "BEV感知和前视图感知有什么区别" → 追问:"BEVFusion是如何融合摄像头和激光雷达的?" → 追问:"BEV特征图的分辨率和感知范围如何权衡?"
链条5:模型部署追问链 "PyTorch模型怎么部署到嵌入式设备上" → 追问:"ONNX导出有什么注意事项?" → 追问:"算子融合是怎么做的?能举个例子吗?"
加分项:体现行业热情
地平线的面试官非常喜欢有"自动驾驶热情"的候选人,不只是把这当成一份工作。以下几个表现会明显加分:
- 了解地平线BPU:面试前查清楚征程5/征程6的基本规格(128 TOPS / INT8算力),能主动聊BPU的设计思路
- 了解行业进展:BEVFusion、Transformer在自动驾驶中的应用,L2++和L3的技术差异
- 有端到端部署经验:哪怕是课程项目,能讲清楚"我把这个模型从PyTorch训练到部署到树莓派/Jetson上"的全流程
笔试特点
- 题型:C++/Python编程题2-3道 + AI基础选择题 + 数学题(矩阵运算/概率统计)
- 时间:90-
- 编程题难度:以Medium为主,C++实现,注意代码质量
- AI基础题:卷积输出尺寸计算、量化基础、BN层行为,不是很难但需要真正掌握
- 数学题:矩阵乘法的时间复杂度、贝叶斯公式的简单应用
需要避开的误区
误区1:只准备LeetCode AI算法题(NMS/IOU手写)不准备,是很多同学面地平线翻车的直接原因。
误区2:只会Python 地平线面试要求C++手写代码,Python伪代码不被接受。算法工程师也不例外。
误区3:只懂理论不会部署 能讲BEV感知原理,但不知道模型怎么量化、怎么导出ONNX,在地平线面试里是减分项。
误区4:忽视自动驾驶业务背景 地平线不是通用AI公司,面试官想要的是对自动驾驶真正感兴趣的人。提前了解行业背景,能让面试体验好很多。
校招节奏
总体原则
地平线的备考重心和普通互联网公司有明显差异:深度学习理论和C++工程能力的比重远高于纯算法题。的时间要集中火力,不能平均分配。
| 阶段 | 时间 | 重点任务 | 每日投入 |
|---|---|---|---|
| 深度学习基础 | CNN/Transformer/目标检测三大类模型原理 | 3- | |
| 自动驾驶AI | BEV感知/点云处理/多传感器融合基础 | 3- | |
| 模型优化 | 量化(PTQ/QAT)/剪枝/蒸馏/TensorRT部署 | 3- | |
| C++专项 | 内存管理/多线程/SIMD/性能优化 | 3- | |
| 算法+AI题 | NMS/IOU手写/LeetCode Top 20/矩阵运算 | ||
| 冲刺 | 了解地平线BPU/看面经/整理项目AI部署经验 | 2- |
每阶段详细任务
:深度学习基础 - CNN:从LeNet到ResNet,重点是每个改进解决了什么问题 - Transformer:Self-Attention手推一遍,理解Multi-head的意义 - 目标检测:YOLO/FCOS/DETR,Anchor-based和Anchor-free的对比 - 验收标准:能在纸上画出Transformer的计算图,写出Self-Attention的伪代码
:自动驾驶AI - BEV感知:为什么用BEV?BEVDet的基本结构?BEVFusion如何融合多传感器? - 点云处理:PointPillar(体素化)和CenterPoint(3D检测)的基本原理 - 看1-2篇相关论文的Abstract和Introduction就够了,不需要精读全文 - 验收标准:能解释"为什么BEV比前视图更适合自动驾驶"的3个理由
:模型优化 - 量化:FP32→INT8的scale/zero_point计算,PTQ vs QAT的适用场景 - TensorRT:ONNX→TensorRT的基本流程,算子融合的概念 - 知识蒸馏/剪枝:了解基本原理,在自动驾驶中的适用场景 - 验收标准:能用公式推导INT8量化的scale计算,能解释QAT和PTQ的核心区别
:C++专项 - 内存管理:unique_ptr/shared_ptr的实现原理和使用场景,手写简单的shared_ptr - 多线程:mutex/condition_variable/atomic的用法,生产者-消费者模式 - 性能优化:了解SIMD概念,内存对齐的意义,cache-friendly代码的写法 - 验收标准:能手写线程安全的队列,能解释unique_ptr和shared_ptr的区别
:算法+AI题专项 - 第一梯队5题:反转链表/层序遍历/快排/LRU/合并K链表,每题C++手写3遍 - AI专项4题:NMS/IOU/Softmax数值稳定版/GEMM,各手写1-2遍 - 第二梯队10题:各刷一遍,重点理解思路 - 验收标准:NMS完整C++代码能在内写完且正确
:冲刺 - 了解地平线:征程系列芯片的规格(128 TOPS/256 TOPS),BPU的设计思想 - 整理项目经历:把自己的AI项目整理成"训练→优化→部署"的完整链路来描述 - 看近期面经:重点关注算法岗和工具链岗的最新考察点 - 模拟面试:对着镜子或找朋友,把5个追问链各讲一遍
最低备考标准(入场门槛)
- [ ] NMS手写:能在纸上写出正确的C++代码,逻辑完整
- [ ] 模型量化:FP32→INT8的scale/zero_point计算原理能解释清楚
- [ ] C++ RAII:能解释RAII,unique_ptr和shared_ptr的区别,以及使用场景
- [ ] BEV感知:能说出BEV比前视图更适合自动驾驶的2-3个理由
- [ ] 地平线背景:了解征程芯片的基本情况(系列/算力规格),能体现行业热情
达不到以上5条标准,面试地平线的胜算很低。这不是吓人,是实话。
备考资源推荐
- 深度学习理论:李沐的《动手学深度学习》(d2l.ai),免费,中文,质量极高
- 目标检测:YOLO/PointPillar论文原文,重点读Introduction和Method
- C++:《Effective Modern C++》(Scott Meyers),第4章智能指针必读
- 模型量化:NVIDIA的TensorRT文档,量化概念部分
- BEV感知:BEVFusion论文(MIT版本),Abstract+图1+Method前半段