CVTE 软件开发工程师-C++ 一面
1. 自我介绍
如果不会, 可以看看我这篇文章 : 记住这几个回答,起码面试不减分
2. 针对之前的实习进行提问
3. vector 的 push_back 和 emplace_back 有什么区别
- push_back:先创建临时对象,再拷贝/移动到容器,存在额外开销;
- emplace_back:直接在容器内存原地构造,无临时对象,效率更高;
- C++11 后优先使用 emplace_back。
代码示例
#include <vector>
#include <string>
using namespace std;
int main() {
vector<string> v;
// push_back:创建临时对象 + 移动
v.push_back("hello");
// emplace_back:原地构造,无临时对象
v.emplace_back("world");
}
4. vector 的扩容原理
vector 是连续内存的动态数组,容量不足时会自动扩容:
- 扩容倍数:通常 1.5倍 或 2倍;
- 步骤:开辟新内存 → 拷贝/移动旧数据 → 释放旧内存;
- 扩容会导致迭代器、指针全部失效;
- 可使用 reserve 预先分配空间,减少扩容。
扩容触发代码
vector<int> v;
for (int i=0; i<10; i++) {
v.push_back(i);
// 容量不足时自动扩容
}
5. 实习项目中使用到的设计模式
6. 介绍一下单例模式两种设计思路
(1)饿汉模式
程序启动时就创建实例。
class Singleton {
private:
static Singleton instance;
Singleton() {}
public:
static Singleton& getInstance() {
return instance;
}
};
Singleton Singleton::instance;
(2)懒汉模式
第一次使用时才创建。
class Singleton {
private:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
7. 哪种单例模式是线程安全的
- 饿汉模式:天然线程安全;
- C++11 magic static 懒汉:线程安全(最推荐);
- 双检查锁(DCL)懒汉:线程安全。
线程安全最优写法(C++11)
class Singleton {
private:
Singleton() {}
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
};
8. 饿汉模式的单例模式是否线程安全
是线程安全的。饿汉模式在程序进入 main 函数前就完成初始化,不存在多线程竞争问题,可安全使用。
9. 函数重载和函数重写的区别
函数重载(同一类)
- 函数名相同,参数不同;
- 无 virtual,编译期确定。
class A {
public:
void f(int x) {}
void f(double x) {}
};
函数重写(继承关系)
- 函数名、参数、返回值完全相同;
- 必须带 virtual,运行期多态。
clas
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++ 常考面试题总结 文章被收录于专栏
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.