Linux C/C++全栈开发知识图谱(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)

news2024/11/30 2:46:31

众所周知,在所有的编程语言中,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++后端开发技术(数据结构、网络编程、网络原理、中间件、开源框架、云原生、分布式)icon-default.png?t=N7T8https://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 玩法实现

  • 用户玩法实现-任务系统

  • 数据配置以及数据库设计

  • 触发机制实现

  • 多人玩法实现-工会设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1215663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8086与8088

一、8086与8088概述 8088/8086都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线8088/8086都是由执行单元(EU)和总线接口部件(BIU)两大部分构成指令系统和寻址能力都相同,两种CPU是兼容的8088被称作准十六位的、是紧继8086…

为什么红帽Linux值得学习?红帽Linux是什么

为什么红帽Linux值得学习 物联网、云计算、大数据,或许你都耳熟能详,但是Linux可能你却感觉到有点陌生。这些未来趋势的行业使用的嵌入式、c、JAVA、PHP等底层应用软件都是在Linux操作系统上Linux运维工程师作为移动互联网的关键支撑岗位,缺口…

Redis内存淘汰机制

Redis内存淘汰机制 引言 Redis 启动会加载一个配置&#xff1a; maxmemory <byte> //内存上限 默认值为 0 (window版的限制为100M)&#xff0c;表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量&#xff0c;提前设置好内容上限。 此时思考一个问题…

避坑指南!!在树莓派4b上安装Pycharm以及无法使用终端的问题解决!!

一、下载Pycharm–linux安装包 这里是踩的第一个坑&#xff0c;一开始我下载的是pycharm2023-linux版本的。后面发现缺少很多东西&#xff0c;安装不成功。后面下载了低版本的Pycharm才可以。我下载的是2020版本的。注意&#xff1a;在下载安装包时&#xff0c;一定要在window…

小米手机获取电池健康度

目录 方法一&#xff1a;使用Bug反馈功能 1. 打开拨号界面&#xff0c;输入*#*#284#*#* 2. 导出结果&#xff0c;等待即可 3. 找到这个压缩文件 4. 解压缩【我这里直接拷贝到电脑中操作&#xff0c;手机同理】 4.1 解压&#xff1a; 4.2 将得到的新的压缩文档解压 5. 打…

Stages—研发过程可视化建模和管理平台

产品概述 Stages是美国UL Solutions旗下UL Method Park GmbH的产品&#xff0c;用于帮助企业定义、管理、发布、控制、优化其研发过程&#xff0c;同时使其研发过程符合CMMI、ASPICE、ISO26262等标准。Stages的核心理念是把过程理论和实际项目进行有机结合。Stages聚焦于研发过…

web环境实现一键式安装启动

部署的痛点 一般在客户环境安装web环境&#xff0c;少说需要花费1-2小时。一般需要安装jdk、nginx、mysql、redis等 等你接触到了inno setup &#xff0c;你有可能会节约更少的时间去部署。也有可能是一个不懂技术的人&#xff0c;都可以进行操作的。废话不多说&#xff0c;接…

JS原生-弹框+阿里巴巴矢量图

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…

LeetCode - 160. 相交链表(C语言,配图)

思路&#xff1a; 1. 我们算出两个链表的长度lenA&#xff0c;lenB。我们在这里最后判断一下&#xff0c;两个链表的尾节点是否是一样的&#xff0c;如果是相交链表&#xff0c;那它们的尾节点一定是一样的。 2. 算出长链表和短链表的差距n&#xff08;n | lenA- lenB |&#…

【分享课】11月16日晚19:30PostgreSQL分享课:PG缓存管理器主题

PostsreSQL分享课分享主题: PG缓存管理器主题 直播分享平台&#xff1a;云贝教育视频号 时间&#xff1a;11月16日 周四晚 19: 30 分享内容: 缓冲区管理器结构 缓冲区管理器的工作原理 环形缓冲区 脏页的刷新

《洛谷深入浅出基础篇》 p3370字符串哈希——hash表

上链接&#xff1a; P3370 【模板】字符串哈希 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3370#submit上题干&#xff1a; 就是说&#xff0c;给你N个字符串&#xff0c;然后让你判断&#xff0c;这N个字符串里面有多少不同的字符串&am…

谭巍主任科普:面对HPV感染挑战,迈出关键一步!

在当今社会&#xff0c;HPV(人乳头瘤病毒)感染的问题日益凸显&#xff0c;它不仅限于性传播疾病&#xff0c;更上升为一种公共卫生问题。据统计&#xff0c;全球范围内每年有大量人群感染HPV&#xff0c;其中部分地区感染率高达50%。正因如此&#xff0c;谭巍主任投身于科普事业…

表单校验wed第十九章

常见的表单验证 一。表单选择器 属性过滤选择器 &#xff1a;selected 选中所有的下拉元素 &#xff1a;checked&#xff1a;选项元素 &#xff1a;disabled 不可用元素 &#xff1a;enable 所有可用元素 二。字符串演示 1.判断非空 isNaN(j) :判断是否为数字 2.表…

flutter绘制弧形进度条

绘制: import package:jade/utils/JadeColors.dart; import package:flutter/material.dart; import dart:math as math; import package:flutter_screenutil/flutter_screenutil.dart;class ArcProgressBar extends StatefulWidget{const ArcProgressBar({Key key}) : super…

蘑菇街获得mogujie商品详情 API 返回值说明

速卖通API接口是速卖通平台提供的一种数据交换接口&#xff0c;可以帮助卖家快速获取平台上的商品信息、订单信息、用户信息等数据&#xff0c;以便在自己的应用程序中进行展示、管理或分析。 速卖通API接口可以通过以下步骤进行使用&#xff1a; 注册速卖通账号并获取API密钥…

SystemVerilog学习 (7)——面向对象编程

一、概述 对结构化编程语言,例如Verilog和C语言来讲&#xff0c;它们的数据结构和使用这些数据结构的代码之间存在很大的沟壑。数据声明、数据类型与操作这些数据的算法经常放在不同的文件里,因此造成了对程序理解的困难。 Verilog程序员的境遇比C程序员更加棘手,因为 Verilog …

React父组件怎么调用子组件的方法

调用方法&#xff1a;1、类组件中的调用可以利用React.createRef()、ref的函数式声明或props自定义onRef属性来实现&#xff1b;2、函数组件、Hook组件中的调用可以利用useImperativeHandle或forwardRef抛出子组件ref来实现。 【程序员必备开发工具推荐】Apifox一款免费API管理…

STM32CubeIDE报“xxx is not implemented and will always fail”解决方法

本文介绍STM32CubeIDE报“xxx is not implemented and will always fail”解决方法。 最近用STM32CubeIDE开发STM32程序时&#xff0c;编译报警告&#xff1a; warning: _close is not implemented and will always fail warning: _lseek is not implemented and will always…

顺序表在线OJ题(详解+图解)

1&#xff1a;原地移除数组中所有的元素val&#xff08;时间复杂度为O(N)空间复杂度为O(1)&#xff09; 题目的大概意思是&#xff1a;用户自行输入一个数组&#xff0c;还要输入一个val的整形值&#xff0c;然后从数组中移除等于val的元素 我们根据题目的要求&#xff0c;时间…

软件测试/人工智能丨深入人工智能软件测试:PyTorch引领新时代

在人工智能的浪潮中&#xff0c;软件测试的角色变得愈发关键。本文将介绍在人工智能软件测试中的一些关键技术&#xff0c;以及如何借助PyTorch深度学习框架来推动测试的创新与升级。 PyTorch&#xff1a;深度学习的引擎 PyTorch作为一种开源的深度学习框架&#xff0c;为软件…