CVTE C++ 软件开发 一面 面经

1. 自我介绍

面试官您好,我叫XXX,本科/硕士就读于XX大学XX专业,主要技术方向是C++后台开发。在校期间做过XXX项目,主要负责XXX模块,用到了XXX技术栈。实习期间在XX公司做了XXX,主要解决了XXX问题。目前对网络编程、并发编程比较感兴趣,希望能在贵公司继续深耕这个方向。

2. C++11 你用得比较多的特性有哪些?

用得比较多的有以下几类:

移动语义和右值引用:通过std::move避免不必要的深拷贝,在传递大对象时性能提升明显。

智能指针:unique_ptr、shared_ptr、weak_ptr,解决手动管理内存容易泄漏的问题。

lambda表达式:配合STL算法或异步回调使用,代码更简洁。

auto和范围for:减少冗长的类型声明,提升可读性。

std::thread和std::mutex:标准库层面的多线程支持,跨平台。

std::function和std::bind:用于回调封装,在事件驱动模型里很常用。

3. 介绍一下几种智能指针,各自的使用场景?

unique_ptr:独占所有权,不可拷贝只能移动,开销最小,适合明确只有一个所有者的场景,比如工厂函数返回堆对象。

shared_ptr:引用计数,允许多个指针共享同一对象,对象在最后一个shared_ptr析构时释放。适合对象生命周期需要被多处共享管理的场景。

weak_ptr:不增加引用计数,配合shared_ptr使用,主要用来打破循环引用。使用前需要lock()提升为shared_ptr再访问,避免悬空。

常见陷阱:两个对象互相持有对方的shared_ptr会导致循环引用,引用计数永远不归零,内存泄漏。解决方案是其中一方改用weak_ptr。

4. enable_shared_from_this 有哪些注意事项?

enable_shared_from_this 用于在类的成员函数内部安全地获取指向自身的 shared_ptr。

注意事项:

第一,对象必须已经被shared_ptr托管,才能调用shared_from_this()。如果对象是栈上分配的,或者还没有被任何shared_ptr持有,调用会抛出bad_weak_ptr异常。

第二,不能在构造函数里调用shared_from_this(),因为此时shared_ptr还没有构造完成,内部的weak_ptr还没被初始化。

第三,继承enable_shared_from_this时要用public继承,否则内部机制无法正常工作。

典型使用场景是异步回调里需要延长对象生命周期,比如在网络库里,一个连接对象把自身的shared_ptr传给异步操作的回调,保证回调执行时对象还活着。

5. STL常用容器有哪些,vector 和 list 分别适合什么场景?

常用容器分三类:

序列容器:vector、list、deque、array。关联容器:map、set,底层红黑树,有序。无序容器:unordered_map、unordered_set,底层哈希表

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++八股文全集 文章被收录于专栏

本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务