兆易创新嵌入式开发一面,面试官主要问了这些

1. volatile 关键字有什么作用?它能保证线程安全吗?

答案:

volatile 的作用是告诉编译器,这个变量的值可能会被外部因素修改,因此每次使用都要直接从内存中读取,而不是从寄存器或缓存中取值。

它常用于:

  • 中断与主循环共享变量
  • 多线程共享标志位
  • 硬件寄存器映射

volatile不能保证线程安全,因为它只能保证“可见性”,不能保证“原子性”。如果是复合操作,比如 count++,仍然可能发生竞争问题。

2. const#define 的区别是什么?

答案:

const 是有类型的常量,编译器会做类型检查,调试时也更容易定位。

#define 是预处理宏,本质上是文本替换,没有类型信息。

主要区别:

  • const 有类型安全,#define 没有
  • const 更适合定义常量变量
  • #define 更适合条件编译、宏开关、简单宏表达式

在实际开发里,能用 const 的地方通常优先用 const

3. 指针和引用的区别是什么?

答案:

指针本质上是一个变量,保存另一个变量的地址;引用则是变量的别名。

区别主要有:

  • 指针可以为空,引用定义时必须初始化
  • 指针可以改变指向,引用一旦绑定后不能再改
  • 指针需要解引用访问,引用可以像普通变量一样使用
  • 指针占内存,引用本质上更像语法层封装

在 C 语言和嵌入式底层开发中,指针更常用;在 C++ 接口设计中,引用可读性更好。

4. 什么是栈和堆?它们的区别是什么?

答案:

栈和堆都是内存的一部分,但管理方式不同。

栈:

  • 由系统自动分配和释放
  • 存放局部变量、函数参数、返回地址
  • 分配速度快,但空间通常较小

堆:

  • 由程序员手动申请和释放
  • 常用于动态内存分配
  • 更灵活,但容易产生内存泄漏和碎片

嵌入式系统里通常更谨慎使用堆,因为系统往往更强调可控性和稳定性。

5. 什么情况下会发生内存泄漏?在嵌入式中为什么要特别关注?

答案:

内存泄漏是指申请了内存但没有释放,导致这部分内存后续无法再被使用。

常见情况:

  • malloc 后忘记 free
  • 指针被覆盖,原地址丢失
  • 异常流程中提前返回,未释放资源

嵌入式系统中内存本来就有限,而且设备通常需要长期稳定运行,所以内存泄漏积累后可能导致系统越来越慢,甚至崩溃。

6. static 关键字在 C 语言里有哪些作用?

答案:

static 在不同位置有不同含义。

修饰局部变量时:

  • 变量只初始化一次
  • 生命周期延长到整个程序运行期间
  • 作用域仍然只在当前函数内

修饰全局变量或函数时:

  • 作用域限制在当前文件内
  • 防止外部文件访问,起到隐藏作用

在嵌入式中,static 常用于模块内私有函数、私有全局变量和状态保存。

7. 为什么中断服务函数里不建议做复杂逻辑?

答案:

因为中断

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

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

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

全部评论

相关推荐

投的是智能驾驶测试实习生,面试前半个小时HR临时打电话说改了岗位是系统运维。晕。。面试官是上海那边总部的。1.自我介绍2.为了这个岗位做了哪些准备3.*的区别 (不是很会)4.测试用例怎么编写5.你认为什么样的测试需要自动化,什么样的要手动(回答的不太好,面试官也直接给了正确回答)6.实习主要工作80%软件,20%硬件。软件方面三个方向可选:测试用例,技术支持,还有一个忘了。硬件主要就是固件的刷新,测试台架(即用来模拟车辆软硬件运行环境的测试平台)的软硬件。7.团队名字是测试运维团队,部门是芯片部门,前身是智能硬件部门,AD(Autonomous Driving)部门8.工作环境是在实验室,不上车路测,那是整车部门做的。不是100%在实验室,同时会有100多台台架需要测试9.反问:对实习生的培养路径是怎样的?有没有机会接触更深的内容?前三个月有一对一的导师带教,代码是对实习生开放的,对实习生有75%的硬性指标,就是工作范围之内的任务,可以理解成KPI,还有25%是自己私下可以学习一些其他的,实习肯定是要学到一些东西有所收获的10.前面说的三个方向是可以选的,每个人的条件不一样,工作应该更偏向于测试,部门用的测试框架是pytest,蔚来内部自创的,跟官方的有点区别11.对面试表现感觉怎么样,因为做的是智能驾驶测试实习生的面试准备,面试前半个小时临时改了岗位,因为智驾岗位有在面试流程中的人工智能,大数据专业的可能更适合?比预期要高,回答比较全面,意料之外。12.蔚来的ai的看法和态度?没有什么态度,就像吃饭喝水一样再平常不过,如果非要说个态度就是拥抱AI。13.对于AI编程工具的使用情况?都在用AI,测试之类的大部分都是AI生成+人工审核,运维这方向考虑到涉及的权限和安全问题,还是主要人工14.平时主要工作可能更偏测试,硬件的话有基础要有动手能力更好,需要动手例如焊接电阻电容这种,遇到复杂的解决不了的可以对接硬件工程师面试结束,预计20分钟,实际面试45分钟已收到二面HR面
查看7道真题和解析
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

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