金山 C++ 一面凉经
1. 自我介绍
2. vector 与 list 的区别与使用场景
- vector:连续内存、随机访问快、尾插尾删快、CPU缓存友好
- list:链表结构、任意位置插入删除快、迭代器不失效、随机访问慢
- 场景:高频遍历/读多用 vector,频繁中间插入/删除用 list
3. vector push_back 均摊 O(1) 的原因
- 采用指数扩容(1.5倍/2倍)策略
- 扩容次数极少,所有插入的总拷贝次数为线性级
- 均摊后每次插入的时间复杂度为 O(1)
4. inline 函数与宏的区别
- inline:C++关键字,类型安全、可调试、无副作用、作用域安全
- 宏:纯文本替换,无类型检查、易出错、调试困难
- 现代C++优先使用 inline,弃用宏定义
5. 移动语义与完美转发
- 移动语义:通过右值引用转移资源,避免深拷贝,提升性能
- 完美转发:通过 std::forward 还原参数的左值/右值属性,实现通用转发
- 核心:依赖引用折叠规则(T& + && → T&,T&& + && → T&&)
6. const 与 #define 的区别
- const:C++关键字,有类型检查、作用域限制、可调试
- define:预处理宏,纯文本替换、无类型检查、易出错
- 现代C++优先使用const,弃用宏定义常量
7. 指针与引用的区别
- 指针可空、可修改指向、支持多级指针
- 引用必须初始化、不能为空、不可更换绑定对象
- 引用本质是指针常量,使用更安全
8. new/delete 与 malloc/free 的区别
- new/delete:C++运算符,会调用构造/析构函数、类型安全
- malloc/free:C函数,仅分配/释放内存、无类型检查
- 注意:new/delete 与 malloc/free 不可混用
9. 智能指针的理解与使用
- unique_ptr:独占所有权,不可复制、可移动
- s
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++ 常考面试题总结 文章被收录于专栏
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.
查看18道真题和解析