小米嵌入式软件 二面已OC(嵌入式Linux方向)

本篇为学员投稿,二面已拿到 offer!,分享出来给大家参考。

二面和一面完全不是一个风格。一面考的是你会不会,二面考的是你能不能用、能不能想。面试官是组内 tech lead,开场先聊了十分钟竞赛经历,问得很细,不是走过场,是真的在看你解决问题的思路。然后顺着项目一路追问,每个技术选型都要说清楚为什么,有没有考虑过其他方案。后半段聊到了 AI 对嵌入式行业的影响,这个问题很开放,没有标准答案,面试官更想看你有没有自己的判断。整体氛围比一面轻松,但对思维深度要求更高,背八股没用,要真的思考过。

1. 自我介绍 + 竞赛经历深挖

面试官让我介绍了一下参加过的竞赛,然后开始追问:

"你在比赛里遇到过什么让你印象最深的技术难题?当时是怎么解决的?"

这道题没有标准答案,但回答框架很重要:问题是什么 → 为什么难 → 你的思路 → 最终方案 → 复盘有没有更好的做法。

面试官最想听到的不是"我解决了",而是你解决问题的过程,以及你有没有在事后反思过。

"如果现在重新做这个项目,你会在哪些地方做得不一样?"

这个问题是在考你有没有持续学习和反思的习惯。可以从架构设计、调试效率、代码可维护性等角度回答,说出具体的改进点,比如"当时用轮询方式读传感器,现在知道应该用中断+DMA,CPU 占用率能降很多"。

2. 竞赛里用过实时操作系统吗?FreeRTOS 和 Linux 在任务调度上有什么本质区别?

这道题从竞赛经历自然引出,考察你对两类系统的理解深度。

FreeRTOS 调度:

  • 基于优先级的抢占式调度,最高优先级任务就绪就立刻运行
  • 时间片轮转只在同优先级任务间生效
  • 调度延迟确定,通常在微秒级,适合硬实时场景
  • 没有虚拟内存,任务直接操作物理地址,出了问题很难隔离

Linux 调度:

  • 默认使用 CFS(完全公平调度器),基于虚拟运行时间,保证公平性而非实时性
  • 调度延迟不确定,受内核抢占点、中断延迟影响,通常在毫秒级
  • SCHED_FIFOSCHED_RR 实时调度策略,但仍受内核锁影响
  • 如果需要硬实时,要打 PREEMPT_RT 补丁,把内核大部分锁改成可抢占的

本质区别:FreeRTOS 是为确定性而生,Linux 是为吞吐量和公平性而生。嵌入式产品里常见的做法是双核异构,一个核跑 FreeRTOS 处理实时控制,另一个核跑 Linux 处理应用逻辑,比如 TI 的 AM335x、ST 的 MP1 系列都是这个思路。

3. 你的项目里有没有做过性能优化?说一个具体的例子,优化前后有数据对比吗?

面试官很看重量化结果,回答时一定要有具体数字。

参考回答框架:

当时项目里图像处理模块 CPU 占用率长期在 80% 以上,帧率只有 15fps。排查后发现两个问题:一是每帧都在堆上 malloc/free,频繁内存分配导致碎片化和延迟抖动;二是图像数据在用户态和内核态之间来回拷贝。

优化方案:改用预分配的内存池,用环形缓冲区管理帧 buffer;驱动侧实现 mmap,用户态直接访问 DMA buffer,去掉拷贝。优化后 CPU 占用率降到 35%,帧率稳定在 30fps,延迟抖动从 ±8ms 降到 ±1ms。

面试官会继续追问:内存池怎么实现的?mmap 的 cache 一致性怎么处理的?所以每个点都要真的做过,不能只说表面。

4. 嵌入式 Linux 里怎么分析系统性能瓶颈?用过哪些工具?

这道题考察你的工程经验,工具要说得具体,不能只列名字。

CPU 分析:

  • top / htop:快速看各进程 CPU 占用,但精度不够
  • perf stat:统计 CPU 硬件事件,cache miss、分支预测失败等
  • perf record + perf report:采样分析热点函数,找出 CPU 时间花在哪里
  • ftrace / trace-cmd:内核函数级别的追踪,几乎零开销,适合生产环境

内存分析:

  • /proc/meminfo:系统内存概览
  • valgrind --tool=massif:堆内存使用分析(嵌入式上开销大)
  • smaps:查看进程各段内存详细占用

IO 分析:

  • iostat:磁盘 IO 吞吐和延迟
  • iotop:按进程看 IO 占用
  • strace -T:系统调用耗时,排查 IO 慢的原因

网络分析:

  • tcpdump:抓包分析
  • ss / netstat:连接状态
  • iperf3:带宽测试

实际排查思路:先用 top 确认是 CPU 还是 IO 瓶颈,CPU 高就用 perf 找热点函数,IO 高就用 iostat + strace 找慢在哪个系统调用。

5. 说说你对 Linux 文件系统的理解,嵌入式里常用哪些文件系统?为什么不直接用 ext4?

这道题从项目经验引出,考察你对嵌入式存储特性的理解。

嵌入式常用文件系统:

JFFS2 / UBIFS(用于 NAND/NOR Flash 裸片):

  • Flash 有擦写次数限制,需要磨损均衡(wear level

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

03-17 11:21
四川大学 C++
神洛桃玖:项目太拉了,第一个还能认你可能会stl,第二个堪比学校作业
点赞 评论 收藏
分享
03-19 09:58
河海大学 Java
最喜欢春天的奇亚籽很...:同学,是小红书不是小哄书,一眼就能看到的错误
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务