TechCPP
【C++面试&C++学习指南】 这里整理了C++后端研发工程师面试和工作必备的知识点 。
Install / Use
/learn @youngyangyang04/TechCPPREADME
如下是C++后台研发技术路线以及知识点,这里有很多细节,还需要不断完善。
欢迎大家提交PR来一起完善这个知识库,成为contributor!
👉 如果你是编程零基础,或者想入门C++,推荐 【卡码网】C++基础课 👉 如果你有C++基础,想手写STL,推荐 【卡码网】手写简单版本STL(C++)
C++primer B站视频讲解
(玩命更新ing...)
编程语言C++
- C++primer5笔记代码资料
- volatile static const extern等关键字
- 宏定义和展开、内联函数区别
- 常用库函数实现
- STL原理及实现
- 虚函数的作用和实现原理,什么是虚函数,有什么作用?
- C++ 内存分配机制
- 指针
- override和overload的区别
- 写string类的构造,析构,拷贝函数
- C++中类成员的访问权限有那些?
- C++多态的实现有那几种?他们有什么不同?
- C++中右值引用有什么作用?
- 面向对象的三大特征是什么
- 静态分配内存和动态分配内存有什么区别?
- C++结构体内存对齐
- 讲一讲C++中的原子操作有那些?
- 简单说说STL中的优先级队列是如何实现的?
- C++中动态链接库和静态连接库的区别是什么?
- 在C++中,对一个对象先malloc后delete这样使用可以吗?有什么风险?
- 在C++中,三个全局变量相互依赖,程序应该如何初始化呢?300个呢?
- STL中的优先级队列是如何实现的?
- 如果拿到虚函数表的储存地址,是否可以改写虚函数表的内容?
- 在C++中为什么需要深拷贝,浅拷贝会存在哪些问题?
- 如何构造一个类使得只能在堆上或者栈上分配内存?
- 什么是C++的内存模型?
- 指针和引用在内存中的表现形式有何不同?
- 内存映射文件是什么?如何用它来处理大文件?
- C++中结构体内存布局的规则是什么?
- 在C++中,用堆和用栈谁更快一点?
- C++中struct和class有什么区别?
- 如果A这个对象对应的类是一个空类,那么sizeof(A)的值是多少?
- 如果A这个指针指向一个数组,那么sizeof(A)的值是多少?
- 如果A是某一个类的指针,那么在它等于nullptr的情况下能直接调用里面的A对应类里面的public函数吗?
- STL中一般都有那些常见的算法库呢?
- C++中,结构体可以直接赋值吗?
- #define和const的区别有那些?
- 在C++的map中,[]与insert有那些区别?
- 在32位和64位系统中,指针分别为多大?
- weak_ptr是如何解决shared_ptr循环引用的?
- 虚函数是否可以声明为static?
- 如何使用gdb来定位C++程序中的死锁?
- C++中常用的类优化技术有那些?
- C++的atomic<bool>代码底层是如何实现的?
- 原子变量的内存序是什么?
- 什么是左值?什么是右值?有什么不同?
- 什么是完美转发?
- C++中四种cast的转换?
- 内存池是什么?在C++中如何设计一个简单的内存池?
- STL中,map的底层是如何实现的?
- STL中,set的底层是如何实现的?
- set,mutiset,map,mutimap之间都有什么区别?
- 在C++的算法库中,find()和binary_search()有什么区别?
- lower_bound()和upper_bound()有什么区别?
- 为什么需要allocator?他在STL中有什么作用?
- 什么是RAII原则,他在STL是怎么应用的?
- STL容器是线程安全的吗?
- 什么是泛型编程,他在STL中是怎么使用的?
- 如何选择合适的STL容器
- 函数参数的入栈顺序是什么,从左到右还是从右到左?
- 讲讲函数调用的过程
- git的merge和rebase有什么区别?
数据结构与算法
- 数据结构与算法学习攻略
- 数组和链表的区别、适用场景
- 栈和队列的区别、适用场景
- 什么时候会产生栈溢出,为什么一直递归就会栈溢出
- 循环队列怎么实现
- 什么是二叉树、二叉搜索树、平衡二叉树、完全二叉树、满二叉树
- 二叉树和链表的区别
- 什么是哈夫曼树?构造过程?应用场景
- 什么是堆?如何维护堆
- 什么是红黑树?红黑树与平衡二叉树、B/B+ 树的区别
- 什么是跳表?跳表和平衡二叉树的区别
- 如何判断图中是否有环(拓扑排序)
- 时间复杂度和空间复杂度的定义?时间换空间 & 空间换时间的例子有哪些
- 常见排序算法及其时间复杂度、各种排序算法对比
- 内存有限,怎么对100亿数据进行排序(大数据小内存排序问题,答案不唯一)
- 如何判断某网页的URL是否存在于包含100亿条数据的黑名单上(大数据小内存去重问题,答案不唯一)
- 检查手机号是否存在于百万数据电话号中(答案不唯一)
- 内存有限,如何在20亿个整数中找到出现次数最多的数(答案不唯一)
- 内存有限,如何在 40 亿个非负整数中找到所有未出现的数(答案不唯一)
- 内存有限,如何在 100 亿数据中找到中位数(答案不唯一)
- 内存有限,如何在 2 亿个整数中找出不连续的最小数(答案不唯一)
设计模式
操作系统
- linux的内存管理机制,内存寻址方式,什么叫虚拟内存,内存调页算法,任务调度算法
- 锁:互斥锁,乐观锁,悲观锁
- 动态链接和静态链接的区别
- 常见的信号、系统如何将一个信号通知到进程
- linux系统的各类同步机制、linux系统的各类异步机制
- 如何实现守护进程
- 标准库函数和系统调用的区别
- 协程是什么,为什么需要协程
- 进程的状态转换有那些?
- 什么是进程?什么是线程?他们的区别是什么?
- 进程间的通信方式有那些?
- 线程间的通信方式有那些?
- 线程,进程和协程是否有自己独立的堆区和栈区?
- 什么是PCB?
- 分页和分段的区别是什么?
- 为什么有了进程还需要线程和协程?
- 外中断和内中断有什么区别?
- 什么是僵尸进程?
- 程序编译的过程
- 并行和并发的区别
- 什么是缺页中断
- 为什么用户态和内核态的相互切换过程开销比较大
- 介绍下分层存储体系和 CPU 三级缓存
- 为什么 CPU访问寄存器的速度比访问内存或CPUCache 的速度快
- 固态硬盘和机械硬盘区别
- 操作系统本身为用户提供什么功能
- 什么是缓冲区溢出?
- 介绍下进程的地址空间(虚拟地址和物理地址)
- 一段代码从程序到执行经历怎么样的过程(程序在计算机中是如何运行起来的)
- 什么是页表、什么是快表
- 从本地读取一个文件通过网络发送到另一端,中间涉及几次拷贝
- 单线程怎么保证高并发?
- select/poll/epoll 分别讲讲
linux 服务器
计算机网络
- [OSI七层模型分别是?各自的功能分别是什么?](./problems/OSI七层模型分
View on GitHub80/100
Security Score
Audited on Apr 3, 2026
No findings
