Linux C/C++全栈开发知识图谱(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)
众所周知,在所有的编程语言中,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/
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 玩法实现
-
用户玩法实现-任务系统
-
数据配置以及数据库设计
-
触发机制实现
-
多人玩法实现-工会设计
相关文章:

Linux C/C++全栈开发知识图谱(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)
众所周知,在所有的编程语言中,C语言是一门颇具学习难度,需要很长学习周期的编程语言。甚至很多人经常听到一句调侃的话语——“C,从入门到放弃”。 C界的知名书籍特别多,从简单到高端书籍,许多书籍都是C之…...

pyTorch Hub 系列#2:VGG 和 ResNet
一、说明 在上一篇教程中,我们了解了 Torch Hub 背后的本质及其概念。然后,我们使用 Torch Hub 的复杂性发布了我们的模型,并通过相同的方式访问它。但是,当我们的工作要求我们利用 Torch Hub 上提供的众多全能模型之一时,会发生什么? 在本教程中,我们将学习如何利用称为…...

clip4clip:an empirical study of clip for end to end video clip retrieval
广告深度学习计算:阿里妈妈智能创意服务优化使用CPU/GPU分离的多进程架构,加速阿里妈妈智能创意服务。https://mp.weixin.qq.com/s/_pjhXrUZVzFRtiwG2LhnkwCLIP4Clip: CLIP 再下一城,利用CLIP实现视频检索 - 知乎前言: OpenAI 的论…...

rocksdb中测试工具Benchmark.sh用法(基准、性能测试)
1.首先要安装db_bench工具,这个工具在成功安装rocksdb之后就自动存在了,主要是在使用make命令之后就成功安装了,详情请见我之前的文章 2.确保成功安装db_bench之后,找到安装的rocksdb目录下面的tools文件夹,查看里面是…...

JS-项目实战-点击水果名修改特定水果库存记录
1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name); //返回的是NodeList类型}} }//当…...

Redis渐进式rehash小疑问
一、rehash是什么 在Redis中,Rehash是指在进行哈希表扩容或缩容时重新计算和重新分配哈希槽的过程。Redis使用哈希表来存储键值对,哈希表中的每个槽位对应一个哈希槽,每个槽位可以存储多个键值对。 当哈希表的负载因子(load facto…...

C#winform门诊医生系统+sqlserver
C#winform门诊医生系统sqlserver说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术:基于C#winform架构和sql server数据库 功能模块: 个人中心:修改个人信息、打开照片并进行修改 预约挂号:二级…...

设计模式 -- 工厂模式(Factory Pattern)
工厂模式:属于 创建型模 式,最常用的设计模式之一,提供了一种创建对象的最佳方式。 介绍 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决…...

设计模式-08-适配器模式
经典的设计模式有23种,但是常用的设计模式一般情况下不会到一半,我们就针对一些常用的设计模式进行一些详细的讲解和分析,方便大家更加容易理解和使用设计模式。 1-适配器模式原理 适配器模式的英文翻译是Adapter Design Pattern。顾名思义&…...

北邮22级信通院数电:Verilog-FPGA(9)第九周实验(4)实现寄存器74LS374
北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1 reg_74LS374.v 1.2 reg_LS3…...

【Android】带下划线的TextView
序言 我们有时候需要一个类似这样的显示,上面是文字,下面是一条线 这样的显示效果是TextView实现不了的,需要我们自己进行修改一下。 实现 创建一个UnderlineTextView,继承系统的TextView class UnderlineTextView(mContext…...

图解未来:数据可视化引领智慧决策时代
图表和数据可视化在数据分析中的关键作用 引言: 在现代数据科学中,数据可视化扮演着至关重要的角色。通过图表和可视化工具,我们能够更直观、更有效地理解数据的分布、趋势和关联性。本文将深入讨论三个主要的数据可视化工具:mat…...

例解什么是Python装饰器
Python中的装饰器一直是一个比较难理解的概念,我自己理解的就是用一个函数去修改另一个函数,主要是为另一个函数添加计时等功能,而且不用改变另一个函数,这样就大大减少了另一个函数的维护成本。 这个装饰器,英文名就…...

EtherCAT从站EEPROM组成信息详解(3):字16-63邮箱、EEPROM信息
0 工具准备 1.EtherCAT从站EEPROM数据(本文使用DE3E-556步进电机驱动器)1 字10-63邮箱、EEPROM信息 1.1 字10-63组成规范 字10-63虽然包含的空间区域很大,但实际上仅包含引导状态下邮箱配置、标准邮箱配置、EEPROM大小、执行的SII标准版本…...

【文件读取/包含】任意文件读取漏洞 afr_1
1.1漏洞描述 漏洞名称任意文件读取漏洞 afr_1漏洞类型文件读取漏洞等级⭐漏洞环境docker攻击方式 1.2漏洞等级 高危 1.3影响版本 暂无 1.4漏洞复现 1.4.1.基础环境 靶场docker工具BurpSuite 1.4.2.靶场搭建 1.创建docker-compose.yml文件 version: 3.2 services: web: …...

(八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
一、五种算法(DBO、LO、SWO、COA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为…...

通义灵码,阿里巴巴的编程辅助工具
一、官网 通义灵码_智能编码助手_AI编程_人工智能-阿里云 二、安装VSCode 如何下载安装VSCode 三、VSCode安装通义灵码 1.访问扩展详情界面 方式1 访问通义灵码安装教程页面 方法2 访问VSCode市场中的TONGYI Lingma 点击 Install 按钮访问扩展详情界面 2.打开VSCode …...

Uniapp导出的iOS应用上架详解
目录 Uniapp导出的iOS应用上架详解 摘要 引言 苹果审核标准 苹果调试 注意事项和建议 总结 摘要 本文将探讨Uniapp导出的iOS应用能否成功上架的问题。我们将从苹果审核标准、性能影响、调试流程等多个方面进行深入分析,以及向开发者提供相关注意事项和建议。…...

计算机视觉基础(7)——相机基础
前言 从这一节开始,我们来学习几何视觉。中层视觉包括相机模型、单目几何视觉、对极几何视觉和多目立体视觉等。在学习几何视觉最开始,我们先来学习一下相机模型,了解相机的基本原理,了解相机如何记录影像。 一、数字相机 1.1 基…...

解决Github上的README无法显示图片
首先感谢博主的思路:思路 最近写了点东西提交到git 发现本地能查看md里的图片用的相对路径,提交到github就看不见,并且发现不只是我自己的仓库看不见,其他人的我也看不见。那就有问题了 解决:正常使用相对路径&…...

qnx 工程目录创建工具 addvariant
文章目录 前言一、addvariant 是什么二、addvariant 使用实例1. variant names 参数说明2. 创建一个可执行文件工程3. 创建一个动态库工程 总结参考资料 前言 本文主要介绍如何在qnx 开发环境中创建工程目录及其相关的配置文件(common.mk, Makefile 文件等) 软件版本ÿ…...

计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
第1章:视觉项目资料介绍与学习指南 相关知识: 介绍计算机视觉、OpenCV库,以及课程的整体结构。学习概要: 了解课程的目标和学习路径,为后续章节做好准备。重要性: 提供学生对整个课程的整体认识࿰…...

【AI视野·今日CV 计算机视觉论文速览 第278期】Mon, 30 Oct 2023
AI视野今日CS.CV 计算机视觉论文速览 Mon, 30 Oct 2023 Totally 50 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Image Clustering Conditioned on Text Criteria Authors Sehyun Kwon, Jaeseung Park, Minkyu Kim, Jaewoong Cho, Ernest…...

深度学习:多模态与跨模态
1 定义 1.1 多模态学习 多模态学习(Multimodal Learning)是一种利用来自多种不同感官或交互方式的数据进行学习的方法。在这个语境中,“模态”指的是不同类型的数据输入,如文本、图像、声音、视频等。多模态学习的关键在于整合和…...

大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)
目录 一、JDK的安装 1、安装jdk 2、配置Java环境变量 3、加载环境变量 4、进行校验 二、hadoop的集群搭建 1、hadoop的下载安装 2、配置文件设置 2.1. 配置 hadoop-env.sh 2.2. 配置 core-site.xml 2.3. 配置hdfs-site.xml 2.4. 配置 yarn-site.xml 2.5. 配置 ma…...

Python与ArcGIS系列(四)在地图文档中加入图层
目录 0 简述1 将图层添加到地图文档中2 将图层插入到地图文档0 简述 本篇介绍如何利用arcpy实现将图层添加到地图文档中,以及将图层插入到地图文档指定的位置。 1 将图层添加到地图文档中 arcpy的mapping模块提供的AddLayer()函数可以实现将图层添加到地图文档中。功能本质上…...

QT 程序异常崩溃
出现以下问题,大概率是你在修改代码时,在pro或者pri中增加了一些不存在的头文件或者cpp,使用BeyondCmp仔细对比,分享,希望帮助到你...

Ubuntu20.04 通过nmcli命令查看网卡状态为unmanaged
问题描述: 通过下述指令查看网卡状态为 "unmanaged" nmcli dev status 解决方法: cd /usr/lib/NetworkManager/conf.d/ sudo mv 10-globally-managed-devices.conf 10-globally-managed-devices.conf.bak sudo cp 10-globally-managed-devic…...

【R Error系列】r - fatal error : RcppEigen. h:没有这样的文件或目录
在头文件那要有 // [[Rcpp::depends(RcppEigen)]] 即: #include <Rcpp.h> #include <RcppEigen.h> using namespace Rcpp; using namespace Eigen;// [[Rcpp::depends(RcppEigen)]] // [[Rcpp::export]] 参考: r - fatal error: RcppEi…...

如何在聊天记录中实时查找大量的微信群二维码
10-5 如果你有需要从微信里收到的大量信息中实时找到别人发到群里的二维码,那本文非常适合你阅读,因为本文的教程,可以让你在海量的微信消息中,实时地把二维码自动挑出来,并且帮你分类保存。 如果你是做网推的&#…...