助力求职者快速突破技术面试,掌握核心知识点!
一、基础语法与核心概念
1.指针与引用的区别?
问题:指针和引用在初始化、空值、操作方式上的差异是什么?
解析:
引用必须初始化且不能指向空值,而指针可初始化为空(nullptr)
引用是变量的别名,操作时无需解引用(*),指针需解引用
引用初始化后不可修改绑定对象,指针可重新指向其他对象
答案示例:
int a = 10;
int &ref = a; // 引用必须初始化
int *ptr = &a; // 指针可后续修改指向
2.static关键字的作用
问题:static在不同场景下的用途是什么?
解析:
局部变量:延长生命周期至程序结束,作用域仍为函数内
全局变量/函数:限制作用域至当前文件
类成员:静态成员属于类而非对象,需类外初始化
应用场景:计数器、共享资源管理
3.const与#define的区别
问题:为什么推荐使用const而非宏定义?
解析:
类型安全:const有类型检查,#define仅为文本替换
调试:const可调试,#define在预处理阶段已替换
内存:const分配内存,#define不分配
二、面向对象与多态
虚函数的实现原理
问题:虚函数如何实现多态?虚函数表(vtable)的作用是什么?
解析:
每个含虚函数的类生成一个虚函数表,存储虚函数地址
对象内部包含虚表指针(vptr),指向虚函数表
动态绑定:通过vptr在运行时确定调用的函数
代码示例:
class Base {
public:
virtual void func() { cout << "Base"; }
};
class Derived : public Base {
void func() override { cout << "Derived"; }
};
2.构造函数能否为虚函数?
问题:为何构造函数不能是虚函数?
解析:
虚函数依赖虚表,而虚表在对象构造完成后才初始化。
构造函数用于创建对象,此时虚表尚未建立。
3.析构函数为何需要声明为虚函数?
问题:基类析构函数不声明为虚函数会导致什么问题?
解析:
若基类指针指向派生类对象,非虚析构会导致派生类资源未释放
示例:
Base *ptr = new Derived();
delete ptr; // 若析构非虚,仅调用Base的析构函数
三、内存管理与智能指针
1.malloc与new的区别
问题:动态内存分配时为何优先使用new?
解析:
new调用构造函数,malloc仅分配内存
delete调用析构函数,free直接释放内存。
代码对比
int *p1 = (int*)malloc(sizeof(int)); // 未初始化
int *p2 = new int(10); // 初始化为10
2.智能指针的实现原理
问题:shared_ptr如何通过引用计数管理资源?
解析:
shared_ptr内部维护控制块,记录引用计数。
循环引用问题:需用weak_ptr打破(不增加计数)。
示例:
std::shared_ptr<int> sp1 = std::make_shared<int>(42);
std::weak_ptr<int> wp = sp1;
四、STL与容器
1.vector与deque的区别
问题:为何deque适合频繁头部操作?
解析:
内存结构:vector为连续内存,deque为分块链表
扩容效率:deque无需整体复制,扩容更快
应用场景:vector适合随机访问,deque适合双端插入
2.push_back与emplace_back的差异
问题:为何emplace_back更高效?
解析:
push_back需构造临时对象再拷贝,emplace_back直接构造
代码示例:
std::vector<std::string> vec;
vec.push_back("hello"); // 构造临时string对象
vec.emplace_back("hello"); // 直接构造,无拷贝
五、实战技巧与高频考点
如何避免野指针?
答案:
初始化指针为nullptr。
释放后立即置空:delete ptr; ptr = nullptr;
内存对齐的作用
问题:为何结构体需要内存对齐?
解析:
性能优化:CPU按对齐单位读取数据,减少访问次数。
硬件限制:某些架构要求特定类型必须对齐。
总结与学习资源推荐
掌握以上核心题目,可覆盖80%的C++面试考点!如需系统学习,推荐以下资源:
https://【奇牛编程超级C语言C++教程,碾压同类视频,学不会https://www.bilibili.com/video/BV1YV4y1s7eP/?share_source=copy_web&vd_source=10f53796494caccb15af217d074fe0c2
立即行动,抢占Offer先机!