影石嵌入式1面
C++相关
-
简单介绍一下OOP(面向对象)的特性是什么?
- 继承、封装、多态
-
平时写代码(C++)写的比较多是吗?
-
有用过哪些设计模式呢?(比如工厂模式有了解吗?)
- 没答上,之后优先看设计模式部分
-
你提到的内存管理熟悉,具体是指哪一部分?(内存碎片还是内存回收?)
- 内存回收:RAII原则,“以对象管理资源”
-
如果用智能指针,会出现没有被释放掉的情况吗?
- 循环引用
- 智能指针虽然极大降低了内存管理的心智负担,但它管理的是对象的生命周期。如果我们在逻辑上创造了闭环的引用关系(如循环引用),或者错误地移交了所有权(如 release 之后未手动释放),内存依然会泄露。因此,理解 shared_ptr 的引用计数机制和 weak_ptr 的辅助作用是至关重要的。
-
有了解过 weak_ptr 吗?它的工作原理是什么?
-
你有了解过RAII编程规范吗?
- 将资源的生命周期和对象的生命周期绑定
- 封装资源: 设计一个类来封装资源(如一个 FileHandler 类封装文件句柄)。
- 构造函数获取资源: 在构造函数中完成资源的初始化。如果获取失败,抛出异常。
- 析构函数释放资源: 在析构函数中完成资源的释放。
- 使用栈对象: 在业务代码中通过创建该类的局部对象(栈对象)来使用资源。
-
弱引用(weak_ptr)是为了解决什么样的问题?
-
弱引用的实现原理是什么样的?
-
弱引用在C++中一般处于什么样的一个设计模式?
-
如果出现了内存泄露或“踩内存”,你一般是怎么去定位的?
-
new 方法和 malloc 有什么区别?
-
你有了解过一些标准的内存申请库文件吗?
-
你了解“零拷贝”这个概念吗?
操作系统相关
- 关于操作系统,你主要对哪一块比较熟悉?
- 简单讲一下进程和线程之间的区别是什么?
- 多进程之间通信(IPC)一般有哪些方法?
- 多线程之间通信,如果想把本地数据传给对端,能直接把指针传给对方吗?
- 如果不能传指针,你要怎么进行数据传输?(如果不传指针传什么?)
- 你说直接传申请的一片内存,那这个内存什么时候释放?(是一调接口就直接清理掉吗?会不会传到一半就被释放了?)

查看17道真题和解析