众所周知,在所有的编程语言中,C++语言是一门颇具学习难度,需要很长学习周期的编程语言。甚至很多人经常听到一句调侃的话语——“C++,从入门到放弃”。
C++界的知名书籍特别多,从简单到高端书籍,许多书籍都是C++之父或者至少是C++标准委员会成员这个级别的C++专家写的书,他们是规则和标准的制定者,而这些书至少都有数十上百本。
假设每天不用工作,只读这些书,在能读懂能理解的情况下,大概至少得读5年以上,加上不断的练习,培养自己的实战能力,这意味着做一个相对能力强一点的C++开发人员,至少要10年的功夫。
笔者在学习C++的前10年,每天不停的学,不停的编写代码,10年之后C++开发能力如何呢?能做到在驾驭大项目(几万行)时极少出现bug,整个程序运行基本稳定的程度。笔者真正的实力飞跃是在大概学习C++的第15年,那个时候能够感觉到对一些事物、对一些细节方面考虑的周到程度远远超出常人。
学习C++的时间都花在哪里了
1.基本知识体系的构建
基础的C++开发知识是必须要学习的,C++新标准的知识也不断出现,学习这些都要花时间,刚刚笔者也提到,这些大部头的C++经典书全部读下来,能理解的不错,可能要5年以上的时间。而且读者不难发现,即便是很多大牛、大师级的人写的书,读过后要想把书中的内容进行消化、理解和吸收,也需要反复阅读好几遍,从这一点可以看得出来,很多大师的开发能力很强,但写出适合阅读的书还是比较勉强的。
在基本知识体系构建这一条上有没有什么捷径可走呢?有,很快就会说到。
2.逻辑思维的全面提升
对于一个程序员,真正的实力的体现往往不是诸如这个算法会不会,这个知识点是否知道这种比较细枝末节的问题,而这些问题在很多人口中却成了所谓的内功、基础,笔者不认同这个说法,因为这些问题可能短则需要几分钟,长则也是以天为单位就可以掌握。而逻辑思维的全面提升,才真正决定程序开发质量,是需要数年甚至十数年的努力才可以达到相当的高度。
逻辑思维的全面提升和解决问题实际能力的全面提升,须以常年累月的①阅读高手代码;②动手写项目来实践;③认真思考和总结;④再学习和再实践。这个过程反复来,这方面大概仍旧需要5年甚至10年每天不停的锤炼,才可以达到一定的水准,从这点来讲,程序员最终水平的高低,拼的是耐力和韧劲。
所以,很多只有几年开发经验的程序员代码中经常充斥着bug,天天疲于应付产生的bug,一个项目解决bug所占用的时间甚至是开发时间的好几倍,急得领导跳脚和抓耳挠腮无可奈何的情形时有发生。
C++知识体系
这里给大家推荐零声教育全网独家的【Linux C/C++开发】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析:
涵盖手写代码实现:sdpk文件系统,dpdk用户态协议栈,异步网络库zvnet,协程,io_ uring,Nginx,bpf,线程池,内存池,连接池,原子操作, ringbuffer,定时器,死锁检测,分布式锁,日志,probuf,kafka,grpc,udp可靠传输
上线项目:KV存储项目,图床项目,即时通讯项目等
学习地址:https://xxetb.xet.tech/s/2L80ej
部分录播视频:
c/c++程序员进个大厂很难吗?来看看这套腾讯T9认证的C++后端开发技术(数据结构、网络编程、网络原理、中间件、开源框架、云原生、分布式) https://www.bilibili.com/video/BV1cP4y1k7xt/
https://www.bilibili.com/video/BV1cP4y1k7xt/
1.精进基石专栏
1.1 数据结构与算法
1.1.1 随处可见的红黑树
-  红黑树的应用场景进程调度cfs,内存管理 
-  红黑树的数学证明与推导 
-  手撕红黑树的左旋与右旋 
-  红黑树添加的实现与添加三种情况的证明 
-  红黑树删除的实现与删除四种情况的证明 
-  红黑树的线程安全的做法 
-  分析红黑树工程实用的特点 
1.1.2 磁盘存储链式的B树与B+树
-  磁盘结构分析与数据存储原理 
-  多叉树的运用以及B树的定义证明 
-  B树插入的两种分裂 
-  B树删除的前后借位与节点合并 
-  手撕B树的插入,删除,遍历,查找 
-  B+树的定义与实现 
-  B+树叶子节点的前后指针 
-  B+树的应用场景与实用特点 
-  B+树的线程安全做法 
1.1.3 海量数据去重的Hash与BloomFilter,bitmap
-  hash的原理与hash函数的实现 
-  hash的应用场景 
-  分布式hash的实现原理 
-  海量数据去重布隆过滤器 
-  布隆过滤的数学推导与证明 
1.2 设计模式
1.2.1 创建型设计模式
-  单例模式 
-  策略模式 
-  观察者模式 
-  工厂方法模式与抽象工厂模式 
-  原型模式 
1.2.2 结构型设计模式
-  适配器模式 
-  代理模式 
-  责任链模式 
-  状态模式 
-  桥接模式 
-  组合模式 
1.3 c++新特性
1.3.1 stI容器,智能指针,正则表达式
-  unordered_map 
-  stl容器 
-  hash的用法与原理 
-  shared_ptr,unique_ptr 
-  basic_regex, sub_match 
-  函数对象模板function,bind 
1.3.2 新特性的线程,协程,原子操作,lamda表达式
-  atomic的用法与原理 
-  thread_local 与condition_variable 
-  异常处理exception_ptr 
-  错误处理error_category 
-  coroutine的用法与原理 
1.4 Linux工程管管理
1.4.1 Makefile/cmake/configure
-  Makefile的规则与make的工作原理, 
-  单文件编译与多文件编译 
-  Makefile的参数传递 
-  多目录文件夹递归编译与嵌套执行make 
-  Makefile的通配符,伪目标,文件搜索 
-  Makefile的操作函数与特殊语法 
-  configure生成makefile的原则 
-  cmake的写法 
1.4.2 分布式版本控制git
-  git的工作流程 
-  创建操作与基本操作 
-  分支管理,查看提交历史 
-  git服务器搭建 
1.4.3 Linux系统运行时参数命令
-  进程间通信设施状态 ipcs 
-  Linux系统运行时长 uptime 
-  CPU平均负载和磁盘活动 iostat 
-  监控,收集和汇报系统活动 Sar 
-  监控多处理器使用情况 mpstat 
-  监控进程的内存使用情况 pmap 
-  系统管理员调优和基准测量工具 nmon 
-  密切关注L inux系统glances 
-  查看系统调用 strace 
-  ftp服务器基本信息 ftptop 
-  电量消耗和电源管理 powertop 
-  监控mysql的线程和性能 mytop 
-  系统运行参数分析 htop/ top/atop 
-  Linux网络统计监控工具 netstat 
-  显示和修改网络接口控制器 ethtool 
-  网络数据包分析利刃 tcpdump 
-  远程登陆服务的标准协议 telnet 
-  获取实时网络统计信息 iptraf 
-  显示主机上网络接口带宽使用情况 iftop 
2.高性能网络设计专栏
2.1 网络编程异步网络库 zvnet
2.1.1 网络io与io多路复用select/poll/epoll
-  socket与文件描述符的关联 
-  多路复用select/poll 
-  代码实现LT/ET的区别 
2.1.2 事件驱动reactor的原理与实现
-  reactor针对业务实现的优点 
-  epoll封装send_cb/recv_cb/accept_cb 
-  reactor 多核实现 
-  跨平台(select/epoll/kqueue)的封装reactor 
-  redis,memcached,nginx网络组件 
2.1.3 http服务器的实现
-  reactor sendbuffer 与recvbuffer 封装http协议 
-  http协议格式 
-  有限状态机fsm解析http 
-  其他协议websocket,tcp文件传输 
2.2 网络原理
2.2.1 服务器百万并发实现(实操)
-  同步处理与异步处理的数据差异 
-  网络io线程池异步处理 
-  ulimit的fd的百万级别支持 
-  sysctl. conf的rmem与wmem的调优 
-  conntrack的原理分析 
2.2.3 Posix API与网络协议栈
-  connect,listen,accept与三次握手 
-  listen参数backlog 
-  syn泛洪的解决方案 
-  close与四次挥手 
-  11个状态迁移 
-  大量close_ wait与time_ wait的原因与解决方案 
-  tcp keepalive与应用层心跳包 
-  拥塞控制与滑动窗口 
2.2.4 UDP的可靠传输协议QUIC
-  udp的优缺点 
-  udp高并发的设计方案 
-  qq早期为什么选择udp作为通信协议 
-  udp可靠传输原理 
-  quic协议的设计原理 
-  quic的开源方案quiche 
-  kcp的设计方案与算法原理 
2.3 自研框架:协程框架NtyCo的实现(已开源)
2.3.1 协程设计原理与汇编实现
-  协程存在的3个原因 
-  同步与异步性能,服务端异步处理,客户端异步请求 
-  协程原语switch, resume, yield 
-  协程切换的三种实现方式,setjmp/longjmp,ucontext,汇编实现 
-  汇编实现寄存器讲解 
-  协程初始启动eip寄存器设置 
-  协程栈空间定义,独立栈与共享栈的做法 
-  协程结构体定义 
2.3.2 协程调度器实现与性能测试
-  调度器的定义分析 
-  超时集合,就绪队列,io等待集合的实现 
-  协程调度的执行流程 
-  协程接口实现,异步流程实现 
-  hook钩子的实现 
-  协程实现mysql请求 
-  协程多核方案分析 
-  协程性能测试 
2.4 自研框架:基于dpdk的用户态协议栈的实现(已开源)
2.4.1 用户态协议栈设计实现
-  用户态协议栈的存在场景与实现原理 
-  netmap开源框架 
-  eth协议,ip协议, udp协议实现 
-  arp协议实现 
-  icmp协议实现 
2.4.2 应用层posix api的具体实现
-  socket/bind/listen的实现 
-  accept实现 
-  recv/send的实现 
-  滑动窗口/慢启动讲解 
-  重传定时器,坚持定时器,time_wait定时器,keepalive定时器 
2.4.3 手把手设计实现epoll
-  epoll数据结构封装与线程安全实现 
-  协议栈fd就绪回调实现 
-  epoll接口实现 
-  LT/ET的实现 
2.5 高性能异步io机制 io_uring
2.5.1 与epoll媲美的io_uring
-  io_uring系统调用io_uring_setup,io_uring_register, io_ur ing_enter 
-  I iburng的io_uring的关系 
-  io_uring与epoll性能对比 
-  io_uring的共享内存机制 
2.5.2 io_ uring的使用场景
-  io_ur ing的accept,connect,recv,send实现机制 
-  io_uring网络读写 
-  io_uring磁盘读写 
-  proactor的实现 
3.基础组件设计专栏
3.1 池式组件
3.1.1 手写线程池与性能分析(项目)
-  线程池的异步处理使用场景 
-  线程池的组成任务队列执行队列 
-  任务回调与条件等待 
-  线程池的动态防缩 
-  扩展:nginx线程池实现对比分析 
3.1.2 内存池的实现与场景分析(项目)
-  内存池的应用场景与性能分析 
-  内存小块分配与管理 
-  内存大块分配与管理 
-  手写内存池,结构体封装与API实现 
-  避免内存泄漏的两种万能方法 
-  定位内存泄漏的3种工具 
-  扩展:nginx内存池实现 
3.2 高性能组件
3.2.1 原子操作CAS与锁实现(项目)
-  互斥锁的使用场景与原理 
-  自旋锁的性能分析 
-  原子操作的汇编实现 
3.2.2 无锁消息队列实现(项目)
-  有锁无锁队列性能 
-  内存屏障Barrier 
-  数组无锁队列设计实现 
-  链表无锁队列设计实现 
3.2.3 网络缓冲区设计
-  RingBuffer设计 
-  定长消息包 
-  ChainBuffer 设计 
-  双缓冲区设计 
3.2.4 定时器方案红黑树,时间轮,最小堆(项目)
-  定时器的使用场景 
-  定时器的红黑树存储 
-  时间轮的实现 
-  最小堆的实现 
-  分布式定时器的实现 
3.2.5 手写死锁检测组件(项目)
-  死锁的现象以及原理 
-  pthread_mutex_lock/pthread_mutex_unlock dlsym的 实现 
-  有向图的构建 
-  有向图dfs判断环的存在 
-  三个原语操作lock_before,lock_after, unlock_after 
-  死锁检测线程的实现 
3.2.6 手写内存泄漏检测组件(项目)
-  内存泄漏现象 
-  第三方内存泄漏与代码内存泄漏 
-  malloc与free的dlsym实现 
-  内存检测策略 
-  应用场景测试 
3.2.7手把手实现分布式锁(项目)
-  多线程资源竞争互斥锁,自旋锁 
-  加锁的异常情况 
-  非公平锁的实现 
-  公平锁的实现 
3.3 开源组件
3.3.1 异步日志方案spdlog (项目)
-  日志库性能瓶颈分析 
-  异步日志库设计与实现 
-  批量写入与双缓存冲机制 
-  奔溃后的日志找回 
3.3.2 应用层协议设计ProtoBuf (项目)
-  IM,云平台,nginx, http, redis协议设计 
-  如何保证消息完整性 
-  手撕protobuf IM通 信协议 
-  protobuf序列化与反序列化 
-  protobuf编码原理 
4.中间件开发专栏
4.1 Redis
4.1.1 Redis相关命令详解及其原理
-  string,set , zset,list, hash 
-  分布式锁的实现 
-  lua脚本解决ACID原子性 
-  Redis事务的ACID性质分析 
4.1.2 Redis协议与异步方式
-  Redis协议解析 
-  特殊协议操作订阅发布 
-  手撕异步redis协议 
4.1.3 存储原理与数据模型
-  string的三种编码方式 int, raw, embstr 
-  双向链表的list实现 
-  字典的实现,hash函数 
-  解决 键冲突与 rehash 
-  跳表的实现 与数据论证 
-  整数集合实现 
-  压缩列表原理证明 
4.1.4 主从同步与对象模型
-  对象的类型与编码 
-  字符串对象 
-  列表对象 
-  哈希对象 
-  集合对象 
-  有序集合 
-  类型检测与命令多态 
-  内存回收 
-  对象共享 
-  对象空转时长 
-  redis的3种集群方式 主从复制,sentinel,cluster 
-  4种持久化方案 
4.2 MySQL
4.2.1 SQL语句, 索引,视图,存储过程, 触发器
-  MySQL体系结构,SQL执行流程 
-  SQL CURD与高级查询 
-  视图,触发器,存储过程 
-  MySQL权限管理 
4.2.2 MySQL索引原理以及SQL优化
-  索引,约束以及之间的区别 
-  B+树,聚集索引和辅助索引 
-  最左匹配原则以及覆盖索引 
-  索引失效以及索引优化原则 
-  EXPLAIN执行计划以及优化选择过程分析 
4.2.3 MySQL事务原理分析
-  事务的ACID特性 
-  MySQL并发问题脏读,不可重复读,幻读 
-  事务隔离级别 
-  锁的类型,锁算法实现以及锁操作对象 
-  S锁 X锁 IS锁 IX锁 
-  记录锁,间隙锁, next-key lock 
-  插入意向锁,自增锁 
-  MVCC原理剖析 
4.2.4 MySQL缓存策略
-  读写分离,连接池的场景以及其局限a 
-  缓存策略问题分析 
-  缓存策略强一致性解决方案 
-  缓存策略最终一致性解决方案 
-  2种mysql缓存同步方案从数据库与触发器+udf 
-  缓存同步开源方案go-mysql-transfer 
-  缓存同步开源方案canal原理分析 
-  3种缓存故障,缓存击穿,缓存穿透,缓存雪崩 
4.3 Kafka
4.3.1 Kafka使用场景与设计原理
-  发布订阅模式 
-  点对点消息传递 
-  Kafka Brokers原理 
-  Topics 和 Partition 
4.3.2Kafka存储机制
-  Partition存储分布 
-  Partition文件存储机制 
-  Segment文件存储结构 
-  offset查找message 
-  高效文件存储设计 
4.4 微服务之间通信基石gRPC
4.4.1 gRPC的内部组件关联
-  ClientSide与ServerSide, Channel,Serivce,Stub的概念 
-  异步gRPC的实现 
-  回调方式的异步调用 
-  Server 与Client 对RPC的实现 
4.4.2 基于http2的gRPC通信协议
-  基于http协议构造 
-  ABNF语法 
-  请求协议 Request-Headers 
-  gRPC上下文传递 
4.5 Nginx
4.5.1 Nginx反 向代理与系统参数配置conf原理
-  Nginx静态文件的配置 
-  Nginx动态接口代理配置 
-  Nginx 对Mqtt协议转发 
-  Nginx对Rtmp推拉流 
-  Openresty对Redis缓 存数据代理 
-  shmem的 三种实现方式 
-  原子操作 
-  nginx channel 
-  信号 
-  信号量 
4.5.2 Nginx过滤器模块实现
-  Nginx Filter模块运行原理 
-  过滤链表的顺序 
-  模块开发数据结构ngx_str_t,ngx_list_t,ngx_buf_t, ngx_chain_t 
-  error日志的用法 
-  ngx_comond_t的讲解 
-  ngx_http_module_t的执行流程 
-  文件锁,互斥锁 
-  slab共享内存 
-  如何解决"惊群"问题 
-  如何实现负载均衡 
4.5.3 Nginx Handler模 块实现
-  Nginx Handler模块运行原理 
-  ngx_module_t/ngx_http_module_t的讲解 
-  ngx_http_top_body_filter/ngx_http_top_header_filter的 原理 
-  ngx_rbtree_t的使用方法 
-  ngx_rbtree自定义添加方法 
-  Nginx的核心数据结构ngx_cycle_t,ngx_event_moule_t 
-  http请求的11个处理阶段 
-  http包体处理 
-  http响应发送 
-  Nginx Upstream机制的设计与实现 
-  模块性能测试 
5.开源框架专栏
5.1 游戏服务器开发skynet (录播答疑)
5.1.1 Skynet设计原理
-  多核并发编程-多线程, 多进程,csp模型, actor模型 
-  actor模型实现-lua服务和c服务 
-  消息队列实现 
-  actor消息调度 
5.1.2 skynet网络层封装以及lua/c接口编程
-  skynet reactor 网络模型封装 
-  socket/socketchannel 封装 
-  手撕高性能c服务 
-  lua编程以及lua/c接口编程 
5.1.3 skynet重要组件以及手撕游戏项目
-  基础接口 skynet.send , skynet.call , skynet.response 
-  广播组件 multicastd 
-  数据共享组件sharedatad datasheet 
-  手撕万人同时在线游戏 
5.2 分布式API网关
5.2.1 高性能web网关Openresty
-  Nginx与lua模块 
-  Openresty访问Redis,MySQL 
-  Restful API接口开发 
-  Openresty性能分析 
5.2.2 Kong动态负载均衡与服务发现
-  nginx,openresty , Kong之 间的“苟且” 
-  动态负载均衡的原理 
-  服务发现实现的原理 
-  Serverless 
-  监控,故障检测与恢复 
-  代理层缓存与响应服务 
-  系统日志 
5.3 SPDK助力MySQL数据落盘,让性能腾飞( 基础设施)
5.3.1 SPDK文件系统设计与实现
-  NVMe与PCle的原理 
-  NVMe Controller 与bdev之间的rpc 
-  blobstore与blob的关系 
5.3.2 文件系统的posix api实现
-  4层结构设计vfs 
-  spdk的异步改造posix同步api 
-  open/write/read/close的实现 
5.3.3 文件系统的性能测试与承接mysq|业务
-  LD_PRELOAD更好mysql系统调用实现 
-  iodepth讲解 
-  随机读,随机写,顺序读,顺序写 
5.4 高性能计算CUDA (录播答疑)
5.4.1 gpu并行计算cuda的开发流程
-  cpu+gpu的异构计算 
-  计算机体系结构中的gpu 
-  cuda的环境搭建nvcc与srun的使用 
-  cuda的向量加法与矩阵乘法 
-  MPI与CUDA 
5.4.2 音视频编解码中的并行计算
-  cuda的h264编解码 
-  cuda的mpeg编解码 
-  ffmpeg的cuda支持 
5.5 并行计算与异步网络引擎workflow
5.5.1 workflow的应用场景
-  workflow的编程范式与设计理念 
-  mysql/redi s/kafka/dns的请求实现 
-  parallel处理与任务组装 
5.5.2 workflow的组件实现
-  线程池实现 
-  DAG图任务 
-  msgqueue的实现 
-  纯c的jsonparser实现 
5.6 物联网通信协议mqtt的实现框架mosquitto
5.6.1 mqtt的高效使用场景
-  mqtt的发布订阅模式 
-  解决低带宽网络环境的数据传输 
-  3种Qos等级 
-  0Auth与JWT的安全认证 
5.6.2 mqtt的broker
-  mqtt的遗嘱机制 
-  发布订阅的过滤器 
-  mosquitto的docker部署 
-  mqtt的日志实时监控 
6. 云原生专栏
6.1 Docker
6.1.1. Docker风光下的内核功能(录播答疑)
-  进程 namespace 
-  UTS namespace 
-  IPC namespace 
-  网络namespace 
-  文件系统namesapce 
-  cgroup的资源控制 
6. 1.2. Docker容器管理与镜像操作(录播答疑)
-  Docker 镜像下载与镜像运行 
-  Docker 存储管理 
-  Docker 数据卷 
-  Docker 与容器安全 
6.1.3. Docker网络管理(项目)
-  5种Docker网络驱动 
-  pipework跨主机通信 
-  0vS划分vlan与隧道模式 
-  GRE实现跨主机Docker间通信 
6.1.4. Docker云与容器编排(项目)
-  Dockerfile的语法流程 
-  编排神器Fig/Compose 
-  Flynn体系架构 
-  Docker改变了什么? 
6.2. Kubernetes
6.2.1 k8s环境搭建(录播答疑)
-  k8s集群安全设置 
-  k8s集群网络设置 
-  k8s核心服务配置 
-  kubectl命令工具 
-  yaml文件语法 
6.2.2 Pod与Service的用法(录播答疑)
-  Pod的管理配置 
-  Pod升级与回滚 
-  DNS服务之于k8s 
-  http 7层策略与TLS安全设置 
6.2.3 k8s集群管理的那些事儿(项目)
-  Node的管理 
-  namespace隔离机制 
-  k8s集群日志管理 
-  k8s集群监控 
6.2.4 k8s二次开发与k8s API(项目)
-  RESTful接口 
-  API聚合机制 
-  API组 
-  Go访问k8s API 
7.性能分析专栏
7.1 性能与测试工具
7.1.1 测试框架gtest以及内存泄漏检测(录播答疑)
-  googletest与googlemock文件 
-  函数检测以及类测试 
-  test fixture测试夹具 
-  类型参数化 
-  事件测试 
-  内存泄漏 
-  设置期望,期待参数,调用次数,满足期望 
7.1.2 性能工具与性能分析(录播答疑)
-  MySQL性能测试工具mysqlslap 
-  Redis性能测试工具redis-benchmark 
-  http性能测试工具wrk 
-  Tcp性能测试工具TCPBenchmarks 
-  磁盘,内存,网络性能分析 
7.1.3 火焰图的生成原理与构建方式
-  火焰图工具讲解 
-  火焰图使用场景与原理 
-  nginx 动态火焰图 
-  MySQL 火焰图 
-  Redis 火焰图 
7.2 观测技术bpf与ebpf
7.2.1 内核bpf的实现原理
-  跟踪,嗅探,采样,可观测的理解 
-  动态hook: kprobe/ uprobe 
-  静态hook: tracepoint和USDT 
-  性能监控计时器PMC模式 
-  cpu的观测taskset的使 用 
-  BPF工具bpftrace, BCC 
7.2.2 bpf对内核功能的观测
-  内存观测 kmalloc与vm_area_struct 
-  文件系统观测vfs的状态 
-  磁盘io的观测bitesize,mdflush 
-  bpf对网络流量的统计 
-  bpf对redis-server观测 
-  网络观测tcp_connect, tcp_accept, tcp_close 
7.3 内核源码机制
7.3.1 进程调度机制哪些事儿
-  qemu调试内存 
-  进程调度cfs与其他的四个调度类 
-  task_struct结构体 
-  RCU机制与内存优化屏障 
7.3.2 内核内存管理运行机制
-  虚拟内存地址布局 
-  SMP/ NUMA模型 
-  页表与页表缓存原理 
-  伙伴系统实现 
-  块分配(Slab/Slub/Slob) 原理实现 
-  brk/kmalloc/vmalloc系统调用流程 
7.3.3 文件系统组件
-  虚拟文件系统vfs 
-  Proc文件系统 
-  super_block与inode结构体 
-  文件描述符与挂载流程 
8. 分布式架构专栏
8.1 分布式数据库
8.1.1 不一样的kv存储RocksDB的使用场景
-  前缀搜索 
-  低优先级写入 
-  生存时间的支持 
-  Transact ions 
-  快照存储 
-  日志结构的数据库引擎 
8.2.1 TiDB存储引擎的原理
-  TiKV的Key-Value存储引擎 
-  基于RBAC的权限管理 
-  数据加密 
8.2.2 TiDB集群方案与Replication原理
-  集群三个组件TiDB Server, PD Server, TiKV Server 
-  Raft协议讲解 
-  OLTP与0LAP 
8.2分布式文件系统(录播答疑)
8.2.1 内核级支持的分布式存储Ceph
-  ceph的集群部署 
-  monitor与0SD 
-  ceph5个核心组件 
-  ceph集群监控 
-  ceph性能调调优与benchmark 
8.2.2 分布式ceph存储集群部署
-  同步机制 
-  线性扩容 
-  如何实现高可用 
-  负载均衡 
8.3 分布式协同
8.3.1 注册服务中心Etcd
-  etcd配置服务、服务发现、集群监控、leader选举、分布式锁 
-  etcd体系结构详解(gRPC,WAL,Snapshot、 BoItDB、 Raft) 
-  etcd存储原理深入剖析(B树、 B+树) 
-  etcd读写机制以及事务的acid特性分析 
-  raft共识算法详解(leader选举+日志复制) 
8.3.2 协同事件用户态文件系统fuse (项目)
-  fuse的使用场景 
-  文件系统读写事件 
-  fuse的实现原理 
-  /dev/fuse的作用 
8.3.3快播核心技术揭秘P2P框架的实现(录播答疑)
-  网关NAT表分析 
-  NAT类型,完全锥型NAT,对称NAT,端口限制锥形NAT,IP限制锥型NAT 
-  代码逻辑实现NAT类型检测 
-  网络穿透的原理 
-  网络穿透的3种情况 
9. 上线项目实战
9.1 dkvstore实现(上线项目)
9.1.1 kv存储的架构设计
-  存储节点定义 
-  tcp server/client 
-  hash数据存储 
-  list数据存储 
-  skiptable数据存储 
-  rbtree数据存储 
9.1.2 网络同步与事务序列化
-  序列化与反序列化格式 
-  建立事务与释放事务 
-  线程安全的处理 
9.1.3 内存池的使用与LRU的实现
-  大块与小块分配策略 
-  内存回收机制 
-  数据持久化 
9.1.4 KV存储的性能测试
-  网络测试tps 
-  吞吐量测试 
-  go, lua, java多语言支持 
-  hash/list/skiptable/rbtree测试 
9.2 图床共享云存储(上线项目)
9.2.1 ceph架构分析和配置
-  ceph架构分析 
-  快速配置ceph 
-  上传文件逻辑分析 
-  下载文件逻辑分析 
9.2.2 文件传输和接口设计
-  http接口设计 
-  图床数据库设计 
-  图床文件上传,下载,分享功能实现 
-  业务流程实现 
9.2.3 容器化docker部署
-  crontab定时清理数据 
-  docker server服务 
-  grpc连接池管理 
9.2.4 产品上云公网发布/测试用例
-  使用云服务器的各种坑分析 
-  fiddler 监控http请求,postman模拟请求 
-  wrk测试接口吞吐量 
-  jmeter压力测试 

9.3 微服务即时通讯(上线项目)
9.3.1 IM即时通讯项目框架分析和部署
-  即时通讯应用场景分析 
-  即时通讯自研和使用第三方SDK优缺点 
-  即时通讯数据库设计 
-  接入层、 逻辑层、路由层、数据层架构. 
-  即时通讯项目部署 
-  即时通讯web账号注册源码分析 
9.3.2 IM消息服务器/文件传输服务器
-  protobuf通信协议设计 
-  reactor模型C++实现 
-  login_ server 负载均衡手写代码实现 
-  用户登录请求验证密码+混淆码MD5匹对 
-  如何全量、增量拉取好友列表、用户信息 
-  知乎、b站小红点点未读消息如何实现 
9.3.3 IM消息服务器和路由服务器设计
-  请求登录逻辑 
-  最近联系会话逻辑 
-  查询用户在线主题 
-  未读消息机制 
-  单聊消息推拉机制 
-  群聊消息推拉机制 
-  路由转发机制 
9.3.4 数据库代理服务器设计
-  main函数主流程 
-  reactor+线程池+连接池处理逻辑分 
-  redis缓存实现消息计数(单聊和群聊) 
-  redis实现未读消息机制 
-  如何实现群消息的推送 
-  单聊消息推送、拉取优缺点 
9.3.5 文件服务器和docker部署
-  在线文件传输机制分析 
-  离线文件传输机制分析 
-  etcd微服务注册与发现 
-  docker制作与部署 
9.3.6 产品上云公网发布/公网测试上线
-  单元测试案例 
-  testbench如何设计 
-  IM项目性能压测 
-  定制私有功能 
-  拓展新功能(代码) 
-  云服务器部署 

9.4 零声教学AI助手一代(上线项目)
9.4.1 AI助手架构设计与需求分析
-  chatgpt的构想 与需求分析 
-  基于开源项目初步构建项目 
-  gin框架实现代理服务 
9.4.2 接口功能设计
-  grpc与protobuf的使用流程 
-  token计数器与tokenizer的服务封装 
-  敏感词识别服务 
9.4.3 向量数据库与连接池设计
-  redis实现上下文管理 
-  问题记录保存 
-  web端协议解析 
-  OneBot协议 
9.4.4 服务部署上线
-  docker stack 服务部署 
-  wrk接口吞吐量测试 
-  线上节点监控 

9.5 魔兽世界后端TrinityCore (上线项目)
9.5.1 网络模块实现
-  boost. asio 跨平台网络库 
-  boost. asio 核心命名空间以及异步io接口 
-  boost. asio 在 TrinityCore 中的封装 
-  网络模块应用实践 
9.5.2 地图模块实现
-  地图模块抽象: map、 area、 grid、 cell 
-  地图模块驱动方式 
-  A0I 核心算法实现 
-  AABB碰撞检测实现 
-  A*寻路算法实现 
9.5.3战斗模块实现
-  技能设计以及实现 
-  AI设计 
-  怪物管理 
-  副本设计 
9.5.4 TrinityCore 玩法实现
-  用户玩法实现-任务系统 
-  数据配置以及数据库设计 
-  触发机制实现 
-  多人玩法实现-工会设计 
