Skip to content

Latest commit

 

History

History
1813 lines (901 loc) · 27.8 KB

c++学习路线.md

File metadata and controls

1813 lines (901 loc) · 27.8 KB

【阶段一】C语言开发

  1. 学习目标:

1.1 具备C/C++领域基础专业编程能力;

1.2 独立完成项目案例;

  1. 知识点

2.1 C语言概述

计算机基础;第一个C语言程序;

C的代码的含义与编译;

集成开发环境(vs、qt)

2.2 编程基础

常量与变量;

进制转换;

运算符;

条件控制语句;

数组与字符串

2.3 函数

函数的基本概念;

字符串操作的常用函数;

自定义函数

2.4 指针

指针变量的定义;

指针基本使用;

const修饰的指针;

一级指针与数组名的关系;

指针法操作数组元素;

指针作为函数的参数;

数组作为函数的参数;

指针做函数的返回值;

指针处理字符串

2.5 内存管理

局部变量的作用域和生命周期;

静态局部变量的作用域和生命周期;

全局变量的作用域和生命周期;

静态全局变量的作用域和生命周期;

静态函数和非静态函数的区别;

内存分区;

堆区内存的分配(malloc)和释放(free)

2.6 复合类型

结构体的基本用法;

结构体嵌套指针和数组;

结构体作为函数参数;

复合类型的声明与使用

2.7 文件操作

文件的分类(文本、二进制);

文件的打开和关闭;

文件操作函数;

文件读写缓冲区的概念

【阶段二】C高级编程

500个常用数据结构,算法,算法导论,面试常用,经典游戏,大厂高级工程师总结github.com

学习目标:

1.1 掌握C语言中的字符串、一维数组、二维数组的用法;

1.2 掌握一级指针,二级指针,三级指针的高级用法,理解N级指针概念,指针数组和数组指针;

1.3 学会结构体、文件的使用;

1.4 C语言接口封装设计。

  1. 知识点:

2.1 内存分区、函数调用模型

数据类型、变量的含义;

内存四区特点;

函数的调用模型;

内存操作函数;

宏定义与预处理

2.2 指针高级

指针基本使用;

指针的步长的概念;

指针简介赋值;

指针以及多级指针做函数参数的特性与使用;

通过指针操作字符串;

const类型修饰符;

位的逻辑运算符;

移位运算符;

数组指针与指针数组;

多维数组做函数参数;

结构体嵌套一级指针;

结构体嵌套二级指针;

浅拷贝深拷贝

2.3 函数指针与回调函数

封装和设计的思想;

函数指针定义的三种方式;

回调函数

2.4 数据结构与链表

链表的基本概念;

单链表的相关操作

2.5 递归函数

递归函数的概念;

递归的使用

2.6 数据结构与算法

大O表示法基本概念;

线性表顺序存储和链式存储概念;

线性表的顺序存储(数组);

线性表的链式存储(链表);

队列的顺序与链式存储;

栈的N顺序与链式存储;

二叉树基本操作;

常用排序算法

2.7 接口的封装和设计

函数的封装设计;

解耦合的设计理念;

模块实现与业务分离的思想

【阶段三】C++核心编程

学习目标:

1.1 具备常用C++方向基本知识和常用技能。

  1. 知识点;

2.1 C++对C的扩展、引用

C++语言的命名空间的使用;

C++对C的扩展;

C、C++中const不同之处;

定义和使用引用类型变量

2.2 函数重载

类的的默认参数;

C++的函数重载;

类和对象的基本概念;

类的封装和访问控制权限;

类和对象进行简单编程

2.3 类和对象

类的构造函数;

类的析构函数;

explicit关键字作用;

类的拷贝构造函数的使用;

深拷贝和浅拷贝问题;

多个对象的构造和析构函(初始化列表)

2.4 对象的动态分配和释放

类和对象的动态分配和释放内存;

静态成员变量和函数的使用;

C++编译器对成员变量和成员方法的处理机制;

this的使用;

友元函数;

友元类

2.5 运算符重载

运算符重载概念;

常用运算符重载;

自定义的智能指针类;

实现一个自定义的String类

2.6 类的继承和派生、多态

继承中的访问控制;

继承中的构造和析构;

多继承;

virtual继承的基本概念;

多态的使用(多态成立条件、使用场景);

区分成员函数的重写和重定义;

虚函数表指针,分步初始化;

虚函数;

纯虚函数;

抽象类的使用;

虚析构函数和纯虚析构函数

2.7 面向抽象类编程与设计模式

设计模式原则;

常用的设计模式

2.8 函数模板,类模板

函数模板基本语法;

函数模板和函数重载的调用规则;

编译器对模板的编译过程;

类模板的概念和基本语法;

继承中的类模板;

类模板中普通友元函数、友元函数模板的处理

2.9 异常、V/O流

C++类型转换;

C++标准异常库;

异常的抛出与捕获;

C++标准I/O流(cin、cout);

C++的文件I/O类的使用

2.10 STL

STL容器、迭代器的原理;

序列式容器vector、string、deque;

堆栈容器stack、quenue;

双向链表容器list;

【阶段四】C++新特性

C++11/14/17/20/23的新特性代码案例,包含lambda匿名函数,右值引用,auto,coroutine库,synchronization库 http://www.github.com/0voice/cpp_new_featuresgithub.com

学习目标:

1.1 掌握C++11/14/17/20/23常用新特性

  1. 知识点:

2.1 新增新特性主要功能

C++11 新增正则表达式(正则表达式详情)、完备的随机数生成函数库、新的时间相关函数,原子操作支持、标准线程库(2011之前,C和C++语言均缺少对线程的支持)、一种能够和某些语言中foreach语句达到相同效果的新的for语法、auto关键字、新的容器类、更好的union支持、数组初始化列表的支持以及变参模板的支持等等新特性

C++14 主要对C++11变准文案描述进行了修正

C++17 简化C++语言的日常使用

C++20

C++23

2.2 stl容器,智能指针,正则表达式

unordered_map

stl容器

hash的用法与原理

shared_ptr,unique_ptrbesic_regex,sub_match

函数对象模板 function,bind

2.3 新特性的线程, 协程, 原子操作, lamda表达式

atomic的用法与原理

thread_local与cond_ition_variable异常处理exception_ptr

错误处理 error_category

coroutine的用法与原理

【阶段五】Linux工程管理

  1. 学习目标

1.1 掌握Makefile;

1.2 掌握git/svn版本管理工具;

  1. 知识点

2.1 Makefile

Makefile/cmake/configure;

Makefile的规则与make的工作原理;

单文件编译与多文件编译;

Makefile的参数传递;

多目录文件央递归编译与嵌套执行make;

Makefile的通配符,伪目标,文件搜索;

Makefile的操作函数与特殊语法;

configure生成makefile的原则;

cmake的写法;

2.2 分布式版本控制git

git的工作流程

创建操作与基本操作分支管理,查看提交历史

git服务器搭建

2.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

【阶段六】Linux系统编程

  1. 学习目标:

1.1 熟悉Linux开发环境

1.2 熟练使用Linux系统接口

1.3 掌握进程间通信

  1. 知识点:

2.1 Linux命令

Linux下的目录结构;

工作日程应用命令;

Ubuntu下的软件安装和卸载;

2.2 Linux开发与调试工具

vim命令模式下操作;

vim末行模式下操作;

vim的配置;

gcc的工作流程和掌握常见参数;

Linux下的静态库与共享库(windows动态库)的制作和使用;

gdb调试;

pcb和文件描述符,虚拟地址空间;

2.3 系统I/O操作

Linux系统IO函数;

阻塞和非阻塞的概念;

stat/Istat函数;

文件属性相关函数;

链接相关概念及函数;

目录操作相关概念及函数;

dup、dup2函数;

fcntl函数

2.4 进程与IPC通信

进程相关的概念;

进程操作相关函数;

孤儿进程;

僵尸进程;

进程回收;

进程间通信

2.5 线程与并发同步

互斥量;

死锁以及解决方案;

读写锁;

条件变量;

条件变量实现生产消费者模型;

信号量实现生产消费者模型;

线程同步解决哲学家就餐问题;

【阶段七】Linux C++服务器架构师

互联网后端免费技术分享视频资源 https://www.github.com/0voice/backend_video

  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. 高性能网络设计专栏

2.1 网络编程

2.1.1 网络io与select,poll,epoll

socket与文件描述符的关联

sigio的异步通知

多路复用select/poll

手撕epoll单线程,多线程,多进程的多种写法

代码实现LT/ET的区别

2.1.2 reactor的原理与实现

reactor针对业务实现的优点

epoll封装send_cb/recv_cb/accept_cb

reactor多核实现

跨平台(select/epoll/kqueue)的封装reactor

2.1.3 http/https服务器的实现

reactor sendbuffer 与recvbuffer封装http协议

http协议格式

http2.0与http3.0

有限状态机fsm解析http

https的工作流程

https证书配置

2.1.4 websocket协议与服务器实现

reactor sendbuffer与recvbuffer封装websocket协议

websocket握手流程

websocket协议头封装

tcp分包与粘包的解决方案

websocket数据流的编解码

2.2 网络原理

2.2.1 服务器百万并发实现

同步处理与异步处理的数据差异

网络io线程池异步处理

ulimit的fd的百万级别支持

sysctl.conf的rmem与wmem的调优

conntrack的原理分析

2.2.2 redis,memcached,nginx网络组件

redis单线程reactor的实现

memcached的多线程master-worker的reactor实现

nginx的多进程reactor的实现

多进程reactor的坑点,惊群,共享内存

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 自研框架:用户态协议栈NtyTcp的实现

2.4.1 用户态协议栈设计实现

用户态协议栈的存在场景与实现原理

netmap开源框架

eth协议,ip协议,udp协议实现

arp协议实现

icmp协议实现

2.4.2 tcp/ip定时器与滑动窗口

tcp协议头实现

tcp控制块的实现

滑动窗口的实现

重传定时器,坚持定时器,time_wait定时器,keepalive定时器

2.4.3 手把手设计实现epoll

epoll数据结构封装与线程安全实现

协议栈fd就绪回调实现

epoll接口实现

LT/ET的实现

  1. 基础组件设计专栏

3.1 池式组件

3.1.1 手写线程池与性能分析

线程池的异步处理使用场景

线程池的组成 任务队列执行队列

任务回调与条件等待

线程池的动态防缩

扩展:nginx线程池实现对比分析

3.1.2 内存池的实现与场景分析

内存池的应用场景与性能分析

内存小块分配与管理

内存大块分配与管理

手写内存池,结构体封装与API实现

避免内存泄漏的两种万能方法

定位内存泄漏的3种工具

扩展: nginx内存池实现

3.1.3 异步请求池的实现

异步请求处理流程

King式四元组, create, commit, callback, destory

异步请求框架封装

应用协议redi s/dns/http请求封装

3.1.4 mysql连接池的实现

连接池性能的影响的2个因素, tcp连接和mysql认证

连接请求归还策略

连接超时未归还策略

链接断开重连策略

连接数量最优策略

3.2 高性能组件

3.2.1 原子操作CAS与锁实现

互斥锁的使用场景与原理

自旋锁的性能分析

原子操作的汇编实现

3.2.2 无锁消息队列实现

有锁无锁队列性能

内存屏障Barrier

数组无锁队列设计实现

链表无锁队列设计实现

3.2.3 定时器方案红黑树,时间轮,最小堆

定时器的使用场景

定时器的红黑树存储

时间轮的实现

最小堆的实现

分布式定时器的实现

3.2.4 手写死锁检测组件

死锁的现象以及原理

pthread_mutex_lock/pthread_mutex_unlock dlsym的实现

有向图的构建

有向图dfs判断环的存在

三个原语操作lock_before,lock_after,unlock_after

死锁检测线程的实现

3.2.5 手写内存泄漏检测组件

内存泄漏现象

第三方内存泄漏与代码内存泄漏

malloc与free的dlsym实现

内存检测策略

应用场景测试

3.2.6 手把手实现分布式锁

多线程资源竞争互斥锁,自旋锁

加锁的异常情况

非公平锁的实现

公平锁的实现

3.3 开源组件

3.3.1 libevent/libev框架实战的那些坑

服务端reactor事件封装

libevent接口分析event_base_new,event_add,event_del,event_base_loop

memcached网络模块分析

libev的主要数据结构EV_WATCH,EV_WATCH_LIST

libevent与libev性能对比

3.3.2 异步日志方案1og4cpp

日志库性能瓶颈分析

异步日志库设计与实现

批量写入与双缓存冲机制

奔溃后的日志找回

3.3.3 应用层协议设计ProtoBuf/Thrift

IM, 云平台, nginx, http, redis协议设计

如何保证消息完整性

手撕protobufIM通信协议

protobuf序列化与反序列化

protobuf编码原理

  1. 中间件开发专栏

4.1 MySQL

4.1.1 SQL语句,索引,视图,存储过程,触发器

MySQL体系结构,SQL执行流程

SQL CURD与高级查询

视图,触发器,存储过程

MySQL权限管理

4.1.2 MySQL索引原理以及SQL优化

索引,约束以及之间的区别

B树,聚集索引和辅助索引

最左匹配原则以及覆盖索引

索引失效以及索引优化原则

EXPLAIN执行计划以及优化选择过程分析

4.1.3 MySQL事务原理分析

事务的ACID特性

MySQL并发问题脏读,不可重复读,幻读

事务隔离级别

锁的类型,锁算法实现以及锁操作对象

S锁X锁IS锁IX锁

记录锁,间隙锁, next-key lock

插入意向锁,自增锁

MVCC原理剖析

4.1.4 MySQL缓存策略

读写分离,连接池的场景以及其局限a

缓存策略问题分析

缓存策略强一致性解决方案

缓存策略最终一致性解决方案

2种mysql缓存同步方案从数据库与触发器+udf

缓存同步开源方案 go-mysql-transfer

缓存同步开源方案canal原理分析

3种缓存故障,缓存击穿,缓存穿透,缓存雪崩

4.2 TiDB

4.2.1 TiDB存储引擎的原理

TiKV的Key-Value存储引擎

基于RBAC的权限管理

数据加密

4.2.2 TiDB集群方案与Replication原理

集群三个组件TiDB Server,PD Server,TiKV Server

Raft协议讲解

0LTP与OLAP

4.3 Redis

4.3.1 Redis相关命令详解及其原理

string, set, zset, list, hash

分布式锁的实现

lua脚本解决ACID原子性

Redis事务的ACID性质分析

4.3.2 Red is协议与异步方式

Redis协议解析

特殊协议操作订阅发布

手撕异步redis协议

4.3.3 存储原理与数据模型

string的三种编码方式int, raw, embstr

双向链表的list实现

字典的实现,hash函数解决键冲突与rehash

跳表的实现与数据论证

整数集合实现

压缩列表原理证明

4.3.4 主从同步与对象模型

对象的类型与编码

字符串对象

列表对象

哈希对象集合对象有序集合

类型检测与命令多态内存回收

对象共享

对象空转时长

redis的3种集群方式主从复制,sentinel, cluster

4种持久化方案

4.4 RocksDB

4.4.1 不一样的kv存储RocksDB的使用场景

前缀搜索

低优先级写入

生存时间的支持

lransactions快照存储

日志结构的数据库引擎

4.4.2 RocksDB的特殊操作

SST文件格式

日志与监控

数据压缩

huge page TLB的支持

MemTable的两种实现Skiplist与HashSkiplist

Lua的支持

4.5 Nginx

4.4.1 Nginx反向代理与系统参数配置conf原理

Nginx静态文件的配置

Nginx动态接口代理配置

Nginx对Mqtt协议转发

Nginx对Rtmp推拉流

Openresty对Redis缓存数据代理

shmem的三种实现方式

原子操作

nginx channel

信号

信号量

4.4.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.4.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机制的设计与实现

模块性能测试

4.5 MongoDB

4.5.1 接口编程与文档操作

文档/集合/聚合函数操作

五种索引做法单字段索引,复合索引,TTL索引,全文索引,hash索引

GridFS存储大文件

WiredTiger存储引擎

wiredTiger的事务

journal日志

4.5.2 集群方案与持久化备份

Master-Slave的三个服务 Mongos/config/shard服务

Replica Set读写策略

Sharding的实现与原理

三种Mongodb性能优化策略 时间同步,磁盘预读功能,内存管理

项目: MongoDB跨数据中心的数据复制平台

抓取Oplog操作日志

曰志分离

日志订阅—数据路由

Cache同步

  1. 开源框架专栏

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 TARS

5.2.1 TARS RPC服务模型原理

TARS服务端与客户端

HTTP开始以及RPC通信

基础组件

框架服务解析

5.2.2 TARS公共框架服务与数据库

TarsCpp组件智能指针与MySQL操作

自定义洺实现高效服务管理

服务鉴权避免数据泄露

多种远程调用方式

5.2.3数据监控与服务性能压测

TarsBenchmark压测利器

TARS染色日志

TARS服务信息上报

DCache分布式存储

5.3 DPDK

5.3.1 DPDK环境与testpmd/l3fwd/skeletion

DPDK环境参数讲解

多队列网卡的工作原理

CPU亲和性

Burst数据包的优缺点

DPDK轮询模式异步中断, 轮询模式, 混合中断轮询模式

virtio与vhost

5.3.2 DPDK的用户态协议栈

内核网络接口KNI的实现原理

接收线程/发送线程/KNI线程

内存数据结构rte_mbuf, rte_mempool

端口数据结构rte_kni, rte_kni_conf, rte_kni_ops, rte_eth_conf

协议数据结构rte_ether_hdrrte_ipv4_hdr, rte_udp_hdr

数据处理接口rte_eth_rx_burst, rte_kni_tx_burst, rte_pktmbuf_mtod

5.3.3 千万级流量并发的dns处理

udp协议包处理

dns协议实现

配置文件解析

数据结构rte_ring

trex数据包性能测试

5.3.4 高性能数据处理框架vpp

vpp使用vmxnet3

DPDK ACL实现数据过滤

vpp web应用

vpp基础库 VPPInfra

高速查找路由表,CAM表

5.3.5 DPDK的虚拟交换机框架0vS

OvS三大组件 ovs-vswitchd,ovsdb-server,openvswitch. ko

0vS报文处理机制

OvS 4种数据路径

VXLAN数据协议

  1. Rust项目专栏

6.1 Rust特性精讲

6.1.1 Rust Slice类型与泛型

let关键字

数据类型

字符串字面量

元组定义与解构(destructing)赋值

Rust堆与栈

借用ownership与引用

切片Slice定义

结构体使用与实例化

6.1.2 Rust文件操作与错误处理

mod关键字与模块封装

use关键字

cargo.toml讲解

cargo build与cargo run

Rust集合Vector,HashMap,HashSet

错误处理Recoverable与UnRecoverable

Rust泛型与trait特质

文件输入输出流的读写操作

6.1.3 Rust并发编程与智能指针

包管理器Cargo

第三方库引入

迭代器lterator

闭包Closure

Box指针

Rust线程thread::spawn

async关键字与协程

无栈协程与有栈协程

6.2 组件实现

6.2.1 网卡速度监控

网卡监控与速度分析的原理

Rust调用c接口

实时运行速率

Rust模块封装

6.2.2 邮件发送

邮件协议讲解

SMTP发送与POP3收取

邮件内容封装与解析

6.2.3 OAuth2第三方登陆

OAuth2授权流程讲解

http请求与响应解析

github用户授权登陆

微信用户授权登陆

微博用户授权登陆

6.3 第三方库

6.3.1 Rust异步框架tokio

tokio的使用场景与引用规范

tokio库 hyper/tonic/tower/bytes

tokio多线程与调度器

异步tcp/udp

实现异步sql请求

tokio性能测试

6.3.2 Rust web框架Warp

warp 接口编写规范

https实现原理

字符串序列化

接口路由

动态检测与追踪

6.3.3 Rust http库 hyper

hyper使用场景

客户端与服务器实现

异步设计

性能测试

7.性能分析专栏

7.1 测试框架gtest以及内存泄漏检测

googletest与googlemock文件

函数检测以及类测试

test fixture 测试夹具

类型参数化

事件测试

内存泄漏

设置期望,期待参数,调用次数,满足期望

7.2 火焰图的生成原理与构建方式

火焰图工具讲解

火焰图使用场景与原理

nginx动态火焰图

MySQL火焰图

Redis火焰图

  1. 分布式架构专栏

8.1 分布式消息队列

8.1.1 Kafka使用场景与设计原理

发布订阅模式

点对点消息传递

Kafka Brokers原理

Topics和Partition

8.1.2 Kafka存储机制

Partition存储分布

Partition文件存储机制

Segment文件存储结构

offset查找message

高效文件存储设计

8.2 分布式服务

8.2.1 远程调用brpc

bthread的使用

熔断原理

brpc的一致性hash

flatmap

最小化延时的LB

brpc的内存管理

线程模型以及thread-local

8.2.2 注册服务中心Etcd

etcd配置服务、服务发现、集群监控、leader选举、分布式锁

etcd体系结构详解(gRPC,WAL, Snapshot、BoltDB、Raft)

etcd存储原理深入剖析(B树、B+树)

etcd读写机制以及事务的acid特性分析

raft共识算法详解(leader选举+日志复制)

8.3 分布式API网关

8.3.1 Kong动态负载均衡与服务发现

nginx,openresty,Kong之间的“苟且”

动态负载均衡的原理

服务发现实现的原理

Serverless

系统日志

8.3.2 Kong实时监控与REST API

监控,故障检测与恢复

代理层缓存与响应服务ACL,bot检测,黑白名单

云原生

性能压测与分析

8.4 分布式存储与容器

8.4.1 内核级支持的分布式存储Ceph

ceph的集群部署

monitor与OSD

ceph 5个核心组件

ceph集群监控

ceph性能调调优与benchmark

8.4.2 服务容器化Docker

Docker镜像管理

镜像元数据管理与存储驱动

网络管理与GRE实现跨网络通信

Docker容器安全解决方案SElinux

Dockerfile的容器构建

编排三剑客 Fig/Compose/Swarm

编排小神器Fleet

Flynn体系架构与实现原理

  1. 上线项目实战

9.1 图床共享云存储

9.1.1 fastdfs架构分析和配置

fastdfs架构分析

快速配置fastdfs

上传文件逻辑分析

下载文件逻辑分析

9.1.2 fastdfs存储原理

tracker , storage分析

存储机制

支持断点续传

相同文件内容只保存一份

9.1.3 分布式fastdfs存储集群部署

同步机制

线性扩容

如何实现高可用

负载均衡

9.1.4 高负载nginx/fastcgi

fastdfs-nginx-module模块分析

fastcgi请求与响应

nginx与fastcgi如何通信

nginx-fastcgi-fastdfs如何实现上传下载

9.1.5 文件传输和接口设计

http接口设计

图床数据库设计

图床文件上传,下载,分享功能实现

业务流程实现

9.1.6 产品上云公网发布/测试用例

使用云服务器的各种坑分析

fiddler监控http请求,postman模拟请求

wrk测试接口吞吐量

jmeter压力测试

9.2 微服务即时通讯

9.2.1 IM即时通讯项目框架分析和部署

接入层、逻辑层、持久层架构划分

消息实时性分析

即时通讯数据库设计

单聊、群聊消息原理

群成员管理

未读消息原理

池化技术的使用

快速配置IM项目

9.2.2 IM消息服务器/文件传输服务器

protobuf通信协议设计

数据库分表设计

reactor百万并发模型

login_server负载均衡

登录请求响应模型

9.2.3 消息服务器/路由服务器

请求登陆逻辑

最近联系会话逻辑

查询用户在线主题

未读消息机制

单聊消息推拉机制

群聊消息推拉机制

路由转发机制

9.2.4 数据库代理服务器设计

main函数主流程

响应流程

redis缓存

消息计数(单聊和群聊)

未读消息机制

群成员管理

单聊群聊

9.2.5 文件服务器和docker部署

在线文件传输机制分析

离线文件传输机制分析

etcd微服务注册与发现

docker制作与部署

9.2.6 产品上云公网发布/公网测试上线

单元测试案例

testbench如何设计

IM项目性能压测

定制私有功能

云服务器部署

互联网后端免费技术分享视频资源学习社区github.com

【阶段八】参考书籍资料

  1. MySQL:《高性能MySQL第3版》

  2. Nginx:《深入理解Nginx:模块开发与架构分析(第2版)》(陶辉)

  3. Redis: Redis设计与实现(黄健宏)

  4. Linux内核:《深入理解Linux内核架构》(郭旭译)

5.数据结构与算法:《算法导论》(第3版)

  1. 性能分析:《性能之巅洞悉系统、企业与云计算》

  2. MongoDB:《MongoDB权威指南》

  3. Ceph:《Ceph分布式存储学习指南》(Ceph中国社区)

  4. Docker : 《Docker容器与容器云(第2版)》 微信读书

  5. TCP/IP:《Tcp/lp详解卷一卷二卷三》

  6. Linux系统编程:《Unix环境高级编程》

  7. 计算机:《深入理解计算机系统》

  8. DPDK:《深入浅出DPDK》