面灵AI→

蔚来嵌入式一面:两道现场编程加 C 语言与操作系统基础

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

《面试题目》

  1. 你现在的专业是****,对吗?主要与硬件相关吗?你们专业的大部分同学还是从事硬件相关工作?
  2. 在线编程:反转字符串中的单词(要求使用标准输入/输出,使用 C 或 C++)。
  3. 在线编程:二进制字符串运算(要求自己填写标准输入测试用例)。
  4. 编程结束后说明解题思路。
  5. 进程间通信有哪些方式?
  6. const、static 和 extern 分别有什么作用?
  7. sizeof 和 strlen 有什么区别?
  8. 结构体和联合体有什么区别?
  9. 空指针、野指针和悬空指针分别是什么?
  10. Stack 和 Heap 有什么区别?这里问的是程序运行时的栈和堆。
  11. 你的第一段实习经历是在****,对吗?项目中使用 FPGA 进行原型验证,这家公司是在做原型验证服务,还是开发自己的芯片?
  12. 请介绍你在项目中主要负责的工作,以及开发过程中印象比较深的问题。

《参考解析》

反转字符串中的单词:常见做法是先把整串原地反转,再逐个单词反转回来,空间 O(1);如果要求不能有多余空格、单词间只留一个空格,需要在反转前先做一次紧凑化。用标准输入输出时注意读整行(getline)而不是 cin >>,否则遇到空格就断。讲思路时先说清边界——首尾空格、连续空格、只有一个单词。

二进制字符串运算:本质是大数加减的字符串模拟,从末位往前逐位处理并维护进位;要自己填测试用例,就选空串、长度不等、全 1 进位到新位、出现前导零这几类,面试官看的是你有没有主动覆盖边界。

进程间通信:管道(匿名/命名)、消息队列、共享内存、信号量、信号、Socket。共享内存最快但需要自己配合同步(信号量或互斥锁),管道简单但单向且容量有限。

const / static / extern:const 修饰只读,可用于变量、指针、函数参数与成员函数;static 在函数内延长生命周期、在文件作用域限制链接性、在类内表示属于类而非对象;extern 声明符号在别处定义,用于跨文件引用。

sizeof 与 strlen:sizeof 是编译期运算符,算类型或数组占用的字节数,包含结尾的 \0,对指针得到的是指针本身大小;strlen 是运行期函数,数到第一个 \0 为止的字符数。数组传参退化成指针是经典陷阱。

结构体与联合体:结构体各成员各自占空间(考虑对齐填充),大小是成员之和按最大对齐取整;联合体所有成员共用同一块内存,大小等于最大成员,同一时刻只有一个成员有效,常用于类型双关与节省空间。

三种指针:空指针是明确赋值为 NULL/nullptr 的指针;野指针是未初始化、指向未知地址的指针;悬空指针是原本指向有效对象但对象已被释放或作用域结束的指针。防御手段是初始化、释放后置空、用智能指针或 RAII 管理生命周期。

栈与堆:栈由编译器自动管理,存放局部变量、函数参数与返回地址,分配快、空间小、有溢出风险;堆由程序员申请释放(malloc/free、new/delete),空间大但分配慢、容易碎片化与泄漏。嵌入式里还要考虑栈深度——递归和大的局部数组是最常见的爆栈来源。