零声学院 第九代Linux C/C++后台架构开发成长体系课程 知识点大纲 v9.2
Linux后台工程师专栏
1. 算法与设计专题
排序与查找
插入排序
快速排序
希尔排序
桶排序
基数排序
归并排序
常用算法
布隆过滤器
字符串匹配 KMP算法
回溯算法
贪心算法
推荐算法
深度优先,广度优先
常用的数据结构
平衡二叉树
红黑树
B-树
KMP算法
栈/队列
布隆过滤器
常用的设计模式
单例模式
责任链模式
过滤器模式
发布订阅模式
代理模式
工厂模式
2. 后台组件编程专题
持久化 MySQL
MySQL安装配置与远程连接
项目:数据操作源于SQL语句
项目:存储过程与事务处理
项目:SQL函数,运算,临时表
项目:防数据丢失 备份与恢复
项目:MySQL建库建表建索引
消息队列 ZeroMQ
ZMQ编译安装与开发环境搭建
项目:publisher-subscriber模式实现
项目:request-response模式实现
项目:Router-Dealer模式实现
项目:史上最快的消息队列—性能分析
缓存 Redis
Redis编译安装配置
项目:客户端全局唯一ID保存机制
项目:Redis消息队列机制 发布订阅
项目:Redis事务实战
项目:Redis安全性能,数据备份与恢复
项目:Redis分布式锁详解
反向代理 Nginx
Nginx开发介绍
项目:反向代理负载均衡配置详解
项目:自定义协议upstream开发
项目:子域名映射
项目:服务器后台攻击预防
项目:nginx双虚拟主机
Restful Http
Http第三方接口实现
项目:异步Http请求
项目:ngrok与Restlet
项目:长连接与短链接
协调服务 ZooKeeper
ZK编译安装与C API开发环境
项目:集群管理与服务注册
项目:节点创建与监控
项目:分布式锁的实现
项目:ZK伪集群部署与服务管理
NoSQL MongoDB
MongDB安装与开发介绍
项目:MongoDB备份与恢复
项目:MongoDB文档操作
项目:全文检索与正则表达式
项目:MongoDB建库建集合
3. 代码工程化专题
架构工程
工程参数配置与编译 cmake
代码规范与命名规则
文件命名与变量命名规则
脚本配置工具 autoconf
代码工程组织架构 Makefile
管理代码
分布式版本控制系统 git
远程仓库,标签管理
github与码云
创建仓库,导入,checkout
svn环境搭建与原理
分支管理 冲突解决
产品代码版本管理 SVN
4. 网络服务专题
源码实现
服务器IO核心— epoll编程实战
客户端多网络连接机制poll
文件IO管理select实战
框架实战
高性能的时间循环 libev
跨平台异步I/O libuv
跨平台的C++库 Boost.Asio
事件通知库 libevent
理论详解
阻塞型 BIO
异步IO AIO
非阻塞型IO NIO
5. 开源框架专题
TCP协议栈
基于DPDK的高性能用户态协议栈 f-stack
基于Netmap单线程协议栈 NtyTcp
精简版tcp协议栈 LWIP
数据库
Redis数据库的C客户端库 hiredis
Facebook的嵌入键值的快速存储 RocksDB
用于Sqlite3的C++对象关系映射 hiberlite
国际化
Unicode 和全球化支持的C、C++ 和Java库 IBM ICU
不同字符编码之间的编码转换库 libiconv
GNU gettext
压缩
非常紧凑的数据流压缩库 Zlib
快速压缩和解压缩 Snappy
非常快速的压缩算法 LZ4
单一的C源文件,紧缩/膨胀压缩库 Miniz
日志
设计非常模块化,并且具有扩展性 Boost.Log
灵活添加日志到文件,系统日志 Log4cpp
添加日志到你的C++应用程序 templog
C++日志库,只包含单一的头文件 easyloggingpp
序列化
快速数据交换格式和RPC系统 Cap'n Proto
协议缓冲,谷歌的数据交换格式 ProtoBuf
高效的跨语言IPC/RPC Thrift
内存高效的序列化库 FlatBuffers
XML库
Gnome的xml C解析器和工具包 LibXml2
简单快速的C++CML解析器 TinyXML2
简单快速的XML解析器 PugiXML
C++的xml解析器 LibXml++
脚本
小型快速脚本引擎 Lua
谷歌的快速JavaScript引擎 V8
嵌入式脚本语言 ChaiScript
Json库
进行编解码和处理Jason数据的C语言库 Jansson
C语言中的JSON解析和打印库 ibjson
轻量级的JSON库 libjson
C/C++的Jason解析生成器 Frozen
数学库
高质量的C++线性代数库 Armadillo
数学图形模板库 GMTL
用于个高精度计算的C/C++库 GMP
安全
SSL,TLS和DTLS协议的安全通信库 GnuTLS
功能齐全的,开源加密库 Openssl
有关加密方案的免费的C++库 Cryto++
Web应用框架
高级C++模板头文件库 Eigen
安全快速开源Web服务器 Lighttpd
基于Qt库的web框架 QDjango
高性能的HTTP和反向代理web服务器 Nginx
网络库
C异步网络开发库 Dyad.c
多协议文件传输库 Curl
高速模块化的异步通信库 ZeroMQ
C++面向对象网络工具包 ACE
异步事件
事件通知库 libevent
跨平台异步I/O libuv
功能齐全,高性能的时间循环 libev
网络和底层I/O编程的跨平台的C++库 Boost.Asio
协程
纯c版的协程框架 ntyco
C++11实现协程库, golang风格 libgo
微信支持8亿用户同时在线的底层IO库 libco
6. 性能测试专题
调试库
Boost测试库 Boost.Test
内存调试性能分析工具 Valgrind
谷歌C++测试框架 GoogleTest
内存分配跟踪库 MemTrack
测试库
单元测试框架 minUnit
测试用例编写 libtap
轻量级的C++单元测试框架 UnitTest++
自动化测试用例 gtest和luatest
性能工具
高性能代码构建系统 tundra
Http压测工具 WRK
网站压测工具 webbench
高性能构建系统 FASTBuild
7. Linux系统专题
系统命令工具
进程间通信设施状态 ipcs
Linux系统运行时长 uptime
CPU平均负载和磁盘活动 iostat
监控,收集和汇报系统活动 sar
监控多处理器使用情况 mpstat
监控进程的内存使用情况 pmap
系统管理员调优和基准测量工具 nmon
密切关注Linux系统 glances
查看系统调用 strace
基础命令工具
系统进程状态 ps
虚拟内存统计工具 vmstat
控制台的流量监控工具 vnstat
进程监控工具 atop,htop
内存使用状态 free
网络参数工具
Linux网络统计监控工具 netstat
显示和修改网络接口控制器 ethtool
网络数据包分析利刃 tcpdump
远程登陆服务的标准协议 telnet
获取实时网络统计信息 iptraf
显示主机上网络接口带宽使用情况 iftop
磁盘参数工具
磁盘卸载 umount
读取、转换并输出数据 dd
文件系统系统 df
磁盘挂载 mount
日志监控工具
实时网络日志分析器 GoAccess
多窗口之下日志监控 MultiTail
日志分析系统 LogWatch/Swatch
参数监控工具
监控apache网络服务器整体性能 apachetop
ftp 服务器基本信息 ftptop
IO监控 iotop
电量消耗和电源管理 powertop
监控 mysql 的线程和性能 mytop
系统运行参数分析 htop/top/atop
8. 互联网云盘项目实战专题
项目需求
互联网云盘项目介绍
项目需求规格说明
架构设计和接口说明
工程代码
socket TCP服务器编程
UDP编程与广播多播
fastCGI公共网关
TCP的长连接还是短连接
MYSQL库表设计
Qt客户端
第三方登陆 微信OAuth2授权登陆
fastdfs资料显示
进程间通信方案
Redis远程操作
MySQL数据存储
内存池ringbuffer设计
功能测试
用户连接测试用例
tcp与udp数据包测试用例
用户注册测试用例
内存管理测试用例
数据库吞吐量测试用例
产品发布
自动启动之shell脚本
网络组安全与防火墙
产品上云公网发布
Linux高级互联网架构师专栏
1. 源码分析专题
Nginx源码
Nginx基础架构
HTTP架构
进程间的通信机制
Nginx高级数据结构
slab共享内存
upstream机制设计
Redis源码
Redis存储系统原理
数据模型与键值映射
内存操作与磁盘同步
主从同步,原子操作
底层IO实现解析
skynet源码
多核并发编程
消息队列,线程池
actor消息调度
网络模块实现
时间轮定时器实现
lua/c接口编程
skynet编程精要
ZeroMQ源码
消息模型 发布订阅/推拉模型
通信协议 inproc/ipc/tcp/pgm
性能分析与经典MQ对比
底层网络通信实现机制
zmq系统架构与实现原理
2. 中间件开发专题
高性能组件
如何设计内存池
高并发场景下的消息队列
协程框架的实现
手写线程池
异步请求池
连接池
高并发网络IO
select,poll和epoll模型的区别
Linux系统IO模型
理解Linux 服务器高并发编程
网络接入层架构设计
你必须懂得Epoll玩法
并发性
多线程与线程安全
事务的隔离级别
公平锁&非公平锁
CopyOnWrite容器
悲观锁&乐观锁&CAS&ABA问题
事务ACID特性
Web服务
反向代理Nginx
最广泛的web服务器 Httpd
高性能 Web 平台OpenResty
定时调度
分布式定时调度 Opencron
触发器按时启动原理
Linux定时任务cron配置
消息队列
消息总线VS消息队列
Redis 消息推送
如何保证消费者接收消息的顺序
Web安全
CSRF原理及防范
高级Dos攻击-Hash碰撞攻击
脚本注入文件上传漏洞
SQL注入
XSS攻击原理与解决方案
网络协议栈
tcp/udp/ip/eth
多进程实现高并发
滑动窗口
延迟确认
定时重传
流量控制
tcp握手挥手
3. 集群专题
MySQL集群
MySQL Cluster 评估指南
读写分离 分库分表
Binlog机制分析
健全性检查与故障排除
数据模型与查询设计
Redis集群
Redis Cluster方案
节点自动发现
master/slave 选举,集群容错
ASK转向/MOVED转向机制
FastDFS集群
tracker与storage节点
文件上传/下载测试
fastdfs-nginx-module的原理
fastdfs的实现原理
K8S集群
K8S核心组件
无缝对接新应用
快速部署应用与扩展
自动部署、管理容器化
Nginx集群
Nginx的实现原理
经典应用场景
高可用方案的实现机制
LVS与Nginx集群
MongoDB集群
高可用的MongoDB集群方案
文档管理机制与实现
配置分片的表与片键
MongoDB集群环境部署
etcd分布式注册
etcd的概念与集群环境部署
etcd的特性与数据结构
原理及其内部选举机制
etcd集群实现机制
4. Linux系统专题
环境编程
系统文件操作 一切设备接文件
信号量 mmap 共享内存
系统时间 时间戳 定时器
网络IO编程 epoll机制
锁机制 互斥锁 spinlock 条件变量 原子操作
进程/线程 数据同步机制
系统运维
系统日志管理与配置
服务器环境搭建与配置
集成化工具安装
shell命令 文件操作
5. 性能与测试专题
理解性能优化
容量评估 平均QPS 高峰QPS 单机QPS
CDN网络加速原理
连接池的性能优化
性能优化方法论
MySQL调优
理解MySQL底层原理 B+Tree机制
索引优化揭秘
SQL语句优化
SQL执行机制详解
测试理论
深度解析 TDD 测试驱动开发
全链路压测经验
Nginx根据IP进行灰度发布 A/B Test
真实流量测试工具 tcpcopy
单元测试minUnit
Linux调优
内核代码组织架构
系统IO参数调优配置
网络协议栈参数配置
内核代码编译与内核更换
GCC调优
快速编译工程Makefile编写
编译机制 编译原理
6. 运维统计专题
Jenkins
搭建Jenkins自动化部署环境
test\pre\production 多环境发布
Jenkins集成git实现自动部署
Jenkins多环境配置,权限管理及插件使用
虚拟化
Xen虚拟化搭建与原理详解
KVM经典详解
OpenStack架构知识梳理
开源Linux容器 OpenVZ
Docker
Dockerfile的编译与镜像编译
Docker-Compose部署与编排
Docker命令与镜像版本提交
Docker的原理
7. 分布式架构专题
架构实战
新浪门户负载均衡方案解析
京东海量存储哈希存储引擎解密
虎牙核心视频直播架构技术揭秘
京东分布式K-V存储设计与挑战
阿里网络故障智能化治理解决方案
小艾叮咚语音核心技术语音合成实战
微信安全开放性云平台架构探秘
爱奇艺大数据平台的构建之路
架构中间件
远程调用rpc从入门到精通
多进程高效通信之共享MM全攻略
Nginx进程间通信剖析
高性能服务器为什么需要内存池
百度大规模时序指标自动异常检测实战
架构策略
订阅者发布者模式实现高并发架构
阿里云Elasticsearch架构解析与性能优化实践
两段提交与多段提交
UDP分片原理分析及其实现方法
Reactor模式和线程池实现高并发服务
架构原理
消息驱动式架构设计方法论
动态域名解析和CDN原理
Zookeeper原理
分布式锁的原理
P2P去中心化原理
应用层协议设计方法论
8. IM实时流媒体项目实战专题
项目需求
IM实时流媒体项目介绍
项目需求规格说明
架构设计和接口说明
工程代码
IM消息服务器
文件传输服务器
文件存储服务器
路由服务器
数据库代理服务器
登陆服务器
HTTP服务器
单聊与群聊
本地持久化
模块化设计
功能测试
用户连接测试用例
tcp与udp数据包测试用例
用户注册测试用例
内存管理测试用例
缓存测试用例
数据库吞吐量测试用例
产品发布
自动启动之shell脚本
持续集成与线上更新
网络组安全与防火墙
产品上云公网发布
挑战网络性能极限DPDK专栏
认识DPDK
主流包处理硬件平台
解读数据包处理能力
软件包处理的潜力
DPDK加速网络节点
DPDK加速计算节点
DPDK加速存储节点
DPDK的方法论
实践回顾理论
Skeleton
L3fwd
Cache和内存
存储系统
系统架构的演进
内存子系统
Cache系统
Cache地址映射和变换
Cache的写策略
Cache预取
Cache一致性
TBL和巨页
英特尔数据直接DDIO
非统一内存访问NUMA
并行计算
多核性能和可扩展性
追求性能水平扩展
多核处理器
亲和性
DPDK的多线程
指令并发与数据并行
指令并发
单指令多数据
同步互斥机制
原子操作
处理器上的原子操作
Linux内核原子操作
DPDK原子操作实现与应用
读写锁
Linux读写锁核心API
DPDK读写锁实现和应用
自旋锁
自旋锁的缺点
Linux自旋锁API
DPDK自旋锁实现和应用
无锁机制
Linux内核无锁环形缓冲
DPDK无锁环形缓冲
报文转发
网络处理模块划分
转发框架介绍
DPDK run to completion模型
DPDK pipeline模型
转发算法
精确匹配算法
最长前缀匹配算法
ACL算法
报文分发
PCIe与包处理I/O
PCIe事务的角度
异常中断模式
轮询模式
混合中断轮询模式
PCIe上的数据传输能力
Brust收发包的优点
批处理和时延隐藏
利用Intel SIMD指令并行化包收发
网卡DMA描述符环形队列
数据包收发—CPU和I/O
Mbuf和Mempool
Mbuf
Mempool
网卡性能优化
DPDK的轮询模式
异步中断模式
轮询模式
混合中断轮询模式
网卡I/O性能优化
Burst收发包的优点
批处理和时延隐藏
Intel SIMD指令并行转发
平台优化及其配置调优
硬件平台的性能影响
软件平台的性能影响
队列长度及各种阈值的设置
收包队列长度
发包队列长度
收包队列可释放描述符数量阈值
发包队列可释放描述符数量阈值
发包描述符释放阈值
流分类与多队列
多队列
网卡多队列的由来
Linux内核对多队列支持
DPDK与多队列
队列分配
流分类
包的类型
接收方扩展 RSS
Flow Director
服务质量
虚拟化流分类的方式
流过滤
流分类技术的使用
DPDK结合网卡Flow Director功能
DPDK结合网卡虚拟化及cloud Filter功能
可重构匹配表
Intel 硬件功能
网卡硬件卸载功能
DPDK软件接口
硬件与软件功能实现
计算及更新功能卸载
VLAN硬件卸载
IEEE1588硬件卸载功能
IP TCP/UDP/SCTP checksum硬件卸载功能
Tunnel硬件卸载功能
分片组包卸载
X86平台的IO虚拟化
X86平台虚拟化概述
CPU虚拟化
内存虚拟化
I/O虚拟化
I/O透传虚拟化
Intel VT-d
PCI SR-IOV
PCIe网卡透传下的收发包流程
I/O透传虚拟化配置
半虚拟化Virtio
Virtio使用
Virtio规范和原理
设备的配置
虚拟队列的配置
设备的使用
Virtio网络设备驱动设计
Virtio网络设备Linux内核驱动设计
基于DPDK用户空间Virtio网络设备驱动设计
加速包处理的vhost优化方案
vhost的演进和原理
Qemu与Virtio-net
Linux内核态vhost-net
用户态vhost
基于DPDK的用户态vhost设计
消息机制
地址转换和映射虚拟机内存
vhost特性协商
virtio-net设备管理
vhost中的Checksum和TSO功能卸载
DPDK vhost编程实例
报文收发接口
使用DPDK vhost lib
使用DPDK vhost PMD
DPDK与网络功能虚拟化
网络功能虚拟化
OPNFV与DPDK
NFV的部署
VNF自身特性的评估
性能分析方法论
性能优化思路
VNF的设计
VNF虚拟网络接口的选择
IVSHMEM共享内存的PCI设备
网卡轮询和混合中断轮询模式的选择
硬件加速功能的考虑
服务质量的保证
实例分析和商业案例
Virtual BRAS
Brocade vRouter 5600
Open vSwitch中的DPDK性能加速
虚拟交换机
OVS
DPDK加速的OVS
OVS的数据通路
DPDK加速的数据通路
DPDK加速的OVS性能
基于DPDK的存储软件优化
基于以太网的存储系统
以太网存储系统的优化
SPDK介绍
基于DPDK的用户态TCP/IP栈
用户态存储驱动
SPDK中iSCSI target实现与性能
全方位分析Linux内核代码专栏
进程管理和调度
进程的优先级
进程生命周期
进程表示
进程类型
命名空间
进程ID号
进程关系
进程管理相关的系统调用
进程复制
内核线程
启动新进程
退出进程
调度器的实现
概观
数据结构
处理优先级
核心调度器
完全公平调度类
数据结构
CFS操作
队列操作
选择下一个进程
处理周期性调度器
唤醒抢占
处理新进程
实时调度类
性质
数据结构
调度器操作
调度器增强
SMP调度器
调度域和控制组
内核抢占和低延迟相关工作
内存管理
(N)UMA模型中的内存组织
概述
数据结构
页表
数据结构
页表项的创建和操作
初始化内存管理
建立数据结构
特定于体系结构的设置
启动过程期间的内存管理
物理内存管理
伙伴系统的结构
避免碎片
初始化内存域和结点数据结构
分配器API
分配页
释放页
内核中不连续页的分配
内核映射
slab分配器
备选分配器
内核中的内存管理
slab分配的原理
实现
通用缓存
进程虚拟内存
进程虚拟地址空间
进程地址空间的布局
建立布局
内存映射的原理
数据结构
树和链表
虚拟内存区域的表示
优先查找树
对区域的操作
将虚拟地址关联到区域
区域合并
插入区域
创建区域
内存映射
创建映射
删除映射
非线性映射
反向映射
数据结构
建立逆向映射
使用逆向映射
用户空间缺页异常的校正
按需分配/调页
匿名页
写时复制
获取非线性映射
设备驱动程序
访问设备
设备文件
字符设备、块设备和其他设备
使用ioctl进行设备寻址
主从设备号的表示
注册
与文件系统关联
inode中的设备文件成员
标准文件操作
用于字符设备的标准操作
用于块设备的标准操作
字符设备操作
表示字符设备
打开设备文件
读写操作
块设备操作
块设备的表示
数据结构
向系统添加磁盘和分区
打开块设备文件
请求结构
BIO
提交请求
I/O调度
ioctl的实现
资源分配
资源管理
I/O内存
I/O端口
总线系统
通用驱动程序模型
PCI总线
USB
虚拟文件系统
文件系统类型
通用文件模型
inode
链接
编程接口
将文件作为通用接口
VFS的结构
结构概观
inode
特定于进程的信息
文件操作
目录项缓存
处理VFS对象
文件系统操作
文件操作
标准函数
通用读取例程
失效机制
权限检查
proc文件系统
/proc的内容
数据结构
初始化
装载proc文件系统
管理/proc数据项
进程相关的信息
系统控制机制
简单的文件系统
顺序文件
用libfs编写文件系统
调试文件系统
伪文件系统
sysfs
数据结构
装载文件系统
文件和目录操作
向sysfs添加内容
系统调用
系统程序设计基础
追踪系统调用
支持的标准
重启系统调用
系统调用的实现
系统调用的结构
访问用户空间
追踪系统调用
中断
中断类型
硬件IRQ
处理中断
数据结构
中断电流处理
初始化和分配IRQ
处理IRQ
软中断
开启软中断处理
软中断守护进程
tasklet
创建tasklet
注册tasklet
执行tasklet
等待队列和完成量
等待队列
完成量
工作队列
页面回收和页交换
概述
可换出页
页颠簸
页交换算法
Linux内核中的页面回收和页交换
交换区的组织
检查内存使用情况
选择要换出的页
处理缺页异常
减缩内核缓存
管理交换区
数据结构
创建交换区
激活交换区
交换缓存
标识换出页
交换缓存的结构
添加新页
搜索一页
数据回写
页面回收
概述
数据结构
确定页的活动程度
收缩内存域
隔离LRU页和集中回收
收缩活动页链表
回收不活动页
交换令牌
处理交换缺页异常
换入页
读取数据
交换预读
发起内存回收
kswapd进行周期性内存回收
在严重内存不足时换出页
收缩其他缓存
数据结构
注册和删除收缩器
收缩缓存
缓存击穿
缓存雪崩
rpc微服务 tars
tars的搭建与部署
微服务rpc的原理
演示actor编程思维