适合人群:计算机相关专业在校生、转入互联网开发、转后台开发岗位、有C/C++基础、底层原理理解不够深入。
内容:强化理论知识,并以项目运用,项目实现为主导来教学,1对1学习计划,简历书写/面试复盘指导。
目录
数据结构与算法
1.红黑树
- 红黑树的应用场景,进程调度
cfs
, 内存管理 - 红黑树的数学证明与推导
- 手撕红黑树的左旋与右旋
- .红黑树添加的实现与添加三种情况的证明
- 红黑树删除的实现与删除四种情况的证明
- 红黑树的线程安全的做法
- 分析红黑树工程实用的特点
2.B树与B+树
- 磁盘结构分析与数据存储原理
- 多叉树的运用以及B树的定义证明
- B树插入的两种分裂
- B树删除的前后借位与节点合并
- 手撕B树的插入,删除,遍历,查找
- B+树的定义与实现
- B+树叶子节点的前后指针
- B+树的应用场景与实用特点
- B+树的线程安全做法
3. Hash
与BloomFilter
,bitmap
-
hash
的原理与hash
函数的实现 -
hash
的应用场景 - 分布式
hash
的实现原理 - 海量数据去重布隆过滤器
- 布隆过滤的数学推导与证明
设计模式
1.创建型设计模式
- 单例模式
- 策略模式
- 观察者模式
- 工厂方法模式与抽象工厂模式
- 原型模式
2.结构型设计模式
- 适配器模式
- 代理模式
- 责任链模式
- 状态模式
- 桥接模式
- 组合模式
c++新特性
1.STL容器,智能指针,正则表达式
unordered_map
- STL容器
-
hash
的用法与原理 -
shared_ptr
,unique_ptr
-
basic_regex
,sub_match
- 函数对象模板
function
,bind
2.新特性的线程,协程,原子操作,lamda
表达式
-
atomic
的用法与原理 -
thread_ local
与condition_ variable
- 异常处理
exception_ ptr
- 错误处理
error_ category
-
coroutine
的用法与原理
Linux工程管理
1.Makefile/cmake/configure
- Makefile的规则与make的工作原理
- 单文件编译与多文件编译
- Makefile的参数传递
- 多目录文件夹递归编译与嵌套执行make
- Makefile的通配符,伪目标,文件搜索
- Makefile的操作函数与特殊语法
- configure生成makefile的原则
- cmake的写法
2.分布式版本控制git
- git的工作流程
- 创建操作与基本操作
- 分支管理,查看提交历史
- git服务器搭建
3.Linux系统运行时参数命令
- 进程间通信设施状态
ipcs
- Linux系统运行时长
uptime
- CPU平均负载和磁盘活动
iostat
- 监控,收集和汇报系统活动
sar
- 监控多处理器使用情况
mpstat
- 监控进程的内存使用情况
pmap
- 系统管理员调优和基准测量工具
nmon
- 密切关注Linux系统
glances
- 查看系统调用
strace
-
ftp
服务器基本信息ftptop
- 电量消耗和电源管理
powertop
- 监控
mysql
的线程和性能mytop
- 系统运行参数分析
htop
/top
/atop
- Linux网络统计监控工具
netstat
- 显示和修改网络接口控制器
ethtool
- 网络数据包分析利刃
tcpdump
- 远程登陆服务的标准协议
telnet
- 获取实时网络统计信息
iptraf
- 显示主机上网络接口带宽使用情况
iftop
4.vscode gdb 调试
-
vscode gdb
开发环境 -
gdb
调试准备 -
gdb
调试命令详解 -
gdb
多线程调试 -
gdb
附加进程调试 -
gdb core files
调试
网络编程
1.网络io
与io
多路复用 select
/poll
/epoll
-
socket
与文件描述符的关联 - 多路复用
select
/poll
- 代码实现
LT
/ET
的区别
2.事件驱动 reactor
-
reactor
针对业务实现的优点 -
epoll
封装send_cb
/recv_cb
/accept_cb
- reactor 多核实现
- 跨平台(
select
/epoll
/kqueue
)的封装reactor
-
redis
,memcached
,nginx
网络组件
3.http
服务器的实现
-
reactor sendbuffer
与recvbuffer
封装http
协议 -
http
协议格式 - 有限状态机
fsm
解析http
- 其他协议
websocket
,tcp
文件传输
网络原理
1.服务器百万并发实现(实操)
- 同步处理与异步处理的数据差异
- 网络
io
线程池异步处理 -
ulimit
的fd
的百万级别支持 -
sysctl.conf
的rmem
与wmem
的调优 -
conntrack
的原理分析
2. Posix API
与网络协议栈
-
connect
,listen
,accept
与三次握手 -
listen
参数backlog
-
syn
泛洪的解决方案 -
close
与四次挥手 - 11个状态迁移
- 大量
close_wait
与time_wait
的原因与解决方案 -
tcp keepalive
与应用层心跳包 - 拥塞控制与滑动窗口
3.UDP的可靠传输协议QUIC
-
udp
的优缺点 -
udp
高并发的设计方案 - qq早期为什么选择
udp
作为通信协议 -
udp
可靠传输原理 -
quic
协议的设计原理 -
quic
的开源方案quiche
-
kcp
的设计方案与算法原理
协程框架
1.协程设计原理与汇编实现
- 协程存在的3个原因
- 同步与异步性能,服务端异步处理,客户端异步请求
- 协程原语
switch
,resume
,yield
, - 协程切换的三种实现方式,
setjmp
/longjmp
,ucontext
, 汇编实现 - 汇编实现寄存器讲解
- 协程初始启动
eip
寄存器设置 - 协程栈空间定义,独立栈与共享栈的做法
- 协程结构体定义
2.协程调度器实现与性能测试
- 调度器的定义分析
- 超时集合,就绪队列,io等待集合的实现
- 协程调度的执行流程
- 协程接口实现,异步流程实现
-
hook
钩子的实现 - 协程实现
mysql
请求 - 协程多核方案分析
- 协程性能测试
用户态协议栈
1.用户态协议栈设计实现
- 用户态协议栈的存在场景与实现原理
-
netmap
开源框架 -
eth
协议,ip
协议,udp
协议实现 -
arp
协议实现 -
icmp
协议实现
2.tcp的原理实现
- tcp 11个状态实现
- 滑动窗口与慢启动
- 重传定时器,坚持定时器
-
time_wait
定时器,keepalive
定时器
3.应用层posix api
的具体实现
-
socket
/bind
/listen
的实现 -
accept
实现 -
recv
/send
的实现
4.手把手设计实现epoll
-
epoll
数据结构封装与线程安全实现 - 协议栈
fd
就绪回调实现 -
epoll
接口实现 -
LT
/ET
的实现
异步io
机制
1.io_uring
-
io_uring
系统调用io_uring_setup
,io_ur ing_register
,io_uring_enter
-
liburng
的io_uring
的关 系 -
io_uring
与epoll
性能对比 -
io_uring
的共享内存机制
2.io_uring
的使用场景
-
io_uring
的accept
,connect
,recv
,send
实现机制 -
io_uring
网络读写 -
io_uring
磁盘读写 -
proactor
的实现
池式组件
1.手写线程池与性能分析(项目)
- 线程池的异步处理使用场景
- 线程池的组成任务队列执行队列
- 任务回调与条件等待
- 线程池的动态防缩
-
nginx
线程池实现对比分析
2.内存池的实现与场景分析(项目)
- 内存池的应用场景与性能分析
- 内存小块分配与管理
- 内存大块分配与管理
- 手写内存池,结构体封装与API实现
- 避免内存泄漏的两种万能方法
- 定位内存泄漏的3种工具
-
nginx
内存池实现
3.mysql
连接池的实现(项目)
- 连接池性能的影响的2个因素,
tcp
连接和mysql
认证 - 连接请求归还策略
- 连接超时未归还策略
- 链接断开重连策略
- 连接数量最优策略
高性能组件
1.原子操作CAS
与锁实现(项目)
- 互斥锁的使用场景与原理
- 自旋锁的性能分析
- 原子操作的汇编实现
2.无锁消息队列实现(项目)
- 有锁无锁队列性能
- 内存屏障
Barrier
- 数组无锁队列设计实现
- 链表无锁队列设计实现
3.网络缓冲区设计
-
RingBuffer
设计 - 定长消息包
-
ChainBuffer
设计 - 双缓冲区设计
4.定时器方案红黑树,时间轮,最小堆(项目)
- 定时器的使用场景
- 定时器的红黑树存储
- 时间轮的实现
- 最小堆的实现
- 分布式定时器的实现
5.手写死锁检测组件(项目)
- 死锁的现象以及原理
-
pthread_mutex_Iock
/pthread_mutex_unlock dIsym
的实现 - 有向图的构建
- 有向图
dfs
判断环的存在 - 三个原语操作
lock_before
,lock_after
,unlock_after
- 死锁检测线程的实现
6.手写内存泄漏检测组件(项目)
- 内存泄漏现象
- 第三方内存泄漏与代码内存泄漏
-
malloc
与free
的dIsym
实现 - 内存检测策略
- 应用场景测试
7.手把手实现分布式锁(项目)
- 多线程资源竞争 互斥锁,自旋锁
- 加锁的异常情况
- 非公平锁的实现
- 公平锁的实现
开源组件
1.异步日志方案spdlog
(项目)
- 日志库性能瓶颈分析
- 异步日志库设计与实现
- 批量写入与双缓存冲机制
- 奔溃后的日志找回
2.应用层协议设计ProtoBuf
(项目)
- IM,云平台,
nginx
,http
,redis
协议设计 - 如何保证消息完整性
- 手撕
protobuf IM
通信 协议 -
protobuf
序列化与反序列化 -
protobuf
编码原理
Redis
1.Redis
相关命令详解及其原理
-
string
,set
,zset
,list
,hash
- 分布式锁的实现
-
lua
脚本解决ACID原子性 -
Redis
事务的ACID性质分析
2.Redis
协议与异步方式
-
Redis
协议解析 - 特殊协议操作订阅发布
- 手撕异步
redis
协议
3.存储原理与数据模型
-
string
的三种编码方式int
,raw
,embstr
- 双向链表的
list
实现 - 字典的实现,
hash
函数 - 解决键冲突与
rehash
- 跳表的实现与数据论证
- 整数集合实现
- 压缩列表原理证明
4.主从同步与对象模型
- 对象的类型与编码
- 字符串对象
- 列表对象
- 哈希对象
- 集合对象
- 有序集合
- 类型检测与命令多态
- 内存回收
- 对象共享
- 对象空转时长
-
redis
的3种集群方式主从复制,sentinel
,cluster
- 4种持久化方案
MySQL
1.SQL
语句,索引,视图,存储过程,触发器
-
MySQL
体系结构,SQL
执行流程 -
SQL CURD
与高级查询 - 视图,触发器,存储过程
-
MySQL
权限管理
2.MySQL
索引原理以及SQL
优化
- 索引,约束以及之间的区别
- B+树,聚集索引和辅助索引
- 最左匹配原则以及覆盖索引
- 索引失效以及索引优化原则
-
EXPLAIN
执行计划以及优化选择过程分析
3.MySQL
事务原理分析
- 事务的
ACID
特性 -
MySQL
并发问题 脏读,不可重复读,幻读 - 事务隔离级别
- 锁的类型,锁算法实现以及锁操作对象
-
S
锁、X
锁、IS
锁、IX
锁 - 记录锁,间隙锁,
next-key lock
- 插入意向锁,自增锁
-
MVCC
原理剖析
4.MySQL
缓存策略
- 读写分离,连接池的场景以及其局限a
- 缓存策略问题分析
- 缓存策略强一致性解决方案
- 缓存策略最终一致性解决方案
- 2种
mysql
缓存同步方案从数据库与触发器+udf
- 缓存同步开源方案
go-mysql-transfer
- 缓存同步开源方案
canal
原理分析 - 3种缓存故障,缓存击穿,缓存穿透,缓存雪崩
Kafka
1.Kafka
使用场景与设计原理
- 发布订阅模式
- 点对点消息传递
-
Kafka Brokers
原理 -
Topics
和Partition
2.Kafka存储机制
- Partition存储分布
- Partition文件存储机制
- Segment文件存储结构
- offset查找message
- 高效文件存储设计
gRPC
1.gRPC
的内部组件关联
-
ClientSide
与ServerSide
,Channel
,Serivce
,Stub
的概念 - 异步
gRPC
的实现 - 回调方式的异步调用
-
Server
与Client
对RPC
的实现
2.基于http2
的gRPC
通信协议
- 基于
http
协议构造 -
ABNF
语法 - 请求协议
Request -Headers
-
gRPC
上下文传递
Nginx
1.Nginx
反向代理与系统参数配置conf
原理
-
Nginx
静态文件的配置 -
Nginx
动态接口代理配置 -
Nginx
对Mqtt
协议转发 -
Nginx
对Rtmp
推拉流 -
Openresty
对Redis
缓存数据代理 -
shmem
的三种实现方式 - 原子操作
nginx channel
- 信号
- 信号量
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
共享内存 - 如何解决"惊群"问题
- 如何实现负载均衡
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
机制的设计与实现 - 模块性能测试
skynet
1.Skynet
设计原理
- 多核并发编程-多线程,多进程,
csp
模型,actor
模型 -
actor
模型实现-lua
服务和c
服务 - 消息队列实现
-
actor
消息调度
2.skynet
网络层封装以及lua
/c
接口编程
-
skynet reactor
网络模型封装 -
socket
/socketchannel
封装 - 手撕高性能
c
服务 -
lua
编程以及lua
/c
接口编程
3.skynet
重要组件以及手撕游戏项目
- 基础接口
skynet.send
,skynet.call
,skynet.response
- 广播组件
multicastd
- 数据共享组件
sharedatad datasheet
- 手撕万人同时在线游戏
分布式API网关
1.网关Openresty
-
Nginx
与lua
模块 -
Openresty
访问Redis
,MySQL
-
Restful API
接口开发 -
Openresty
性能分析
2.Kong
动态负载均衡与服务发现
-
nginx
,openresty
,Kong
之间的“苟且” - 动态负载均衡的原理
- 服务发现实现的原理
Serverless
- 监控,故障检测与恢复
- 代理层缓存与响应服务
- 系统日志
SPDK
1.SPDK
文件系统设计与实现
-
NVMe
与PCle
的原理 -
NVMe Controller
与bdev
之间的rpc
-
blobstore
与blob
的关系
2.文件系统的posix api
实现
- 4层结构设计
vfs
-
spdk
的异步改造posix
同步api
-
open
/write
/read
/close
的实现
3.文件系统的性能测试与承接mysql
业务
-
LD_PRELOAD
更好mysql
系统调用实现 -
iodepth
讲解 - 随机读,随机写,顺序读,顺序写
CUDA
1.gpu
并行计算cuda
的开发流程
-
cpu
+gpu
的异构计算 - 计算机体系结构中的
gpu
-
cucda
的环境搭建nvcc
与srun
的使 用 -
cuda
的向量加法与矩阵乘法 -
MPI
与CUDA
2.音视频编解码中的并行计算
-
cuda
的h264
编解码 -
cuda
的mpeg
编解码 -
ffmpeg
的cuda
支持
workflow
1.workflow
的应用场景
-
workflow
的编程范式与设计理念 -
mysql
/redis
/kafka
/dns
的请求实现 -
parallel
处理与任务组装
2.workfIow
的组件实现
- 线程池实现
-
DAG
图任务 -
msgqueue
的实现 - 纯
c
的jsonparser
实现
通信协议 mqtt
1.mqtt
的高效使用场景
-
mqtt
的发布订阅模式 - 解决低带宽网络环境的数据传输
- 3种
Qos
等级 -
OAuth
与JWT
的安全认证
2.mqtt
的broker
-
mqtt
的遗嘱机制 - 发布订阅的过滤器
-
mosquitto
的docker
部署 -
mqtt
的日志实时监控
Docker
1. Docker
内核功能
- 进程
namespace
UTS namespace
IPC namespace
- 网络
namespace
- 文件系统
namesapce
-
cgroup
的资源控制
2.Docker
容器管理与镜像操作
-
Docker
镜像下载与镜像运行 -
Docker
存储管理 -
Docker
数据卷 -
Docker
与容器安全
Docker
网络管理
- 5种
Docker
网络驱动 -
pipework
跨主机通信 -
OvS
划分vlan
与隧道模式 -
GRE
实现跨主机Docker
间通信
Docker
云与容器编排
-
Dockerfile
的语法流程 - 编排神器
Fig
/Compose
-
FIynn
体系架构 -
Docker
改变了什么?
Kubernetes
1.k8s
环境搭建
-
k8s
集群安全设置 -
k8s
集群网络设置 -
k8s
核心服务配置 -
kubectl
命令工具 -
yaml
文件语法
2.Pod
与Service
的用法
-
Pod
的管理配置 -
Pod
升级与回滚 -
DNS
服务之于k8s
-
http
7层策略与TLS
安全设置
3.k8s集群管理(项目)
-
Node
的管理 -
namespace
隔离机制 -
k8s
集群日志管理 -
k8s
集群监控
4.k8s
二次开发与k8s API
-
RESTful
接口 -
API
聚合机制 -
API
组 -
Go
访问k8s API
性能与测试工具
1.测试框架gtest
以及内存泄漏检测
-
googletest
与googlemock
文件 - 函数检测以及类测试
-
test fixture
测试夹具 - 类型参数化
- 事件测试
- 内存泄漏
- 设置期望,期待参数,调用次数,满足期望
2.性能工具与性能分析
-
MySQL
性能测试工具mysqlslap
-
Redis
性能测试工具redis-benchmark
-
http
性能测试工具wrk
-
Tcp
性能测试工具TCPBenchmarks
- 磁盘,内存,网络性能分析
3.火焰图的生成原理与构建方式
- 火焰图工具讲解
- 火焰图使用场景与原理
-
nginx
动态火焰图 -
MySQL
火焰图 -
Redis
火焰图
观测技术bpf
与ebpf
1.内核bpf
的实现原理
- 跟踪,嗅探,采样,可观测的理解
- 动态
hook:kprobe
/uprobe
- 静态
hook:tracepoint
和USDT
- 性能监控计时器
PMC
模式 -
cpu
的观测taskset
的使用 -
BPF
工具bpftrace
,BCC
2.bpf
对内核功能的观测
- 内存观测
kmalloc
与vm_area_struct
- 文件系统观测
vfs
的状态 - 磁盘
io
的观测bitesize
,mdflush
-
bpf
对网络流量的统计 -
bpf
对redis-server
观测 - 网络观测
tcp_connect
,tcp_accept
,tcp_close
内核源码机制
1.进程调度机制哪些事儿
-
qemu
调试内存 - 进程调度
cfs
与其他的四个调度类 -
task_struct
结构体 -
RCU
机制与内存优化屏障
2.内核内存管理运行机制
- 虚拟内存地址布局
-
SMP
/NUMA
模型 - 页表与页表缓存原理
- 伙伴系统实现
- 块分配(
Slab
/Slub
/Slob
) 原理实现 -
brk
/kmalloc
/vmalloc
系统调用流程
3.文件系统组件
- 虚拟文件系统
vfs
-
Proc
文件系统 -
super_block
与inode
结构体 - 文件描述符与挂载流程
分布式数据库
1.不一样的kv
存储RocksDB
的使用场景
- 前缀搜索
- 低优先级写入
- 生存时间的支持
Transactions
- 快照存储
- 日志结构的数据库引擎
2.TiDB
存储引擎的原理
-
TiKV
的Key-Value
存储引擎 - 基于
RBAC
的权限管理 - 数据加密
3.TiDB
集群方案与Replication
原理
- 集群三个组件
TiDB Server
,PD Server
,TiKV Server
-
Raft
协议讲解 -
OLTP
与OLAP
分布式文件系统
1.内核级支持的分布式存储Ceph
-
ceph
的集群部署 -
monitor
与OSD
-
ceph
5个核心组件 -
ceph
集群监控 -
ceph
性能调调优与benchmark
2.分布式ceph
存储集群部署
- 同步机制
- 线性扩容
- 如何实现高可用
- 负载均衡
分布式协同
1.注册服务中心Etcd
-
etcd
配置服务、服务发现、集群监控、leader选举、分布式锁 -
etcd
体系结构详解(gRPC
、WAL
、Snapshot
、BoItDB
、Raft
) -
etcd
存储原理深入剖析(B树、B+树) -
etcd
读写机制以及事务的acid
特性分析 -
raft
共识算法详解(leader
选举+日志复制)
2.协同事件用户态文件系统fuse
(项目)
-
fuse
的使用场景 - 文件系统读写事件
-
fuse
的实现原理 - /
dev
/fuse
的作用
3.P2P
框架的实现
- 网关
NAT
表分析 -
NAT
类型,完全锥型NAT
,对称NAT
,端口限制锥形NAT
,IP
限制锥型NAT
- 代码逻辑实现
NAT
类型检测 - 网络穿透的原理
- 网络穿透的3种情况