课程目录:
1-1 学前必看——这门课能给你什么 (08:52)
第2章 贪心 Greedy
2-1 贪心不等于我全都要 (04:28)
2-2 朴素的贪心法(上)最优化策略 (19:51)
2-3 朴素的贪心法(中)构造法 (26:03)
2-4 朴素的贪心法(下)二分答案 (15:50)
2-5 朴素贪心法的实战演练 (12:21)
2-6 随机贪心法:多试几次也许会更好 (21:30)
2-7 随机贪心法的实战演练 (12:03)
2-8 图论中的贪心:实时导航系统 (09:51)
2-9 搜索中的贪心:电脑鼠走迷宫大赛 (11:13)
2-10 本章小结 (03:45)
2-11 本章作业说明(看完说明再做题) (03:27)
2-12 夯实基础-朴素贪心法练习 《均分纸牌》
2-13 巩固提高-朴素贪心法练习《书的复制》
2-14 迈向进阶-随机贪心法练习《均分数据》
第3章 搜索基础 Basic Searching
3-1 搜索法:看似枚举,但没那么简单 (04:11)
3-2 搜索基础理论:状态,搜索树与状态关系图 (15:10)
3-3 深度优先搜索(上):最常用的搜索方法 (23:13)
3-4 深度优先搜索(下):常见的状态扩展模型 (26:43)
3-5 深度优先搜索实战:中层领导不好当 (17:35)
3-6 广度优先搜索:用空间换时间的搜索方法 (15:03)
3-7 广度优先搜索实战:疫情传播问题 (17:08)
3-8 本章小结 (04:28)
3-9 本章作业说明(看完再做题) (02:50)
3-10 夯实基础-深度优先搜索练习《产生数》
3-11 巩固提高-广度优先搜索练习《最长路》
第4章 搜索进阶 Advanced Searching
4-1 双向广度优先搜索:你踏出1步,我踏出99步 (11:18)
4-2 双向广度优先搜索实战:走迷宫问题 (25:53)
4-3 迭代加深搜索:每一次都更深一点- (13:29)
4-4 迭代加深搜索实战:再战走迷宫问题 (23:07)
4-5 启发式搜索:让盲目搜索变得智能 (07:56)
4-6 A算法:最经典的启发式搜索 (12:53) 4-7 IDA算法:迭代加深的A* (09:21)
4-8 启发式搜索实战:游戏自动寻路 (31:17)
4-9 搜索优化:若要树长高,剪枝不可少 (25:31)
4-10 剪枝实战:木棍问题 (24:28)
4-11 本章小结 (03:54)
4-12 作业说明 (02:16)
4-13 迈向进阶-搜索进阶练习《骑士精神》
4-14 挑战高阶-搜索进阶练习《循环赛》
第5章 动态规划基础 Dynamic Programming Basics
5-1 动态规划DP:超越算法的思维 (06:55)
5-2 一个简单的例子:跳方格 (07:53)
5-3 DP两种模式:记忆化搜索,递推+枚举 (10:50)
5-4 DP三要素:阶段,状态,决策 (17:48)
5-5 DP两前提:最优子结构,无后效性 (15:01)
5-6 稍微复杂一点的例子:01背包和多重背包 (13:09)
5-7 DP分析流程1:划分阶段 (18:17)
5-8 DP分析流程2:定义状态 (13:24)
5-9 DP分析流程3:确定决策 (13:05)
5-10 本章小结 (05:26)
5-11 本章作业说明(看完再做题) (02:19)
5-12 夯实基础-动态规划练习《0-N背包》
5-13 巩固提高-动态规划练习《动物博览会》
第6章 动态规划进阶 Advanced Dynamic Programming
6-1 常见模型分析1:线性模型 (18:48)
6-2 线性模型实战:青蛙过河 (15:20)
6-3 常见模型分析2:串模型 (22:02)
6-4 串模型实战:回文路径 (21:47)
6-5 常见模型分析3:区间模型(上) (21:40)
6-6 常见模型分析3:区间模型(下) (15:39)
6-7 区间模型实战:字符串折叠 (19:38)
6-8 常见模型分析4:树形模型 (12:41)
6-9 树形模型实战:谷仓涂色 (17:24)
6-10 常见模型分析5:状态压缩模型 (15:54)
6-11 状态压缩模型实战:种草 (16:15)
6-12 本章小结 (03:08)
6-13 作业说明 (02:08)
6-14 挑战高阶:动态规划进阶练习《压缩》
6-15 迈向进阶:动态规划进阶练习《中国象棋》
第7章 算法综合实战——全自动物流系统设计与实现
7-1 实战项目与章节内容简介 (04:12)
7-2 需求分析:物件装车 (07:23)
7-3 算法设计与实现:物件装车 (29:11)
7-4 需求分析:行车路线规划 (05:35)
7-5 算法设计与实现:行车路线 (35:03)
7-6 运行环境:基于Flutter和Nodejs的WebApp (08:02)
7-7 环境配置:VS Code + Flutter (06:27)
7-8 环境配置:VS Code + Nodejs (03:41)
7-9 项目测试,调试,及最终效果演示 (12:51)
7-10 本章小结 (02:22)
第8章 堆与堆的高级变种 Heap
8-1 优先队列与堆:高级数据结构的敲门砖 (05:20)
8-2 堆,一种特殊的二叉树 (05:57)
8-3 堆的两种构建方法 (10:17)
8-4 堆的插入 (05:20)
8-5 堆的删除 (06:23)
8-6 堆排序 (07:36)
8-7 堆的实战与复杂度分析 (19:56)
8-8 二项堆:可以合并的堆 (13:30)
8-9 斐波那契堆:最复杂最强大的堆 (15:39)
8-10 本章小结 + 作业说明 (03:08)
8-11 巩固提高:有重复值的堆的实现
8-12 迈向进阶:斐波那契堆的实现
第9章 二叉搜索树基础 Binary Search Tree
9-1 二叉搜索树BST:为何它如雷贯耳 (05:55)
9-2 BST的表示法 (09:05)
9-3 BST的插入和查找 (13:37)
9-4 BST的删除 (14:05)
9-5 BST的灵活应用——第K小元素 (15:52)
9-6 BST的实战与复杂度分析 (27:36)
9-7 拒绝BST退化:平衡二叉搜索树 (08:23)
9-8 初识平衡化旋转 (08:52)
9-9 本章小结 + 作业说明 (02:11)
9-10 巩固提高:利用BST查找范围内所有元素的平均值
第10章 二叉搜索树的优化:平衡二叉搜索树
10-1 AVL树:没有它就没有Windows (05:36)
10-2 AVL树的插入,平衡化旋转以及平衡因子 (18:09)
10-3 AVL树的删除,以及自底向上调整 (11:24)
10-4 红黑树:应用最广泛的平衡树 (06:23)
10-5 红黑树的插入,以及红黑性质 (10:31)
10-6 红黑树的删除 (13:40)
10-7 本章小结 + 作业说明 (02:04)
10-8 迈向进阶:实现红黑树的合并
第11章 平衡树的平替:近似平衡二叉树
11-1 竞赛党来不及写红黑树怎么办? (06:28)
11-2 Treap = Tree + Heap (06:49)
11-3 Treap的插入和删除 (11:44)
11-4 Treap的实战与复杂度分析 (21:48)
11-5 Splay树:最节省空间的BST变体 (04:16)
11-6 Splay树的插入 (12:24)
11-7 Splay树的合并和删除 (08:25)
11-8 Splay树的实战与复杂度分析 (23:57)
11-9 虚二叉树:限制区间的BST (04:50)
11-10 虚二叉树的插入,查找和删除 (17:41)
11-11 虚二叉树的实战与复杂度分析 (14:51)
11-12 各种平衡BST性能横向对比+适用场景分析 (09:37)
11-13 本章小结+作业说明 (02:28)
11-14 挑战高阶:郁闷的出纳员
第12章 多维树形结构 Multi-Dimensional Tree Structures
12-1 多维空间操作需要什么样的树 (05:30)
12-2 字典树Trie:高效的单词查询结构 (05:26)
12-3 Trie的表示,查找,插入和删除 (08:20)
12-4 Trie的实战与复杂度分析 (17:17)
12-5 线段树:区域统计的强大工具 (06:32)
12-6 线段树的构建与查找 (12:13)
12-7 线段树的插入与删除 (17:46)
12-8 线段树的实战与复杂度分析 (29:05)
12-9 树状数组:压缩算法离不开它 (05:53)
12-10 树状数组的建立和查找 (16:11)
12-11 树状数组的插入和删除 (16:11)
12-12 树状数组的实战和复杂度分析 (14:42)
12-13 本章小结+作业说明 (03:55)
12-14 迈向进阶:Trie – 寻找多义词
12-15 挑战高阶:线段树 – 区间涂色
第13章 复杂链式结构 Complex Linked Structure
13-1 数据结构不止有树,链表也可以很高级 (04:43)
13-2 并查集:合并+查找+集合 (04:17)
13-3 并查集的合并与查找 (11:29)
13-4 并查集的实战与复杂度分析 (09:43)
13-5 跳跃表:互联网时代的优化万金油 (04:33)
13-6 跳跃表的构建和查找 (13:59)
13-7 跳跃表的插入和删除 (13:14)
13-8 跳跃表的实战与复杂度分析 (20:48)
13-9 块状链表:和区块链是一回事吗 (05:29)
13-10 块状链表的查找,分裂和构建 (15:07)
13-11 块状链表的插入和删除 (08:52)
13-12 块状链表的合并 (11:27)
13-13 块状链表的实战与复杂度分析 (26:57)
13-14 本章小结+作业说明 (03:16)
13-15 挑战高阶:可变数列的部分最大值
第14章 数据结构综合实战——数据库的设计与实现
14-1 什么是NoSQL数据库? (04:59)
14-2 需求分析1:表的建立及查询 (08:53)
14-3 需求分析2:插入记录 (04:20)
14-4 需求分析3:删除表和记录 (04:17)
14-5 需求分析4:更新记录 (05:29)
14-6 需求分析5:索引的建立及查询 (06:53)
14-7 系统设计与数据结构选择 (15:23)
14-8 实现与效果演示 (20:33)
14-9 本章小结 (02:57)
第15章 NOIP模拟赛(介于普及组和提高组之间的难度)
15-1 赛制简介
15-2 题目1:教主的花园
15-3 题目2:序列问题
15-4 题目3:守卫农场
15-5 题目4:营业额统计
第16章 ICPC模拟赛(介于网络预选赛和亚洲区域赛之间的难度)
16-1 赛制简介
16-2 Problem A – K-th Largest Value
16-3 Problem B – Minimal Cost
16-4 Problem C – Pekora and Trampol
16-5 Problem D – Zookeeper and The
16-6 Problem E – Fib-tree
16-7 Problem F – Magnets
16-8 Problem G – Switch and Flip
16-9 Problem H – Yuezheng Ling and
16-10 Problem I – Ruler Of The Zoo
第17章 总结 Conclusion
17-1 课程总结与回顾 (05:50)
第1章 课程导学与学习指南
1-1 课前必读(不读错过一个亿)
1-2 Go课程概览 (11:53)
第2章 Go的开发环境搭建与快速入门
2-1 快速搭建Go学习环境 (12:57)
2-2 GO 语言超快速入门
2-3 如何安装Go
2-4 GO语言快速入门练习
第3章 带你重新认识Go语言
3-1 为什么要用Go语言? (15:19)
3-2 何为Runtime? (08:49)
3-3 Go程序是如何编译的? (15:30)
3-4 Go程序是如何运行的? (19:44)
3-5 Go语言是面向对象的吗? (11:57)
3-6 实战:企业级 Go 项目包管理方法 (15:32)
3-7 面试题
3-8 本章作业
第4章 Go在高并发下的数据结构
4-1 什么变量的大小是 0 字节? (16:25)
4-2 数组,字符串,切片底层是一样的吗?(一) (18:53)
4-3 数组,字符串,切片底层是一样的吗?(二) (16:31)
4-4 map:重写 Redis 能用它吗?(一) (13:54)
4-5 map:重写 Redis 能用它吗?(二) (13:53)
4-6 map为什么需要扩容? (13:02)
4-7 怎么解决map的并发问题?(一) (13:41)
4-8 怎么解决map的并发问题?(二) (11:11)
4-9 接口–隐式更好还是显式更好? (一) (12:53)
4-10 接口–隐式更好还是显式更好?(二) (11:29)
4-11 nil,空接口,空结构体有什么区别? (13:36)
4-12 实战:内存对齐是如何优化程序效率的?(一) (12:07)
4-13 实战:内存对齐是如何优化程序效率的?(二) (17:35)
4-14 本章作业
4-15 面试题
4-16 本章小结 (07:10)
第5章 高并发的核心工具:Goroutine 协程
5-1 为什么要有协程,线程不好用吗? (14:00)
5-2 协程的本质是什么? (12:56)
5-3 协程是如何执行的?(一) (16:09)
5-4 协程是如何执行的?(二) (07:52)
5-5 为什么要有 G-M-P 调度模型? (15:52)
5-6 如何实现协程并发? (17:05)
5-7 抢占式调度解决了什么问题? (16:06)
5-8 实战–协程太多有什么问题? (10:52)
5-9 本章作业
5-10 面试题
5-11 本章小结 (04:36)
第6章 Go高并发下的锁
6-1 锁的基础是什么?(一) (13:47)
6-2 锁的基础是什么?(二) (13:31)
6-3 互斥锁解决了什么问题? (11:46)
6-4 互斥锁是如何工作的? (17:34)
6-5 锁饥饿怎么办? (14:58)
6-6 只让你看,不让你改,能实现吗?(一) (15:22)
6-7 只让你看,不让你改,能实现吗?(二) (12:59)
6-8 只让你看,不让你改,能实现吗?(三) (09:25)
6-9 如何通过WaitGroup互相等待? (16:20)
6-10 段代码只能执行一次,怎么实现? (10:20)
6-11 实战:如何排查锁异常问题 (12:35)
6-12 本章作业
6-13 面试题
6-14 本章小结 (05:14)
第7章 高并发下的通信方式:Channel 管道
7-1 为什么要用 Channel,共享内存不好用吗? (14:03)
7-2 如何设计高性能 Channel? (11:45)
7-3 Channel 发送数据的底层原理是什么? (16:11)
7-4 Channel 接收数据的底层原理是什么? (14:22)
7-5 实战:非阻塞的Channel怎么做? (09:16)
7-6 本章作业
7-7 面试题
7-8 本章小结 (03:32)
第8章 高并发应用:TCP网络编程
8-1 什么是非阻塞 IO?(一) (11:31)
8-2 什么是非阻塞 IO?(二) (15:32)
8-3 Go是如何抽象Epoll的?(一) (10:39)
8-4 Go是如何抽象Epoll的?(二) (12:20)
8-5 Network Poller 是如何工作的?(一) (13:36)
8-6 Network Poller 是如何工作的?(二) (17:45)
8-7 Go 是如何抽象 Socket 的?(一) (12:10)
8-8 Go 是如何抽象 Socket 的?(二) (12:03)
8-9 Go 是如何抽象 Socket 的?(三) (12:16)
8-10 实战:怎样结合阻塞模型和多路复用? (08:08)
8-11 本章作业
8-12 面试题
8-13 本章小结 (06:43)
第9章 高并发下的内存模型与垃圾回收
9-1 为什么说 Go 的栈在堆上? (16:59)
9-2 协程栈不够用了怎么办? (17:29)
9-3 GO 的堆内存结构是怎样的?(1) (09:35)
9-4 GO 的堆内存结构是怎样的?(2) (15:04)
9-5 GO 的堆内存结构是怎样的?(3) (15:38)
9-6 GO 的是如何分配堆内存的? (19:46)
9-7 什么样对象需要垃圾回收? (13:09)
9-8 如何减小GC对性能的影响? (16:44)
9-9 实战:如何优化GC效率? (12:43)
9-10 本章作业
9-11 面试题
9-12 本章小结 (09:15)
第10章 Go的其他高级特性
10-1 如何实现GO调用C代码? (15:03)
10-2 defer的底层原理是怎样的? (09:38)
10-3 recover如何在panic中拯救程序? (09:55)
10-4 GO是怎么实现反射的? (10:24)
10-5 实战:使用反射调用方法 (08:55)
10-6 作业:如何使用修改后的runtime源码
10-7 面试题
10-8 本章小结 (06:10)
第11章 GO实现TCP服务器
11-1 实现最简TCP服务器 (15:26)
11-2 实现完善的TCP服务器 (13:56)
11-3 实现EchoHandler(一) (11:43)
11-4 实现EchoHandler(二) (11:03)
11-5 测试TCP服务器 (07:17)
第12章 GO实现Redis协议解析器
12-1 Redis网络协议详解 (07:54)
12-2 实现const reply (15:57)
12-3 实现error reply (09:47)
12-4 实现自定义reply (16:44)
12-5 实现ParseStream (11:14)
12-6 实现ReadLine (15:12)
12-7 实现ParseMultiBulkHeader (10:00)
12-8 实现ParseBulkHeader (07:32)
12-9 实现ParseSingleLine (07:39)
12-10 实现readBody (07:47)
12-11 实现parser(1) (14:07)
12-12 实现parser(2) (15:31)
12-13 实现Connection (10:38)
12-14 实现RespHandler(1) (08:39)
12-15 实现RespHandler(2) (13:50)
12-16 实现EchoDatabase (09:18)
12-17 测试RESP协议解析 (04:13)
第13章 GO实现内存数据库
13-1 定义Dict接口(加片头) (08:19)
13-2 实现SyncDict(一) (09:45)
13-3 实现SyncDict(二) (09:37)
13-4 定义command结构体 (08:39)
13-5 实现DB.Exec (11:16)
13-6 完成db.go (17:04)
13-7 实现PING命令 (03:10)
13-8 实现KEYS命令集(一) (12:18)
13-9 实现KEYS命令集(二) (13:35)
13-10 实现KEYS命令集(三) (05:23)
13-11 实现STRING命令集(一) (10:45)
13-12 实现STRING命令集(二) (06:18)
13-13 实现核心Database(一) (15:39)
13-14 实现核心Database(二) (13:46)
第14章 GO实现Redis持久化
14-1 定义AofHandler (09:49)
14-2 实现AddAof (14:58)
14-3 实现HandleAof (11:10)
14-4 实现Aof落盘功能(一) (10:08)
14-5 实现Aof落盘功能(二) (05:50)
14-6 debug闭包问题 (10:32)
14-7 实现Aof恢复(一) (13:54)
14-8 实现Aof恢复(二) (07:06)
第15章 GO实现Redis集群
15-1 详解一致性哈希 (11:44)
15-2 定义NodeMap (09:14)
15-3 实现一致性哈希 (12:46)
15-4 集群架构讲解 (09:08)
15-5 实现连接工厂 (14:18)
15-6 初始化ClusterDatabase (14:39)
15-7 操作连接池 (12:48)
15-8 实现三种执行模式 (13:17)
15-9 实现defaultFunc (12:02)
15-10 实现特殊模式的指令 (20:19)
15-11 完成ClusterDatabase (18:26)
第16章 回顾与总结
16-1 一切才刚刚开始 (18:02)
网盘截图: