面灵AI→

华测导航嵌入式一面:Linux 基础与模型部署

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 进程和线程有什么区别?
  2. 进程间通信有哪些方式?共享内存为什么速度快、需要配合什么使用?
  3. 死锁的四个必要条件是什么?怎么避免?
  4. 模型量化是什么?针对边缘设备资源受限的场景怎么做?
  5. 怎么评估一个模型能不能部署到目标硬件上?
  6. 多线程并发推理造成检测框错位,怎么解决?
  7. 零拷贝 DMA-buff 是怎么降低端到端延迟的?
  8. 职业规划:短期 1 到 2 年、3 到 5 年分别怎么打算?
  9. 反问:部门技术方向与产品、岗位技术栈、部门氛围与应届生培养机制

《参考解析》

进程、线程与进程间通信

进程是资源分配的基本单位,有独立地址空间;线程是 CPU 调度的基本单位,同一进程内的线程共享地址空间和文件描述符,所以线程切换开销小但一个线程崩溃会拖垮整个进程。IPC 方式按速度排:共享内存最快(数据不经过内核拷贝,但必须配信号量或互斥量做同步,否则读到半成品)、有名管道和匿名管道、消息队列、信号、Socket(可跨主机)。匿名管道只能用于有亲缘关系的进程,有名管道和消息队列可以无关进程使用。

死锁

四个必要条件:互斥、占有且等待、不可剥夺、循环等待,打破任何一个即可避免。工程上最实用的是统一加锁顺序(打破循环等待)和加超时重试(打破不可剥夺),再就是一次性申请全部资源或用无锁结构。要注意「线程资源竞争」和「死锁」不是一回事:前者是并发访问共享数据出错,用互斥锁加条件变量解决;后者是互相等锁、程序永久卡住。

模型量化

量化是把 FP32 的权重和激活换成低比特表示,边缘设备上最常见的是 int8。做法分对称与非对称量化,粒度分 per-tensor 和 per-channel(权重用 per-channel 精度损失更小),流程分训练后量化(PTQ,需要一小批校准数据统计激活范围)和量化感知训练(QAT,训练时插入伪量化节点,精度更好但成本高)。收益是模型体积缩小约四倍、推理速度和内存带宽占用提升,代价是精度下降,YOLOv5s 这类检测模型 int8 后精度通常掉 1 到 3 个百分点。部署可行性评估要看三件事:NPU 或 GPU 的算力是否够(按目标帧率算 TOPS 需求)、模型体积和内存带宽能否装下、量化后精度是否满足业务指标,能先在真机上跑一版 profile 再下结论。

多线程并发推理导致检测框错位

根因是帧的处理顺序和输出顺序不一致,或者多线程共享了同一块输入输出缓冲。解决思路是给每一帧带序号和时间戳,从取帧、推理到后处理全程绑定,输出端按序号排序回收,过期帧直接丢弃;缓冲池按帧分配,不要让几个线程写同一块内存;必要时牺牲一点延迟换取顺序保证(限制在途帧数)。如果画面还有闪烁,通常也是同一原因——老帧覆盖了新帧显示。

零拷贝 DMA-buff

原来 OpenCV 的软编码链路要经过「摄像头驱动缓冲 → 用户态拷贝 → 编码器输入」多次拷贝,每次都是 CPU 参与的内存搬运,还伴随用户态和内核态切换,帧率越高开销越大。dma-buf 的思路是把物理缓冲导出成文件描述符,摄像头、NPU、编码器之间直接传递 fd,硬件各自 DMA 读写同一块内存,中间不再拷贝。做的时候要注意缓冲的生命周期管理、cache 一致性(非一致性架构上需要同步操作)、以及各模块对格式和 stride 的对齐要求,跑通后现象是 CPU 占用和端到端延迟同时下降。

关于这场面试

作者自评是 KPI 面:面试官态度不错、没怎么拷打、问题基本都答上来了,但两天后进了人才库。这类情况常见的解释是岗位本来就只招一两个、或者方向不完全匹配,不必过度归因到回答质量。可以复盘的是反问环节:问部门技术方向和应届生培养机制是对的,能拿到有用信息。原帖也记录了面试官给出的信息——产品面向车载定位导航,分三代(一代姿态信息、二代厘米级定位、三代 TP-BOX 融合定位加 5G 网关),软件分 MCU 端(FreeRTOS/AUTOSAR-OS)和 SOC 端(Linux 自研驱动、内核、设备树、中间层与应用),应届生有半年培养周期。准备同类岗位时,FreeRTOS、AUTOSAR、Linux 驱动与设备树这几个关键词值得提前准备。