跳到内容
当前位置:首页>笔试真题>禾赛科技嵌入式面经全流程|从笔试到终面,激光雷达赛道真题一次讲透

禾赛科技嵌入式面经全流程|从笔试到终面,激光雷达赛道真题一次讲透

  • 2026-11-14 16:24:29
禾赛科技嵌入式面经全流程|从笔试到终面,激光雷达赛道真题一次讲透

禾赛科技嵌入式面经全流程|从笔试到终面,激光雷达赛道真题一次讲透

前面聊过华为、大疆、比亚迪。这期换一条更垂直的赛道——激光雷达。

禾赛科技(Hesai)是全球激光雷达市占率第一的公司,纳斯达克上市,主要客户是理想、小米、长安、吉利、长城、奇瑞这些主机厂,也在给割草机器人、伴随机器人供传感器。它的嵌入式岗位,做的是激光雷达底层驱动、数据处理、通信协议这些活。

这条赛道的面试有个鲜明特点:它是"嵌入式基础 × 车载通信 × 数据链路"的三重叠加。 你既要会 FreeRTOS 的任务切换,又要说清 CAN 的仲裁电平,还得知道点云为什么要走 UDP 不走 TCP。

本文把 2024–2026 届多位同学的真实面经拼成一条完整链路:笔试、技术一面、技术二面、终面,逐关给真题、给深挖链、给接法。背完能直接用。

一、先看流程:禾赛嵌入式面几轮

标准链路通常是这样:

  1. 网申 + 笔试(线上,3 道编程题)
  2. 技术一面(视频,40–60 分钟,C 语言 + 操作系统 + 网络)
  3. 技术二面(视频,40–50 分钟,往深里挖,专挑一面答得不好的再问一遍)
  4. 终面 / HR 面(有的岗位"面试官说大概率就是最后一面,HR 忙,可能没有 HR 面")
  5. Offer

几条被反复验证的实情:

  • 面试以视频为主,手撕代码在本地 IDE 里做。 不是白板,但也不是纯口述——有同学的一面就是"在本地 IDE 里写,无项目问题"。
  • 二面会"翻旧账"。 多份面经都提到"对于一面中回答的不好的地方再次问道"。这意味着一面答砸的题,二面很可能原题重来,答不上来就是双倍扣分。
  • C 语言是绝对主线。 有同学的一面"主要考察 C 语言相关",面试官开场就问"平时用 C 开发多吗",因为公司主要用 C。
  • 网络协议和 Linux 内核,是禾赛区别于纯 MCU 公司的分水岭。 五层模型、TCP 帧结构、ARP、GCC 启动流程、slab 分配器、USB 驱动——这些在别的公司是加分项,在这里是必答项。
  • Base 可选上海和重庆,面试官一般推荐上海,但想去重庆也可以。
  • 一个真实时间线:7.19 笔试 → 8.4 一面 → 8.13 二面,节奏比大疆紧凑得多。

二、笔试:3 道编程题,难度是"easy+ / medium / medium+"

禾赛笔试的结构非常干净:三道编程题,一道 easy+、一道 medium、一道 medium+。

但真正拉开差距的,是行业知识型客观题——从公开的试卷样本看,题目是围绕激光雷达的真实工程场景出的:

① 点云数据怎么传? 每秒数十万到上百万个点的点云上传到域控制器,主控与上位机之间最常用的高速数据链路是——千兆以太网(UDP)。

高频追问:为什么用 UDP 不用 TCP? 因为点云允许少量丢包,UDP 延迟低、不会因重传阻塞后续数据流;再配合 PTP 做时间同步。

② DMA 在 LiDAR 数据采集里的作用。 这里有一道很典型的判断:"DMA 开启后无需关心缓存一致性,在任何内核上都安全"——这是错的。带 D-Cache 的内核上,DMA 与 Cache 必须做一致性处理(clean / invalidate,或者把内存配成 non-cacheable),否则 CPU 读到的是缓存里的旧数据。DMA 接收还应配合环形缓冲 / 双缓冲,避免数据被覆盖。

③ C 语言实操题(从公开笔试样本看):16 进制转 10 进制、翻转字符串里的单词顺序。

笔试真实体感:编程题难度不算离谱,但每道题背后都挂着一个"行业为什么这么做"的追问。只刷 LeetCode 的同学,会在客观题上直接失分。

📖 嵌入式八股阅读原文:C 语言 / 单片机 / 通信协议 / RTOS 的完整八股整理,见原文

三、技术一面:C 语言为主轴,网络协议是分水岭

一面的时长 40–60 分钟,流程是:自我介绍 → C 语言逐条挖 → 操作系统 / 网络 → 手撕 → 反问。面试官会"对着提纲一道一道往下问",节奏快,几乎不放水。

3.1 C 语言:从"声明与定义"一路挖到函数指针

这是一面占比最大的部分。一位同学的真实记录是这样的——注意每一问后面都跟着追问:

① 变量的声明与定义

  • C 语言里,变量的声明和定义有什么区别?
  • 追问:什么是声明、什么是定义?
  • 再追问:平时用到过吗?

要点:定义会给变量创建内存空间来存放它;声明只是告诉编译器"这个变量在别处定义过"。

② static 的三种用法

  • static 修饰局部变量和修饰全局变量有什么区别?
  • 全局变量加 static 和普通的有什么区别?
  • 追问:如何访问另外一个文件里用 static 定义的变量?(答案是访问不了——static 把作用域锁在本文件内,这正是它做"文件级封装"的意义)

③ 指针

  • 平时用指针做什么?有用别的指针吗,比如函数指针?
  • 举一个实际使用指针的例子。
  • 函数指针是什么?

④ 其他高频 C 语言考点

  • volatile 关键字的作用
  • const char * 这个声明的含义是什么?(指向常量的指针,const 修饰的是 char)
  • 分别定义"指针数组"和"数组指针"(char *p[10] vs char (*p)[10])
  • 内存五大分区:这个变量存在哪一段?bss 段、data 段还是栈?
  • 什么是字节对齐?#pragma pack 的作用是什么?
  • 大小端模式,以及写代码判断当前机器是大端还是小端(联合体 union)
  • 代码编译过程 → 编译这一步主要做什么 → 为什么不能一步直接编到二进制?
  • malloc 和 calloc 有什么区别?
  • 什么是野指针?如何避免野指针?
  • C 语言中的存储类别:auto、static、extern、register

⑤ 位操作

  • 在 C 语言结构体中,如何定义一个只占 2 位的成员变量?(位域 unsigned int x : 2;)

3.2 操作系统与 RTOS

  • 你是否阅读过 FreeRTOS 的内核源码?
  • 请阐述 FreeRTOS 的任务调度机制。
  • FreeRTOS 中如何管理临界资源?提供了哪些锁机制?
  • 请描述 FreeRTOS 中进行任务切换的具体流程。
  • 进程间通信有哪些方式?

3.3 网络协议(禾赛的必答项)

这段是一面后半程的主线,也是很多人翻车的地方:

  • 请简述网络五层模型(或 TCP/IP 模型)中各层的主要功能及对应的典型协议。
  • TCP 报文段和以太网数据帧各自包含哪些主要字段?
  • IP 层(网络层)是如何获取目标 MAC 地址的?(ARP:先查 ARP 缓存,未命中则广播 ARP 请求,目标主机单播回应)

📖 嵌入式八股阅读原文:RTOS / 中断机制 / 内存管理 / 通信协议的完整八股整理,见原文

3.4 手撕代码

一面几乎必有一道,难度不高但要求跑通:

  • LeetCode 14 · 最长公共前缀(出现频率最高,一面、二面都考过)
  • 反转链表
  • 编写一个程序:返回当前日期所在的月份和日期(不区分闰年,但每个月天数不同——考的是边界处理)
  • 16 进制转 10 进制
  • 翻转字符串中的单词顺序

3.5 开放题

  • 什么是嵌入式?(这个问题出现频率意外地高,别轻敌)
  • 你对公司有什么了解?
  • 你对激光雷达行业有什么了解?

四、技术二面:往深里挖,还会"翻一面的账"

二面 40–50 分钟,风格是一面的加难版。开头那句几乎成了固定动作:"对于一面中回答得不好的地方,再次问一遍。"

4.1 通信协议:I2C / SPI 挖到仲裁和 DMA

  • I2C 协议讲一下。如果 SCL 被异常拉低(总线被占住)怎么办?怎么排查问题?
  • I2C 出现竞争时,仲裁优先级是什么?(谁先发出低电平谁赢;显性(低)压过隐性(高);ID 越小优先级越高)
  • SPI 协议:四根线分别是什么?四种模式分别是什么?(CPOL × CPHA)SPI 能不能实现真正的全双工?
  • SPI 和 DMA 怎么连接?
  • 项目中用到了 I2C,介绍一下;项目中激光雷达是如何接收数据的?

4.2 任务切换与上下文:问到底层寄存器

这是二面的核心深挖区,多份面经反复出现:

  • 上下文切换的具体内容是什么?
  • 任务切换时需要把寄存器压入堆栈吗?可不可以不入栈?
  • 函数调用和中断服务函数有什么区别?(结合 PendSV 谈)
  • 函数调用需要把相应的寄存器入栈吗?
  • ARM 架构的通用寄存器有哪些?介绍一下
  • 栈指针有几个?MSP 和 PSP 分别用在什么场景?(FreeRTOS 里任务用 PSP,异常/中断用 MSP)
  • 汇编文件里的 PendSV(上下文切换)具体做了什么?
  • FreeRTOS 的内存管理、上下文切换、临界资源与锁的管理(最简单方案)
  • 任务有几个状态?从运行态切到就绪态的条件是什么?主动进入阻塞态的方式有哪些?
  • 就绪态的任务是通过什么方式管理的?
  • 任务栈空间是怎么分配的?是否对栈的使用率做过检测?

4.3 ARM 内核与其他

  • Cortex-M 的缓存一致性怎么处理?
  • Cortex-M 的特权模式是什么?
  • Cortex-M 内核中,如何通过栈回溯定位 HardFault 异常的根本原因?
  • 为什么说进程比线程开销大?为什么说进程是分配的最小单元、线程是调度的最小单元?
  • STM32 里中断的整个流程,CPU 要做哪些工作?中断为什么要保存通用寄存器?
  • 热插拔驱动:它的 probe 函数在哪里实现的?poweron 的原理是什么?
  • 手撕:LeetCode 14 · 最长公共前缀、快排

4.4 Linux 内核方向(Linux BSP / 底层驱动岗会深挖这一整块)

如果你投的是 Linux 方向(禾赛有 Linux BSP 软件工程师岗),二面的重心会整体切换到内核:

  • 中断里用什么锁?(自旋锁)自旋锁和互斥锁的区别?
  • 如果中断函数被线程化,又该用什么锁?(互斥锁)
  • 中断下半部有哪些方式?(软中断、tasklet、工作队列)
  • tasklet 是进程上下文还是中断上下文?(中断上下文)
  • 说一下系统启动过程 / bring up 需要做哪些工作?
  • 最熟悉哪个内核子系统?——说一下 slab 分配器。
  • 内存这块有没有实际的优化案例?(内存裁剪、去掉板卡没用到的外设、把耗时驱动改成模块方式加载)
  • IO 读写性能低,可能是什么原因?怎么定位?(iostat -x 1 看 await / %util、iotop 看进程级 IO、dmesg 查硬件错误)
  • 概率性死机问题怎么定位和解决?
  • 快启(快速启动)的思路是什么?
  • 有过 USB 驱动经验吗?
  • 能接受加班吗?

看出来禾赛在考什么了吗:它不是考你会不会用 API,而是考你有没有真的去看过内核源码、有没有真的调过一个概率性死机。一面问"知识",二面问"经历"。

📖 嵌入式八股阅读原文:Linux 内核 / 驱动 / 中断管理 / 内存子系统的完整八股整理,见原文

五、终面 / HR 面:一面二面就够狠,最后一关反而轻

禾赛的轮次偏少。有同学的反问得到的回答是"大概率就是最后一面,HR 忙,可能没有 HR 面"。

所以终面的内容,基本混在二面里一起问完了,常见的是这几类:

  • 介绍一个最有挑战的项目。
  • 你遇到过的最难的问题?怎么解决的?
  • 谈一下自己的性格特点。
  • 能接受加班吗?
  • 有什么想问我的?(反问环节)

值得注意的两点:

  1. "最有挑战的项目"这道题,在禾赛是重头戏。 因为它会顺势引出"最难的问题怎么定位"——而这正是激光雷达公司最看重的工程能力。
  2. 反问要问得专业。 参考问法:"禾赛嵌入式一共几面?"、"禾赛有哪些 base 可选?"。好的反问本身就是一次展示。
  3. 愿意来哪座城市要提前想清楚。 上海是主阵地,重庆也有 base。

六、激光雷达赛道专属考点(其他公司不会问)

这是本文最有增量价值的部分——禾赛的差异化考点,全在"传感器 + 数据链路 + 车载通信"这条链上。

① 点云数据链路

  • 激光雷达点云上传到域控制器,走什么链路?为什么是千兆以太网 + UDP,而不是 TCP?
  • 为什么需要 PTP 这类时间同步协议?
  • 点云的时间戳精度、多传感器时间同步为什么重要?

② 激光雷达基础

  • 激光雷达的测距原理是什么?(TOF,发射激光脉冲测反射时间)
  • 主流技术路线有哪些?(机械式 / 半固态(MEMS、转镜)/ 纯固态(OPA、Flash))
  • 相比摄像头,激光雷达的优势是什么?(高精度、不受光照影响、直接获取深度)
  • 不同技术路线的优缺点是什么?

③ 车载通信(MCU 方向必考)

  • CAN 总线的仲裁和通信逻辑是什么?
  • CAN 的显性电平和隐性电平怎么区分?
  • CAN 的通信波特率是多少?
  • 实际传输中遇到过 CAN 总线错误(发送/接收错误、数据丢失)吗?怎么处理?
  • 如何对不同 ID 的 CAN 消息做过滤?过滤器的屏蔽规则是什么?

④ 传感器与执行器

  • IMU 模块通过什么方式通信?从 IMU 获取数据的整个流程是什么?
  • IMU 数据多久同步一次?接收 IMU 数据是在任务里周期性查询吗?查询频率多高?
  • 不清楚 IMU 发送频率的情况下,如何决定接收任务周期以避免丢包?
  • 接收 IMU 数据时 buffer 怎么设置?一包没收完又来数据怎么办?
  • 电机控制如何实现(转速和方向)?转速调节的具体实现方式?

一位做过 MCU 方向实习的同学说得很实在:"基本是围绕项目问的"——他会从你的 IMU 通信任务,一路问到你为什么要设这个周期。

七、高频八股速查表

  • C 语言:声明 vs 定义、static 三种用法(局部 / 全局 / 跨文件访问)、volatile、const char *、指针数组 vs 数组指针、函数指针、内存五大分区(text/data/bss/heap/stack)、字节对齐与 #pragma pack(1)、大小端与 union 判定、编译四步(预处理/编译/汇编/链接)、malloc vs calloc、野指针、位域、auto/static/extern/register
  • 内存管理:内存泄漏 vs 内存碎片、内存池、slab 分配器、kmalloc / vmalloc、环形缓冲与双缓冲
  • RTOS:任务状态与调度机制、就绪态的链表管理、上下文切换与寄存器压栈、PendSV、MSP vs PSP、临界资源与锁、信号量 vs 互斥量、消息队列、栈使用率检测
  • 中断与内核:中断流程、为什么要保存通用寄存器、中断里用什么锁、中断线程化、下半部(软中断 / tasklet / workqueue)、HardFault 栈回溯、Cortex-M 特权模式、DMA 与 Cache 一致性
  • 通信协议:I2C(仲裁、SCL 被拉死怎么排查)、SPI(四线、四种模式、全双工、接 DMA)、UART、CAN(仲裁、显性/隐性电平、波特率、ID 过滤与屏蔽规则)、千兆以太网 + UDP、PTP
  • 网络:五层模型与协议对应、TCP 报文段字段、以太网帧字段、ARP 获取 MAC 的过程
  • Linux 内核:自旋锁 vs 互斥锁、中断下半部、系统启动流程、bring up、slab、内存裁剪、IO 性能定位(iostat / iotop / dmesg)、概率性死机的排查思路、快启
  • 体系结构:ARM 通用寄存器、Cortex-M 特性、进程 vs 线程的开销差异
  • 算法:最长公共前缀、反转链表、快排、字符串处理、进制转换

📖 嵌入式八股阅读原文:以上全部考点的完整八股合集(含 C 语言 / RTOS / Linux / 车载协议),见原文

八、禾赛到底在考什么

把多位同学的经验压成三句话:禾赛考的是"C 语言的深度 × 内核源码的熟悉度 × 对传感器链路的理解"。

  1. C 语言必须真懂,而且要能追到第三层。 从"声明和定义的区别",一路能追到"怎么访问另一个文件里的 static 变量"——这是纯记忆型选手的分水岭。
  2. 看过源码的人明显占优。 "你看过 FreeRTOS 的源码吗"这个问题,答"看过"和答"用过",后面的追问深度完全不是一个量级。二面问的寄存器压栈、调度器实现,都是源码级问题。
  3. 行业知识是加分,但不是必需品,可以临阵补。 点云为什么走 UDP、激光雷达有哪几条技术路线、TOF 是什么——这些花两小时就能补上,但面试里能立刻把你和其他候选人区分开。
  4. 诚实是保命符。 二面会原题重问一面答砸的地方,与其硬编,不如老实说"这块我当时理解得不到位,我后来的理解是……"。坦诚 + 有进步,比装懂好得多。

九、备考清单

  • C 语言:按第七节逐条自测。重点补 static 的三种用法、指针数组 vs 数组指针、内存五大分区、字节对齐、编译四过程——这几块在一面出现频率最高,而且都是连环追问的形式。
  • RTOS:真的去翻一遍 FreeRTOS 源码,至少读透 task.c 和 port.c。把"任务切换时保存哪些寄存器""PendSV 做了什么""MSP 和 PSP 谁用在哪"讲清楚,这是二面的核心得分区。
  • 网络:把五层模型、TCP 报文段字段、以太网帧字段、ARP 全过程整理成一页纸。答案要能默写出来。
  • 手撕:把 LeetCode 14、反转链表、快排练到闭眼能写;再练几道字符串处理题(进制转换、单词翻转、日期计算)。
  • 行业知识:花两小时整理激光雷达的四块——TOF 测距原理、技术路线(机械/半固态/固态)、点云数据链路的选型理由(UDP + PTP)、与摄像头的对比优势。这是让你在一面开口就出彩的地方。
  • Linux 方向加分:如果投 BSP / 底层驱动岗,额外补 自旋锁 vs 互斥锁、中断下半部三种方式、slab 分配器、系统启动与 bring up、IO 性能定位工具链。
  • 项目:准备 1 个"最有挑战的项目",重点练"最难的问题怎么定位"这条线——用真实的时间线、真实的排查手段讲,比讲技术点更打动人。
  • 反问:准备两三个专业问题,比如团队做的是哪一代产品的哪个模块、嵌入式在国内和海外的分工差异。

嵌入式八股阅读原文

评论区扣下你想看的公司,下一篇优先安排。

#嵌入式面试 #禾赛科技面经 #激光雷达 #嵌入式软件开发 #秋招 #校招

—— 嵌入式求职 · 面经专场

微信咨询 微信客服二维码微信扫一扫 · 添加人工客服 QQ QQ咨询 QQ咨询二维码QQ扫一扫 · 添加人工客服 帮助手册