1. C++笔试常见题型解析
作为C++开发者,笔试是求职过程中无法回避的环节。最近在准备面试时,我整理了第二波常见的C++笔试题型,这些题目往往能真实反映候选人的基本功底。不同于基础语法题,这类题目更注重考察对C++核心机制的理解深度。
从内存管理到多线程编程,从模板元编程到现代C++特性,这些题目覆盖了中高级开发者必须掌握的技能点。我在实际面试中多次遇到类似问题,也见证了它们如何有效区分不同水平的候选人。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 内存管理相关题目
2.1 智能指针的实现原理
面试官常要求手写简化版的shared_ptr,这需要理解引用计数机制。核心在于控制块的实现:
cpp复制template<typename T>
class SimpleSharedPtr {
T* data;
int* count;
public:
explicit SimpleSharedPtr(T* ptr) : data(ptr), count(new int(1)) {}
~SimpleSharedPtr() {
if (--(*count) == 0) {
delete data;
delete count;
}
}
// 拷贝构造和赋值运算符需要增加引用计数
};
关键点:
- 控制块需要动态分配以保证多对象共享
- 拷贝构造和赋值时要正确处理引用计数
- 线程安全问题(面试进阶点)
注意:实际面试中可能会追问循环引用问题及weak_ptr的解决方案
2.2 内存对齐问题
结构体内存布局是高频考点,比如:
cpp复制struct Example {
char a; // 1字节
int b; // 4字节(需要3字节填充)
double c; // 8字节
char d; // 1字节(需要7字节填充)
};
在64位系统上,这个结构体的大小不是14字节而是24字节。面试时需要解释:
- 对齐原则(通常按最大成员类型对齐)
- #pragma pack的作用
- alignas关键字(C++11)
3. 多线程与并发编程
3.1 线程安全的单例模式
双检锁模式是经典考题:
cpp复制class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance; // C++11保证静态局部变量线程安全
return instance;
}
// 删除拷贝构造和赋值
Singleton(const Singleton&) = delete;
Singleton& operator=(con
