嵌入式面经总结

前言

本人最近终于论文提交了,看到很多小伙伴都在催更我,还给我发了很多小花花,这下不得不开更了。因为本人之前有几十家公司的面经,很多小伙伴可能觉着很乱,无法针对性的看,所以我把所有本人的面经输入到了deepseek进行总结分析,上图是基于面经生成的词云图,下面就是deepseek生成的总结内容,当然部分内容本人也润色过。

一、嵌入式开发高频技术点

  1. 设备树(Device Tree)
  • 核心问题:设备树的匹配机制(compatible属性优先级)。设备树节点解析流程(父节点、子节点、address-cells/size-cells)。DTB文件加载流程(Uboot传递、内核解析)。
  • 关键答案:compatible作用:驱动与设备树节点的匹配依据。父节点与子节点:父节点定义地址空间(address-cells),子节点继承并扩展。
  1. 驱动开发
  • 核心问题:驱动匹配流程(probe函数触发条件、总线匹配规则)。中断处理(上半部/下半部、自旋锁使用场景)。I2C/SPI驱动开发常见问题(时序错误、设备地址冲突)。DMA原理与缓存一致性(dma_alloc_coherent)。
  • 关键答案:probe函数流程:资源申请(内存、中断)、设备初始化、注册设备到内核。I2C异常排查:示波器抓波形、检查设备地址、确认时序(SCL/SDA)。
  1. 内存管理
  • 核心问题:虚拟内存与物理内存的区别(MMU、页表映射)。页表层级选择(三级 vs 四级,由CPU架构决定)。内存泄漏/越界检测工具原理(Valgrind、KASAN)。内存屏障(memory barrier)与原子操作。
  • 关键答案:虚拟内存意义:隔离进程地址空间、支持大内存映射、权限控制。应用层访问非法地址:触发缺页异常,内核发送SIGSEGV信号终止进程。
  1. 操作系统与进程
  • 核心问题:进程与线程区别(资源开销、通信方式)。进程间通信(IPC)方式(管道、共享内存、信号量)。调度算法(CFS、实时调度)。缺页中断处理流程(分配物理页、更新页表)。
  • 关键答案:线程崩溃影响:同一进程的线程共享资源,崩溃可能导致整个进程终止。优先级反转:高优先级任务被低优先级任务阻塞,需用优先级继承解决。
  1. 网络与协议
  • 核心问题:TCP可靠传输机制(ACK、超时重传、滑动窗口)。IP与MAC地址区别(逻辑寻址 vs 物理寻址)。单播/多播/广播应用场景。
  • 关键答案:TCP三次握手:避免历史连接干扰,确认双方收发能力。
  1. C语言与底层
  • 核心问题:static作用(限制作用域、持久化变量)。volatile原理(禁止编译器优化,强制内存访问)。内存对齐(提升访问效率,避免总线错误)。
  • 关键答案:野指针:指向已释放内存的指针,需初始化为NULL。

二、手撕代码高频题型

  1. 基础算法:字符串处理(IP转换、大数加减)。链表操作(反转、合并、环检测)。二叉树遍历(层序、右视图、最左节点)。
  2. 系统设计:内存池实现(对齐、碎片管理)。数据结构选型(哈希表、红黑树)。

建议:刷透《剑指Offer》+ ****************,重点练习链表、树、字符串题型。

三、项目与软技能

  1. 项目展示
  • 核心问题:项目难点与解决方案(突出调试能力)。开源贡献与自动化测试(CI/CD流程)。团队协作冲突处理(举例说明)。
  • 回答技巧:STAR模型:背景(Situation)→ 任务(Task)→ 行动(Action)→ 结果(Result)(这个地方可以简单理解为发现问题——分析问题——解决问题)。量化成果:如“通过优化设备树匹配逻辑,启动时间减少30%”。
  1. 职业规划
  • 常见问题:为何选择嵌入式/客户端开发?如何看待加班?长期职业目标?
  • 回答建议:技术深度:强调对底层技术的兴趣(如驱动开发、内核优化)。价值观匹配:如“接受合理加班,重视工作效率而非时长”。

四、学习建议

  1. 夯实基础:书籍:《深入理解计算机系统》、《操作系统导论》。实践:在QEMU模拟器上移植Linux,动手写驱动(GPIO、I2C)。
  2. 工具链:调试工具:GDB、ftrace、perf。代码管理:Git分支策略、Code Review流程。
  3. 开源参与:贡献Linux内核或RT-Thread社区,积累代码提交记录。

五、面试策略

  1. 技术复盘:对每个项目提炼3个技术亮点,还有就是BUG调试经验。
  2. 模拟面试:用“牛客网”模拟手撕代码。
  3. 公司调研:提前了解目标公司业务(如地平线-自动驾驶芯片,影石-运动相机)。

最后同样的,如果想继续看后续请点击关注,最后你的鲜花和点赞将是我更新的极大动力。

#牛客创作赏金赛##牛客激励计划##面试经验谈#
全部评论
首评
1 回复 分享
发布于 04-08 23:37 四川
感谢佬,码住
点赞 回复 分享
发布于 04-09 10:29 上海
点赞 回复 分享
发布于 04-09 00:15 江苏

相关推荐

大体上可分为mcu开发和linux底层开发以及linux应用开发。针对学历不好的同学或者没有任何linux基础的研二同学,那么我强烈建议你走mcu开发,因为mcu需求量最大,公司最多,上手最快,并且很多中小公司对学历要求没那么变态。针对学历还不错的同学,同时时间足够的情况下,那么我建议你走linux的方向,因为linux方向的公司高薪会更普遍一些,而且会linux也能面mcu的公司,反过来可能就不行了。而且我看过很多同学的简历,很多同学就算做了linux,但是很多还是偏应用开发,跟底层毫无关系,但是又想走底层,所以大家可以有针对性的去润色一下自己的简历,添加一些跟驱动内核相关的内容在项目里面,这样也能避免简历项目“同质化”严重。具体如何添加,可以看网上帖子如何调试驱动的,遇到了哪些问题,怎么解决的,你只要看懂了,就可以植入到你的简历里。针对研一同学或者大二同学,你时间还很充足,强烈建议从开源之夏做起,夯实自己的基础,做一些有意义提升自己的开源项目。针对研二或者大三的同学,即将面临秋招,时间紧急,如果还缺少项目,那么完全可以借鉴往年开源之夏一些大佬做过的开源项目,代码文档都是全网公开的,选择性针对性地放进你的简历里。当然如果你不用开源之夏,用韦老师的linux相机也没关系,你自己添加内容,注意描述,把别人驱动调试的经验放进你的简历里!!!记住,你这个时候最重要的不是看视频不是看书籍,是润色简历,如何最高效的在你简历中体现出面试官想看的内容,至于怎么来的,没人会去关心。最后同样的,如果想继续看后续请点击关注,最后你的鲜花和点赞将是我更新的极大动力。#牛客创作赏金赛# #牛客激励计划#
等oc的铁锤很喜欢溜溜球:奈子哥,救我。现在在做在riscv架构的cpu设计,还得写一个操作系统,然后把大模型部署上去搞硬件加速,但我根本搞不来,我知道我不是那块料。趁着现在一直在用linux系统就有空学习一下linux嵌入式的方向了。老师布置的任务,除了操作系统那一块比较有用,其他感觉没啥用。
点赞 评论 收藏
分享
评论
56
178
分享

创作者周榜

更多
牛客网
牛客企业服务