C++ 面试模拟03

第一部分:基础知识

  1. C++ 中的右值引用和左值引用有什么区别?它们在移动语义中的作用是什么?
  2. C++ 中的构造函数有哪几种类型?它们分别在什么时候调用?
  3. 什么是栈内存和堆内存?它们的使用场景及各自的优缺点是什么?
  4. C++ 中 inline 关键字的作用是什么?什么时候使用它?
  5. 什么是未定义行为(undefined behavior)?举例说明几种常见的未定义行为。

第二部分:面向对象编程

  1. 什么是多态?如何在 C++ 中实现多态?
  2. C++ 中的构造函数、析构函数和拷贝构造函数有什么区别?
  3. 什么是虚函数?如何实现动态绑定?虚函数表(vtable)在多态中的作用是什么?
  4. 什么是接口类?如何在 C++ 中实现一个接口类?
  5. 解释菱形继承问题以及如何通过虚继承来避免它。

第三部分:STL

  1. std::vectorstd::deque 的区别是什么?它们各自的优缺点是什么?
  2. STL 中的迭代器失效是什么?在什么情况下迭代器会失效?如何避免?
  3. std::mapstd::unordered_map 的底层实现有什么不同?各自的时间复杂度是多少?
  4. 解释 std::shared_ptrstd::unique_ptr 的区别。它们如何进行内存管理?
  5. C++ 中的容器 std::priority_queue 是如何实现的?在什么情况下使用它?

第四部分:并发与多线程

  1. C++11 引入了哪些并发相关的库或特性?
  2. std::thread 如何创建和管理线程?如何使用 join()detach()
  3. 什么是互斥锁(mutex)?C++ 中如何使用 std::mutex 保证线程安全?
  4. 解释条件变量(std::condition_variable)的作用,并给出使用示例。
  5. 如何避免死锁?在多线程编程中有哪些常见的策略?

第五部分:C++ 高级特性

  1. 什么是 SFINAE?如何在模板编程中使用 SFINAE 来实现不同的行为?
  2. C++ 中的 constexprconst 有什么区别?在什么情况下应该使用 constexpr
  3. C++20 中的模块化(Modules)有什么特点?它相较于传统头文件机制有什么优势?
  4. 解释移动构造函数和移动赋值运算符的作用及其实现方法。
  5. C++ 中如何实现一个泛型函数?如何使用模板特化(template specialization)?

第六部分:现场编程

题目 1:实现一个线程安全的单例模式。

要求:

  • 使用双重检查锁定(double-checked locking)来确保单例的线程安全性。
  • 提供懒汉式(lazy initialization)单例创建。
题目 2:给定一个整型数组,编写一个函数,将数组中的元素反转,要求时间复杂度为 O(n),空间复杂度为 O(1)。

方法:双指针;类似翻转字符串;

答案:

C++知识点/面试问题指南-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值