在软件开发的宏大版图中,C++ 语言宛如一座巍峨的高山,吸引着无数开发者攀登探索。而 Linux 操作系统,以其开源、稳定、高效的特性,成为了众多开发者钟爱的开发平台。将 C++ 与 Linux 相结合,就如同为开发者配备了一把无坚不摧的利刃,能够在系统级编程、高性能计算、游戏开发等诸多领域披荆斩棘。对于 C++ 程序员而言,掌握 Linux 环境下的 C/C++ 编程技术,不仅仅是提升自身技能的关键一步,更是在激烈的职场竞争中脱颖而出的必备法宝。这就好比一位武林高手,不仅要熟练掌握各种招式,更要修炼深厚的内功。而 Linux C/C++ 编程技术,就是 C++ 程序员的 “内功心法”。
在日常开发中,我们常常会遇到各种挑战:如何优化代码性能,让程序运行得更加高效?怎样利用多线程技术,充分发挥多核处理器的优势?如何与底层系统进行交互,实现更强大的功能?这些问题,都能在 Linux C/C++ 编程技术的世界中找到答案。接下来,就让我们一同踏上这趟 Linux C/C++ 编程技术的探索之旅,从基础语法到高级应用,从文件操作到网络编程,从多线程处理到内存管理,全方位地深入学习,修炼 C++ 程序员的深厚 “内功”。无论你是初出茅庐的编程新手,还是经验丰富的开发老兵,相信都能在这篇文章中收获满满,为自己的编程之路注入强大的动力。
本文福利, 免费领取C++学习资料包、技术视频/代码,1000道大厂面试题,内容包括(C++基础,网络编程,数据库,中间件,后端开发,音视频开发,Qt开发)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓QQqun:1106675687
一、C/C++ Linux全栈开发
大厂标准 , 面试常问, 工作常用技术栈;手写代码实现:sdpk文件系统,dpdk用户态协议栈,异步网络库zvnet ,协程,io_uring,Nginx,bpf,线程池,内存池,连接池,原子操作,ringbuffer,定时器,死锁检测,分布式锁,日志,probuf,kafka,grpc,udp可靠传输;上线项目:KV存储项目,图床项目,即时通讯项目,内网穿透channel,魔兽游戏项目等。
1.1精进基石专栏
(1)数据结构与算法
随处可见的红黑树
红黑树的应用场景进程调度cfs,内存管理
红黑树的数学证明与推导
手撕红黑树的左旋与右旋
红黑树添加的实现与添加三种情况的证明
红黑树删除的实现与删除四种情况的证明
红黑树的线程安全的做法
分析红黑树工程实用的特点
磁盘存储链式的B树与B+树
磁盘结构分析与数据存储原理
多叉树的运用以及B树的定义证明
B树插入的两种分裂
B树删除的前后借位与节点合并
手撕B树的插入,删除,遍历,查找
B+树的定义与实现
B+树叶子节点的前后指针
B+树的应用场景与实用特点
B+树的线程安全做法
海量数据去重的abhloriter bitap
hash的原理与hash函数的实现
hash的应用场景
分布式hash的实现原理
海量数据去重布隆过滤器
布隆过滤的数学推导与证明
(2)设计模式
创建型设计模式
单例模式
策略模式
观察者模式
工厂方法模式与抽象工厂模式
原型模式
结构型设计模式
适配器模式
代理模式
责任链模式
状态模式
桥接模式
组合模式
(3)c++新特性
stI容器,智能指针,正则表达式
unordered_ _map
stl容器
hash的用法与原理
shared_ ptr,unique_ ptr
basic_ regex,sub_ match
函数对象模板function, bind
新特性的线程,协程,原子操作,lamda表达式
atomic的用法与原理
thread_ local 与condition_ var iable
异常处理exception_ _ptr
错误处理error _ category
coroutine的用法与原理
(4)Linux工程管理
Makefi le/ cmake/conf igure
Makefile的规则与make的工作原理
单文件编译与多文件编译
Makefile的参数传递
多目录文件夹递归编译与嵌套执行make
Makefile的通配符,伪目标,文件搜索
Makefile的操作函数与特殊语法
configure生成makefile的原则
cmake的写法
分布式版本控制git
git的工作流程
创建操作与基本操作
分支管理,查看提交历史
git服务器搭建
Linux系统运行时参数命令
进程间通信设施状态ipcs
Linux系统运行时长upt ime
CPU平均负载和磁盘活动iostat
监控,收集和汇报系统活动sar
监控多处理器使用情况mpstat
监控进程的内存使用情况pmap
系统管理员调优和基准测量工具nmon
密切关注Linux系统glances
查看系统调用strace
ftp服务器基本信息ftptop
电量消耗和电源管理powertop
监控mysq| 的线程和性能mytop
系统运行参数分析htop/top/atop
Linux网络统计监控工具netstat
显示和修改网络接口控制器ethtool
网络数据包分析利刃tcpdump
远程登陆服务的标准协议teInet
获取实时网络统计信息iptraf
显示主机上网络接口带宽使用情况iftop
(5)gdb调试
vscode远程连接Linux
vscode gdb开发环境设置
gdb调试概述
gdb调试准备
gdb调试命令详解
gdb多线程调试
gdb附加进程调试
gdb core fles调试
1.2高性能网络设计专栏
(1)网络编程异步网络库zvnet
网络io与io多路复用select/poll/epoll
socket与文件描述符的关联
多路复用select/poll
代码实现LT/ET的区别
事件驱动reactor的原理与实现
reactor针对业务实现的优点
poll封装send_ cb/recv_ _cb/ accept_ _cb
reactor多核实现
跨平台(select/epoll/kqueue)的封装reactor
redis,memcached, nginx网 络组件
http服务器的实现
reactor sendbuffer与recvbuffer封装http协议
http协议格式
有限状 态机fsm解析http
其他协议websocket, tcp文件传输
(2)网络原理
服务器百万并发实现(实操)
同步处理与异步处理的数据差异
网络io线程池异步处理
ulimit的fd的百万级别支持
sysctI. conf的rmem与wmem的调优
conntrack的原理分析
Posix API与网络协议栈
connect,listen, accept与三次握 手
listen参数backlog
syn泛洪的解决方案
close与四次挥手
11个状态迁移
大量close_ wait与time wait的原因与解决方案
tcp keepalive与 应用层心跳包
拥塞控制与滑动窗口
UDP的可靠传输协议QUIC
udp的优缺点
udp高并发的设计方案
qq早期为什么选择udp作为通信协议
udp可靠传输原理
quic协议的设计原理
quic的开源方案quiche
kcp的设计方案与算法原理
协程调度器实现与性能测试
调度器的定义分析
超时集合,就绪队列,io等待集合的实现
协程调度的执行流程
协程接口实现,异步流程实现
hook钩子的实现
协程实现mysql请求
协程多核方案分析
协程性能测试
(3)自研框架:基于dpdk的用户态协议栈的实现(已开源)
用户态协议栈设计实现
用户态协议栈的存在场景与实现原理
netmap开源框架
eth协议,ip协议, udp协议实现
arp协议实现
icmp协议实现
应用层posix api的具体实现
socket/bind/listen的实现
accept实现
recv/send的实现
滑动窗口/慢启动讲解
重传定时器,坚持定时器,time_ wait定时器,keepalive定时器
手把手设计实现epoll
epoll数据结构封装与线程安全实现
协议栈fd就绪回调实现
epoll接口实现
LT/ET的实现
高性能异步io机制io_ _uring
与epo1l媲美的io_ uring
io_ _uring系统调用io_ _uring_ setup, io_ _ur ing_ register, io_ _ur ing_ enter
liburng的io_ uring的关系
io_ uring与epoll性能对比
io_ _uring的共享内存机制
io_ uring的使用场景
io_ ur ing的accept, connect, recv, send实现机制
io_ uring网络读写
io_ uring磁盘读写
proactor的实现
windows异步机制iocp(以下为新增)
iocp完成端口的工作机制
iocp的精髓重叠io
iocp处理维护连接以及连接上的收发数据
iocp多线程处理方案
1.3基础组件设计专栏
(1)池式组件
手写线程池与性能分析(项目)
线程池的异步处理使用场景
线程池的组成任务队列执行队列
任务回调与条件等待
线程池的动态防缩
扩展: nginx线程池实现对比分析
内存池的实现与场景分析(项目)
内存池的应用场景与性能分析
内存小块分配与管理
内存大块分配与管理
手写内存池,结构体封装与API实现
避免内存泄漏的两种万能方法
定位内存泄漏的3种工具
扩展:nginx内存池实现
mysq|连接池的实现(项目)
连接池性能的影响的2个因素,top连接和mysq|认证
连接请求归还策略
连接超时未归还策略
链接断开重连策略
连接数量最优策略
(2)高性能组件
原子操作CAS与锁实现(项目)
互斥锁的使用场景与原理
自旋锁的性能分析
原子操作的汇编实现
无锁消息队列实现(项目)
有锁无锁队列性能
内存屏障Barrier
数组无锁队列设计实现
链表无锁队列设计实现
网络缓冲区设计
RingBuffer设计
定长消息包
ChainBuffer 设计
双缓冲区设计
定时器方案红黑树,时间轮,最小堆(项目)
定时器的使用场景
定时器的红黑树存储
时间轮的实现
最小堆的实现
分布式定时器的实现
手写死锁检测组件(项目)
死锁的现象以及原理
pthread_ _mutex_ lock/pthread_ _mutex_ _unlock dIsym的实现
有向图的构建
有向图dfs判断环的存在
三个原语操作 lock before, lock_ after, unlock_ after
死锁检测线程的实现
手写内存泄漏检测组件(项目)
内存泄漏现象
第三方内存泄漏与代码内存泄漏
malloc与free的dIsym实现
内存检测策略
应用场景测试
手把手实现分布式锁(项目)
多线程资源竞争互斥锁
自旋锁
加锁的异常情况
非公平锁的实现
公平锁的实现
(3)开源组件
异步日志方案spdlog (项目)
日志库性能瓶颈分析
异步日志库设计与实现
批量写入与双缓存冲机制
崩溃后的日志找回
应用层协议设计ProtoBuf(项目)
IM, 云平台,nginx, http, redis协议设计
如何保证消息完整性
手撕protobuf IM通信 协议
protobuf序列化与反序列化
protobuf编码原理
1.4中间件开发专栏
(1)Redis
Redis相关命令详解及其原理
string,set, zset, Iist,hash
分布式锁的实现
Lua脚本解决ACID原子性
Redis事务的ACID性质分析
Redis协议与异步方式
Redis协议解析
特殊协议操作订阅发布
手撕异步redis协议
存储原理与数据模型
string的三种编码方 式int, raw, embstr
双向链表的list实现
字典的实现,hash函数
解决键冲突与rehash
跳表的实现 与数据论证
整数集合实现
压缩列表原理证明
主从同步与对象模型
对象的类型与编码
广字符串对象
列表对象
哈希对象
集合对象
有序集合
类型检测与命令多态
内存回收
对象共享
对象空转时长
redis的3种集群方式主从复制,sentinel, cluster
4种持久化方案
(2)MySQL
SQL语句,索引,视图,存储过程,触发器
MySQL体系结构,SQL执行流程.
SQL CURD与高 级查询
视图,触发器,存储过程
MySQL权限管理
MySQL索引原理以及SQL优化
索引,约束以及之间的区别
B+树,聚集索引和辅助索引
最左匹配原则以及覆盖索引
索引失效以及索引优化原则
EXPLAIN执行计划以及优化选择过程分析
MySQL事务原理分析
事务的ACID特性
MySQL并发问题脏读,不可重复读,幻读
事务隔离级别
锁的类型,锁算法实现以及锁操作对象
S锁X锁|S锁IX锁
记录锁,间隙锁,next-key lock
插入意向锁,自增锁
MVCC原理剖析
MySQL缓存策略
读写分离,连接池的场景以及其局限a
缓存策略问题分析
缓存策略强一致性解决方案
缓存策略最终一致性解决方案
2种mysql缓存同步方案从数据库与触发器+udf
缓存同步开源方案go-mysql-transfer
缓存同步开源方案canal原理分析
3种缓存故障,缓存击穿,缓存穿透,缓存雪崩
(3)Kafka
Kafka使 用场景与设计原理
发布订阅模式
点对点消息传递
Kafka Brokers原 理
Topi cs和Partition
Kafka存 储机制
Partition存储分布
Partition文件存储机制
Segment文件存储结构
offset查找message
高效文件存储设计
微服务之间通信基石gRPC
gRPC的 内部组件关联
CI ientS ide与ServerSide, Channel, Ser ivce, Stub的概念
异步gRPC的实现
回调方式的异步调用
Server 与CI ient对RPC的实现
基于http2的gRPC通信协议
基于http协 议构造
ABNF语法
请求协议Request-Headers
gRPC上下文传递
(4)Nginx
Nginx反 向代理与系统参数配置conf原理
Nginx静态文件的配置
Nginx动态接口代理配置
Nginx对Mqtt协议转发
Nginx对Rtmp推拉流
Openresty对Redis缓存数据代理
shmem的三种实现方式
原子操作
nginx channel
信号
信号量
Nginx过滤 器模块实现
Nginx Filter模块运行原理
过滤链表的顺序
模块开发数据结构 ngx_str_t,ngx_ list_ t,ngx_ buf_ t,ngx_ chain_ t
error日志的用法
ngx_ comond_ t的讲解
ngx_http_module_t的执行流程
文件锁,互斥锁
slab共享内存
如何解决 "惊群”问题
如何实现负载均衡
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机制的设计与实现
模块性能测试
1.5开源框架专栏
(1)游戏服务器开发skynet (录播答疑)
Skynet设计原理
多核并发编程-多线程,多进程,csp模型,actor模型
actor模型实现-lua服务和c服务
消息队列实现
actor消息调度
skynet网络层封装以及lua/c接口编程
skynet reactor 网络模型封装
socket/ socketchanne|封装
手撕高性能c服务
lua编程以及lua/c接口编程
skynet重要组件以及手撕游戏项目
基础接口 skynet. send, skynet. cal I, skynet. response
广播组件multicastd
数据共享组件 sharedatad datasheet
手撕万人同时在线游戏
(2)分布式API网关
高性能web网关Openresty
Nginx与lua模块
Openresty访问Redis,MySQL
Restful API接口开发
Openresty性能分析
Kong 动态负载均衡与服务发现
nginx,openresty, Kong之间的“苟且”
动态 负载均衡的原理
服务发现实现的原理
Serverless
监控,故障检测与恢复
二代理层缓存与响应服务
系统日志
(3)SPDK助力MySQL数据落盘, 让性能腾飞(基础设施)
SPDK文件系统设计与实现
NVMe与PCle的原理
NVMe Controller 与bdev之间的rpc
blobstore与blob的关系
文件系统的posix api实现
4层结构设计vfs
spdk的 异步改造posix同步api
open/wr ite/read/close的实现
文件系统的性能测试与承接mysql业务
LD_ PRELOAD更好mysql系统调用实现
iodepth讲解
随机读,随机写,顺序读,顺序写
(4)高性能计算CUDA (录播答疑)
gpu并行计算cuda的开发流程
cpu+gpu的异构计算
计算机体系结构中的gpu
cuda的环境搭建nvcc 与srun的使用
cuda的向量加法与矩阵乘法
MPI与CUDA
音视频编解码中的并行计算
cuda的h264编解码
cuda的mpeg编解码
ffmpeg的cuda支持
(5)并行计算与异步网络引擎workflow
workflow的应用场景
workflow的编程范式与设计理念
mysq/redis/kafka/dns的请求实现
parallel处理与任务组装
workf low的组件实现
线程池实现
DAG图任务
msgqueue的实现
纯c的jsonparser实现
(6)物联网通信协议mqtt的实现框架mosquitto
mqtt的高效使用场景
mqtt的 发布订阅模式
解决低带宽网络环境的数据传输
3种Qos等级
0Auth与JWT的安全认证
mctt的broker
mqtt的遗嘱机制
发布订阅的过滤器.
mosqujitto的docker部暑
matt的日志实时监控
(7)ZeroMQ
消息队列与ZeroMQ的应用
REQ/REP模型原理分析
PUB/SUB模型原理分析
PUSH/PULL模型原理分析
Router/Dealer模型原理分析
ZeroMQ源码分析 :消息模型的实现
消息模型.
消息传递模式
消息分帧
中间层代理
消息丢失处理
ZeroMQ源码分析:网络机制与性能分析
零拷贝技术
消息高水位标记
无锁队列
可靠性设计
1.6云原生专栏
(1)Docker
Docker风光下的内核功能(录播答疑)
进程namespace
UTS namespace
IPC namespace
网络namespace
文件系统namesapce
cgroup的资源控制
Docker容器管理与镜像操作(录播答疑)
Docker镜像下载与镜像运行
Docker存储管理
Docker数据卷
Docker与容器安全
Docker网络管理(项目)
5种Docker网络驱动
pipework跨主机通信
0vS划分vlan与隧道模式
GRE实现跨主机Docker间通信
Docker云与容器编排 (项目)
Dockerfile的语法流程
编排神器Fig/Compose
FIynn体系 架构
Docker改变了什么?
(2)Kubernetes
k8s环境搭建(录播答疑)
k8s集群安全设置
k8s集群网络设置
k8s核心服务配置
kubectI命令工具.
yam|文件语法
Pod与Service的用法 (录播答疑)
Pod的管理配置
Pod升级与回滚
DNS服务之于k8s
http 7层策略与TLS安全设置
k8s集群管理的那些事儿(项目)
Node的管理
namespace隔离机制
k8s集群日志管理
k8s集群监控
k8s二次开发与k8s API (项目)
RESTful接口
API聚合机制
API组
Go访问k8s API
1.7性能分析专栏
(1)性能与测试工具
测试框架gtest以及内存泄漏检测(录播答疑)
goog letest与goog lemock文件
函数检测以及类测试
test fixture测试夹具
类型参数化
事件测试
内存泄漏
设置期望,期待参数,调用次数,满足期望
性能工具与性能分析(录播答疑)
MySQL性能测试工具mysqlslap
Redis性能测试工具redis-benchmark
http性能测试工具wrk
Tcp性能测试工具TCPBenchmarks
磁盘,内存,网络性能分析
火焰图的生成原理与构建方式
火焰图工具讲解
火焰图使用场景与原理
nginx动态火焰图
MySQL火焰图
Redis火焰图
(2)观测技术bpf与ebpf(原有的内容增加)
bpftrace的实现原理
跟踪,嗅探,采样,可观测的理解
动态hook : kprobe/uprobe
静态hook : tracepoint和USDT
cpu的观测taskset的使用
bpf对tcp请求的监控(项目)
bpf对网络流量的统计
网络观测tcp _connect, tcp_accept,tcp _close
tcp_v4_ _connect与tp_v6 connect的探测点
struct sock的五元获取
bpf实现对goroutine的探测(项目)
go webserver的实现
uprobe应用层挂载点
bpf的ringbuffer原理
bpf探测java的垃圾回收(项目)
运行时进程maps /proc/pid/maps
libjvm.so信息
bpf的usdt的使用
java gc的耗时
(3)内核源码机制
进程调度机制哪些事儿
qemu调试内存
进程调度cfs与 其他的四个调度类
task_ struct结构体
RCU机制与内存优化屏障
内核内存管理运行机制
虚拟内存地址布局
SMP/NUMA模型
页表与页表缓存原理
伙伴系统实现
块分配(SIab/SIub/Slob) 原理实现
brk/kmalloc/vmalloc系统调用流程
文件系统组件
虚拟文件系统vfs
Proc文件系统
super_ _block与 inode结构体
文件描述符与挂载流程
1.8分布式架构专栏
(1)分布式数据库
不一样的kv存储RocksDB的使用场景
前缀搜索
低优先级写入
生存时间的支持
Transact i ons
快照存储
日志结构的数据库引擎
TiDB存储引擎的原理
TiKV的Key-Value存储引擎
基于RBAC的权限管理
数据加密
TiDB集群方案与Replication原理
集群三个组件 TiDB Server, PD Server, TiKV Server
Raft协议讲解
OLTP与0LAP
(2)分布式文件系统(录播答疑)
内核级支持的分布式存储Ceph
ceph的集群部署
monitor与OSD
ceph 5个核心组件
ceph集群监控
ceph性能调调优与benchmark
分布式ceph存储集群部署
同步机制
线性扩容
如何实现高可用
负载均衡
(3)分布式协同
注册服务中心Etcd
etcd配置服务、服务发现、集群监控、leader选举、 分布式锁
etcd体系结构详解(gRPC, WAL,Snapshot、 BoItDB、 Raft)
etcd存储原理深入剖析(B树、B+树)
etcd读写机制以及事务的acid特性分析
raft共识算法详解(leader选举+日志复制)
协同事件用户态文件系统fuse (项目)
fuse的使用场景
文件系统读写事件
fuse的实现原 理
/dev/fuse的 作用
快播核心技术揭秘P2P框架的实现(录播答疑)
网关NAT表分析
NAT类型,完全锥型NAT,对称NAT,端口限制锥形NAT,IP限制锥型NAT
代码逻辑实现NAT类型检测
网络穿透的原理
网络穿透的3种情况
(4)分布式监控Prometheus(新增)
Prometheus监控系统
数据模型: Metric、Time Series、Sample和label
指标类型 : Counter、Gauge、Histogram、Summary
采集规则和警告规则
PromQL查询语言
Prometheus对MySQL/Redis的监控
Mysql Redis Exporter安装配置
go实现自定义应用程序指标
PromQL计算Mysq|、 Redis性能指标
Prometheus数据远程存储
Prometheus数据采集
6种采集点配置方式
动态重写目标采集点
Grafana可视化监控仪表盘
Prometheus构建企微与邮件的状态告警
邮件和企微的接入
Alertmanager配置 与容器化运行
警告信息的分组
1.9上线产品项目(基础架构、从零构建)
(1)dkvstore实现(上线项目,从零构建)
kv存储的架构设计
存储节点定义
tcp server/client
hash数据存储
list数据存储
skiptable数据存储
rbtree数据存储
网络同步与事务序列化
序列化与反序列化格式
建立事务与释放事务
线程安全的处理
KV存储的性能测试
网络测试tps
吞吐量测试
go, lua, java多语言支持
hash/I ist/skiptable/rbtree测试
(2)zrpc的实现(上线项目,从零构建)
rpc使用场景与架构设计
分布式核心调度业务
网络与业务分离
网络选型reactor, 协程,io_ uring
rpc的协议与序列化
json定义函数
数据序列化
rpc处理流程
rpc的内存池的特性
rpc代码自动生成器的实现
调用接口模式统一化
float与double调用的差异
第三方语言的支持
性能测试与业务上线
(3)PHS 高性能网关服务(上线项目,从零构建)
PHS后端框架构建
reactor事件模型
核心的组成部分以及实现
框架基础功能实现
以PHS后端基础组件实现
线程池封装实现
定时器模块实现
高性能web的内存池特性
PHS访问静态网页
opensssI引入
http协议实现
静态资源管理
性能测试与部署上线
(4)DPDK的数据包测试仪(测试工具开发,从零构建)
测试仪架构设计与使用场景
使用场景与测试方案
多核与多线程亲缘性
测试仪使用的命令行参数
协议流组织
arp数据组织
udp数据包
top的syn, rst, fin, ack包
icmp协议组织
异常情况与测试标准
异常命令行参数的处理
异常网络数据包的处理
cpu与内存不足的异常处理
1.10上线产品项目(开源项目、框架迭代)
(1)SPDK助力MySQL数据落盘,让性能腾飞(基础设施)
SPDK文件系统设计与实现
NVMe与PCle的原理
NVMe Controller 与bdev之间的rpc
blobstore与blob的关系
文件系统的posix api实现
4层结构设计vfs
spdk的异步改造posix同步api
open/wr ite/read/c lose的实现
文件系统的性能测试与承接mysq|业务
LD_ PRELOAD更 好mysql系统调用实现
iodepth讲解
随机读,随机写,顺序读,顺序写
(2)魔兽世界后端TrinityCore (上线项目,迭代开发)
TrinityCore开发调试环境安装
linux开发调试环境安装
windows开发调试环境安装
SRP-6登录协议介绍
基于openresty实现web注册服务
TrinityCore 中高性能基础组件应用
to高性能定时器方案设计
to线程模型以及锁、无锁队列应用
数据库连接池设计
日志库的设计
TrinityCore 高性能网络模块设计
boost. asio跨平台网络库
boost. asio核心命名空间以及异步io接口
boost. asio在to中的封装
网络库应用实践
TrinityCore 游戏技能模块设计
技能模块设计
技术配置以及数据库表设计
技能模块组成部分
技能生成、处理以及生命周期管理
暴风雪、背击等技能实现详解
游戏AI模块设计
Al模块实现层次
Al模块三种细分方向以及选择
固定Al设计实现以及幼狼AI案例讲解
脚本Al设计实现以及BossAl案例讲解
游戏副本模块设计
副本模块:管理、匹配、积分结算逻辑实现
副本模块实现的抽象,层次
战歌峡谷副本实现
阿拉希盆地副本实现
(3)网络数据包过滤firewall (从零构建)
firewall内核空间netfilter架构设计
内核空间设计与实现分析
设计数据包传递参数值
封装端口及IP规则类型
设计检测规则/IP/协议函数
firewall内核空间架构实现
检测规则/IP/协议函数实现
检查权限及规则函数实现
数据包出入站过滤器实现
读写规则/检查规则匹配实现
删除规则/模块加载和知裁
firewall用户空间架构设计
用户空间设计与实现分析
设计数据包传递参与宏
封装端口及|P规则类型
firewall 应用程序调试与上线
Hook入口函数设计与实现
IP/掩码/端口函数实现
协议类型/解析/删除规则
用户层访问及bug处理
用户程序测试及调试技巧
(4)BPF网络数据包探测器(从零构建)
监控探测仪的场景与架构设计
bpf.c实现tcp数据包探测
bpf.c解析tcp与http
内核与应用层的通信数据格式
tc数据流记录存储
kv存储构建发送与接收的key-value
http请求实现集中式存储
数据流记录表关系
测试上线与前端显示
内核与应用程序的通信测试
kv的存储测试
数据流记录表的qps测试
前端显示与上线
1.11上线产品项目(产品运营、从零落地)
(1)图床共享云存储(上线项目,从零构建)
fastdfs架构分析和配置
fastdfs架构分析
快递配查fastdfs
上传文件逻辑分析
下载文件逻辑分析;
文件传输和接口设计
数据库设计
图床接口设计
reactor网络模型构建
注册/登录/我的文件功能实现
分布式fastdfs存储集群部署和HTTP上传
storage存储原理分析.
上传下载原理
实现文件上传功能
相同文件内容只保存一份
图片分享和短链服务实现
图片分享功能实现
图片分享数据库设计
长链转短链机制
Redis缓存优化
分布式FastDFS存储集群部署
FastDFS集群部署
FastDFS同步原理
binlog机制
水平扩容
图床功能查漏补缺
产品上云公网发布/测试用例
使用云服务器的各种坑分析
postman模拟请求
wrk测试接口吞吐量
jmeter压力测试
(2) GitHub仓库话题聊天室(上线项目,迭代开发)
项目框架分析和部暑
GitHub话题聊天室需求分析
话题聊天室架构
后端服务部署
Web部署
接口设计与实现
HTTP RESTful API原 理
MySQL用户表设计
redis缓存token
客户端缓序token
固定话题聊天实现
websocket连按用户校验
话题/用户映射表结构设计
聊天发布到服务器
redis缓存房间在线人员
服务器广播新消息
聊天记录拉取设计与实现
MySQL消息表设计
聊天消息存储
分页拉取聊天消息
登录自动拉取最新消息
黑名单实现
文件服务器和docker部署
在线文件传输机制分析
离线文件传输机制分析
etcd微服务注册与发现
docker制作与部署
产品上云公网发布/公网测试上线
单元测试案例
testbench如何设计
M项目性能压测
定制私有功能
拓展新功能(代码)
云服务器部暑
(3)云原生内网穿透channel (上线项目,从零构建)
系统设计以及frp开源项目
项目背景与需求分析
系统设计与数据库设计
frp TCPMUX代理与httpconnect复用器
frp ssh. http、https内网穿透
frp AuthServerConfig token鉴 权
应用管理与应用配置
ssh、http、https等类型的应用维护
应用程序端口分配以及配置生成
导出应用配置为yaml格式的配置文件
go客户端实现Swarm集群应用的部署与更新
Docker启用TLS客户端访问
go客户端根据时间戳创建服务配置
go客户端检查并创建overlay网络
go客户端设置私有注册中心权限
go客户端创建并更新应用服务
vite/vue/elementUI实现前端页面
Vue组件化开发与ElementUI
Typescr ipt的interface的应用
axios实例与拦截器.
get与post请求封装
配置文件与api调用
自动化域名解析与Swarm集群Tunne|服务部暑
自动化域名解析与域名备注
服务的部署与客户端配置的返回
Tunne |服务的容器化部署与更新
Tunnel客户端配置部署Tunne|客户端程序
certbot生成道配符证书用于Tunnel应用
二、音视频流媒体高级开发
本套学习路线让你全面掌握音视频基础,深入探讨FFmpeg实战,详细讲解编码解码技术,精通流媒体客户端与服务端开发,深入掌握WebRTC实战,并通过Android NDK和IOS音视频扩展实战技能。让你全面掌握音视频处理技术,从基础到高级,从理论到实践,让你成为音视频领域的专家!
2.1音视频基础
(1)音频基础知识
如何采集声音-模数转换原理
为什么高品质音频采样率>=44.1 Khz
什么是PCM
一个采样点用多少位表示
采样值用整数还是浮点数表示
音量大小和采样值大关系
多少个采样点作为一-帧数据
左右通道的采样数据如何排列
什么是PCM (脉冲编码调制)
音频编码原理
(2)视频基础知识
RGB彩色原理
为什么需要YUV格式
什么是像素
分辨率、帧率、码率
YUV数据存储格式区别
YUV内存对齐问题
为什么画面显示绿屏
H264编码原理
H264IPB帧的关系
注:具体H264编码格式见FFmpeg章节
(3)解复用基础知识
什么是解复用,比如MP4格式
为什么需要不同的复用格式
MP4/FLV/TS
常见的复用格式MP4/FLV/TS
注:具体复用格式详解见FFmpeg章节
(4)FFmpeg开发环境搭建
Windows、Ubuntu、MAC3三大平台
QT安装
FFmpeg命令行环境
FFmpeg API环境
FFmpeg编译
vs2019安装(win平台)
(5)音视频开发常用工具
Medialnfo,分析视频文件
mp4box,分析mp4
VLC播放器,播放测试
audacity,分析音频PCM
EasyICE,分析TS流
Elecard_ streamEye, 分析H264
flvAnalyser,分析FLV
海康YUVPlayer,分析YUV
2.2FFmpeg实战
(1)FFmpeg命令
音频PCM/AAC文件提取
视频YUV/H264文件提取
解复用、复用
音视频录制
视频裁剪和合并
图片/视频转换
直播推流和拉流
水印/画中画/九宫格滤镜
(2)SDL跨平台
多媒体开发库实战
SDL环境搭建
SDL事件处理
SDL线程处理
视频YUV画面渲染
音频PCM声音输出
注: SDL兼容Win、Ubuntu、Mac三大平台,主要用于后续项目的画面显示和声音输出
(3)FFmpeg基石精讲
FFmpeg框架
FFmpeg内存引|用计数模型
解复用相关AVFormat XXX等
编解码相关AVCodec XXX等
压缩数据AVPacket
未压缩数据AVFrame
FFmpeg面向对象思想
Packet/Frame数据零拷贝
注:目的熟悉FFmpeg常用结构体和函数接口
(4)FFmpeg过滤器
FFmpeg过滤chain框架
音频过滤器框架
视频过滤器框架
多路音频混音amix
视频水印watermark
视频区域裁剪和翻转
视频添加logo
(5)FFmpeg音视频解复用+解码
解复用流程
音频解码流程
视频解码流程
FLV封装格式分析
MP4封装格式分析
FLV和MP4 seek有什么区别
为什么FLV格式能用于直播
为什么MP4不能用于直播
MP4能否用来做点播
AAC ADTS分析
H264 NALU分析
AVIO内存输入模式
音频重采样实战
重采样后的数据播放时长是否一致
重采样后PTS如何表示
视频解码后YUV内存对齐问题
音频解码后PCM排列格式问题
硬件解码dxva2/nvdec/cuvid/qSV
硬件gpu数据转移到cpu
H265解码
注: FFmpeg API学习:视频解复用->解码->编码->复用合成视频
(6)ffplay播放器
掌握ffplay.c的意义
ffplay框架分析
解复用线程
音频解码线程
视频解码线程
声音输出回调
画面渲染时间间隔
音频重采样
画面尺寸格式变换
音频、视频、外部时钟同步区别
以视频为基准时音频重采样补偿
音量静音、调节大小的本质
音视频packet队列大小限制
音视频packet队列线程安全
音视频frame队列大小限制
音视频frame队列线程安全
暂停、播放实现机制
seek播放导致的画面卡住问题.
seek播放数据队列、同步时钟处理
如何做到逐帧播放
播放器退出的流程要点
注: ffplay.c是ffplay命 令的源码,掌握fplay对于我们自己开发播放器有事半功倍的效果
(7)FFmpeg音视频编码+复用合成视频
AAC音频编码
H264视频编码
PCM+ YUV复用合成MP4/FLV
H264编码原理
IDR帧和帧区别
动态修改编码码率
GOP间隔参考值
复用合成MP4音视频不同步问题
编码、复用timebase问题
MP4合成IOS不能播放问题
重采样后PTS如何表示
视频编码YUV内存对齐问题
硬件编码dxva2/nvenc/cuvid/qsv
H265编码原理
H264、H265编码互转
(8)ffmpeg多媒体
视频处理工具
掌握fmpeg.c的意义
ffmpeg框架分析
音视频编码
封装格式转换
提取音频
提取视频.
logo叠加
音视频文件拼接
filter机制
命令行解析流程
MP4转FLV不重新编码逻辑
MP4转FLV重新编码逻辑
MP4转FLV scale
注: ffmpeg.c是ffmpeg命令的源码,掌握ffmpeg.c的大体框架对于我们要实现一些不知道怎么编写代码的功能(用ffmepg命令行可以但不知道怎么调用ffmpeg api时可以参考ffmepg.c的逻辑)有极大的帮助,比如要裁剪视频长度。
(9)FFmpeg+ QT播放器
常见开源播放器分析
CUVID/D3D11VA硬解
界面和播放核心分离框架分析
音量频谱展示
播放器模块划分
音频均衡器
解复用模块
画面旋转、翻转
音视频解码
画面亮度、饱和度调节
播放器控制
画面4:3 16:9切换
音视频同步
码流信息分析
2.3流媒体客户端
(1)RTMP推拉流项目实战
RTMP协议分析
wireshark抓包分析
H264 RTMP封装
AAC RTMP封装
RTMP拉流实战
H264 RTMP解析
AAC RTMP解析
RTMP推流实战
0没有MetaData能否播放
RTMP推流是否会导致延迟
RTMP推流如何动态调整码率
RTMP推流如何动态调整帧率
RTMP拉流是否会导致延迟
如何检测RTMP拉流延迟
如何解决RTMP播放延迟
ffplay. vlc能否用来测试播放延迟
ffplay、vlc能否用来测试播放延迟
RTMP拉流播放变速策略设置
(2)RTSP流媒体实战
RTSP协议分析
RTP协议分析
H264 RTP封装
H264 RTP解析
AAC RTP封装
AAC RTP解析
RTCP协议分析
RTSP流媒体服务器搭建
RTSP推流实战
RTSP拉流实战
wireshark抓包分析
RTP头部序号的作用
RTCP的NTP和RTP的TS的区别
RTP头部序号的作用
RTCP的NTP和RTP的TS的区别
RTSP交互过程
花屏可能的原因
SPS PPS如何发送
SDP封装音视频信息
(3)HLS拉流分析
HLS协议分析
HLS拉流实战
HTTP协议分析
FFmpeg HLS源码分析
TS格式分析
HLS多码率机制
m3u8文件解析
如何解决HL S延迟高的问题
wireshark抓包分析
注:理解HL .S的拉流机制,有助于我们解决HL .S播放延迟较高的问题
2.4流媒体服务器
(1)SRS源码剖析协程
整体框架分析
连接和协程的关系
RTMP推流分析
如何更快速掌握SRS源码
RTMP拉流分析
流媒体服务器是否导致延迟
HLS拉流分析
如何降低流媒体服务器的延迟
HTTP-FLV拉流分析
怎么获取流媒体服务器推流信息
FFmpeg转码分析
怎么获取流媒体服务器拉流信息
首屏秒开技术分析
首屏秒开能降低延迟吗
forward集群源码分析
推流->服务器转发->拉流延迟分析
edge集群源码分析
负载均衡部署方式
注:对于SRS流媒体服务器,我们长期更新,从3.0->4.0->5.0
(2)ZLMediaKit源码剖析
整体框架分析
数据转发模型
线程模块划分
SDP解析
RTSP推流连接处理
RTP H264解析
RTSP拉流连接处理
RTP AAC解析
注: ZLMediaKit主要讲解RTSP流媒体服务器相关的模块,其他模块RTMP/HLS等参考SRS。
2.5WebRTC项目实战
(1)WebRTC中级开发手把手写代码
WebRTC通话原理分析
WebRTC开发环境搭建
coturn最佳搭建方法
如何采集音视频数据
一对一通话时序分析
信令服务器设计
SDP分析
Candidate类型分析
Web-对一通话
Web和Android通话
AppRTC快速演示
如何设置编码器优先级
如何限制最大码率
信令服务器的本质是什么
Web和Android的SDP差异
A要和B通话, A怎么知道B的存在
新增C++、IOS客户端两大版本
注:学习WebRTC建议从web端入手,可以直接调用js接口(千万别刚接触WebRTC就忙着去编译WebRTC源码) , 对WebRTC通话流程有清晰的理解再考虑其他端。
(2)WebRTC高级开发-SRS 4.0/5.0源码分析
RTMP转发WebRTC逻辑
WebRTC转发RTMP逻辑
WebRTC音视频一对一通话
WebRTC多人通话
WebRTC SFU模型分析
SRTP分析
RTCP分析
SDP分析
NACK分析
turn分析
stun分析
拥塞控制算法
FEC
jitter buffer
(3)WebRTC高级开发-MESH模型多人通话
自定义摄像头分辨率
码率限制
调整编码器顺序
Mesh模型多方通话分析
多人通话信令服务器开发
动态分配stun/turn服务器
Web客户端源码
Android客户端源码
(4)WebRTC高级开发-Janus SFU模型多人通话
Janus框架分析
Janus信令设计
基于Janus实现会议系统
Janus Web客户端源码分析
Janus Android客户端源码分析
Janus Windows客户端源码分析
基于Full ICE的部署
基于Lite ICE的部署
Full ICE和Lite ICE的区别
发布订阅模型
1.6Android NDK
(1)Android NDK开发基础
So库适配总结
GDB调试技巧
Makefile_ I程组织
CMake工程组织
生成指定CPU平台的so库
JNI基础和接口生成
JNI Native层构建Java对象
JNI异常处理
(2)Android FFmpeg编译和应用
编译x264
编译x265
编译mp3
编译fdk-aac
编译FFmpeg
使用ffmpeg实现mp4转格式
使用FFmpeg开发播放器
(3)Android RTMP推拉流
RTMP推流协议实现
RTMP拉流协议实现
RTMP拉流音视频同步
MediaCodec硬件编码
MediaCodec硬件解码
OpenSL ES播放音频数据
MediaCodec硬件解码
OpenGL ES Shader显示视频
(4)Android Ijkplayer源码分析
编译jkplayer和实践
项目框架分析
播放状态转换
拉流分析
解码分析
音频播放流程
视频渲染流程
OpenSL ES播放音频数据
MediaCodec硬件解码
OpenGL ES Shader显示视
变速播放实现原理
低延迟播放实现
缓存队列设计机制分析
1.7IOS音视频开发
(1)IOS FFmpeg6.0编译和应用
xcode调试FFmpeg
IOS调用FFmpeg
QT调试FFmpeg
(2)IOS FFmpeg RTMP推拉流
AVFoundation视频采集
Metal视频渲染
Audio Unit音频采集
Audio Unit音频播放
FFmpeg推流
FFmpeg拉流
直播延迟和解决方法
(3)VideoToolbox硬件编解码
VideoToolbox框架的流程
硬件编解码步骤
CVPixelBuffer解析
如何获取SPS/PPS信息
判断是否关键帧
编码参数优化
(4)IOS jkplayer编译和应用
本地视频播放
RTMP拉流播放
HTTP点播
音频播放流程
视频渲染流程
(5)IOS ijkplayer编译和应用
基于Mesh一对一通话
基于SFU多人通话
1.8音视频项目实战
(1)0voice播放器
支持播放/暂停,上一/下一视频,变速播放,文件seek播放进度显示,截屏,调节音量,播放列表,显示缓存时间实现直播低延迟播放
(2)0voice录制推流软件
支持屏幕+麦克风RTMP直播,支持本地文件推送;支持录制保存到本地,支持录制预览功能,支持添加图片水印功能;支持文字水印功能,支持屏幕+摄像头同时捕获,支持降噪功能。
(3)0voice低延迟拉流直播——实现500毫秒~1秒的低延迟直播
三、DPDK高性能开发
走进高性能世界:探索dpdk、spdk、网络协议栈、vpp、OvS、DDos、SDN、NFV和虚拟化,成为专业的技术大师!
3.1DPDK网络专栏
(1)dpdk基础知识
多队列网卡,vmxnet/e1000
igb_ uio与vfio模块
kni模块
hugepage的理解
零拷贝
dpdk与netmap区别
dpdk的工作环境
(2)网络协议栈
dpdk-arp
netsh静态arp表设置
dpdk-icmp
udp协议格式分析
udp协议sendto, recvfrom实现
dpdk-ip
dpdk-tcp
tcp协议栈bind,listen, accept实现
tcp协议栈recv, send, close的实现
tcp三次握手实现
tcp四次挥手实现
tcp acknum与seqnum的确认机制实现
tcp的并发连接设计
epoll并发的实现
tcp协议栈与epoll之间的回调实现
(3)dpdk组件项目
dpdk-ac
dpdk-kni
/dev/ kni的原理分析
kni_ dev的流程
kni的t缓冲区,rx缓冲区
kni的用户空间与内核空间映射
mbuf如何转化为kernel的sk_ buff
dpdk- timer
bpftrace的使用
dpdk- bpf源码流程
(4)dpdk经典项目
dpdk- dns
dpdk- gateway
dpdk-ddos熵计算源码
ddos attach检测精确度调试
ddos attach测试T具hping3
布谷鸟hash原理与使用
3.2储存技术专栏
(1)高效磁盘io读写spdk(C)
存储框架spdk,为技术栈打开扇存储的大门
spdk运行环境与vhost
NVMe与PCl的关系
手把手实现spdk_ server
nvme与pcie以及手写nvme读写操作
bdev与blob之间的关系
实现blob异步读写
blobstore的读写操作实现与rpc的关系
fio性能测试性能对比libaio,io_ uring,psync
fio plugin工作流程
fio plugin开发
(2)spdk文件系统的实现
文件系统功能拆解
spdk_ env_ init与spdk_ app init的差别
spdk_ _thread_ poll实现rpc回调
fs_ operations结构体定义
file_ operations结构体定义
dir_ operations结构体定义
syscall的hook实现
基数树对文件系统内存管理
spdk_ blob的open,read,write,close
测试用例与调试入口函数
(3)spdk kv存储的实现
KV存储拆解Set, Get, Mod, Del
app/.a库/so库对于kv存储的选择
bdev与blob对于kv存储的选择
kv service启动blob资源操作
kv service关闭blob资源回收
kv service接口set,get,modify,delete
kv遍历与查找实现
page存储chunk的管理
pagechunk的get与put
page单查找与多页查找
btree, artree, hashmap,radixtree, rbtree之间的选择
slab的实现
slab分配slot与释放slot
为kv加上conf文件
测试用例与性能测试
3.3安全与网关开发专栏
(1)可扩展的矢量数据包处理框架vpp(c/c++)
vpp命令详解
mac/ip转发plugin
load_ balance plugin
flowtable plugin
vpp源码之间的差异
多网卡数据接收与转发
解决plugin编译加载
vpp启动load so的流程
vpp的结构体vlib_ _main实现分析
vpp的结构体vnet_ main
vector的操作实现
vpp vcl库与LD_ PRELOAD实现分析
vcl原理讲解
vcl tcpserver实现原理
vcl tcpclient实现原理
vcl与iperf3的客户端与服务器
vcl与nginx的wrk性能测试
vcl与haproxy的性能测试
vpp 1801版本与vpp 2206版本
vpp httpserver的实现源码
vpp plugin quic源码分析
vpp plugin hs_ app的源码
vpp plugin rdma的实现分析
vpp plugin loadbalance
vpp plugin nat的源码分析
vpp host-stack tcp协议实现
vpp plugin的测试用例实现
(2)golang的网络开发框架nff-go(golang)
nff-go实现的技术原理
nff-go/low.h实现分析
nff- go数据接收的实现
nff-go数据发送的实现
ipsec协议解析与strongswan的ipsec
nff go的缺陷与不足
3.4虚拟化与云原生专栏
(1)DPDK的虚拟交换机框架OvS
ovs编译安装,ovs核心组件内容
ovs-vswitchd的工作原理
ovs-vswitchd与dpdk的关系
ovs-vsctl的网桥,网口操作
qemu-system-x86_ 64构建多子网
ovs与qemu数据流分发
ovs搭建docker跨主机通信
ovsdb server与ovsdb协议
json-rpc为控制面提供开发
ovs-tcpdump/ovs-l3ping
OvS 4种数据路径
VXL AN数据协议
ovs流量统计
(2)高性能4层负载均衡器DPVS
dpvs的技术组件与功能边界
lvs+keepalived配置高可用server
dpvs与|lvs+ keepalived的关系
dpvs.conf的配置文件
dpvs的FNat/NAT/SNAT模式
dpvs的DR模式
dpvs的tun模式
通过quagga配置ospf
dpvs的tc流控操作与源码实现
dpvs代码架构分析
dpvs测试用例ipset, tc,mempool
3.5测试工具专栏
(1)perf3
vpp vcl的perf3接口hook
perf3测网络带宽
tcp吞吐量测试
udp丢包与延迟测试
json测试结果输出
(2)TRex
TRex的运行原理
TRex与dpdk
构建TRex测试系统
t-rex -64- debug gdb调试
bg-sim- 64模拟单元测试
YAML文件编写
流编排与自动化框架
报文变量设置
(3)dpdk-pktgen
pktgen命令讲解
default.cfg配置文件分析
120M bits/s的转发速率
(4)fio
ioengine的实现
ioengine_ ops的分析
iodepth的分析
spdk_ nvme的fio分析
spdk_ bdev的fio分析
spdk_ blob的ioengine实现
psync,io_ uring, libaio性能对比
3.6性能测试专栏
(1)性能指标
吞吐量bps
拆链/建链pps
并发
最大时延
最小时延
平均时延
负载
包速fps
丢包率
(2)测试方法
测试用例
vpp sandbox
perf3灌包
rfc2544
四、Linux内核开发
本套学习路线精选5大主题深入剖析,提升内核开发者技术水平:进程管理、内存管理、网络协议栈、设备驱动管理以及文件系统及内核组件。学习后,你将掌握内核开发的核心技术,提高自身竞争力。
4.1进程管理专栏
(1)进程管理基础部分
Linux内核源码组织结构
Linux内核5个子系统关系
Linux内核源码目录结构详解
如何快速掌握阅读内核源码方法与技巧
进程原理及系统调用详解
进程/进程生命周期
task_ struct数据结构
进程优先级/系统调用
调度器及CFS调度器
实时调度类/SMP/NUMA
进程优先级与调度策略案例分析
RCU机制及内存优化屏障
内存布局和堆管理
多核调度分析
内核数据结构:链表和红黑树案例分析
(2)进程管理案例分析
编译自己Linux内核实战分析
进程管理4大常用API案例分析
系统调用API1
kthread _create_on_node案例分析
wake_up_process案例分析
系统调用API2
获取进程NICE值案例分析
设置进程NICE值案例分析
系统调用API3
complete_all案例分析
wake_up_sync_key案例分析
RCU案例实战分析
模拟cfs调度器案例分析
进程间通信案例分析
SMP调度详解
4.2内存管理专栏
(1)内存管理基础部分
拟地址空间布局架构
内存管理架构分析
虚拟地址空间布局
内存映射原理机制
物理内存组织结构
统调用sys mmap/sys_ munmap
内存模块及三级结构
引导内存分配器原理
bootmem分配器原理
memblock分配器原理
伙伴分配器
伙伴分配器原理
分配页及释放页
Slab分配器详解
不连续页分配器及页表
胪空间缺顽异常
页表缓存(TLB)与巨型页
TLB表项格式及管理
ASID原理/NMID原理
处理器对巨型页的支持
标准巨型页原理及查看
巨型页池
页回收机制详解
发起页回收
回收不活动页
页交换
计算描页数
收缩活动页链表
回收slab缓存
内存反碎片技术
虚拟可移动区域技术原理
内存碎片整理算法
Linux内核内存池案例分析
内存检测与死锁检测
(2)内存管理案例分析
伙伴系统算法案例分析
设计per-cpu变量案例分析
缺页异常分析
写时复制缺页异常
文件映射缺页中断
匿名页面缺页异常
do_ page_fault函数分析
内核调优参数
/proc/sys/kernel/
/proc/sys/vm/
/proc/sy/fs/
水位调优参数min_ free_kbytes
面分配参数lowmem_reserve _ratio
内存管理meminfo&zoneinfo信息分析
分配物理页实战分析
进程虚拟区间实战分析
vmalloc案例实战分析
kmalloc案例实战分析
kzalloc&kcallolc案例实战分析
创建slab缓存案例实战分析
创建内存池案例实战分析
slab分配器案例实战分析
内存映射案例实战分析
统计进程虚拟区间页数案例分析
缓存着色
处理器缓存机制
文件页缓存
内存与Kasan_ I分析
五大常见内存访问错误
Kasan内核检测工应用
4.3设备驱动专栏
(1)设备驱动基础部分
I/O体系结构
系统总线(PCI、ISA、 SCSI、 USB等)
外设交互及总线控制设备
访问设备深度详解
内核块设备详解
块设备I/O操作及源码分析
通用磁盘及磁盘分区源码分析
文件系统关联及字符设备操作
inode/字符设备及块设备操作
cdev数据结构及读写操作
资源分配及总线系统
资源分配I/O内存I/O端口
device数据结构/PCI总线/USB总线
内核插入模块及删除模块
内核模块基础知识
module_ init/module_exit
insmod/mmod/dmesg
PCI设备驱动讲解
PCI基础及拓扑关系
pci host _bridge/pci _bus/pci. dev
PC驱动讲解与实现
USB设备驱动详解
总线速度及主机控制器
传输模式与寻址方法
USB驱动总线数据结构分析
字符设备操作
主设备与次设备
开设备文件
分配与注册字符设备
文件操作实现
open/release方法
read/wite方法
lslek/poll防法
填充file operations结构体
(2)设备驱动案例分析
USB设备驱动架构分析
USB系统架构
传输模式与寻址方法
USB驱动总线数据结构分析
USB驱动分析
USB基础及层次详解
USB驱动常见数据结构
以太网驱动分析
网络设备驱动框架
sk buff/net_device/napi_struct
USB3.0设备控制器驱动分析
USB控制器分析
dwc3_ event/dwc3 _event_buffer
输入设备驱动程序
输入设备驱动程序基础及分析
核心数据结构input_dev
常用内核编程API接口
V4|2视频设备驱动框架
V4L2视频设备驱动
V4L2驱动数据结构分析
V4I2框架常用API详解
字符设备驱动项目实战分析
字符设备驱动通信案例分析
字体设备驱动数据结构设计
数据发送端设计
数据读取端设计
Makefile文件设计
make及字符设备驱动测试
删除字符设备驱动模块
杂项(MISC)驱动实例分析
4.4文件系统专栏
(1)文件系统基础部分
通用文件模型
磁盘文件系统(DF)
虚拟文件系统(VF)
网络文件系统(NF)
链接
API编程接口
VFS数据结构
超级块(super. _block)
挂载描述符(mount结构体)
索|结点(inode结构体)
录项缓存(dentry结构体)
处理VFS对象及标准函数
Ext2文件系统
Ext2物理结构
Ext2数据结构分析
Ext2文件系统操作
Ext4_ 日志JBD2
Ext4文件系统特性
Ext4文件系统数据结构
Ext4_日志JBD2
proc文件系统
proc数据结构
初始化及装载proc
管理proc数据项
数据读写实现
系统控制机制
简单文件系统
顺序文件
使用libfs编写FS
调试文件系统
文件系统API : vfs fstat/fget/get. max_ files
挂载文件系统
系统调用mount处理流程
绑定挂载/挂载命名空间
挂载/注册rootfs文件系统
文件系统调用
打开/关闭文件
创建/删除文件
读/写文件实现
文件回写技术原理/接口实现
sysfs文件系统
sysfs数据结构
装载文件系统
文件和目录操作
向sysfs添加数据内容
(2)文件系统案例分析
proc文件系统案例实战分析
debugfs案例实战分析
super_block案例分析
4.5网络协议栈专栏
(1)网络协议栈基础部分
套接字及分层模型
套接字通信基础
网络分层模型
接字缓冲区及net _device
sk buff数据结构分析
net _device数据结构分析
从套接字缓冲区获取TCP首部
内核邻接子系统
邻接子系统基础
ARP协议(IPv4)
内核Netlink套接字案例分析
数据结构设计与API系统调用
内核模块与用户应用程序设计
网络接口及IP地址实现
网络层分析
接收分组原理分析
分组转发原理与分析
发送分组原理与分析
TCP/UDP协议栈分析
套接字分析
发送与接收UDP数据包分析
发送与接收TCP数据包分析
传输层分析
流控制传输协议(SCTP)
数据报拥塞控制协议(DCCP)
ICMP协议分析
发送/接收ICMPv4消息
发送/接收ICMPv6消息
NIC数据包接收与发送分析
NIC原理机制
NC数据包接收与发送流程分析
IPsec(互联网安全协议)
IPsec基础知识部分
XFRM框架/策略/状态
传输模式/隧道模式/IPsec高可靠性
Netfilter框架分析
Netfilter架构分析
Netfilter挂接点
Netfilter连接跟踪
epoll分析
poll系统调用
epoll数据结构
epoll内核实现
IPv4路由选择子系统
FIB表
ICMPv4重定向消息
高级路由选择
组播路由选择
策略路由选择
IPv6协议分析
IPv6协议基础架构
接收IPv6数据包
发送IPv6数据包
InfiniBand架构
InfiniBand组件与编址
InfiniBand功能与数据包
无线子系统分析
802.11 MAC帧结构分析
扫描/身份验证/关联
高郚吐量(802.11n)
网状网络(802.11s)
(2)网络协议栈案例分析
epoll原理及系统调用案例分析
NIC网-卡驱动案例实战分析
NIC网-卡驱动的recv与sk _buff
NIC网卡open与stop的实现
NIC编译与用户态协议栈
RDMA栈架构
Netfilter内核防火墙报文处理
Iptables基础/表和链及过滤规则
Netilter5种挂接点详解
netfilter注册和注销钩子函数
4.6中断管理与基础部分
(1)中断管理部分
ARM64异常处理技术
异常级别与分类
异常向量表与异常处理
中断及软中断
tasklet等待队列工作队列
中断控制器及域
中断处理流程
禁止_开启中断
处理器间中断
软中断分析
审计规则及数据结构
中断管理API案例分析
tasklet_init/tasklet_schedule
tasklet_hi_ schedule/tasklet_ kill
tasklet_disable_ nosync/tasklet _disable
setup_irq/request _threaded. irq/irqp_set _chip_data
中断管理之保存中断上下文
内核调试方法printk案例分析
gdb调试内核和模块案例分析
perf性能分析工具案例分析
perf原理机制与安装配置
perf采集数据命令29种工具应用
perf采集数据至火焰图分析
开源社区
如何参与开源社区
如何提交Linux内核补丁
(2)内核基础
Linux操作系统进程
计算机基础技术
进程原理
Linux特性与内核版本
进程特征与调度算法
死锁产生必要条件
进程状态及转换
进程调度策略与调度依据
存储器结构与分区存储管理
主存储器结构及技术指标
分区存储管理技术
物理内存与虚拟内存
存储管理
段式存储管理
页式存储管理
文件管理基础架构
文件基础知识
Linux文件系统
VFS(虚拟文件系统)
x86处理器架构
CPU(中央处理器)和内存
x86平台
64位通用寄存器结构.
汇编基础与寻址方式
汇编基础技术
常用寻址方式
立即寻址
直接寻址
间接寻址
址寻址
相对寻址
基址寻址
KVM架构基础
CPU虚拟化技术
I/O虚拟化技术
内存虚拟化技术
网络虚拟化技术
内核定时器
斥锁分析
自旋锁机制
原子变量案例实战分析
信号量案例实战分析
自旋锁项目实战分析
顺序锁案例实战分析
互斥锁项目实战分析
五、Qt跨平台开发
Qt是一款广泛应用于软件开发领域的跨平台开发框架。课程内容包括核心概念、窗口系统、界面设计、事件处理、绘图等功能,以及多线程编程、数据库访问等高级开发。打造高效Qt开发工作流:Qt5、C++、数据库、OpenCV、Quick、Qt实战技术栈。
5.1Qt C++语言编程基础专栏
(1)Qt C++语言编程基础
Visual Studio 2022安装
C++语言基础概述
C++指针与引用
C++类与对象(一)
C++类与对象(二)
类的基它特性
构造函数&析构函数&拷贝构造函数
C++友元与动态内存
函数重载与运算符重载
(2)Qt C+ +语言进阶
单继承
多继承
虚继承及其它特性
虚函数与抽象类
命名空间与模板
C+ +I0流类库
STL(vector & deque & stack)
STL(queue & set & map)
C+ +异常处理
(3)Qt C+ +语言新特性
类型推导: auto & decltype
序列for循环
lambda表达式
构造函数:委托构造和继承构造
容器: array & forward list & tuple
垃圾回收机制
正则表达式基础
智能指针: shared_ ptr & unique_ ptr & weak_ ptr
关键字: nullptr & constexpr
共享内存&互斥量mutex
C++11: STL hashmap
关联容器: unordered_ map
atomic flag & atomic应用
条件变量: condition variable
异常处理: exception
is integral应用实战
is_ rvalue_ reference应用实战
is_ arithmetic应用实战
is volatile应用实战
is class应用实战
变量模板
inline应用实战
5.2Qt编程入门到精通专栏
(1)Qt开发基础体系
Qt下载与安装配置
Windows Qt环境安装
Linux Qt环境安装
Qt Creator工具介绍与使用.
Qt信号与槽机制
Qt字符串&数据类型&容器类
字符串类应用与常见数据类型
常用容器类
QMap类& QHash类& QVector类
QList类& QLinkedList类
QVariant类应用
常用算法及正则表达式
(2)Qt开发常用控件详解
Layouts & Spacers
Buttons & Containers
Item Views
Item Widgets
Input Widgets
Display Widgets
(3)Qt布局及对话框详解
布局管理
QLayout & QStackedWidget类
QSplitter类& QDockWidget类
对话框
文件对话框
颜色对话框
字体对话框
输入对话框
消息对话框
自己定义消息框
(4)Qt图形&模型&视图
绘图原理双缓冲机制
Graphics View特性详解
Mode & View & Delegate
(5)Qt文件操作及事件处理
目录操作及文件系统
QCoreApplication类
QFilelnfo类
QDir类
QTemporaryDir
QTemporaryFile
获取文件特性实现
鼠标及键盘事件
事件过滤处理分析
(6)Qt服务应用操作
INI文件操作
JSON文件操作
XML文件操作
(7)Qt网络及多线程
套接字编程API函数详解
UDP协议工作原理
TCP服务器设计
TCP客户端设计
TCP协议工作原理
UDP服务器设计
UDP客户端设计
多线程编程
互斥量
信号量
多线程C/S模型项目实战
HTTP协议编程技术
Websocket原理及编程技术
(8)Qt数据分析:图表详解
Qt图表基础知识
Qt ChartView详解
Qt常用图表类型
曲线图
拆线图
柱形图
饼状图
(9)Qt应用程序打包及发布
打包QT应用程序
发布QT应用程序
5.3Qt高级进阶专栏
(1)MySQL数据库编程技术
数据库基础知识
MySQL基本操作
MySQL运算符
数据类型及存储引擎
表数据增&删&改&查&高级查询
MySQL流程控制语句
SQL语句详解
索引
视图
存储过程和函数
触发器
事件
MySQL备份与恢复
Qt操作MySQL数据库实战
(2)sQLite数据库编程技术
SQLite下载与安装配置
sQLite创建数据库
SQL ite附加&分离数据库
SQLite数据类型
SQLite创建表&删除表
SQLite insert into语句详解
SQLite select & update & delete语句
sQLite Distinct & Orderby & Groupby
SQLite触发器
sQLite索引
SQLite视图
sQLite事务
Qt操作SQLite数据库实战
(3)OpenCV编程开发常用技术
OpenCV与VS2022环境搭建
OpenCV常见API及绘图详解
OpenCV图像读写技术
OpenCV视频读写技术
OpenCV图像滤波技术
OpenCV视频录制技术
OpenCV图像翻转技术
OpenCV图像旋转技术
OpenCV实现窗口置顶
OpenCV边缘检测技术1
OpenCV边缘检测技术2
OpenCV向上向下采样
OpenCV形态学之膨胀
OpenCV图像浮雕技术
OpenCV图像人脸识别
(4)C++ 23种设计模式
创建型模式(5种)
工厂模式
抽象工厂模式
原型模式
单例模式
建造者模式
结构型模式(7种)
适配器模式
桥接模式
组合实体模式
装饰器模式
外观模式
享元模式
代理模式
行为模式(11种)
责任链模式
中介者模式
策略模式
模板模式
状态模式
观察者模式
备忘录模式
命令模式
访问者模式
解释器模式
迭代器模式
5.4Qt项目开发实战专栏
(1)文字编辑: Word处理软件
Word文字编辑软件架构设计分析
菜单栏工具栏状态栏功能模块设计
菜单栏工具栏状态栏动作与实现
系统模块整体功能关联与实现
Word文件编辑软件调试及测试
(2)音频项目实战: MP3播放器搜索引擎(Qt5+SQLite)
MP3音乐播放器搜索引 |擎设计与实现
SQLite数据库 数据表设计与实现歌曲搜索
HTTP下载音乐数据解析Json显示歌词
上一曲播放暂停下一 曲循环播放实现
音乐搜索引|擎关于皮肤更换系统托盘
(3)信息管理项目:库存管理系统(Qt5+ MySQL)
商品数据库设计及配置测试
库存新增商品和查询商品
商品入库与商品出库
商品删除与导出数据
数据汇总及数据备份
(4)即时通讯项目:腾讯QQ客户端软件
即时通讯项目简介
QQ客户端登录设计
QQ登录窗口翻转效果实现
IP地址控件设置
主界面及窗口移动实现
QQ登录逻辑业务处理分析
项目全局类定义与实现
完善MainWindow及托盘技术
QQ好友组及U|效果实现
QQ聊天窗口和排版设计
头像裁剪技术
音频技术分析与实现
QQ添加好友逻辑业务处理
QQ聊天逻辑处理分析
消息时序图和头像截图处理技术
即时通讯群组功能实现
QQ表情与gif图片处理技术
文件上传功能实现
QQ文件传输技术
QQ头像显示与添加好友显示实现
(5)视频项目实战:视频播放器(Qt+ FFmpeg)
播放器项目需求分析
Player UI主界面设计
播放文件Title设计实现
控制条CtrlBar设计实现
播放文件列表Playlist实现
播放器模块分析与设计
打通UI到播放器核心的通道消息队列
打通Ul到播放器核心的通道类名和接口
状态处理: stream open和stream close
解复用&数据读取read thread设计
解码线程Decoder封装
音频输出及视频渲染输出
音视频同步原理与技术详解
5.5Qt开发工程师提升专栏
(1)Qt开发工程师提升: Quick编程常用技术
QML基础知识
QML语言基础
QML元素1: Image & Rectangle & Text
QML元素2: ButtonStyle & ltem & BusyIndicator
Quick事件处理
键盘事件
鼠标事件
定时器
Quick组件及元素布局
Component & Loader
定位器及布局管理器
Quick开发常用元素及Canvas(画布)
TextField & TextArea & TextInput
CheckBox & GroupBox & TabView
Canvas(画布)绘制图形
动画及.Mode & View
动画常用元素
Animation & PropertyAnimation & NumberAnimation
ColorAnimation & PathAnimation & SpringAnimation
组合动画部分: ParallelAnimation & SequentialAnimation
动画协同元素: Behavior & ParentAnimation & AnchorAnimation
(2)Qt开发工程师提升: QSS编程常用技术
QSS实战开发1: QSS作用及应用场景
QSS实战开发2: QSS常用基本语法
QSS实战开发3: QSS控件样式QL abel & QLineEdit & QPushButton
QSS实战开发4: QSS控件样式QComboBox
QSS实战开发5: QSS控件样式QTableWidget
QSS实战开发6: QSS控件样式QProgressBar
QSS实战开发7: QSS控件样式QSlider
QSS实战开发8: QSS控件样式CheckBox
QSS实战开发9: Ubuntu系统控件风格
QSS实战开发10: Mac系统控件风格
(3)Qt开发工程师提升:核心技术模块
QtConcurrent线程处理(过滤和映射)
Qt之QWebEngineView框架分析
Qt生成及读取XML文件及应用实战
六、C++后端游戏开发
基于魔兽开源后端框架 TrinityCore 的技术拆解课程;课程涉及 MMORPG 核心模块实现(高性能网络模块、数据库模块、日志模块、地图模块、以及战斗模块等),同时也包括 MMORPG 核心玩法实现(任务、背包、工会、以及副本等)。通过课程学习,将掌握 MMORPG 核心开发技能。
6.1TrinityCore CMake项目构建
(1)CMake的使用
什么是 CMake,CMake的工作流程
CMakeLists.txt的编写规则
静态库生成以及链接
动态库生成以及链接
嵌套CMake
(2)Windows和Linux下编译调试环境搭建
cmake和graphviz生成目标依赖图
linux vscode编程环境搭建
cmake和clangd实现精俳跳转
C/C++插件实现调试
vs2019 windows下编译调试搭建
6.2TrinityCore数据库模块
(1)连接池设计概要
什么是连接池
为什么需要复用连接
为什么固定连接数
主要应用场景
(2)同步连接池实现
同步连接池的线程模型
同步连接池接口封装
同步连接池接口使用
同步连接池应用场景
(3)异步连接池实现
异步连接池的线程模型
异步连接池接口封装
异步连接池接口使用
异步连接池应用场景
(4)事务处理
什么是事务
什么情况下讨论事务
事务操作
TrinityCore 中事务处理封装
TrinityCore 中事务处理案例
(5)数据库模块实践
剥离可复用数据库模块
应用同步连接池案例
异步连接池-单SQL语句的使用
异步连接池-多SQL语句chain式应用
异步连接池-多SQL语句holder式应用
异步连接池-多SQL语句transaction式应用
6.3TrinityCore日志模块
(1)日志模块概要
日志模块的作用
日志模式核心抽象: logger和appender
logger规则:继承关系、日志级别、以及appender列表
appender如何定义日志打印目的地
(2)日志模块实现
日志模块单例构建
采用宏定义定制日志使用接口
如何扩展appender
appender中设计模式-模板模式
同步日志方式实现
异步日志方式实现
异步日志线程模型
(3)日志模块实践
剥离可复用日志模块
为什么推荐使用异步日志
异步日志日志安全分析及测试
6.4TrinityCore网络模块
(1)阻塞io 网络模型编程
什么是阻塞io网络模型
阻塞io解决连接建立的问题
阻塞 io解决连接断开的问题
阻塞io解决数据接收的问题
阻塞io解决数据发送的问题
阻塞 io解决网络问题的弊端
(2)reactor 网络模型编程
什么是reactor?
reactor构成部分
reactor解决连接建立的问题
reactor解决连接断开的问题
reactor解决数据接收的问题
reactor解决数据发送的问题
reactor解决网络问题的特征: io同步,事件异步
(3)windows iocp 网络编程
什么是完成端口
重叠io的作用
iocp解决连接建立的问题
iocp解决连接断开的问题
iocp解决数据接收的问题
iocp解决数据发送的问题
iocp编程步骤
iocp与reactor在编程处理io时的差异
(3)boost.asio 网络编程
boost.asio跨平台网络库
cmake如何在项目中引入boost.asio
boost.asio中核心命名空间
boostasio中核心对象: io_context、socket、endpoint
boost.asio中异步io接口
asio解决连接建立的问题
asio解决连接断开的问题
asio解决数据接收的问题
asio解决数据发送的问题
(4)网络缓冲区设计
为什么需要在用户层实现网络缓冲区
读缓冲区的工作原理
写缓冲区的工作原理
手撕缓冲区实现
(5)网络模块实践
剥离可复用网络模块
AsyncAcceptor职责与实现
NetworkThread职责与实现
Socket职责与实现
手撕多线程模式下网络模块的应用
6.5TrinityCore地图模块
(1)地图模块概要
哪些功能模块需要用到地图模块
地图模块的功能构成
地冬对象抽象:map、area、grid、cell
网络数据驱动地图模块
定时更新驱动地图模块
(2)地图模块AOI核心算法
AOI有哪些实现方式
AOI静态数据工具生成
AOI静态数据数据划分
AOI静态数据组织方式
AOI动态数据组织方式
AOI动态数据驱动方式
AOI地图数据加载
grid 网格状态机以及状态转换
AOl地图数据卸载
采用访问者模式实现地图数据与算法的隔离
(3)AABB算法实现碰撞检测
轴对称边界盒算法-AABB算法
TrinityCore中AABB算法实现
AABB算法优化
碰撞检测接口封装以及应用
(4)A*寻路算法
A*寻路算法概述
recast-detour开源车
recast根据模型生成导航数据
detour利用导航网格做寻路
寻路接口封装以及应用
6.6TrinityCore战斗模块专栏
(1)技能设计
技能设计概述
技能数据库表设计(配置)
技能触发:距离、冷却时间、消耗等
技能效果:伤害计算、增益效果等
技能释放流程
(2)AI设计
AI设计概述
基于行为树的Al设计
Al类继承层次关系
04.Al攻击目标选择
AIl攻击方式选择
Al移动方式选择
AI基于事件的驱动机制
(3)怪物管理
怪物数据库设计(配置)-属性和行为
怪物刷新规则设计-时间间隔以及范围
怪物属性、技能、掉落、Al
(4)战场副本设计
创建和加载 battlegrounds场景地图数据
battlegrounds规实现
battlegrounds队伍匹配、队伍平衡以及角色分配
battlegrounds奖励系统和排名机制
6.7TrinityCore mmorpg核心功能与玩法
(1)任务系统设计
任务系统数据库设计(配置)
玩家数据库状态存储
任务类型设计
任务触发机制
(2)背包设计
背包数据结构设计以及数据库表设计
背包容量控制
背包格子管理
背包交互功能实现
(3)工会系统设计
数据库表结构设计
工会创建逻辑实现
工会成员管理
工会资源管理及分配机制
工会活动与事件
工会排名实现
工会权限控制
6.8语言专栏
(1)lua程序设计
lua基础
lua错误处理
lua编译与预编译
lua模块与包
元表与元方法
环境
lua/c接口编程
(2)c++新特性
智能指针shared_ptr, unique _ptr
函数对象以及闭包
右值引用
原了操作与锁: atomic、mutex、condition_variable
多线星环竟队列设计:MPSCQueue、ProducerConsumerQueue
(3)C++设计模式
单例模式
工厂模式
模板模式
访问者模式
责任链模式
第一份工作不亚于一次高考,珍惜校招,社招的竞争是你目前想象不到的。能去大厂觉不妥协,IT行业第一份工作背景越好,起点越高,后续发展空间越好!
给那些1-3年的安于现状的伙伴一句话:
不要抱怨市场,不要安于现状,在低端,往中端领域看,在中端往高端领域看。认知以及对自身的要求,都会有所改变。
给那些担心35岁的伙伴一句话:
决定上限的不是年纪,而是技术。
最后:希望学习路线对你有所帮助,希望码农的我们越来越好!