C++ 常考面试题汇总

一、C++ 基础与语法

  1. 指针与引用区别:指针可以为空,可重新指向;引用必须初始化且不可重新绑定。指针的指针、多级指针和函数指针使用。常见陷阱:悬空指针、野指针、const 指针与指针 const 的区别。
  2. 内存模型栈 vs 堆:栈自动管理,速度快,适合局部变量;堆手动管理,需 new/delete。内存泄漏与工具检测:valgrind、asan。对象生命周期:构造、析构、拷贝构造、移动构造。
  3. 类型转换static_cast、dynamic_cast、const_cast、reinterpret_cast 的使用场景和安全性。

二、面向对象编程

  1. 类与对象成员函数、静态成员、虚函数、纯虚函数。构造函数、拷贝构造函数、移动构造函数。explicit 关键字防止隐式类型转换。常考题:为什么析构函数要声明为虚函数?
  2. 继承与多态公有、保护、私有继承的区别。多态实现原理:虚函数表(vtable)。菱形继承与虚继承,如何避免二义性。
  3. 运算符重载常用运算符重载示例:operator+、operator[]、operator<<。成员函数 vs 非成员函数重载。注意返回值类型和 const 限定。

大家假如有需要更加全面的C++ 面试题和 大厂面试题可以订阅本专栏:https://www.nowcoder.com/creation/manager/columnDetail/Mq7XW

三、内存管理与智能指针

  1. 动态内存管理new/delete 与 malloc/free 区别。内存泄漏、双重释放、未定义行为示例。
  2. 智能指针std::unique_ptr:独占所有权,禁止拷贝,可移动。std::shared_ptr:引用计数,循环引用需 std::weak_ptr。std::weak_ptr:解决 shared_ptr 循环引用问题。何时使用裸指针、何时使用智能指针。

四、STL 容器与算法

  1. 容器特性vector:连续内存,随机访问快,插入删除慢。list:双向链表,插入删除快,随机访问慢。deque:双端队列,支持两端高效插入。map/unordered_map:红黑树 vs 哈希表,复杂度分析。set/unordered_set:元素唯一,底层实现区别。
  2. 迭代器输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器。常考题:为什么 vector 插入中间元素效率低?
  3. 算法sort、stable_sort、lower_bound、upper_bound、binary_search。STL 算法与 lambda 表达式结合使用。常考题:如何用 STL 统计出现次数最多的元素?

五、模板编程与泛型

  1. 函数模板与类模板泛型编程的基本形式。模板实例化与特化(完全特化、偏特化)。常考题:模板函数如何支持不同类型参数自动推导?
  2. 模板元编程constexpr、std::enable_if、类型萃取(type traits)。常考题:实现一个 is_same 类型特性或静态断言。

六、异常与错误处理

  1. 异常机制try / catch / throw。异常安全性:基本、强、无异常保证。析构函数抛异常的危险性。
  2. 错误处理策略返回值 vs 异常 vs 错误码。RAII(Resource Acquisition Is Initialization)原则保证资源释放。

七、并发与多线程

  1. 线程与锁std::thread 的创建与管理。互斥锁:std::mutex、std::recursive_mutex。条件变量 std::condition_variable 使用。
  2. 原子操作std::atomic 与 lock-free 编程。内存序(memory_order)的理解。
  3. 常考题如何避免死锁?生产者-消费者模型实现。

八、性能优化与底层机制

  1. 内存对齐与缓存优化对齐规则、结构体 padding。数据局部性与缓存命中率优化。
  2. 编译期优化内联函数(inline)与宏。constexpr 提前计算。
  3. 其他常考题深拷贝 vs 浅拷贝。std::move 与右值引用的实际应用场景。如何判断对象是否可移动?

九、C++11/14/17/20 新特性

  1. 右值引用与移动语义避免不必要的拷贝,提高性能。
  2. Lambda 表达式捕获方式:值捕获、引用捕获、隐式捕获。用于 STL 算法中的高阶函数。
  3. 智能指针与并发改进std::shared_ptr 与 std::weak_ptr。std::atomic 与 std::thread 改进。
  4. 其他auto、decltype、constexpr、structured bindings。范围 for 循环、初始化列表、std::optional、std::variant。

十、面试高频考点总结

  • 指针与引用、内存管理、生命周期。
  • 类与对象、继承与多态、虚函数机制。
  • STL 容器特性与算法复杂度。
  • 模板编程与类型萃取。
  • 异常安全与 RAII。
  • 并发编程、线程安全与死锁。
  • C++11 及以上新特性、移动语义、lambda。

全部评论

相关推荐

点赞 评论 收藏
分享
02-10 15:38
内蒙古大学 Java
本人是小度实习生,帮leader发一下招聘信息,信息来源真实可靠,投递邮箱可私信我~内蒙古呼和浩特外包运维研发人员招聘🥳职位名称:节点运维支持工作地点:内蒙古呼和浩特主要职责:边缘节点日常巡检,&nbsp;针对服务异常节点及时与供应商沟通处理;负责处理供应商反馈信息,维护客户关系,提升客户满意度;供应商上机技术指导,&nbsp;部署后对设备进行准入验证;编写技术文档和用户指南。完成上级主管安排的其他工作事项。职位要求:本科及以上学历,计算机或相关专业;具有良好的沟通表达能力、独立问题分析和解决能力;具有良好的客户服务意识和团队合作意识,能够承受一定工作压力;掌握熟悉网络和操作系统基础知识;有技术支持经验者优先考虑。🥳职位名称:后端研发工程师工作地点:内蒙古呼和浩特主要职责:负责或者参与边缘计算系统相关开发工作;负责服务端工程架构的设计,研发以及优化,技术攻坚等工作;灵活运用各类资源,结合技术手段,优化系统整体成本,确保系统稳定性;协同各个角色完成项目开发落地相关工作。职位要求:计算机相关专业,本科及以上学历;熟练掌握Go/C++/Python等两种以上编程语言,熟悉常用性能分析、调试工具;有Linux服务器后端模块开发经验,了解消息队列、缓存、数据库等组件的使用;有较强的系统问题分析经验和能力,能够解决复杂的系统问题;积极乐观,责任心强,工作认真细致,具有良好的团队沟通与协作能力。🥳职位名称:客户端研发工程师(节点)工作地点:内蒙古呼和浩特主要职责:负责、参与边缘计算相关开发工作;参与产品需求讨论,功能定义,架构设计等;负责端程序在不同架构和系统的移植、适配工作;负责不同业务方程序的镜像部署包的制作工作;负责端程序运行时资源占用优化、性能调优、传输质量提升等。职位要求:计算机相关专业,本科及以上学历;熟练掌握Go/C++编程语言,&nbsp;熟悉常用性能分析、调试工具;熟练掌握单元测试用例编写,&nbsp;静态代码分析等工具,&nbsp;有较好的工程质量意识;Android/Linux至少熟悉一种平台的开发或者调试;网络基础扎实,&nbsp;有较丰富的网络性能优化经历,&nbsp;有过OpenWrt等路由器开发调试经验优先;有较强的系统问题分析经验和能力,能够解决复杂的系统问题;积极乐观,责任心强,工作认真细致,具有良好的团队沟通与协作能力;有&nbsp;github&nbsp;开源项目经验者优先。作者:怕黑的杰尼龟在投简历链接:https://www.nowcoder.com/feed/main/detail/f1457a4e1c2648ed934ec0a9cd700707?sourceSSR=users来源:牛客网
名企内推
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

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