有小伙伴问我要一些C++的学习题目/面试题目,我这里总结了一下分享给大家,大家可以自行去回答下面的问题,看看可以解答多少个。
注:懒人版附代码与答案会在文末星球详细讲解。
大纲
基础概念
面向对象编程
STL(标准模板库)
内存管理
并发编程
模板与泛型编程
现代 C++(C++11/14/17/20)
优化相关
系统定位与调试
基础概念
nullptr
和NULL
的区别?什么是 RAII(Resource Acquisition Is Initialization)?
解释
auto
关键字的作用及其使用场景。static
关键字的使用场景有哪些?什么是
volatile
?什么是未定义行为?举例说明。
解释 C++ 中的值传递和引用传递,如何选择?
面向对象编程
解释 C++ 中的多态性,它是如何实现的?
什么是虚继承,解决什么问题?
类继承的访问修饰符
public
、protected
、private
的作用是什么?如何实现抽象基类?
什么是菱形继承?抽象类?
拷贝赋值运算符如何实现?有什么注意点?
如何防止对象拷贝和赋值?(如删除拷贝构造函数与赋值运算符)
STL(标准模板库)
std::map
和std::unordered_map
的区别是什么?什么是迭代器失效,如何避免?
std::set
和std::unordered_set
的区别是什么?如何删除
std::vector
中的特定元素?std::shared_ptr
的引用计数是如何工作的?STL 中容器的时间复杂度(如
std::vector
、std::list
的插入、删除和访问复杂度)?如何自己实现一个简化版的
std::vector
?
内存管理
什么是内存泄漏,如何避免?
std::unique_ptr
和std::shared_ptr
的区别是什么?如何调试和解决内存泄漏问题?
C++ 的内存分配模型是什么?
解释栈和堆内存,它们的区别?
指针悬挂(Dangling Pointer)和野指针(Wild Pointer)的区别?
RAII 如何协助资源管理与内存泄漏防止?
并发编程
如何使用
std::mutex
实现线程同步?如何避免死锁?举例说明一种策略。
解释
std::future
和std::promise
的用法。如何实现线程池?
std::atomic
在 C++11 中如何实现原子操作?解释什么是 false sharing 及其优化方法?
C++ 中线程的生命周期?
模板与泛型编程
什么是函数模板和类模板,如何使用?
模板特化是什么?举例说明。
解释 SFINAE(Substitution Failure Is Not An Error)。
如何实现类型萃取(type traits)?
decltype
和std::enable_if
如何配合使用?模板元编程的优缺点是什么?
什么是 CRTP(Curiously Recurring Template Pattern)?
现代 C++(C++11/14/17/20)
C++11 中的右值引用和移动语义如何工作?
C++11 引入的
override
和final
关键字有何作用?为什么要使用它们?C++11 引入的
auto
和decltype
有什么区别?它们的使用场景是什么?C++11 中的
std::thread
和std::async
有什么区别?什么时候使用哪一个?std::move
和std::forward
的区别?如何使用
std::condition_variable
实现生产者-消费者模式?C++17 中的结构化绑定(Structured Bindings)是什么?
C++20 的协程(coroutines)如何工作,什么场景下适合使用?
解释 C++14 中
std::make_unique
的作用?constexpr
在现代 C++ 中的作用是什么?C++
variant
与union
有何区别?Lambda 表达式如何捕获外部变量,如何使用
mutable
关键字?C++20 中的
std::jthread
有哪些改进?它与std::thread
有什么不同?解释 C++ 中的内存序(memory order)模型,如何用它保证并发操作的可见性?
C++17 中的折叠表达式(fold expression)是什么?如何在可变参数模板中使用?
C++20 的三重比较(three-way comparison,
<=>
)是如何实现的?它有什么用处?
优化相关
如何进行 C++ 代码的性能分析?
编译器如何决定函数是否进行内联优化?
如何避免常见的 C++ 性能陷阱,如对象拷贝和内存管理问题?
系统定位与调试
如何调试段错误(Segmentation Fault)?
如何使用
gdb
对 C++ 程序进行调试?如何分析和调试多线程竞争条件?
如何使用 Valgrind 检测内存泄漏和竞争条件?
如何使用
strace
和ltrace
跟踪系统调用?如何使用
perf
工具进行性能分析?objdump
和nm
如何帮助你理解可执行文件的结构?
一起探索更多C++项目/知识~
往期推荐:
向量数据库milvus源码剖析之开篇
热度更新,手把手实现工业级线程池
玩转cpp小项目星球3周年了!