一个10年C++程序员对技术和业务的感悟,献给还在迷茫中的你

技术流战士 2024-04-06 00:50:57

我越来越担心我作为一个C++程序员的未来。

恍然间,发现自己在这个行业里已经摸爬滚打了十年了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了,但是今年在换工作的过程中却遭到了重大的挫折。详细过程我就不再叙述,在此,只想给大家说一说被拒绝的原因,看看大家有没有相似的经历,和类似的感悟。面试官对我的答复大致是这样的,我们不需要熟练工,我们需要在某领域拥有超过常人的积累认知,和拥有整套完整思维模式和优秀认知事物能力的人…他很诚恳地告诉我,你还年轻,真的应该好好地静下心来,深入地研究一些东西,自己写一些东西,而不是这也用过,那也知道,但是多半都是局限于仅仅见过,会用,却从来没有认真思考过其代码背后蕴含的思想,更少有人研究过源码,进而体会大师们在某些问题的解决上秉承的思想和思维的风格。个人感觉,这也算是国内大部分程序员最让人悲哀的地方了,当然这也与外界浮躁氛围的蔓延不无关系。不了解这一行的人总觉得程序员都是代码民工,如果自己也认为自己是敲代码的机器的话,我诚恳地建议您尽早转行吧,也许我这么说会得罪伤害一些同行,毕竟转行对任何一个人来说都是有相当的风险和挑战的。不过这绝对应该是善意的忠告。相反,我强烈地认为,程序员应该是最有活力和最有思想的一个群体,只要你不肯让自己浮于表面,更重要的是,必须勤于思考。如果你认可我这句的话,就请您继续往下看看我的感慨,否则,那就希望您好好利用好自己的时间做您最需要做的事吧。

由于面试中被问到线程池,TCP/IP网络的时候,让面试官问得人仰马翻,哑口无言,所以回来之后洗心革面,下决心要把线程池,TCP/IP好好研究个明白,再也无法容忍自己只知其一不知其二了。

**还有一点我们特别需要明白的是技术和业务的关系。**对于老板而言业务是第一,但是对于我们程序员而言:业务重要,技术也是非常重要。看到过周边不少的朋友因为技术积累不够且所处行业衰落而导致在换工作的时候找不到相同薪资或者更高的工作,比如有些朋友做棋牌的,棋牌行业火的时候税后月入30~40k,但是国-jia打击棋牌行业后,大量棋牌公司倒闭,然后跳槽时由于技术积累不够25k的工作都找不到,为什么技术积累不够呢?因为棋牌行业偏业务开发,比如棋牌有各种不同的玩法:跑得快、炸金花、十三张、桥牌等等。

技术是立身之本,业务用来放大技术的价值,没有技术做支撑,换个业务我们就没法继续拿到较高的薪水。

清醒的认识自己

我一直担惊受怕,过去,可能是因为我年轻,但现在,我已经不是那么年轻了,我仍然发现有很多事情让我害怕。

当年纪越来越大后,我开始变得不能加班。我开始用更多的时间和家人在一起,而不是坐在计算机前(尽管这样,她们仍是抱怨)。我在本地教育委员会社区里提供一些帮助,还组织开源兴趣小组参加活动。

我在思考,为什么以前会把如此多的时间全部用在编程上。大量的编程。那是我渴望深入研究一个类库,一个框架或一门技术。

现在的技术的学习曲线的增加,让我的忍耐性越来越低。各种新技术,因为新奇让人兴奋,但最终变成一场场争论。我越来越无法忍受这些充满市场宣传气息的喧嚣。我对技术看重的是稳定,清晰。

据不完全统计,截至目前(2018.07)为止,中国C++程序员的数量已经超过了100万。而且,随着IT培训业的持续发展和大量的应届毕业生进入社会,C++程序员面临的竞争压力越来越大。那么,作为一名C++程序员,怎样努力才能快速成长为一名高级的程序员或者架构师,或者说一名优秀的高级工程师或架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员,也是工作三五年之后开始迷茫的老程序员,都必须要面对和想明白的问题。为了帮助大家少走弯路,分享一个C++程序员的工作5-10年成长路线图。

以下的完整的学习路线,也可以作为大家查漏补缺的工具。

涵盖手写代码实现:sdpk文件系统,dpdk用户态协议栈,异步网络库zvnet,协程,io_ uring,Nginx,bpf,线程池,内存池,连接池,原子操作, ringbuffer,定时器,死锁检测,分布式锁,日志,probuf,kafka,grpc,udp可靠传输

上线项目:KV存储项目,图床项目,即时通讯项目等

部分录播视频

网页版:https://www.0voice.com/uiwebsite/html/courses/v14.5.html

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_mapstl容器hash的用法与原理shared_ptr,unique_ptrbasic_regex, sub_match函数对象模板function,bind

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

atomic的用法与原理thread_local 与condition_variable异常处理exception_ptr错误处理error_categorycoroutine的用法与原理

1.4 Linux工程管管理

1.4.1 Makefile/cmake/configure

Makefile的规则与make的工作原理,单文件编译与多文件编译Makefile的参数传递多目录文件夹递归编译与嵌套执行makeMakefile的通配符,伪目标,文件搜索Makefile的操作函数与特殊语法configure生成makefile的原则cmake的写法

1.4.2 分布式版本控制git

git的工作流程创建操作与基本操作分支管理,查看提交历史git服务器搭建

1.4.3 Linux系统运行时参数命令

进程间通信设施状态 ipcsLinux系统运行时长 uptimeCPU平均负载和磁盘活动 iostat监控,收集和汇报系统活动 Sar监控多处理器使用情况 mpstat监控进程的内存使用情况 pmap系统管理员调优和基准测量工具 nmon密切关注L inux系统glances查看系统调用 straceftp服务器基本信息 ftptop电量消耗和电源管理 powertop监控mysql的线程和性能 mytop系统运行参数分析 htop/ top/atopLinux网络统计监控工具 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_cbreactor 多核实现跨平台(select/epoll/kqueue)的封装reactorredis,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参数backlogsyn泛洪的解决方案close与四次挥手11个状态迁移大量close_ wait与time_ wait的原因与解决方案tcp keepalive与应用层心跳包拥塞控制与滑动窗口

2.2.4 UDP的可靠传输协议QUIC

udp的优缺点udp高并发的设计方案qq早期为什么选择udp作为通信协议udp可靠传输原理quic协议的设计原理quic的开源方案quichekcp的设计方案与算法原理

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_enterI 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,cluster4种持久化方案

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-HeadersgRPC上下文传递

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_terror日志的用法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_thttp请求的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,MySQLRestful API接口开发Openresty性能分析

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

nginx,openresty , Kong之 间的“苟且”动态负载均衡的原理服务发现实现的原理Serverless监控,故障检测与恢复代理层缓存与响应服务系统日志

5.3 SPDK助力MySQL数据落盘,让性能腾飞( 基础设施)

5.3.1 SPDK文件系统设计与实现

NVMe与PCle的原理NVMe Controller 与bdev之间的rpcblobstore与blob的关系

5.3.2 文件系统的posix api实现

4层结构设计vfsspdk的异步改造posix同步apiopen/write/read/close的实现

5.3.3 文件系统的性能测试与承接mysq|业务

LD_PRELOAD更好mysql系统调用实现iodepth讲解随机读,随机写,顺序读,顺序写

5.4 高性能计算CUDA (录播答疑)

5.4.1 gpu并行计算cuda的开发流程

cpu+gpu的异构计算计算机体系结构中的gpucuda的环境搭建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风光下的内核功能(录播答疑)

进程 namespaceUTS namespaceIPC namespace网络namespace文件系统namesapcecgroup的资源控制

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/ComposeFlynn体系架构Docker改变了什么?

6.2. Kubernetes

6.2.1 k8s环境搭建(录播答疑)

k8s集群安全设置k8s集群网络设置k8s核心服务配置kubectl命令工具yaml文件语法

6.2.2 Pod与Service的用法(录播答疑)

Pod的管理配置Pod升级与回滚DNS服务之于k8shttp 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性能测试工具mysqlslapRedis性能测试工具redis-benchmarkhttp性能测试工具wrkTcp性能测试工具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,mdflushbpf对网络流量的统计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 文件系统组件

虚拟文件系统vfsProc文件系统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 ServerRaft协议讲解OLTP与0LAP

8.2分布式文件系统(录播答疑)

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

ceph的集群部署monitor与0SDceph5个核心组件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/clienthash数据存储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 玩法实现

用户玩法实现-任务系统数据配置以及数据库设计触发机制实现多人玩法实现-工会设计

0 阅读:0

技术流战士

简介:感谢大家的关注