零声-C++ 后端面试攻略(Leetcode 剑指 Offer)

补全 C++ 栈与链表实战短板

很多 C++ 后端开发者在面试中卡壳,不是因为算法逻辑不懂,而是对 STL 容器底层实现不熟,或者链表操作容易出 Bug。本系列直接针对《剑指 Offer》中高频出现的栈与链表题型,带你用代码拆解“双栈实现队列”、“含 min 函数的栈”等经典结构。你不再需要死记硬背模板,而是通过“仅用递归和栈操作逆序栈”这种变式训练,彻底掌握容器操作的边界条件与内存管理技巧,解决面试中关于数据结构底层原理的追问。

攻克字符串处理与二叉树遍历难题

字符串操作与二叉树遍历是 C++ 后端笔试的必考点,也是区分初级与中级开发的关键。课程将带你逐个击破“最长不含重复字符子串”、“字符串排列”以及“二叉树序列化与反序列化”等难点。特别是针对“二叉树节点间最大距离”、“最近公共祖先”等需要多轮遍历或递归回溯的题目,我们将分析如何优化递归深度避免栈溢出,以及如何在 C++ 中高效处理内存泄漏风险,确保你在面对复杂树形结构时能输出最优解。

动态规划思路与综合路径规划

当基本数据结构掌握后,进阶的算法题往往涉及动态规划与综合路径规划。本模块聚焦于“矩阵最小路径和”、“换钱方法数”等典型动规问题,教你如何用 C++ 定义状态转移方程并处理初始化陷阱。建议先完成前几章的基础数据结构,再过渡到这里。学完这一部分,你应能独立写出“剪绳子”、“二进制中 1 的个数”等算法的 C++ 实现代码,并能在 OJ 上通过中等难度测试用例。配合提供的视频练习,请动手敲出每一行代码并运行调试,不要只看视频不动手,只有亲手调试过边界情况,才能真正应对面试中的手写板环节。

课程目录

08_01-用两个栈实现队列_.mp4 71.03M
08_02-包含min函数的栈_.mp4 50.88M
08_03-队列的最大值_.mp4 92.19M
08_04-用一个栈实现另一个栈的排序_.mp4 66.53M
08_05-仅用递归和栈操作逆序一个栈_.mp4 74.09M
08_06-链表中倒数第 k 个节点_.mp4 48.91M
08_07-链表中环的入口节点_.mp4 96.97M
08_08-反转链表_.mp4 89.53M
08_09-从尾到头打印链表_.mp4 64.56M
08_10-两个链表的第一个公共节点_.mp4 65.53M
09_01-第一个只出现一次的字符_.mp4 19.44M
09_02-最长不含重复字符的子字符串_.mp4 94.16M
09_03-字符串的排列_.mp4 174.50M
09_04-反转字符串_.mp4 35.56M
09_05-把数字翻译成字符串_.mp4 139.41M
09_06-重建二叉树_.mp4 106.22M
09_07-二叉树的下一个节点_.mp4 109.50M
09_08-树的子结构_.mp4 100.81M
09_09-二叉树展开为链表_.mp4 112.97M
10_01-对称的二叉树_.mp4 54.25M
10_02-从上到下打印二叉树_.mp4 83.59M
10_03-序列化二叉树_.mp4 88.19M
10_04-二叉树节点间的最大距离_.mp4 89.31M
10_05-二叉树中和为某一值的路径_.mp4 134.59M
10_06-二叉树的最近公共祖先_.mp4 107.19M
10_07-剪绳子_.mp4 77.44M
10_08-二进制中1的个数_.mp4 69.00M
11_01-矩阵的最小路径和_.mp4 81.00M
11_02-换钱的方法数_.mp4 192.44M
11_03-换钱的最小货币数_.mp4 98.62M
11_04-最长公共子序列问题_.mp4 110.81M
11_05-最长公共子串问题_.mp4 94.66M
11_06-数组中的最长连续序列_.mp4 55.91M
11_07-最长递增子序列_.mp4 163.28M
11_08-子矩阵的最大累加和问题_.mp4 58.44M
12_01-进程和线程的区别?_.mp4 38.34M
12_02-操作系统中进程与线程的切换过程_.mp4 53.72M
12_03-请描述系统调用整个流程_.mp4 56.25M
12_04-后台进程有什么特点_.mp4 77.56M
12_05-进程间通信有哪几种方式_.mp4 52.81M
12_06-操作系统中进程调度策略有哪几种_.mp4 87.53M
12_07-线程同步的方式_.mp4 110.81M
12_08-CAS是怎样的一种同步机制_.mp4 64.75M
12_09-CPU 是怎么执行指令的_.mp4 97.19M
13_01-用户态和内核态的区别_.mp4 56.22M
13_02-内存管理有哪几种方式_.mp4 91.38M
13_03-malloc 是如何分配内存的_.mp4 82.28M
13_04-页面置换算法有哪些_.mp4 108.03M
13_05-谈谈 cpu cache 一致性工作原理_.mp4 149.75M
13_06-写文件时进程宕机,数据会丢失吗_.mp4 85.47M
13_07-磁盘调度算法有哪些_.mp4 65.56M
14_02-MySQL cpu 飙升,该怎么处理_.mp4 44.47M
14_03-如何定位以及优化 SQL 语句的性能问题_.mp4 18.44M
14_04-什么是视图_为什么使用视图_.mp4 41.62M
14_05-SQL语句在MySQL是如何执行的_.mp4 94.16M
14_06-索引在什么情况下会失效_.mp4 60.91M
14_07-MySQL 索引的目的和代价_.mp4 16.19M
14_08-主键索引和唯一索引的区别_.mp4 57.16M
14_09-聚集索引和辅助索引的区别_.mp4 70.62M
15_01-什么是覆盖索引_原理是什么_.mp4 30.09M
15_02-undolog和redolog有什么作用_.mp4 85.50M
15_03-什么是最左匹配规则,原理是什么_.mp4 34.47M
15_04-什么是索引下推,原理是什么_.mp4 67.88M
15_05-InnoDB 与 MyISAM 的区别_.mp4 33.28M
15_06-索引为什么要用B+树而不是二叉树或B树_.mp4 81.75M
16_01-数据库事务的四个特性以及含义_.mp4 58.16M
16_02-脏读、幻读、不可重复读出现的原因原理_.mp4 96.47M
16_03-不可重复读与幻读的区别_.mp4 52.91M
16_04-SQL注入原理,如何避免SQL注入_.mp4 58.00M
16_05-MySQL死锁问题产生的原因以及如何解决_.mp4 88.22M
16_06-MVCC 底层原理_.mp4 83.38M
18_01-redis怎么做高可用_.mp4 82.03M
18_02-redis不同持久化机制都有什么优缺点_.mp4 78.81M
18_03-什么是缓存雪崩、缓存穿透、缓存击穿_.mp4 107.66M
18_04-Redis淘汰策略有哪些_.mp4 33.81M
18_05-分析redis中的事务_.mp4 72.88M
19_01-简述 Reactor 网络编程模型_.mp4 68.53M
19_02-Reactor和Proactor的区别_.mp4 59.50M
19_03-连接断开有几种判定方式_.mp4 104.66M
19_04-接收客户端连接有几种方式_.mp4 121.03M
19_05-为什么用户态需要设置读写缓冲区_.mp4 63.44M
20_01-水平触发和边缘触发的区别_.mp4 69.81M
20_02-CLOSE_WAIT和TIME_WAIT是什么_.mp4 143.16M
20_03-TCP三次握手过程_为啥不可两次_.mp4 63.25M
20_04-TCP 四次挥手的过程_.mp4 67.19M
20_05-什么是连接半打开,半关闭状态_.mp4 114.06M
20_06-UDP和TCP的区别_.mp4 87.00M
20_07-描述输入网址到网页显示整个流程_.mp4 102.59M
20_08-linux系统如何收发网络包_.mp4 126.50M
20_09-TCP是如何保证可靠性的_.mp4 118.19M
20_10-什么是MTU、MSS以及为什么要有MSS_.mp4 51.28M
21_01-什么是 CAP 理论_.mp4 62.78M
21_02-什么是 Base 理论_.mp4 66.47M
21_03-什么是2PC_.mp4 97.34M
21_04-什么是Raft协议,解决了什么问题_.mp4 100.81M
22_01-kafka是什么?解决了什么问题?_.mp4 72.50M
22_02-zk对于kafka的作用是什么_.mp4 31.28M
22_03-kafka如何判断一个节点是否还活着_.mp4 12.81M
22_04-简述kafka的ack三种机制_.mp4 30.53M
22_05-kafka如何控制消费位置_.mp4 31.53M
22_06-在分布式场景下如何保证消息的顺序消费_.mp4 11.75M
22_07-kafka的高可用机制是什么_.mp4 76.69M
22_08-kafka如何减少数据丢失_.mp4 41.84M
22_09-kafka如何确保不消费重复数据_.mp4 87.81M
22_10-kafka为什么性能这么高_.mp4 60.84M
23_01-gRPC 服务端启动流程_.mp4 47.69M
23_02-gRPC 服务类型有哪些_.mp4 49.59M
23_03-keepalive 是针对连接设置_.mp4 36.50M
23_04-gRPC多路复用指的是什么_.mp4 62.19M
23_05-gRPC 如何自定义 resolver_.mp4 43.25M
23_06-gRPC如何自定义 balancer_.mp4 68.44M
23_07-如何实现 gRPC 全链路追踪_.mp4 46.59M
23_08-客户端连接状态有哪些_.mp4 32.56M
23_09-客户端如何获取服务端的服务函数列表_.mp4 26.22M
23_10-如何为每个stream进行限流_.mp4 65.97M
24_01-etcd 中一个任期是什么意思_.mp4 17.62M
24_02-etcd中raft状态机是怎么样切换的_.mp4 40.00M
24_03-如何防止候选者在遗漏数据的情况下成为总统_.mp4 17.81M
24_04-etcd某个节点宕机后会怎么做_.mp4 7.88M
24_05-为什么raft算法不考虑拜占庭将军问题_.mp4 17.91M
24_06-etcd 如何选举出leader节点_.mp4 12.25M
24_07-etcd如何保证数据一致性_.mp4 14.12M
25_01-什么是 docker 镜像_.mp4 36.03M
25_02-什么是 docker 容器_.mp4 29.22M
25_03-docker 容器有几种状态_.mp4 42.66M
25_04-copy和add命令的区别_.mp4 19.09M
25_05-容器与主机之间的数据拷贝命令_.mp4 60.72M
25_06-dockerfile的onbuild指令_.mp4 22.34M
25_07-如何在生产中监控 docker_.mp4 31.44M
25_08-构建docker镜像应该遵循哪些原则_.mp4 52.22M
25_09-容器退出后数据会丢失么_.mp4 20.22M
26_01-MySQL主从复制原理_.mp4 27.94M
26_02-MySQL分库分表_.mp4 39.47M
26_03-简述redis高可用的方案_.mp4 38.00M
26_04-简述redis-cluster集群的原理_.mp4 41.47M
27_01-2G内存在20亿个整数中找出现次数最多的数_.mp4 58.00M
27_02-100亿个URL中重复词汇的TOPK问题_.mp4 66.03M
27_03-40亿个非负整数中找到未出现的数_.mp4 105.28M
27_04-40亿个非负整数中算中位数和找出现两次的数_.mp4 112.00M
27_05-岛问题_.mp4 197.94M
27_06-Redis和MySQL缓存一致性_.mp4 148.75M
27_07-现场手撕定时器_.mp4 186.09M
视频
1.10c++ 什么是深拷贝,什么是浅拷贝_.mp4 23.72M
1.1const关键字的作用_.mp4 53.50M
1.1static关键字的作用_.mp4 14.28M
1.2引用与指针作用以及区别_.mp4 24.75M
1.3如何避免野指针_.mp4 19.28M
1.4malloc free和new delete的区别_.mp4 34.41M
1.5extern 关键字作用_.mp4 48.47M
1.6简述 strcpy、sprintf 与 memcpy 的区别?_.mp4 61.38M
1.7cc++ 中强制类型转换使用场景?_.mp4 58.31M
1.8c++ 什么时候生成默认构造函数_.mp4 40.62M
1.9c++ 什么时候生成默认拷贝构造函数_.mp4 41.53M
2.1vector 底层实现原理_.mp4 73.72M
2.2vector 内存增长机制_.mp4 36.31M
2.3vector中reserve和resize的区别_.mp4 21.38M
2.4vector 的元素类型为什么不能是引用_.mp4 27.22M
2.5list 底层实现原理_.mp4 66.59M
3.1deque 底层实现原理_.mp4 103.81M
3.2什么时候使用vector list deque_.mp4 21.47M
3.3priority_queue 的底层实现原理_.mp4 98.88M
3.4multiset 的底层实现原理_.mp4 168.41M
3.5unordered_map 的底层实现原理_.mp4 142.72M
3.6 迭代器底层实现原理?及其有哪些种类?_.mp4 135.94M
3.7迭代器失效?连续和非连续存储容器的失效?_.mp4 72.34M
3.8 STL 容器线程安全性_.mp4 57.81M
4.1 面对对象的三大特征_.mp4 48.12M
4.2 简述多态实现原理_.mp4 101.91M
4.3 怎么解决菱形继承_.mp4 63.75M
4.4 关键字override_final的作用_.mp4 50.09M
4.5 c++ 类型推导用法_.mp4 84.22M
4.6 function_lambda_bind之间的关系_.mp4 169.78M
5.1 继承下的构造函数和析构函数执行顺序_.mp4 56.75M
5.2 虚函数表和虚函数表指针的创建时机_.mp4 27.50M
5.3 虚析构函数的作用_.mp4 42.94M
5.4 智能指针种类以及使用场景_.mp4 130.09M
5.5 c++11用过哪些特性?_.mp4 34.53M
5.6 动态库与静态库的区别?_.mp4 63.12M
5.7 左值引用与右值引用的区别?右值引用的意义?_.mp4 206.03M
6.1面对对象中有哪些设计原则_.mp4 46.44M
6.2简述开闭原则,哪些原则与它相关,分别是什么关系?_.mp4 21.06M
6.3什么是里氏替换原则_.mp4 14.06M
6.4什么是迪米特原则_.mp4 33.47M
6.5什么是依赖倒置原则_.mp4 19.00M
6.6单例模式多线程?_.mp4 119.62M
6.7什么是工厂模式?什么是抽象工厂?应用场景是什么?_.mp4 56.34M
7.1 什么是策略模式?应用场景是什么?_.mp4 28.53M
7.1 什么是代理模式?应用场景是什么?_.mp4 37.91M
7.2什么是装饰器模式?应用场景是什么?_.mp4 44.38M
7.3什么是组合模式,应用场景是什么?_.mp4 45.69M
7.4什么是责任链模式?应用场景是什么?_.mp4 63.38M
7.5什么是模板方法?应用场景是什么?_.mp4 45.78M
7.7 什么是观察者模式?应用场景是什么?_.mp4 36.00M
14.1数据库的三大范式_.mp4 16.62M
17.1什么是 redis?redis 的应用场景有哪些?_.mp4 95.81M
17.2redis 的对象类型以及底层实现的数据结构?_.mp4 54.44M
17.3相同数量的数据hash与zset 存储占用情况?_.mp4 49.62M
17.4基于 redis 实现限流功能,有哪几种方式?_.mp4 87.94M
17.5redis为什么是单线程?为什么这么快?_.mp4 74.88M
17.6redis 怎么实现分布式锁?有哪些缺陷?_.mp4 54.25M
c++ 后端面试题课程介绍_.mp4 37.06M
资料
10家大厂面试题精选 含答案.zip 10.65M
零声-cc++后端面试攻略(Leetcode剑指Offer)/
1. cc++语言相关,常见题型
1.10c++ 什么是深拷贝,什么是浅拷贝_.mp4 23