面灵AI→

CVTE 嵌入式二面:项目深挖、Linux 内核与手撕链表题

轮次
二面
时间
2026-10
来源
牛客网

《面试题目》

  1. 请简单介绍一下你自己,以及你与嵌入式 Linux/MCU 开发相关的经历。
  2. 请介绍一个你参与度最高的项目,说明项目背景、你的职责和最终结果。
  3. 在这个项目中,你遇到的最难定位或最难解决的技术问题是什么?你是如何分析和解决的?
  4. 部门有几个人?如何分工?团队如何沟通的?
  5. 这个项目如果重新做,你觉得哪里可以再优化?
  6. 简单讲一下你对 Linux 内核的理解。
  7. 手撕:链表 HOT100 题里的。
  8. 对加班的看法。项目比较紧急怎么处理?
  9. 期望的薪资。
  10. 手里的 offer 情况。

《参考解析》

「最难定位的问题」要讲定位过程,不是讲结论。 一个高分结构:现象(什么条件下必现/偶发、影响面多大)→ 假设(列出 2–3 个可能原因并排序)→ 验证(用示波器/日志/断点逐个排除,讲清每个实验排除了什么)→ 根因(一句话说清)→ 修复与预防(改了什么、加了什么检查避免再发)。嵌入式里常见的高质量案例:偶发死机(栈溢出/中断优先级反转/看门狗复位)、通信偶发丢包(时序、DMA 与缓存一致性、总线仲裁)、启动失败(Flash 等待周期、时钟配置、供电上电时序)。关键是让面试官看到「你有方法论」,而不是「碰巧修好了」。

Linux 内核理解(嵌入式视角)。 分层讲:① 进程管理——task_struct、调度器(CFS)、进程/线程在 Linux 里统一为 task,上下文切换与优先级;② 内存管理——虚拟地址到物理地址的页表映射、Buddy 分配器与 Slab、mmap 与 DMA 的一致性(dma_alloc_coherent 与 cache flush);③ 文件系统与设备模型——VFS 抽象、字符/块设备、设备树(DTS)描述硬件、platform 驱动与 probe 流程;④ 中断与并发——上半部/下半部(softirq、tasklet、workqueue)、自旋锁与睡眠的区别、copy_from_user 为什么要检查;⑤ 启动流程——BootROM → bootloader(U-Boot)→ 内核解压 → 初始化 init 进程。作为应届生,能讲清「用户态与内核态怎么切换(系统调用)、驱动如何注册、中断如何进到驱动」就足够,别硬背源码细节。

手撕链表的高频题。 HOT100 里链表部分的核心就几道:反转链表(迭代三指针 / 递归)、K 个一组翻转、环形链表(快慢指针判环 + 找入口)、相交链表(双指针走完彼此)、合并两个有序链表、删除倒数第 N 个节点(快慢指针 + 哑节点)、LRU(哈希 + 双向链表)。写的时候注意三件事:哑节点(dummy)简化头节点处理、指针修改顺序(先保存 next 再改指向)、边界(空链表、单节点、k 大于长度)。面试时先把思路说一遍再写,写完主动跑一个例子。

团队与分工。 讲清「几个人、按什么维度分工(模块/驱动/应用)、怎么同步(站会、周会、issue 跟踪)、跨部门怎么对接(硬件给原理图与引脚、测试给用例与复现步骤)」。没有真实团队经历就说课程项目/实验室项目里的角色划分,别编公司组织。

「重做会怎么优化」怎么答。 从三个层面挑一个深入:架构(模块解耦、接口抽象,便于换芯片/换传感器)、工程(构建与烧录自动化、日志与断言、单元测试)、性能(中断处理时长、内存占用、启动时间)。给一个具体的量化目标(比如「把中断里的一次 Flash 写改成队列异步,把中断关闭时间从 200μs 降到 20μs」),比泛泛说「代码更规范」有说服力。

加班与紧急项目。 态度要正面但要有方法:接受项目期的强度,同时说明自己会做的三件事——先对齐优先级(哪些必须今晚做完、哪些可以明天)、拆小步并及时同步风险、事后补上根因与自动化(避免同类问题再次紧急)。避免两种极端:一味表忠心(「随时可以通宵」)或直接抵触。

期望薪资与 offer 情况。 应届给区间 + 依据(城市、岗位、自己拿到的其他 offer 水平),不要虚报 offer 抬价(背调会露)。手里有其他流程就如实说进度(「在等某家的二面结果」),这既是事实也能适度形成时间压力。