嵌入式大厂面经 C++常见面试题(持续更新中!)
这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!
1. 基础概念
1.1 C++与C的区别
- C++支持面向对象编程(封装、继承、多态)
- C++支持函数重载
- C++有引用类型
- C++有异常处理机制
- C++支持模板编程
- C++有标准模板库(STL)
1.2 面向对象的三大特性
- 封装:将数据和操作数据的方法绑定在一起,对外部隐藏实现细节
- 继承:子类继承父类的特性,实现代码复用
- 多态:同一操作作用于不同对象,产生不同的执行结果
2. 内存管理
2.1 内存分区
- 栈区:存放函数参数、局部变量等,由编译器自动分配释放
- 堆区:动态内存分配,需要手动释放
- 全局区/静态区:存放全局变量、静态变量等
- 常量区:存放常量
- 代码区:存放程序的二进制代码
2.2 内存泄漏
内存泄漏指程序分配的内存由于某种原因未被释放,常见原因:
- 忘记调用delete/delete[]
- 指针重新赋值导致原内存无法访问
- 循环引用导致引用计数无法归零
2.3 智能指针
- unique_ptr:独占所有权,不能复制,可以移动
- shared_ptr:共享所有权,使用引用计数
- weak_ptr:不控制对象生命周期,解决循环引用问题
std::unique_ptr<int> p1(new int(5)); std::shared_ptr<int> p2 = std::make_shared<int>(10); std::weak_ptr<int> wp = p2;
3. 类与对象
3.1 构造函数与析构函数
- 构造函数:初始化对象
- 析构函数:清理资源
- 拷贝构造函数:用一个已存在的对象初始化新对象
- 移动构造函数:用一个临时对象初始化新对象
3.2 虚函数与纯虚函数
- 虚函数:允许子类重写的函数,使用virtual关键字
- 纯虚函数:没有实现的虚函数,使用=0声明
- 抽象类:包含至少一个纯虚函数的类,不能实例化
class Base { public: virtual void func() { cout << "Base::func" << endl; } virtual void pureFunc() = 0; // 纯虚函数 };
3.3 虚函数表
- 每个包含虚函数的类都有一个虚函数表
- 每个对象都有一个指向虚函数表的指针(vptr)
- 虚函数表存储虚函数的地址,实现动态绑定
3.4 多态实现原理
- 静态多态:函数重载、运算符重载,编译时确定
- 动态多态:通过虚函数实现,运行时确定
4. 高级特性
4.1 模板
- 函数模板:实现类型参数化的函数
- 类模板:实现类型参数化的类
- 模板特化:为特定类型提供特殊实现
template<typename T> T max(T a, T b) { return a > b ? a : b; } template<typename T> class Vector { T* data; size_t size; public: // ... };
4.2 STL
- 容器:vector, list, map, set等
- 算法:sort, find, for_each等
- 迭代器:连接容器和算法
- 函数对象:可调用的对象
4.3 右值引用与移动语义
- 左值:有名字、可取地址的表达式
- 右值:临时对象、字面常量等
- 右值引用:使用&&声明,可以绑定到右值
- 移动语义:避免不必要的复制,提高性能
void func(int&& x) { // 使用右值引用参数 } // 移动语义 std::vector<int> v1{1, 2, 3};
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。