嵌入式面经20家+++,速查腾讯、百度、华为、博世、理想、蔚来、影石、科大讯飞、韶音、阳光电源等!

想进大厂做嵌入式?想一次性拿下华为、博世、理想、韶音等20+公司的面试?这份超全嵌入式面经就是你的制胜法宝!

提前刷透这些问题,模拟实战,面试不再慌!

剩下内容都在👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

嵌入式面经20家+完整版如下:第11章 20+公司面经杂谈(一):华为、博世、理想、韶音

立即点击上方查看完整面经,让你的嵌入式面试稳操胜券!下方仅为部分内容,想看最全的内容请点击上方链接!

本篇涉及的所有问题概要:大家可以试试在看参考答案前,提前尝试解答,以便明确自身知识点的不足部分!

1. TCP & UDP了解吗,简单说一下,有什么区别?

2. 好的,那你了解粘包跟拆包吗,这两个协议会出现这个情况吗,为什么呢?

3. 了解编译器优化吗?

4. 刚才你有说到内联函数,你来讲讲它的作用,以及与普通函数的区别,有不建议使用的时候吗?

5. 那么有没有碰到过禁止编译器优化的场景,能举例吗?

6. 看门狗了解吗,说一说独立看门狗与窗口看门狗?

7. 说一说堆(Heap)和栈(Stack)的区别,以及是否自动分配?

8. 重入函数、函数重写、函数重载你了解吗,说一说?

9. 嵌入式开发中,你一般debug会看什么信息?

10. 专栏订阅奖励(支持模仿)——个人创新点问答:我看你在自己设计的FreeRTOS PLUS(我自己取的RTOS名字)内存管理中采用了内存推迟合并策略,这是什么?如何实现的?

---------------------------------------------------------------------------------------------------

1. TCP & UDP了解吗,简单说一下,有什么区别?

TCP(传输控制协议):

  • 面向连接:通信前需要建立连接(三次握手),通信结束时关闭连接(四次挥手)。
  • 可靠传输:数据传输有确认机制、超时重传机制,确保数据可靠性。
  • 有序传输:数据包按发送顺序到达,不乱序。
  • 流量控制与拥塞控制:能动态调整发送速率,避免网络拥堵。
  • 适用场景:网页浏览(HTTP/HTTPS)、文件传输(FTP)、邮件传输(SMTP)等。

UDP(用户数据报协议):

  • 无连接:不需要建立连接,可以直接发送数据包。
  • 不可靠传输:不保证数据包一定送达,不提供确认机制,不进行重传。
  • 无序传输:数据包可能乱序到达。
  • 轻量高效:协议简单,效率高,延迟低。
  • 适用场景:实时通信(视频会议、直播)、网络游戏、DNS查询等对速度敏感但能容忍部分数据丢失的场景。

简单来说:

  • TCP强调可靠性,UDP强调速度和效率。

2. 好的,那你了解粘包跟拆包吗,这两个协议会出现这个情况吗,为什么呢?

粘包与拆包的定义:

粘包:

定义

  • 多个数据包被合并成一个包,接收方无法分辨消息边界。

可能的接收情况

发生原因

  • TCP 发送缓冲区优化:为了减少小数据包的开销,Nagle 算法 可能会将小包合并。
  • TCP 以流方式传输,没有消息边界。
  • 发送方发送的数据 < 接收方 TCP 缓冲区,系统等待数据填满缓冲区后一次性发送。

拆包:

定义

  • 一个数据包被拆成多个小包 进行传输,接收方一次 recv() 可能收到不完整的数据。

可能的接收情况

发生原因

  • 发送方发送的数据 > TCP 缓冲区大小,需要 分片发送
  • 网络传输中的 MTU(最大传输单元)限制,超过 MTU 需要拆分。

TCP与UDP出现的情况:

  • TCP 可能发生粘包或拆包,因为它是 流式传输协议,没有消息边界,数据像流水一样按 字节流 传输。
  • UDP 不会发生粘包或拆包,因为它是 数据报协议,每个 UDP 数据包 有明确的消息边界
  • 如何解决TCP粘包、拆包可能带来的问题:

    (1)固定长度协议

    • 方法:规定 每个数据包固定大小,接收方按固定字节读取。
    • 适用场景:定长结构数据(如传感器数据)。

    优点

  • 解析简单,不需要额外标记消息边界。
  • 缺点

  • 浪费带宽,如果数据不足 1024 字节,仍然要填充。
  • 不适用于变长数据
  • (2)分隔符协议

  • 方法:在数据包间插入特殊 分隔符(如 \n, \0, |),接收方按分隔符拆分数据
  • 适用场景:文本协议(HTTP、Redis)。
    • 接收方

    优点

  • 适用于文本传输。
  • 缺点

    • 数据中包含分隔符时可能误判,需要 转义或编码。

    (3)消息头协议

  • 方法:在 每个数据包前加上消息头(存储数据包长度),接收方 先读取消息头,再根据长度读取数据
  • 适用场景:二进制协议,如 WebSocket、RPC
    • 接收方

    优点

  • 适用于二进制数据,能精确拆分数据包。
  • 缺点

    • 需要额外存储消息头,协议较复杂。

    3. 了解编译器优化吗?

    1. 编译器优化的目的

    编译器优化的主要目标是 提高程序执行效率、减少代码大小,并降低运行时资源消耗,同时 保证代码逻辑正确性

    优化可分为:

    1. 代码级优化:调整代码结构,提高执行速度。
    2. 指令级优化:调整汇编代码顺序,提高 CPU 指令流水线利用率。
    3. 存储优化:减少内存访问,提高缓存命中率。

    2. 编译器优化的主要策略

    编译器在 编译时(compile-time)运行时(runtime) 进行优化,主要包括:

    (1)代码优化

    常量传播(Constant Propagation)

    • 如果变量的值是编译期已知的常量,则用该常量替换变量,减少计算次数。

    优化前

    优化后

    常量折叠(Constant Folding)

    • 编译器提前计算常量表达式,减少运行时计算。

    优化前

    优化后

    死代码消除(Dead Code Elimination)

    • 删除不会被执行的代码,减少程序大小。

    内联展开(Function Inlining)

    • 小函数可以直接展开,避免函数调用的开销。

    优化前

    优化后

    (2)指令优化

    指令重排序(Instruction Reordering)

    • 调整指令执行顺序,提高 CPU 指令流水线利用率。

    优化前

    优化后(可能)

    寄存器分配(Register Allocation)

    • 尽量使用寄存器存储变量,减少内存访问,提高速度。

    优化前

    优化后

    循环展开(Loop Unrolling)

    • 减少循环控制开销,提高 CPU 指令执行效率

    优化前

    优化后

    • 这样可以减少 for 循环的控制开销,提高速度。

    (3)存储优化

    内存对齐(Memory Alignment)

    • 优化数据结构布局,减少 CPU 访问内存的时间

    优化前

    优化后

    这样能 提高 CPU 读取效率,减少缓存行冲突(Cache Miss)。

    缓存优化(Cache Optimization)

    • 提高数据局部性,减少 CPU 访问内存的延迟

    优化前

    优化后(列访问)

    • 减少缓存不命中(Cache Miss),提高 CPU 读取速度。

    3. 现代编译器优化工具

    (1)编译器优化级别

    (2)GCC/Clang 编译器优化选项

  • -O2:启用优化
  • -march=native:针对本地 CPU 优化
  • -flto:启用 链接时优化(Link-Time Optimization)
  • 4. 优化方法总结

    结论

    编译器优化能显著提高程序性能,但可能会引入 并发问题

    指令重排序、寄存器缓存、循环优化 是编译器优化的核心策略。

    使用 -O2-O3 可以让 GCC 进行更高级别优化,提高执行效率

    想进大厂做嵌入式?想一次性拿下华为、博世、理想、韶音等20+公司的面试?这份超全嵌入式面经就是你的制胜法宝!

    提前刷透这些问题,模拟实战,面试不再慌!立即点击查看完整面经,让你的嵌入式面试稳操胜券!

    剩下内容都在👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

    嵌入式面经20家+完整版如下:第11章 20+公司面经杂谈(一):华为、博世、理想、韶音

    #嵌入式岗知多少##嵌入式笔面经分享##嵌入式转岗的难度怎么样##嵌入式#
    全部评论
    博主好帅!您的分享非常有帮助!我是上海一所985土木强校的研二在读生,本科是双非土木;25年3月投了些简历发现很少有自己满意的,面试也约不到,软件算法岗现在准备压力太大了,现在想往嵌入式软件转,有使用ROS2开发移动小车应用程序的经验,请问从现在一直准备到秋招的话有机会拿到大厂的offer吗?
    点赞 回复 分享
    发布于 03-19 15:07 上海
    目前我全部的学习经验,八股,20多家公司面经,全部都在这一个专栏里了,能覆盖你求职过程中99%的问题,主打一站式服务。专栏大纲如下:https://www.nowcoder.com/share/jump/72413151210726074763
    点赞 回复 分享
    发布于 03-15 22:19 浙江

    相关推荐

    🌟&nbsp;个人背景:985硕,无大厂实习,但有两个车载嵌入式项目,刚通过文远知行4轮技术面,分享一手经验!📌&nbsp;面试流程速览笔试:3道编程题(C/C++为主,涉及链表和内存管理)。技术一面:手撕代码&nbsp;+&nbsp;硬件基础(50分钟)。技术二面:系统设计&nbsp;+&nbsp;多线程实战(40分钟)。技术三面(交叉面):项目深挖&nbsp;+&nbsp;行业场景(30分钟)。HR面:离职原因/职业稳定性。时间线:2周速通(面试官效率高,但手撕题难度陡增)。💻&nbsp;技术面真题回忆1.&nbsp;手撕代码题题目1:反转链表的指定区间(如反转第m到第n个节点),要求空间复杂度O(1)。坑点:头节点可能被反转,需用dummy节点占位。楼主评价:“写过N遍的题,但现场卡在指针判空边界,被面试官连环追问”&nbsp;😅题目2:设计一个线程安全的环形缓冲区(Circular&nbsp;Buffer),支持多线程读写。考点:互斥锁、条件变量、内存对齐优化。2.&nbsp;系统设计&nbsp;&amp;amp;&nbsp;硬件基础问题1:如何设计车载CAN总线通信模块?帧ID分配策略、错误处理机制怎么实现?延伸:CAN&nbsp;vs&nbsp;CAN&nbsp;FD的区别、DBC文件解析工具的原理。问题2:在资源受限的嵌入式系统中,如何优化AI模型的推理速度?(如文远知行用的L4级计算平台)参考思路:量化、层融合、利用硬件加速指令(如ARM&nbsp;NEON)。3.&nbsp;操作系统&nbsp;&amp;amp;&nbsp;实战场景灵魂拷问:“Linux内核的实时性差,如何为自动驾驶传感器数据采集设计实时线程?”“SPI通信中遇到时钟信号抖动,如何用示波器定位问题?”楼主答案(仅供参考):实时性方案:Preempt-RT补丁&nbsp;+&nbsp;线程优先级绑定&nbsp;+&nbsp;内存锁页。SPI调试:查时钟频率是否超设备上限,检查地线环路干扰。🔍&nbsp;项目深挖高频问题车载项目1:基于STM32的ADAS预警系统“如何解决毫米波雷达数据与视觉时间戳不同步?”&nbsp;→&nbsp;答硬件中断+PTP协议同步。“滤波算法选型?为什么不用卡尔曼滤波改用滑动窗口均值?”&nbsp;→&nbsp;答资源消耗与实时性权衡。行业场景:“自动驾驶嵌入式系统为什么倾向用ROS&nbsp;2替代ROS&nbsp;1?”(答:DDS协议支持分布式实时通信)💥&nbsp;避坑指南手撕代码:嵌入式必刷**《程序员面试宝典》**指针题,尤其链表/位操作。多写裸机代码(不依赖IDE调试),面试官可能要求白纸手写。项目复盘:准备数据对比图(如优化前后内存占用),展示量化结果。解释清楚为什么用某款MCU/传感器(成本?性能?供应链?)。八股文重点:熟读《ARM&nbsp;Cortex-M权威指南》、Cache一致性协议(MESI)。掌握RTOS调度机制(如FreeRTOS的优先级反转解决方案)。🚀&nbsp;内推内推链接:https://app.mokahr.com/m/campus_apply/jingchi/2137?recommendCode=DS17ugTB#/jobs🎯内推码:DS17ugTB(填码简历优先审!)欢迎提问/补充!祝大家offer拿到手软!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    点赞 评论 收藏
    分享
    评论
    7
    43
    分享

    创作者周榜

    更多
    牛客网
    牛客企业服务