C++/Linux服务器开发」别名可以叫「C++后台开发」,目前BAT里面都是有大量的C++开发岗位,鹅厂在c++后台开发岗都是急需。虽然岗位对技术要求难度系数较高,但是有大厂情结的朋友们还是可以冲一冲的。
很多有c/c++语言基础的朋友,在面试后台岗的时候都会有一个疑问,面试大厂的时候,技术水平要到一个什么程度才能进?
这里就分为校招和社招。校招的话对于技术层面的要求会相对较低。会C with STL以及常见的数据结构与算法,并且笔试能当场做出leetcode中等难度以下的人就有70分了,如果笔试的时候对STL、auto、lambda等用法都很熟练,都有加分。对于实习生来说,表现不错就可以招进来,剩下网络编程和linux进去之后会再教你。
所以校招更看重的是你的基础和学习能力。实习进去之后再观察你的技术学习进度决定是否给你发offer。当然,如果你能提前掌握Linux环境编程,网络编程等技术更会加分,毕竟不管是哪个赛道,内卷都是有的。
本文介绍下Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)从入门到高级进阶的学习路线,整个学习路线,直接对标腾讯c++后台开发岗位,知识点包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等 。其次你把整个内容,全部消化,是完全可以胜任任何Linux C/C++开发岗位招聘,Linux C/C++开发招聘。
什么是Linux?
Linux是一个操作系统软件。与Windows不同的是,Linux是一套开放源代码程序的、并可以自由传播的类Unix操作系统,它是一个支持多用户、多任务、多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux零基础入门:如何快速入门,需要哪些知识点?
1:linux环境专栏
-
linux系统安装
-
linux开发环境ssh与Samba配置
-
linux开发环境Gcc配置
-
linux的命令操作8条目录操作与5条文件操作
2:shell 脚本编程案例
3:统计文件单词数量(文本操作)
-
状态机实现文件单词统计
4:实现通讯录(结构体)
-
通讯录实现的架构设计与需求分析
-
链表的实现与数据结构的定义
-
架构接口层的实现
-
业务逻辑的分析与实现
-
通讯录人员操作代码的调试
-
通讯录人员操作代码调试与运行
-
通讯录删除人员操作的调试与BUG解决
-
文件保存于加载的接口层实现
-
文件保存业务实现
-
通讯录调试与运行
5:并发下的技术方案(锁)
-
多线程并发锁的项目介绍
-
多线程并发锁的方案一互斥锁
-
多线程并发锁的方案一自旋锁
-
多线程并发锁的方案一原子操作
这里给大家推荐零声教育全网独家的【Linux C/C++开发】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析Linux C/C++,8个上线项目,2W+行手写代码,全面解析:
部分视频解析:
支撑亿级io的底层基石 - epoll实战揭秘
100行代码,开启tcp/ip协议栈实现之路,准备好linux环境
5种内存泄漏检测的方式,让你重新理解内存
16w行的nginx源码,如何才能读懂呢?全面分析nginx的机制
更多视频学习资料加群(812855908)领取
Linux C/C++开发
1、精进基石专栏
(一)数据结构与算法
-
随处可见的红黑树
-
红黑树的应用场景进程调度cfs,内存管理
-
红黑树的数学证明与推导
-
手撕红黑树的左旋与右旋
-
红黑树添加的实现与添加三种情况的证明
-
红黑树删除的实现与删除四种情况的证明
-
红黑树的线程安全的做法
-
分析红黑树工程实用的特点
-
磁盘存储链式的B树与B+树
-
磁盘结构分析与数据存储原理
-
多叉树的运用以及B树的定义证明
-
B树插入的两种分裂
-
B树删除的前后借位与节点合并
-
手撕B树的插入,删除,遍历,查找
-
B+树的定义与实现
-
B+树叶子节点的前后指针
-
B+树的应用场景与实用特点
-
B+树的线程安全做法
-
海量数据去重的abhloriter bitap
-
hash的原理与hash函数的实现
-
hash的应用场景
-
分布式hash的实现原理
-
海量数据去重布隆过滤器
-
布隆过滤的数学推导与证明
(二)设计模式
-
创建型设计模式
-
单例模式
-
策略模式
-
观察者模式
-
工厂方法模式与抽象工厂模式
-
原型模式
-
结构型设计模式
-
适配器模式
-
代理模式
-
责任链模式
-
状态模式
-
桥接模式
-
组合模式
(三)c++新特性
-
stI容器,智能指针,正则表达式
-
unordered_ _map
-
stl容器
-
hash的用法与原理
-
shared_ ptr,unique_ ptr
-
basic_ regex,sub_ match
-
函数对象模板function, bind
-
新特性的线程,协程,原子操作,lamda表达式
-
atomic的用法与原理
-
thread_ local 与condition_ var iable
-
异常处理exception_ _ptr
-
错误处理error _ category
-
coroutine的用法与原理
(四)Linux工程管理
-
Makefi le/ cmake/conf igure
-
Makefile的规则与make的工作原理
-
单文件编译与多文件编译
-
Makefile的参数传递
-
多目录文件夹递归编译与嵌套执行make
-
Makefile的通配符,伪目标,文件搜索
-
Makefile的操作函数与特殊语法
-
configure生成makefile的原则
-
cmake的写法
-
分布式版本控制git
-
git的工作流程
-
创建操作与基本操作
-
分支管理,查看提交历史
-
git服务器搭建
-
Linux系统运行时参数命令
-
进程间通信设施状态ipcs
-
Linux系统运行时长upt ime
-
CPU平均负载和磁盘活动iostat
-
监控,收集和汇报系统活动sar
-
监控多处理器使用情况mpstat
-
监控进程的内存使用情况pmap
-
系统管理员调优和基准测量工具nmon
-
密切关注Linux系统glances
-
查看系统调用strace
-
ftp服务器基本信息ftptop
-
电量消耗和电源管理powertop
-
监控mysq| 的线程和性能mytop
-
系统运行参数分析htop/top/atop
-
Linux网络统计监控工具netstat
-
显示和修改网络接口控制器ethtool
-
网络数据包分析利刃tcpdump
-
远程登陆服务的标准协议teInet
-
获取实时网络统计信息iptraf
-
显示主机上网络接口带宽使用情况iftop
2、高性能网络设计专栏
(一)网络编程异步网络库zvnet
-
网络io与io多路复用select/poll/epoll
-
socket与文件描述符的关联
-
多路复用select/poll
-
代码实现LT/ET的区别
-
事件驱动reactor的原理与实现
-
reactor针对业务实现的优点
-
poll封装send_ cb/recv_ _cb/ accept_ _cb
-
reactor多核实现
-
跨平台(select/epoll/kqueue)的封装reactor
-
redis,memcached, nginx网 络组件
-
http服务器的实现
-
reactor sendbuffer与recvbuffer封装http协议
-
http协议格式
-
有限状 态机fsm解析http
-
其他协议websocket, tcp文件传输
(二)网络原理
-
服务器百万并发实现(实操)
-
同步处理与异步处理的数据差异
-
网络io线程池异步处理
-
ulimit的fd的百万级别支持
-
sysctI. conf的rmem与wmem的调优
-
conntrack的原理分析
-
Posix API与网络协议栈
-
connect,listen, accept与三次握 手
-
listen参数backlog
-
syn泛洪的解决方案
-
close与四次挥手
-
11个状态迁移
-
大量close_ wait与time wait的原因与解决方案
-
tcp keepalive与 应用层心跳包
-
拥塞控制与滑动窗口
-
UDP的可靠传输协议QUIC
-
udp的优缺点
-
udp高并发的设计方案
-
qq早期为什么选择udp作为通信协议
-
udp可靠传输原理
-
quic协议的设计原理
-
quic的开源方案quiche
-
kcp的设计方案与算法原理
-
协程调度器实现与性能测试
-
调度器的定义分析
-
超时集合,就绪队列,io等待集合的实现
-
协程调度的执行流程
-
协程接口实现,异步流程实现
-
hook钩子的实现
-
协程实现mysql请求
-
协程多核方案分析
-
协程性能测试
(三)自研框架:基于dpdk的用户态协议栈的实现(已开源)
-
用户态协议栈设计实现
-
用户态协议栈的存在场景与实现原理
-
netmap开源框架
-
eth协议,ip协议, udp协议实现
-
arp协议实现
-
icmp协议实现
-
应用层posix api的具体实现
-
socket/bind/listen的实现
-
accept实现
-
recv/send的实现
-
滑动窗口/慢启动讲解
-
重传定时器,坚持定时器,time_ wait定时器,keepalive定时器
-
手把手设计实现epoll
-
epoll数据结构封装与线程安全实现
-
协议栈fd就绪回调实现
-
epoll接口实现
-
LT/ET的实现
-
高性能异步io机制io_ _uring
-
与epo1l媲美的io_ uring
-
io_ _uring系统调用io_ _uring_ setup, io_ _ur ing_ register, io_ _ur ing_ enter
-
liburng的io_ uring的关系
-
io_ uring与epoll性能对比
-
io_ _uring的共享内存机制
-
io_ uring的使用场景
-
io_ ur ing的accept, connect, recv, send实现机制
-
io_ uring网络读写
-
io_ uring磁盘读写
-
proactor的实现
3、基础组件设计专栏
(一)池式组件
-
手写线程池与性能分析(项目)
-
线程池的异步处理使用场景
-
线程池的组成任务队列执行队列
-
任务回调与条件等待
-
线程池的动态防缩
-
扩展: nginx线程池实现对比分析
-
内存池的实现与场景分析(项目)
-
内存池的应用场景与性能分析
-
内存小块分配与管理
-
内存大块分配与管理
-
手写内存池,结构体封装与API实现
-
避免内存泄漏的两种万能方法
-
定位内存泄漏的3种工具
-
扩展:nginx内存池实现
-
mysq|连接池的实现(项目)
-
连接池性能的影响的2个因素,top连接和mysq|认证
-
连接请求归还策略
-
连接超时未归还策略
-
链接断开重连策略
-
连接数量最优策略
(二)高性能组件
-
原子操作CAS与锁实现(项目)
-
互斥锁的使用场景与原理
-
自旋锁的性能分析
-
原子操作的汇编实现
-
无锁消息队列实现(项目)
-
有锁无锁队列性能
-
内存屏障Barrier
-
数组无锁队列设计实现
-
链表无锁队列设计实现
-
网络缓冲区设计
-
RingBuffer设计
-
定长消息包
-
ChainBuffer 设计
-
双缓冲区设计
-
定时器方案红黑树,时间轮,最小堆(项目)
-
定时器的使用场景
-
定时器的红黑树存储
-
时间轮的实现
-
最小堆的实现
-
分布式定时器的实现
-
手写死锁检测组件(项目)
-
死锁的现象以及原理
-
pthread_ _mutex_ lock/pthread_ _mutex_ _unlock dIsym的实现
-
有向图的构建
-
有向图dfs判断环的存在
-
三个原语操作 lock before, lock_ after, unlock_ after
-
死锁检测线程的实现
-
手写内存泄漏检测组件(项目)
-
内存泄漏现象
-
第三方内存泄漏与代码内存泄漏
-
malloc与free的dIsym实现
-
内存检测策略
-
应用场景测试
-
手把手实现分布式锁(项目)
-
多线程资源竞争互斥锁
-
自旋锁
-
加锁的异常情况
-
非公平锁的实现
-
公平锁的实现
(三)开源组件
-
异步日志方案spdlog (项目)
-
日志库性能瓶颈分析
-
异步日志库设计与实现
-
批量写入与双缓存冲机制
-
奔溃后的日志找回
-
应用层协议设计ProtoBuf(项目)
-
IM, 云平台,nginx, http, redis协议设计
-
如何保证消息完整性
-
手撕protobuf IM通信 协议
-
protobuf序列化与反序列化
-
protobuf编码原理
4、中间件开发专栏
(一)Redis
-
Redis相关命令详解及其原理
-
string,set, zset, Iist,hash
-
分布式锁的实现
-
Lua脚本解决ACID原子性
-
Redis事务的ACID性质分析
-
Redis协议与异步方式
-
Redis协议解析
-
特殊协议操作订阅发布
-
手撕异步redis协议
-
存储原理与数据模型
-
string的三种编码方 式int, raw, embstr
-
双向链表的list实现
-
字典的实现,hash函数
-
解决键冲突与rehash
-
跳表的实现 与数据论证
-
整数集合实现
-
压缩列表原理证明
-
主从同步与对象模型
-
对象的类型与编码
-
广字符串对象
-
列表对象
-
哈希对象
-
集合对象
-
有序集合
-
类型检测与命令多态
-
内存回收
-
对象共享
-
对象空转时长
-
redis的3种集群方式主从复制,sentinel, cluster
-
4种持久化方案
(二)MySQL
-
SQL语句,索引,视图,存储过程,触发器
-
MySQL体系结构,SQL执行流程.
-
SQL CURD与高 级查询
-
视图,触发器,存储过程
-
MySQL权限管理
-
MySQL索引原理以及SQL优化
-
索引,约束以及之间的区别
-
B+树,聚集索引和辅助索引
-
最左匹配原则以及覆盖索引
-
索引失效以及索引优化原则
-
EXPLAIN执行计划以及优化选择过程分析
-
MySQL事务原理分析
-
事务的ACID特性
-
MySQL并发问题脏读,不可重复读,幻读
-
事务隔离级别
-
锁的类型,锁算法实现以及锁操作对象
-
S锁X锁|S锁IX锁
-
记录锁,间隙锁,next-key lock
-
插入意向锁,自增锁
-
MVCC原理剖析
-
MySQL缓存策略
-
读写分离,连接池的场景以及其局限a
-
缓存策略问题分析
-
缓存策略强一致性解决方案
-
缓存策略最终一致性解决方案
-
2种mysql緩存同步方案从数据库与触发器+udf
-
缓存同步开源方案go-mysql-transfer
-
缓存同步开源方案canal原理分析
-
3种缓存故障,缓存击穿,缓存穿透,缓存雪崩
(三)Kafka
-
Kafka使 用场景与设计原理
-
发布订阅模式
-
点对点消息传递
-
Kafka Brokers原 理
-
Topi cs和Partition
-
Kafka存 储机制
-
Partition存储分布
-
Partition文件存储机制
-
Segment文件存储结构
-
offset查找message
-
高效文件存储设计
-
微服务之间通信基石gRPC
-
gRPC的 内部组件关联
-
CI ientS ide与ServerSide, Channel, Ser ivce, Stub的概念
-
异步gRPC的实现
-
回调方式的异步调用
-
Server 与CI ient对RPC的实现
-
基于http2的gRPC通信协议
-
基于http协 议构造
-
ABNF语法
-
请求协议Request-Headers
-
gRPC上下文传递
(四)Nginx
-
Nginx反 向代理与系统参数配置conf原理
-
Nginx静态文件的配置
-
Nginx动态接口代理配置
-
Nginx对Mqtt协议转发
-
Nginx对Rtmp推拉流
-
Openresty对Redis缓存数据代理
-
shmem的三种实现方式
-
原子操作
-
nginx channel
-
信号
-
信号量
-
Nginx过滤 器模块实现
-
Nginx Filter模块运行原理
-
过滤链表的顺序
-
模块开发数据结构 ngx_ str_ _t,ngx_ list_ t,ngx_ buf_ t,ngx_ chain_ t
-
error日志的用法
-
ngx_ comond_ t的讲解
-
ngx_ http_ _module_ _t的执行流程
-
文件锁,互斥锁
-
slab共享内存
-
如何解决 "惊群”问题
-
如何实现负载均衡
-
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、开源框架专栏
(一)游戏服务器开发skynet (录播答疑)
-
Skynet设计原理
-
多核并发编程-多线程,多进程,csp模型,actor模型
-
actor模型实现-lua服务和c服务
-
消息队列实现
-
actor消息调度
-
skynet网络层封装以及lua/c接口编程
-
skynet reactor 网络模型封装
-
socket/ socketchanne|封装
-
手撕高性能c服务
-
lua编程以及lua/c接口编程
-
skynet重要组件以及手撕游戏项目
-
基础接口 skynet. send, skynet. cal I, skynet. response
-
广播组件multicastd
-
数据共享组件 sharedatad datasheet
-
手撕万人同时在线游戏
(二)分布式API网关
-
高性能web网关Openresty
-
Nginx与lua模块
-
Openresty访问Redis,MySQL
-
Restful API接口开发
-
Openresty性能分析
-
Kong 动态负载均衡与服务发现
-
nginx,openresty, Kong之间的“苟且”
-
动态 负载均衡的原理
-
服务发现实现的原理
-
Serverless
-
监控,故障检测与恢复
-
二代理层缓存与响应服务
-
系统日志
(三)SPDK助力MySQL数据落盘, 让性能腾飞(基础设施)
-
SPDK文件系统设计与实现
-
NVMe与PCle的原理
-
NVMe Controller 与bdev之间的rpc
-
blobstore与blob的关系
-
文件系统的posix api实现
-
4层结构设计vfs
-
spdk的 异步改造posix同步api
-
open/wr ite/read/close的实现
-
文件系统的性能测试与承接mysql业务
-
LD_ PRELOAD更好mysql系统调用实现
-
iodepth讲解
-
随机读,随机写,顺序读,顺序写
(四)高性能计算CUDA (录播答疑)
-
gpu并行计算cuda的开发流程
-
cpu+gpu的异构计算
-
计算机体系结构中的gpu
-
cuda的环境搭建nvcc 与srun的使用
-
cuda的向量加法与矩阵乘法
-
MPI与CUDA
-
音视频编解码中的并行计算
-
cuda的h264编解码
-
cuda的mpeg编解码
-
ffmpeg的cuda支持
(五)并行计算与异步网络引擎workflow
-
workflow的应用场景
-
workflow的编程范式与设计理念
-
mysq/redis/kafka/dns的请求实现
-
parallel处理与任务组装
-
workf low的组件实现
-
线程池实现
-
DAG图任务
-
msgqueue的实现
-
纯c的jsonparser实现
(六)物联网通信协议mqtt的实现框架mosquitto
-
mqtt的高效使用场景
-
mqtt的 发布订阅模式
-
解决低带宽网络环境的数据传输
-
3种Qos等级
-
0Auth与JWT的安全认证
-
mctt的broker
-
mqtt的遗嘱机制
-
发布订阅的过滤器.
-
mosqujitto的docker部暑
-
matt的日志实时监控
6、云原生专栏
(一)Docker
-
Docker风光下的内核功能(录播答疑)
-
进程namespace
-
UTS namespace
-
IPC namespace
-
网络namespace
-
文件系统namesapce
-
cgroup的资源控制
-
Docker容器管理与镜像操作(录播答疑)
-
Docker镜像下载与镜像运行
-
Docker存储管理
-
Docker数据卷
-
Docker与容器安全
-
Docker网络管理(项目)
-
5种Docker网络驱动
-
pipework跨主机通信
-
0vS划分vlan与隧道模式
-
GRE实现跨主机Docker间通信
-
Docker云与容器编排 (项目)
-
Dockerfile的语法流程
-
编排神器Fig/Compose
-
FIynn体系 架构
-
Docker改变了什么?
(二)Kubernetes
-
k8s环境搭建(录播答疑)
-
k8s集群安全设置
-
k8s集群网络设置
-
k8s核心服务配置
-
kubectI命令工具.
-
yam|文件语法
-
Pod与Service的用法 (录播答疑)
-
Pod的管理配置
-
Pod升级与回滚
-
DNS服务之于k8s
-
http 7层策略与TLS安全设置
-
k8s集群管理的那些事儿(项目)
-
Node的管理
-
namespace隔离机制
-
k8s集群日志管理
-
k8s集群监控
-
k8s二次开发与k8s API (项目)
-
RESTful接口
-
API聚合机制
-
API组
-
Go访问k8s API
7、性能分析专栏
(一)性能与测试工具
-
测试框架gtest以及内存泄漏检测(录播答疑)
-
goog letest与goog lemock文件
-
函数检测以及类测试
-
test fixture测试夹具
-
类型参数化
-
事件测试
-
内存泄漏
-
设置期望,期待参数,调用次数,满足期望
-
性能工具与性能分析(录播答疑)
-
MySQL性能测试工具mysqlslap
-
Redis性能测试工具redis-benchmark
-
http性能测试工具wrk
-
Tcp性能测试工具TCPBenchmarks
-
磁盘,内存,网络性能分析
-
火焰图的生成原理与构建方式
-
火焰图工具讲解
-
火焰图使用场景与原理
-
nginx动态火焰图
-
MySQL火焰图
-
Redis火焰图
(二)观测技术bpf与ebpf
-
内核bpf的实现原理
-
跟踪,嗅探,采样,可观测的理解
-
动态hook: kpr obe/ upr obe
-
静态hook: tr acepoint和USDT
-
性能监控计时器PMC模 式
-
cpu的观测taskset的使 用
-
BPF工具bpftrace, BCC
-
bpf对内核功 能的观测
-
内存观测kmalloc与vm_ area_ struct
-
文件系统观测vfs的状态:
-
磁盘io的观测bitesize, mdf lush
-
bpf对网络流量的统计
-
bpf对redis-server观测
-
网络观测tcp_ connect, tcp_ accept, tcp_ close
(三)内核源码机制
-
进程调度机制哪些事儿
-
qemu调试内存
-
进程调度cfs与 其他的四个调度类
-
task_ struct结构体
-
RCU机制与内存优化屏障
-
内核内存管理运行机制
-
虚拟内存地址布局
-
SMP/NUMA模型
-
页表与页表缓存原理
-
伙伴系统实现
-
块分配(SIab/SIub/Slob) 原理实现
-
brk/kmalloc/vmalloc系统调用流程
-
文件系统组件
-
虚拟文件系统vfs
-
Proc文件系统
-
super_ _block与 inode结构体
-
文件描述符与挂载流程
8、分布式架构
(一)分布式数据库
-
不一样的kv存储RocksDB的使用场景
-
前缀搜索
-
低优先级写入
-
生存时间的支持
-
Transact i ons
-
快照存储
-
日志结构的数据库引擎
-
TiDB存储引擎的原理
-
TiKV的Key-Value存储引擎
-
基于RBAC的权限管理
-
数据加密
-
TiDB集群方案与Replication原理
-
集群三个组件 TiDB Server, PD Server, TiKV Server
-
Raft协议讲解
-
OLTP与0LAP
(二)分布式文件系统(录播答疑)
-
内核级支持的分布式存储Ceph
-
ceph的集群部署
-
monitor与OSD
-
ceph 5个核心组件
-
ceph集群监控
-
ceph性能调调优与benchmark
-
分布式ceph存储集群部署
-
同步机制
-
线性扩容
-
如何实现高可用
-
负载均衡
(三)分布式协同
-
注册服务中心Etcd
-
etcd配置服务、服务发现、集群监控、leader选举、 分布式锁
-
etcd体系结构详解(gRPC, WAL,Snapshot、 BoItDB、 Raft)
-
etcd存储原理深入剖析(B树、B+树)
-
etcd读写机制以及事务的acid特性分析
-
raft共识算法详解(leader选举+日志复制)
-
协同事件用户态文件系统fuse (项目)
-
fuse的使用场景
-
文件系统读写事件
-
fuse的实现原 理
-
/dev/fuse的 作用
-
快播核心技术揭秘P2P框架的实现(录播答疑)
-
网关NAT表分析
-
NAT类型,完全锥型NAT,对称NAT,端口限制锥形NAT,IP限制锥型NAT
-
代码逻辑实现NAT类型检测
-
网络穿透的原理
-
网络穿透的3种情况
9、上线项目实战
(一)dkvstore实现(上线项目)
-
kv存储的架构设计
-
存储节点定义
-
tcp server/cI ient
-
hash数据存储
-
list数据存储
-
skiptable数据存储
-
rbtree数据存储
-
网络同步与事务序列化
-
序列化与反序列化格式
-
建立事务与释放事务
-
线程安全的处理
-
内存池的使用与LRU的实现
-
大块与小块分配策略
-
内存回收机制
-
数据持久化
-
KV存储的性能测试
-
网络测试tps
-
吞吐量测试
-
go, lua, java多语言支持
-
hash/list/sk iptable/rbtree测试
(二)图床共享云存储(上线项目)
-
ceph架构分析和配置
-
ceph架构分析
-
快速配置ceph
-
上传文件逻辑 分析
-
下载文件逻辑分析
-
文件传输和接口设计
-
http接口设计
-
图床数据库设计
-
图床文件上传,下载,分享功能实现
-
业务流程实现
-
容器化docker部署
-
crontab定时清理数据
-
docker server服 务
-
grpc连接池管理
(三)容器化docker部署
-
crontab定时清理数据
-
docker server服 务
-
grpc连接池管理
-
产品上云公网发布/测试用例
-
使用云服务器的各种坑分析
-
fiddler监控http请求,postman模 拟请求
-
wrk测试接口吞吐量
-
jmeter压力测试
-
微服务即时通讯(上线项目)
-
IM即时通讯项目框架分析和部暑
-
即时通讯应用场景分析
-
即时通讯自研和使用第三方SDK优缺点
-
即时通讯数据库设计
-
接入层、 逻辑层、路由层、数据层架构
-
即时通讯项目部署
-
即时通讯web账号注册源码分析
-
IM消息服务器/文件传输服务器
-
protobuf通信协议设计
-
reactor模型C++实现
-
login_ server 负载均衡手写代码实现
-
用户登录请求验证密码+混淆码MD5匹对
-
如何全量、增量拉取好友列表、用户信息
-
知乎、b站小红点点未读消息如何实现
-
IM消息服务器和路由服务器设计
-
请求登录逻辑
-
最近联系会话逻辑.
-
查询用户在线主题
-
未读消息机制
-
单聊消息推拉机制
-
群聊消息推拉机制
-
路由转发机制
-
数据库代理服务器设计
-
main函数主流程
-
reactor+线程池+连接池处理逻辑分析
-
redis缓存实现消息计数(单聊和群聊)
-
redis实现未读消息机制
-
如何实现群消息的推送
-
单聊消息推送、拉取优缺点
-
文件服务器和ooker部署
-
在线文件传输机制分析
-
离线文件传输机制分析
-
etcd微服务注册与发现
-
docker制作与部暑
(四)零声教学AI助手一代(上线项目)
-
AI助手架构设计与需求分析
-
chatgpt的构想 与需求分析
-
基于开源项目初步构建项目
-
gin框架实现代理服务
-
接口功能设计
-
grpc与protobuf的使用流程
-
token计数器与tokenizer的服务封装
-
敏感词识别服务
-
向量数据库与连接池设计
-
redis实现上下文管理
-
问题记录保存
-
web端协议解析
-
OneBot协议
-
服务部署上线
-
docker stack服务部署
-
wrk接口吞吐量测试
-
线上节点监控
(五)魔兽世界后端TrinityCore (上线项目)
-
网络模块实现
-
boost.asio跨平台网络库
-
boost. asio核心命名空间以及异步io接口
-
boost. asio在TrinityCore 中的封装
-
网络模块应用实践
-
地图模块实现
-
地图模块抽象: map、 area、grid、 cell
-
地图模块驱动方式
-
A0I 核心算法实现
-
AABB碰撞检测实现
-
A*寻路算法实现
-
战斗模块实现
-
技能设计以及实 现
-
Al设计
-
怪物管理
-
副本设计
-
TrinityCore 玩法实现
-
用户玩法实现-任务系统
-
数据配置以及数据库设计
-
触发机制实现
-
多人玩法实现-工会设计
10、适宜的工程师人群(共分为8大群体)
-
1.从事业务开发多年,对底层原理理解不够深入的在职工程师
-
2.从事嵌入式方向开发,想转入互联网开发的在职工程师
-
3. 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
-
4.从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师
-
5.工作中技术没有挑战,工作中接触不到新技术的在职工程师
-
6.自己研究学习速度较慢,不能系统构建知识体系的开发人员
-
7.了解很多技术名词,但是深入细问又不理解的工程师
-
8.计算机相关专业想进入大厂的在校生(本科及以上学历,有c/c++基础)
11、配套书籍资料
-
1. MySQL: 《高性能MySQL 第3版》
-
2. Nginx: 《深入理解Nginx: 模块开发与架构分析(第2版)》(陶辉)
-
3. Redis: Redis设计与实现 (黄健宏)
-
4. Linux内核: 《深入理解Linux内核架构》 (郭旭 译)
-
5. 数据结构与算法:《算法导论》(第3版)
-
6.性能分析:《性能之巅洞悉系统、企业与云计算》
-
7. MongoDB: 《MongoDB权威指南》
-
8. Ceph: 《Ceph分布式存储学习指南》 (Ceph中国社区)
-
9. Docker: 《Docker容器 与容器云(第2版)》
-
10. TCP/IP: 《Tcp/Ip详解卷一卷二卷三》
-
11. Linux系统编程: 《Unix环境高级编程》
-
12. 计算机: 《深入理解计算机系统》
-
13. DPDK: 《深入浅出DPDK》
-
14. k8s: 《Kubernates权威指南》 龚正等编著
-
15. bpf: 《BPF之巅洞悉Linux系统和应用性能》
-
腾讯offer比例15%
-
知名企业offer比例73%
-
最高offer腾讯T3.1(现T9)年薪65w
-
最高年薪涨幅30W
-
最快跳槽学习时间1个半月
如果是想在c/c++开发方向得到有效的快速提升(不是所谓的速成),这份学习体系是大家绕不过的具有参考意义的提升路线。从学习路线中可以对c/c++开发方向的技术栈有一个清晰的认识。
Linux内核源码分析
Linux内核主要由进程调度(SCHED),内存管理 (MM),虚拟文件 系统 (VFS),网络 接 口(NET)和进程间通信(IPC)构成。进程调度控制系统中多个进程对CPU的访问,使得多个进程在CPU中微观串行,宏观并行。内存管理主要控制多个 进程安全地共享主内存区域,当CPU提供MMU单元的时候,linux内存管理为每个进程提供虚拟内存到物理内存的转换。虚拟文件系统屏蔽底层各种硬件的 具体细节,为所有设备提供统一的接口。
这里给大家推荐零声教育全网独家的【Linux内核源码分析与项目实战】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析计算机底层原理,20项目案例,2W+行手写代码,全面解析6个内核底层原理开发技术:
部分视频解析
剖析Linux内核《内存管理架构分析》
剖析linux内核MMU机制详解
剖析Linux内核《Netfilter框架结构》
linux内核《缺页中断详解》
更多学习视频资料加群(579733396)领取
1、进程管理专题
(一)操作系统与汇编基础
-
Linux操作系统进程分析
-
计算机基础技术
-
进程原理
-
Linux特性与内核版本
-
进程特征与调度算法
-
死锁产生必要条件
-
进程状态及转换
-
进程调度策略与调度依据
-
存储器结构与分区存储管理
-
主存储器结构及技术指标
-
分配策略与分区回收
-
页表与交换技术
-
物理内存与虚拟内存
-
段式存储管理与页式存储管理
-
文件管理基础架构
-
x86_ ARM处理器架构
-
x86架构整体部件分析
-
ARM处理器架构分析
-
64位通用寄存器结构
-
汇编基础与寻址方式
-
SMP架构与NUMA架构
-
ARM Cortex-A9处理器架构
-
ARM常用指令系统详解
(二)进程管理基础
-
Linux内核源码组织结构分析
-
Linux内核(五大子系统关系)
-
内核源码目录结构详解
-
如何快速掌握阅读内核源码方法与技巧
-
进程原理与生命周期及系统调用
-
写时复制原理
-
进程内存布局
-
进程堆栈管理
-
系统调用实现
-
调度器及CFS调度器
-
实时调度类及SMP和NUMA
-
task_ struct数据结构分析
-
进程内核do_ fork() /kernel_ clone()函数分析
-
RCU机制及内存优化屏障
-
内核内存布局和堆管理
-
实战操作:内核数据结构(链表和红黑树)
(三)进程调度模块
-
进程调度策略
-
SCHED_ DEADLINE
-
SCHED_ FIFO
-
SCHED_ RR
-
SCHED_ NORMAL
-
四种进程优先级
-
调度优先级
-
静态优先级
-
正常优先级
-
实时优先级
-
五大调度类解析
-
stop_ sched_ class
-
idle_ shced_ class
-
dI_ sched_ class
-
rt_ sched_ class
-
cfs_ sched_ class
-
多核调度分析
-
调度组与调度域
-
负载计算与均衡算法
-
SMP调度类处理器负载均衡
-
实战操作:进程优先级与调度策略
-
实战操作: QEMU调试L inux内核
-
实战操作:动手编译自己Linux内核
-
实战操作:进程间通信实现
2、内存管理专题
(一)内存管理基础部分
-
虚拟地址空间布局架构
-
内存管理架构
-
用户虚拟地址空间布局
-
内核地址空间布局
-
SMP/NUMA模型组织
-
物理内存组织结构与模型
-
系统调用sys_ mmap/sys_ munmap
-
物理内存组织三级结构
-
页表/页表缓存原理
-
处理器缓存机制及SMP缓存一致性
-
内存分配器(bootmem/ memb lock)
-
bootmem分配器原理
-
memblock分配器原理及分配流程
-
伙伴系统算法与实现
-
伙伴系统原理机制
-
分配页和释放页实现
-
块分配器(SIab/S1ub/Slob)原理实现
-
内存映射
-
数据结构分析
-
系统调用实现
-
创建/删除内存映射
-
实战操作:SIab块分配器实现
-
实战操作:进程地址空间在内核(VMA实现)
(二)内存管理进阶部分
-
brk/kmalloc/vmalloc(系统调用分析)
-
不连续内存分配器原理
-
页表缓存(TLB)与巨型页
-
TLB表项格式及管理
-
ASID原理/VMID原理
-
处理器对巨型页的支持
-
标准巨型页原理及查看
-
LRU算法与反向映射
-
缺页异常分析
-
写时复制缺页异常
-
do_ page_ fault函数分析
-
文件映射缺页中断
-
匿名页面缺页异常
-
内存反碎片技术
-
内存碎片整理算法
-
虚拟可移动区域技术原理
-
内存检测与死锁检测
-
内核调优参数
-
/proc/sys/kernel/
-
/proc/sys/ vm/
-
/proc/sys/fs/
-
内存屏障与内核互斥原理
-
编译器屏障
-
处理器屏障
-
ARM64处理器内存屏障分析
-
内存与Kasan工具分析
-
五大常见内存访问错误
-
Kasan内核检测工具应用
-
页回收原理机制
-
发起页回收
-
计算扫描页数
-
收缩活动页链表
-
回收不活动页
-
页交换与回收slab缓存
-
缓存着色
-
内存缓存数据结构
-
空闲对象链表及着色
-
内核调试方法printk/oops分析
-
实战操作:内存池原理及实现
-
实战操作:perf性能分析工具
-
perf原理机制与安装配置
-
perf采集数据命令29种工具应用
-
perf采集数据至火焰图分析
3、网络协议栈专题
(一)网络基础架构
-
sk_ _buff与net_ device详解.
-
套接字缓冲区管理数据
-
从套接字缓冲区获取TCP首部
-
sk_ buff及net_ device结构分析
-
TCP/UDP/ICMP协议栈分析
-
套接字分析
-
发送与接收UDP数据包分析
-
发送与接收TCP数据包分析
-
发送/接收1CMP/IPv4/IPv6消息.
-
传输层分析
-
流控制传输协议(SCTP)
-
数据报拥塞控制协议(DCCP)
-
IPsec(互联网安全协议)
-
IPsec基础知识
-
XFRM框架/策略/状态
-
传输模式/隧道模式/IPsec高可靠性
-
IPv4策略路由选择
-
FIB信息_缓存_下一跳
-
生成及接收1CMPv4重定向消息
-
无线子系统分析
-
MAC帧结构分析
-
扫描/身份验证/关联
-
mac80211接收与传输实现
-
高吞吐量(802.11n)
-
网状网络(802.11s)
-
IPv4重定向消息/FIB表
-
Netfilter内核防火墙报文处理
-
Netfilter框架简介
-
数据包选择Iptables
-
数据包过滤
-
NAT(网络地址转换)
-
连接跟踪与数据包操纵
-
十Iptables基础/表和链及过滤规则
-
Netfilter5种挂接点详解
-
注册Netfi Iter钩子回调函数源码分析
-
NAT钩子回调函数分析
-
实战操作:内核NetI ink套接字及实战
-
数据结构设计与API系统调用
-
内核模块与用户应用程序设计
(二)网络协议栈架构
-
Linux内核邻接子系统分析
-
创建与释放邻居AP1接口分析.
-
ARP协议(IPv4)发送与接收请求分析
-
高级路由选择
-
组播路由选择
-
策略路由选择
-
多路径路由选择
-
接收/发送(IPv4和1Pv6)数据包
-
InfiniBand栈的架构
-
RDMA(远程直接内存访问)结构
-
Inf iniBand组件与编址
-
InfiniBand功能与数据包
-
NIC数据包接收与发送分析
-
NIC实现原理与NIC分类
-
NIC数据包发送与接收流程分析
-
eBPF原理与实现
-
eBPF工作原理详解
-
eBPF开发环境搭建
-
eBPF如何在内核运行与交互
-
实战操作:epoll内核原理与实现
-
实战操作:内核防火墙iptables实现
-
实战操作:eBPF实践分析
-
进程跟踪
-
内核跟踪
-
性能优化
4、设备驱动专题
(一)设备驱动基础架构
-
i/0体系结构
-
系统总线(PC1、 ISA、SCSI、 USB等)
-
与外设交互及控制设备
-
访问设备详解
-
内核块设备详解
-
块设备1/0操作集合及源码分析
-
通用磁盘及分区源码分析
-
Linux设备模型
-
深度剖析LDM
-
LDM数据结构分析
-
设备驱动程序原理与实现
-
kobject结构分析
-
kobj_ type/内核对象集合
-
设备模型和sysfs
-
sysfs文件及属性
-
轮询sysfs属性文件
-
资源分配
-
资源管理
-
i/0内存分析
-
i/0端口 分析
-
字符设备操作
-
主设备与次设备
-
打开设备文件
-
分配与注册字符设备
-
写文件操作实现
-
open/release方法
-
read/write
-
iiseek/poll方法
-
填充file_ operations结 构体
-
实战操作:USB设备驱动实现
-
USB体系架构设计
-
驱动程序数据结构结构
-
make及USB设备驱动测试
-
实战操作:PC1设备驱动实现
-
实战操作:TTY设备驱动实现
(二)NIC网络接口卡
-
数据结构
-
套接字缓冲区
-
网络设备接口
-
缓冲区管理与并发控制
-
网络吞吐量
-
协议性能
-
驱动程序性能
-
实战操作:NIC网卡驱动架构实现
-
NIC网卡驱动的recv与sk_ buff
-
NIC网卡open与stop的实现
-
NIC编译与用户态协议栈
5、文件系统专题
(一)虚拟文件系统
-
文件系统类型与文件模型研究
-
磁盘文件系统(DF)
-
网络文件系统(NF)
-
inode
-
链接
-
API编程接口
-
VFS数据结构
-
超级块(super_ block)
-
挂载描述符 (mount结构体)
-
索引结点(inode结构体)
-
目录项缓存(dentry结构体)
(二)文件系统调用
-
打开/关闭文件
-
创建/删除文件
-
读/写文件实现
-
文件回写技术原理/接口实现
(三)挂载文件系统
-
系统调用mount处理流程
-
绑定挂载/挂载命名空间
-
挂载/注册rootfs文件系统
-
无持久文件系统
-
proc文件系统
-
proc数据结构
-
初始化及装载proc
-
管理proc数据项
-
数据读写实现
-
系统控制机制
-
sysfs文件系统
-
sysfs数据结构
-
装载文件系统
-
文件和目录操作
-
向sysfs添加数据内容
-
实战操作:procfs文件系统实现
-
实战操作: sysfs文件系统实现
(四)磁盘文件系统
-
Ext2文件系统
-
Ext2物理结构
-
Ext2数据结构分析
-
Ext2文件系统操作
-
Ext4_ 日志JBD2
-
Ext4文件系统特性
-
Ext4文件系统数据结构
-
Ext4_日志JBD2
(五)数据同步
-
内核定时器
-
原子操作与屏障
-
自旋锁机制
-
自旋锁的实现与变体
-
spin_ lock()/raw_ spin_ lock() 函数分析
-
互斥锁
-
mutex数据结构分析
-
互斥锁的快速与慢速通道
-
乐观自旋锁等待机制
-
mutex_ unlock() 函数分析
-
读写锁与RCU
-
实战操作:同步管理RCU实现
6、内核组件专题
(一)内核活动组件
-
中断处理流程及IRQ
-
irq_ _desc数据结构分析
-
开启_禁止中断
-
软硬中断分析
-
中断控制器及域详解
-
tasklet_等待队列工作队列
-
审计规则及数据结构分析
(二)开源社区
-
如何参与开源社区
-
如何提交Linux内核补丁
-
管理员Bugzilla参数配置及如何管理用户
-
在Gitee创建一个开源项目
7、要转向内核开发,嵌入式开发人员需要掌握以下知识
-
1. C语言编程:C语言是内核开发的主要编程语言,需要熟练掌握其语法和编程技巧。
-
2. 操作系统原理:需要了解操作系统的基本原理,包括进程管理、内存管理、文件系统等。
-
3. Linux内核:需要深入了解Linux内核的架构、模块、驱动程序等。
-
4. 设备驱动开发:需要掌握设备驱动的开发流程和技术,包括字符设备、块设备、网络设备等。
-
5. 调试技能:需要掌握调试技能,包括使用调试工具、分析内核崩溃等。
-
6. 硬件知识:需要了解硬件的基本原理和操作,包括处理器、内存、外设等。
-
7. 开源社区:需要了解开源社区的文化和开发流程,以便更好地参与内核开发。
8、内核难点与学习方法
-
1、知识点多,关系错综复杂。
-
2、每一个知识点的难度都很难。
-
3、代码量很大,内核有几百万行。
-
4、操作系统相关的知识。
-
5、程序结构上的很多规范要求
9、内核适宜的工程师人群
-
Linux 内核优化、内存管理 ,内核开发岗位、定制化自己OS
-
深入系统内核研究、网络安全逆向分析
-
提升自己能力,为了更好做应用层开发提供核心依据
-
跳槽面试大厂(腾讯、华为、中兴、中微、中芯等等)
-
从事业务开发多年,对底层原理理解不够深入的在职工程师
-
从事嵌入式方向开发,想转入内核开发的在职工程师
-
从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
-
从事非开发岗位(算法岗,运维岗,测试岗),想转内核开发岗位的在职工程师
至于学习效果怎么样?👇
音视频视频流媒体开发
而如今音视频的知识纷繁复杂,自己学习非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;而音视频从业者基本上有两个层面:一个层面是搞音视频算法,这类人非常少,需要有深的数学能力和算法背景,这类人一般都会选择去大公司,薪水百万是最low的。
什么是音视频开发
音视频开发是指涉及音频和视频处理、编解码、传输、存储等方面的软件开发领域。它包括了实时音视频通信、流媒体服务、多媒体应用程序等内容。
在音视频开发中,常见的任务包括音频采集与录制、音频编解码、音频处理与增强(如降噪、消除回声等)、视频采集与录制、视频编解码、图像处理与分析等。此外,还需要关注实时传输和流媒体协议(如RTP/RTCP, RTMP, HLS)的使用,以及存储和播放相关技术。
在这个领域中,开发者通常会使用各种语言和框架来实现不同功能,例如C/C++、Java、Python以及相关库和工具,如FFmpeg, GStreamer, WebRTC等。通过掌握相关技术和工具,可以开发出高质量的音视频应用程序或服务。
音视频开源项目
部分音视频开源项目发布时间,每个开源项目之所以能成功都是经过了开发者长期的时间投入。
-
1.2001年FFmpeg多媒体视频处理开源项目
-
2.2009年WebRTC开源项目发布
-
3.2013年SRS流媒体服务器(Simple-RTMP-Server) 发布版本
-
4.2013年ijkplayer手机播放器发布
-
5.2014年OBS开源项目(支持WebRTC, 早期支持的是RTMP)(GitHub可查最 早时间)
-
6.2015年Janus WebRTC流媒体服务器发布版本
-
7.2015年QMPlay2 PC QT (调用FFmpeg的接口,硬解接口, OpenGL)播放器发布
-
8.2017年ZLMediaKit流媒体服务器发布版本
音视频应用领域
各类活动场景都在不断加深线上开展业务的方式,有人的业务场景基本.上都需要音视频技术。
FFmpeg零基础入门:如何快速入门,需要哪些知识点?
-
windows ffmpeg命令行环境搭建
-
FFMPEG如何查询命令帮助文档
-
ffmpeg音视频处理流程
-
ffmpeg命令分类查询
-
ffplay播放控制
-
ffplay命令选项
-
ffplay命令播放媒体
-
ffplay简单过滤器
-
ffmpeg命令参数说明
-
ffmpeg命令提取音视频数据
-
ffmpeg命令提取像素格式和PCM数据
-
ffmpeg命令转封装
-
fmpeg命令裁剪和合并视频
-
fmpeg命令图片与视频互转
-
ffmpeg命令视频录制
-
ffmpeg命令直播
-
ffmpeg过滤器-裁剪
-
ffmpeg过滤器-文字水印
-
ffmpeg过滤器-图片水印
-
ffmpeg过滤器-画中画
-
ffmpeg过滤器-多宫格
这里给大家推荐零声教育全网独家的【音视频流媒体高级开发】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析音视频开发技术:
部分视频解析
音视频开发经典项目:手撕FFmpeg+SDL播放器开发
FFmpeg进阶学习-播放器-录制-录屏-RTMP推流拉流
音视频面试必问-H264编码原理
如何解决直播延迟中的各种疑难杂症
更多学习视频资料加群(812855908)领取
1、音视频基础
(一)音频基础知识
-
如何采集声音-模数转换原理
-
为什么高品质音频采样率>=44.1 Khz
-
什么是PCM
-
一个采样点用多少位表示
-
采样值用整数还是浮点数表示
-
音量大小和采样值大关系
-
多少个采样点作为一-帧数据
-
左右通道的采样数据如何排列
-
什么是PCM (脉冲编码调制)
-
音频编码原理
(二)视频基础知识
-
RGB彩色原理
-
为什么需要YUV格式
-
什么是像素
-
分辨率、帧率、码率
-
YUV数据存储格式区别
-
YUV内存对齐问题
-
为什么画面显示绿屏
-
H264编码原理
-
H264IPB帧的关系
注:具体H264编码格式见FFmpeg章节
(三)解复用基础知识
-
什么是解复用,比如MP4格式
-
为什么需要不同的复用格式
-
MP4/FLV/TS
-
常见的复用格式MP4/FLV/TS
注:具体复用格式详解见FFmpeg章节
(四)FFmpeg开发环境搭建
-
Windows、Ubuntu、MAC3三大平台
-
QT安装
-
FFmpeg命令行环境
-
FFmpeg API环境
-
FFmpeg编译
-
vs2019安装(win平台)
(五)音视频开发常用工具
-
Medialnfo,分析视频文件
-
mp4box,分析mp4
-
VLC播放器,播放测试
-
audacity,分析音频PCM
-
EasyICE,分析TS流
-
Elecard_ streamEye, 分析H264
-
flvAnalyser,分析FLV
-
海康YUVPlayer,分析YUV
2、FFmpeg实战
(一)FFmpeg命令
-
音频PCM/AAC文件提取
-
视频YUV/H264文件提取
-
解复用、复用
-
音视频录制
-
视频裁剪和合并
-
图片/视频转换
-
直播推流和拉流
-
水印/画中画/九宫格滤镜
注:掌握FFmpeg的目的
-
1.快速掌握FFmpeg能做什么;
-
2.加深对音视频的理解
(二)SDL跨平台
-
多媒体开发库实战
-
SDL环境搭建
-
SDL事件处理
-
SDL线程处理
-
视频YUV画面渲染
-
音频PCM声音输出
注: SDL兼容Win、Ubuntu、Mac三大平台,主要用于后续项目的画面显示和声音输出
(三)FFmpeg基石精讲
-
FFmpeg框架
-
FFmpeg内存引|用计数模型
-
解复用相关AVFormat XXX等
-
编解码相关AVCodec XXX等
-
压缩数据AVPacket
-
未压缩数据AVFrame
-
FFmpeg面向对象思想
-
Packet/Frame数据零拷贝
注:目的熟悉FFmpeg常用结构体和函数接口
(四)FFmpeg过滤器
-
FFmpeg过滤chain框架
-
音频过滤器框架
-
视频过滤器框架
-
多路音频混音amix
-
视频水印watermark
-
视频区域裁剪和翻转
-
视频添加logo
(五)FFmpeg音视频解复用+解码
-
解复用流程
-
音频解码流程
-
视频解码流程
-
FLV封装格式分析
-
MP4封装格式分析
-
FLV和MP4 seek有什么区别
-
为什么FLV格式能用于直播
-
为什么MP4不能用于直播
-
MP4能否用来做点播
-
AAC ADTS分析
-
H264 NALU分析
-
AVIO内存输入模式
-
音频重采样实战
-
重采样后的数据播放时长是否一致
-
重采样后PTS如何表示
-
视频解码后YUV内存对齐问题
-
音频解码后PCM排列格式问题
-
硬件解码dxva2/nvdec/cuvid/qSV
-
硬件gpu数据转移到cpu
-
H265解码
注: FFmpeg API学习:视频解复用->解码->编码->复用合成视频
(六)ffplay播放器
-
掌握ffplay.c的意义
-
ffplay框架分析
-
解复用线程
-
音频解码线程
-
视频解码线程
-
声音输出回调
-
画面渲染时间间隔
-
音频重采样
-
画面尺寸格式变换
-
音频、视频、外部时钟同步区别
-
以视频为基准时音频重采样补偿
-
音量静音、调节大小的本质
-
音视频packet队列大小限制
-
音视频packet队列线程安全
-
音视频frame队列大小限制
-
音视频frame队列线程安全
-
暂停、播放实现机制
-
seek播放导致的画面卡住问题.
-
seek播放数据队列、同步时钟处理
-
如何做到逐帧播放
-
播放器退出的流程要点
注: ffplay.c是ffplay命 令的源码,掌握fplay对于我们自己开发播放器有事半功倍的效果
(七)FFmpeg音视频编码+复用合成视频
-
AAC音频编码
-
H264视频编码
-
PCM+ YUV复用合成MP4/FLV
-
H264编码原理
-
IDR帧和帧区别
-
动态修改编码码率
-
GOP间隔参考值
-
复用合成MP4音视频不同步问题
-
编码、复用timebase问题
-
MP4合成IOS不能播放问题
-
重采样后PTS如何表示
-
视频编码YUV内存对齐问题
-
硬件编码dxva2/nvenc/cuvid/qsv
-
H265编码原理
-
H264、H265编码互转
(八)ffmpeg多媒体
-
视频处理工具
-
掌握fmpeg.c的意义
-
ffmpeg框架分析
-
音视频编码
-
封装格式转换
-
提取音频
-
提取视频.
-
logo叠加
-
音视频文件拼接
-
filter机制
-
命令行解析流程
-
MP4转FLV不重新编码逻辑
-
MP4转FLV重新编码逻辑
-
MP4转FLV scale
注: ffmpeg.c是ffmpeg命令的源码,掌握ffmpeg.c的大体框架对于我们要实现一些不知道怎么编写代码的功能(用ffmepg命令行可以但不知道怎么调用ffmpeg api时可以参考ffmepg.c的逻辑)有极大的帮助,比如要裁剪视频长度。
(九)FFmpeg+ QT播放器
-
常见开源播放器分析
-
CUVID/D3D11VA硬解
-
界面和播放核心分离框架分析
-
音量频谱展示
-
播放器模块划分
-
音频均衡器
-
解复用模块
-
画面旋转、翻转
-
音视频解码
-
画面亮度、饱和度调节
-
播放器控制
-
画面4:3 16:9切换
-
音视频同步
-
码流信息分析
3、流媒体客户端
(一)RTMP推拉流项目实战
-
RTMP协议分析
-
wireshark抓包分析
-
H264 RTMP封装
-
AAC RTMP封装
-
RTMP拉流实战
-
H264 RTMP解析
-
AAC RTMP解析
-
RTMP推流实战
-
0没有MetaData能否播放
-
RTMP推流是否会导致延迟
-
RTMP推流如何动态调整码率
-
RTMP推流如何动态调整帧率
-
RTMP拉流是否会导致延迟
-
如何检测RTMP拉流延迟
-
如何解决RTMP播放延迟
-
ffplay. vlc能否用来测试播放延迟
-
ffplay、vlc能否用来测试播放延迟
-
RTMP拉流播放变速策略设置
(二)RTSP流媒体实战
-
RTSP协议分析
-
RTP协议分析
-
H264 RTP封装
-
H264 RTP解析
-
AAC RTP封装
-
AAC RTP解析
-
RTCP协议分析
-
RTSP流媒体服务器搭建
-
RTSP推流实战
-
RTSP拉流实战
-
wireshark抓包分析
-
RTP头部序号的作用
-
RTCP的NTP和RTP的TS的区别
-
RTP头部序号的作用
-
RTCP的NTP和RTP的TS的区别
-
RTSP交互过程
-
花屏可能的原因
-
SPS PPS如何发送
-
SDP封装音视频信息
(三)HLS拉流分析
-
HLS协议分析
-
HLS拉流实战
-
HTTP协议分析
-
FFmpeg HLS源码分析
-
TS格式分析
-
HLS多码率机制
-
m3u8文件解析
-
如何解决HL S延迟高的问题
-
wireshark抓包分析
注:理解HL .S的拉流机制,有助于我们解决HL .S播放延迟较高的问题
4、流媒体服务器
(一)SRS源码剖析协程
-
整体框架分析
-
连接和协程的关系
-
RTMP推流分析
-
如何更快速掌握SRS源码
-
RTMP拉流分析
-
流媒体服务器是否导致延迟
-
HLS拉流分析
-
如何降低流媒体服务器的延迟
-
HTTP-FLV拉流分析
-
怎么获取流媒体服务器推流信息
-
FFmpeg转码分析
-
怎么获取流媒体服务器拉流信息
-
首屏秒开技术分析
-
首屏秒开能降低延迟吗
-
forward集群源码分析
-
推流->服务器转发->拉流延迟分析
-
edge集群源码分析
-
负载均衡部署方式
注:对于SRS流媒体服务器,我们长期更新,从3.0->4.0->5.0
(二)ZLMediaKit源码剖析
-
整体框架分析
-
数据转发模型
-
线程模块划分
-
SDP解析
-
RTSP推流连接处理
-
RTP H264解析
-
RTSP拉流连接处理
-
RTP AAC解析
注: ZLMediaKit主要讲解RTSP流媒体服务器相关的模块,其他模块RTMP/HLS等参考SRS。
5、WebRTC项目实战
(一)WebRTC中级开发手把手写代码
-
WebRTC通话原理分析
-
WebRTC开发环境搭建
-
coturn最佳搭建方法
-
如何采集音视频数据
-
一对一通话时序分析
-
信令服务器设计
-
SDP分析
-
Candidate类型分析
-
Web-对一通话
-
Web和Android通话
-
AppRTC快速演示
-
如何设置编码器优先级
-
如何限制最大码率
-
信令服务器的本质是什么
-
Web和Android的SDP差异
-
A要和B通话, A怎么知道B的存在
-
新增C++、IOS客户端两大版本
注:学习WebRTC建议从web端入手,可以直接调用js接口(千万别刚接触WebRTC就忙着去编译WebRTC源码) , 对WebRTC通话流程有清晰的理解再考虑其他端。
(二)WebRTC高级开发-SRS 4.0/5.0源码分析
-
RTMP转发WebRTC逻辑
-
WebRTC转发RTMP逻辑
-
WebRTC音视频一对一通话
-
WebRTC多人通话
-
WebRTC SFU模型分析
-
SRTP分析
-
RTCP分析
-
SDP分析
-
NACK分析
-
turn分析
-
stun分析
-
拥塞控制算法
-
FEC
-
jitter buffer
(三)WebRTC高级开发-MESH模型多人通话
-
自定义摄像头分辨率
-
码率限制
-
调整编码器顺序
-
Mesh模型多方通话分析
-
多人通话信令服务器开发
-
动态分配stun/turn服务器
-
Web客户端源码
-
Android客户端源码
(四)WebRTC高级开发-Janus SFU模型多人通话
-
Janus框架分析
-
Janus信令设计
-
基于Janus实现会议系统
-
Janus Web客户端源码分析
-
Janus Android客户端源码分析
-
Janus Windows客户端源码分析
-
基于Full ICE的部署
-
基于Lite ICE的部署
-
Full ICE和Lite ICE的区别
-
发布订阅模型
6、Android NDK
(一)Android NDK开发基础
-
So库适配总结
-
GDB调试技巧
-
Makefile_ I程组织
-
CMake工程组织
-
生成指定CPU平台的so库
-
JNI基础和接口生成
-
JNI Native层构建Java对象
-
JNI异常处理
(二)Android FFmpeg编译和应用
-
编译x264
-
编译x265
-
编译mp3
-
编译fdk-aac
-
编译FFmpeg
-
使用ffmpeg实现mp4转格式
-
使用FFmpeg开发播放器
(三)Android RTMP推拉流
-
RTMP推流协议实现
-
RTMP拉流协议实现
-
RTMP拉流音视频同步
-
MediaCodec硬件编码
-
MediaCodec硬件解码
-
OpenSL ES播放音频数据
-
MediaCodec硬件解码
-
OpenGL ES Shader显示视频
(四)Android Ijkplayer源码分析
-
编译jkplayer和实践
-
项目框架分析
-
播放状态转换
-
拉流分析
-
解码分析
-
音频播放流程
-
视频渲染流程
-
OpenSL ES播放音频数据
-
MediaCodec硬件解码
-
OpenGL ES Shader显示视
-
变速播放实现原理
-
低延迟播放实现
-
缓存队列设计机制分析
7、IOS音视频开发
(一)IOS FFmpeg6.0编译和应用
-
xcode调试FFmpeg
-
IOS调用FFmpeg
-
QT调试FFmpeg
(二)IOS FFmpeg RTMP推拉流
-
AVFoundation视频采集
-
Metal视频渲染
-
Audio Unit音频采集
-
Audio Unit音频播放
-
FFmpeg推流
-
FFmpeg拉流
-
直播延迟和解决方法
(三)VideoToolbox硬件编解码
-
VideoToolbox框架的流程
-
硬件编解码步骤
-
CVPixelBuffer解析
-
如何获取SPS/PPS信息
-
判断是否关键帧
-
编码参数优化
(四)IOS jkplayer编译和应用
-
本地视频播放
-
RTMP拉流播放
-
HTTP点播
-
音频播放流程
-
视频渲染流程
(五)IOS ijkplayer编译和应用
-
基于Mesh一对一通话
-
基于SFU多人通话
8、音视频项目实战
(一)0voice播放器
支持播放/暂停,上一/下一视频,变速播放,文件seek播放进度显示,截屏,调节音量,播放列表,显示缓存时间实现直播低延迟播放
(二)0voice录制推流软件
支持屏幕+麦克风RTMP直播,支持本地文件推送;支持录制保存到本地,支持录制预览功能,支持添加图片水印功能;支持文字水印功能,支持屏幕+摄像头同时捕获,支持降噪功能。
(三)0voice低延迟拉流直播
实现500毫秒~1秒的低延迟直播
9、适宜工程师人群(本课程涵盖最主流的音视频全栈开发技术,适合各类技术人员)
-
从事音视频岗位开发,但没有时间系统学习的在职工程师
-
从事嵌入式方向开发,想转入音视频开发的在职工程师
-
从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
-
从事Android/IOS移动开发,想往音视频方向发展的在职工程师
-
从事C/C+ +后台开发,想往流媒体服务器方向发展的在职工程师
-
自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员
-
计算机相关专业想进入大厂的在校生(本科及以上学历,有c/C+ +基础)
音视频自学难点音视频自学非常困难,网上通俗易懂的难找到。
网上部分资源是对应的开源版本较低,比如雷霄骅(雷神)博客的FFmpeg版本较低
音视频涉及大量的开源库和协议:
-
1、比如ffmpeg的编译,如果不熟悉各种编译报错
-
2、Janus编译涉及各种开源组件编译不通过
-
3.比如WebRTC涉及的RTP、RTCP、SDP、STUN等协议
部分嵌入式音视频的朋友技术面窄, 技术不深入。比如有同学做了2年的音视频驱动, 一帧音频能持续播放多久都不明白。
至于学习效果怎么样?👇
DPDK高性能专家
DPDK使用了轮询(polling)而不是中断来处理数据包。在收到数据包时,经DPDK重载的网卡驱动不会通过中断通知CPU,而是直接将数据包存入内存,交付应用层软件通过DPDK提供的接口来直接处理,这样节省了大量的CPU中断时间和内存拷贝时间。
本文介绍下DPDK进阶到高性能专家的学习路线,整个学习路线,直接对标DPDK资深架构师岗位,知识点包括dpdk、储存、网关开发、网络协议栈、网络安全、TRex、vpp、OVS、DDos、虚拟化技术等等 。其次你把整个内容,全部消化,是完全可以胜任任何DPDK资深架构师岗位招聘,DPDK开发招聘。
部分视频解析
dpdk让你的开发走向硬核,拉开与crud仔的区别
看懂6个问题,开启dpdk/spdk高性能开发之路
dpdk从tcp/ip协议栈开始,准备好linux环境一起开始
更多学习视频资料加群(812855908)领取
1、DPDK网络专栏
(1)dpdk基础知识
-
1.多队列网卡,vmxnet/e1000
-
2.igb_ uio与vfio模块
-
3.kni模块
-
4.hugepage的理解
-
5.零拷贝
-
6.dpdk与netmap区别
-
7.dpdk的工作环境
(2)网络协议栈
-
1.dpdk-arp
-
2.netsh静态arp表设置
-
3.dpdk-icmp
-
4.udp协议格式分析
-
5.udp协议sendto, recvfrom实现
-
6.dpdk-ip
-
7.dpdk-tcp
-
8.tcp协议栈bind,listen, accept实现
-
9.tcp协议栈recv, send, close的实现
-
10.tcp三次握手实现
-
11.tcp四次挥手实现
-
12.tcp acknum与seqnum的确认机制实现
-
13.tcp的并发连接设计
-
14.epoll并发的实现
-
15.tcp协议栈与epoll之间的回调实现
(3)dpdk组件项目
-
1.dpdk-ac
-
2.dpdk-kni
-
3./dev/ kni的原理分析
-
4.kni_ dev的流程
-
5.kni的t缓冲区,rx缓冲区
-
6.kni的用户空间与内核空间映射
-
7.mbuf如何转化为kernel的sk_ buff
-
8.dpdk- timer
-
9.bpftrace的使用
-
10.dpdk- bpf源码流程
(4)dpdk经典项目
-
1.dpdk- dns
-
2.dpdk- gateway
-
3.dpdk-ddos熵计算源码
-
4.ddos attach检测精确度调试
-
5.ddos attach测试T具hping3
-
6.布谷鸟hash原理与使用
2、储存技术专栏
(1)高效磁盘io读写spdk(C)
-
1.存储框架spdk,为技术栈打开扇存储的大门
-
2.spdk运行环境与vhost
-
3.NVMe与PCl的关系
-
4.手把手实现spdk_ server
-
5.nvme与pcie以及手写nvme读写操作
-
6.bdev与blob之间的关系
-
7.实现blob异步读写
-
8.blobstore的读写操作实现与rpc的关系
-
9.fio性能测试性能对比libaio,io_ uring,psync
-
10.fio plugin工作流程
-
11.fio plugin开发
(2)spdk文件系统的实现
-
1.文件系统功能拆解
-
2.spdk_ env_ init与spdk_ app init的差别
-
3.spdk_ _thread_ poll实现rpc回调
-
4.fs_ operations结构体定义
-
5.file_ operations结构体定义
-
6.dir_ operations结构体定义
-
7.syscall的hook实现
-
http://8.io内存管理
-
9.基数树对文件系统内存管理
-
10.spdk_ blob的open,read,write,close
-
11.测试用例与调试入口函数
(3)spdk kv存储的实现
-
1.KV存储拆解Set, Get, Mod, Del
-
2.app/.a库/so库对于kv存储的选择
-
3.bdev与blob对于kv存储的选择
-
4.kv service启动blob资源操作
-
5.kv service关闭blob资源回收
-
6.kv service接口set,get,modify,delete
-
7.kv遍历与查找实现
-
8.page存储chunk的管理
-
9.pagechunk的get与put
-
10.page单查找与多页查找
-
11.btree, artree, hashmap,radixtree, rbtree之间的选择
-
12.slab的实现
-
13.slab分配slot与释放slot
-
14.为kv加上conf文件
-
15.测试用例与性能测试
3、安全与网关开发专栏
(1)可扩展的矢量数据包处理框架vpp(c/c++)
-
1.vpp命令详解
-
2.mac/ip转发plugin
-
3.load_ balance plugin
-
4.flowtable plugin
-
5.vpp源码之间的差异
-
6.多网卡数据接收与转发
-
7.解决plugin编译加载
-
8.vpp启动load so的流程
-
9.vpp的结构体vlib_ _main实现分析
-
10.vpp的结构体vnet_ main
-
11.vector的操作实现
-
12.vpp vcl库与LD_ PRELOAD实现分析
-
13.vcl原理讲解
-
14.vcl tcpserver实现原理
-
15.vcl tcpclient实现原理
-
16.vcl与iperf3的客户端与服务器
-
17.vcl与nginx的wrk性能测试
-
18.vcl与haproxy的性能测试
-
19.vpp 1801版本与vpp 2206版本
-
20.vpp httpserver的实现源码
-
21.vpp plugin quic源码分析
-
22.vpp plugin hs_ app的源码
-
23.vpp plugin rdma的实现分析
-
24.vpp plugin loadbalance
-
25.vpp plugin nat的源码分析
-
26.vpp host-stack tcp协议实现
-
27.vpp plugin的测试用例实现
(2)golang的网络开发框架nff-go(golang)
-
1.nff-go实现的技术原理
-
2.nff-go/low.h实现分析
-
3.nff- go数据接收的实现
-
4.nff-go数据发送的实现
-
5.ipsec协议解析与strongswan的ipsec
-
6.nff go的缺陷与不足
4、虚拟化与云原生专栏
(1)DPDK的虚拟交换机框架OvS
-
1.ovs编译安装,ovs核心组件内容
-
2.ovs-vswitchd的工作原理
-
3.ovs-vswitchd与dpdk的关系
-
4.ovs-vsctl的网桥,网口操作
-
5.qemu-system-x86_ 64构建多子网
-
6.ovs与qemu数据流分发
-
7.ovs搭建docker跨主机通信
-
8.ovsdb server与ovsdb协议
-
9.json-rpc为控制面提供开发
-
10.ovs-tcpdump/ovs-l3ping
-
11.OvS 4种数据路径
-
12.VXL AN数据协议
-
13.ovs流量统计
(2)高性能4层负载均衡器DPVS
-
1.dpvs的技术组件与功能边界
-
2.lvs+keepalived配置高可用server
-
3.dpvs与|lvs+ keepalived的关系
-
4.dpvs.conf的配置文件
-
5.dpvs的FNat/NAT/SNAT模式
-
6.dpvs的DR模式
-
7.dpvs的tun模式
-
8.通过quagga配置ospf
-
9.dpvs的tc流控操作与源码实现
-
10.dpvs代码架构分析
-
11.dpvs测试用例ipset, tc,mempool
5、测试工具专栏
(1)perf3
-
1.vpp vcl的perf3接口hook
-
2.perf3测网络带宽
-
3.tcp吞吐量测试
-
4.udp丢包与延迟测试
-
5.json测试结果输出
(2)TRex
-
1.TRex的运行原理
-
2.TRex与dpdk
-
3.构建TRex测试系统
-
4.t-rex -64- debug gdb调试
-
5.bg-sim- 64模拟单元测试
-
6.YAML文件编写
-
7.流编排与自动化框架
-
8.报文变量设置
(3)dpdk-pktgen
-
1.pktgen命令讲解
-
2.default.cfg配置文件分析
-
3.120M bits/s的转发速率
(4)fio
-
1.ioengine的实现
-
2.ioengine_ ops的分析
-
3.iodepth的分析
-
4.spdk_ nvme的fio分析
-
5.spdk_ bdev的fio分析
-
6.spdk_ blob的ioengine实现
-
7.psync,io_ uring, libaio性能对比
6.性能测试专栏
(1)性能指标
-
1.吞吐量bps
-
2.拆链/建链pps
-
3.并发
-
4.最大时延
-
5.最小时延
-
6.平均时延
-
7.负载
-
8.包速fps
-
9.丢包率
(2)测试方法
-
1.测试用例
-
2.vpp sandbox
-
3.perf3灌包
-
4.rfc2544
7、适学人群
-
工作中技术没有挑战,工作中接触不到新技术的在职工程师
-
从事嵌入式开发对网络存储底层感兴趣在职工程师
-
自己研究学习速度较慢,不能系统构建知识体系的开发人员
-
从事网络存储安全的工程师,想深入了解底层技术原理
8、课程目标岗位
-
高级网络开发工程师
-
DPDK开发工程师
-
云基础开发工程师
-
NFV开发工程师
-
高性能优化工程师
-
云产品研发工程师
-
SDN开发工程师
学习成果检验
C++游戏后端开发
1、TrinityCore CMake项目构建
(一)CMake的使用
-
什么是 CMake,CMake的工作流程
-
CMakeLists.txt的编写规则
-
静态库生成以及链接
-
动态库生成以及链接
-
嵌套CMake
(二)Windows和Linux下编译调试环境搭建
-
cmake和graphviz生成目标依赖图
-
linux vscode编程环境搭建
-
cmake和clangd实现精俳跳转
-
C/C++插件实现调试
-
vs2019 windows下编译调试搭建
2、TrinityCore数据库模块
(一)连接池设计概要
-
什么是连接池
-
为什么需要复用连接
-
为什么固定连接数
-
主要应用场景
(二)同步连接池实现
-
同步连接池的线程模型
-
同步连接池接口封装
-
同步连接池接口使用
-
同步连接池应用场景
(三)异步连接池实现
-
异步连接池的线程模型
-
异步连接池接口封装
-
异步连接池接口使用
-
异步连接池应用场景
(四)事务处理
-
什么是事务
-
什么情况下讨论事务
-
事务操作
-
TrinityCore 中事务处理封装
-
TrinityCore 中事务处理案例
(五)数据库模块实践
-
剥离可复用数据库模块
-
应用同步连接池案例
-
异步连接池-单SQL语句的使用
-
异步连接池-多SQL语句chain式应用
-
异步连接池-多SQL语句holder式应用
-
异步连接池-多SQL语句transaction式应用
3、TrinityCore日志模块
(一)日志模块概要
-
日志模块的作用
-
日志模式核心抽象: logger和appender
-
logger规则:继承关系、日志级别、以及appender列表
-
appender如何定义日志打印目的地
(二)日志模块实现
-
日志模块单例构建
-
采用宏定义定制日志使用接口
-
如何扩展appender
-
appender中设计模式-模板模式
-
同步日志方式实现
-
异步日志方式实现
-
异步日志线程模型
(三)日志模块实践
-
剥离可复用日志模块
-
为什么推荐使用异步日志
-
异步日志日志安全分析及测试
4、TrinityCore网络模块
(一)阻塞io 网络模型编程
-
什么是阻塞io网络模型
-
阻塞io解决连接建立的问题
-
阻塞 io解决连接断开的问题
-
阻塞io解决数据接收的问题
-
阻塞io解决数据发送的问题
-
阻塞 io解决网络问题的弊端
(二)reactor 网络模型编程
-
什么是reactor?
-
reactor构成部分
-
reactor解决连接建立的问题
-
reactor解决连接断开的问题
-
reactor解决数据接收的问题
-
reactor解决数据发送的问题
-
reactor解决网络问题的特征: io同步,事件异步
(三)windows iocp 网络编程
-
什么是完成端口
-
重叠io的作用
-
iocp解决连接建立的问题
-
iocp解决连接断开的问题
-
iocp解决数据接收的问题
-
iocp解决数据发送的问题
-
iocp编程步骤
-
iocp与reactor在编程处理io时的差异
(三)boost.asio 网络编程
-
boost.asio跨平台网络库
-
cmake如何在项目中引入boost.asio
-
boost.asio中核心命名空间
-
boostasio中核心对象: io_context、socket、endpoint
-
boost.asio中异步io接口
-
asio解决连接建立的问题
-
asio解决连接断开的问题
-
asio解决数据接收的问题
-
asio解决数据发送的问题
(四)网络缓冲区设计
-
为什么需要在用户层实现网络缓冲区
-
读缓冲区的工作原理
-
写缓冲区的工作原理
-
手撕缓冲区实现
(五)网络模块实践
-
剥离可复用网络模块
-
AsyncAcceptor职责与实现
-
NetworkThread职责与实现
-
Socket职责与实现
-
手撕多线程模式下网络模块的应用
5、TrinityCore地图模块
(一)地图模块概要
-
哪些功能模块需要用到地图模块
-
地图模块的功能构成
-
地冬对象抽象:map、area、grid、cell
-
网络数据驱动地图模块
-
定时更新驱动地图模块
(二)地图模块AOI核心算法
-
AOI有哪些实现方式
-
AOI静态数据工具生成
-
AOI静态数据数据划分
-
AOI静态数据组织方式
-
AOI动态数据组织方式
-
AOI动态数据驱动方式
-
AOI地图数据加载
-
grid 网格状态机以及状态转换
-
AOl地图数据卸载
-
采用访问者模式实现地图数据与算法的隔离
(三)AABB算法实现碰撞检测
-
轴对称边界盒算法-AABB算法
-
TrinityCore中AABB算法实现
-
AABB算法优化
-
碰撞检测接口封装以及应用
(四)A*寻路算法
-
A*寻路算法概述
-
recast-detour开源车
-
recast根据模型生成导航数据
-
detour利用导航网格做寻路
-
寻路接口封装以及应用
6、TrinityCore战斗模块专栏
(一)技能设计
-
技能设计概述
-
技能数据库表设计(配置)
-
技能触发:距离、冷却时间、消耗等
-
技能效果:伤害计算、增益效果等
-
技能释放流程
(二)AI设计
-
AI设计概述
-
基于行为树的Al设计
-
Al类继承层次关系
-
04.Al攻击目标选择
-
AIl攻击方式选择
-
Al移动方式选择
-
AI基于事件的驱动机制
(三)怪物管理
-
怪物数据库设计(配置)-属性和行为
-
怪物刷新规则设计-时间间隔以及范围
-
怪物属性、技能、掉落、Al
(四)战场副本设计
-
创建和加载 battlegrounds场景地图数据
-
battlegrounds规实现
-
battlegrounds队伍匹配、队伍平衡以及角色分配
-
battlegrounds奖励系统和排名机制
7、TrinityCore mmorpg核心功能与玩法
(一)任务系统设计
-
任务系统数据库设计(配置)
-
玩家数据库状态存储
-
任务类型设计
-
任务触发机制
(二)背包设计
-
背包数据结构设计以及数据库表设计
-
背包容量控制
-
背包格子管理
-
背包交互功能实现
(三)工会系统设计
-
数据库表结构设计
-
工会创建逻辑实现
-
工会成员管理
-
工会资源管理及分配机制
-
工会活动与事件
-
工会排名实现
-
工会权限控制
8、语言专栏
(一)lua程序设计
-
lua基础
-
lua错误处理
-
lua编译与预编译
-
lua模块与包
-
元表与元方法
-
环境
-
lua/c接口编程
(二)c++新特性
-
智能指针shared_ptr, unique _ptr
-
函数对象以及闭包
-
右值引用
-
原了操作与锁: atomic、mutex、condition_variable
-
多线星环竟队列设计:MPSCQueue、ProducerConsumerQueue
(三)C++设计模式
-
单例模式
-
工厂模式
-
模板模式
-
访问者模式
-
责任链模式
9、适宜工程师人群
-
从事游戏后端岗位开发,但没有时间系统学习的在职工程师
-
从事嵌入式方向开发,想转入游戏后端开发的在职工程师
-
从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
-
从事C/C++后台开发,想往游戏服务器方向发展的在职工程师
-
自己研究学习速度较慢,不能系统构建游戏开发知识体系的开发人员
-
计算机相关专业想从事游戏开发的在校生(本科及以上学历)
自学的弊端:网上资料繁杂,知识零碎,看过之后容易很快就忘掉,遇到问题只能自己钻研,有些很简单的问题不知不觉就浪费了很多时间,除非你是定力耐心毅力非常强的人,不然学习起来会没有方向感,盲目的看书枯燥乏味耗时比较长,会导致没有学习积极性失去信心与坚持下去的决心等等。总的来说自学不能说完全不行,只是适合少数人,自学的难度比报班系统学习一定是困难很多很多倍,多付出很多很多倍的。
反之报班学习的优势在于:
节约时间,知识串联:视频学习老师会提取知识点讲解出来比看书快了很多倍,并且理解起来比枯燥乏味的读书更有意思,尤其计算机相关的理论知识更是繁琐复杂交错依附,报班会让你更加系统的学习,知道前因后果来龙去脉,老师会把知识串联起来交给你,配套的资料发给你,而不是独立零散的知识点学习,对于提升来说,是高效且快速的。
老师答疑:遇到不懂得问题,老师会在自己看到的第一时间给到解答,24小时的答疑服务,会大大节约了你的学习时间。老师在知识体系,课程内容上,简历书写,面试指导,谈薪技巧等等方面都有着丰富的经验,课程内容也是由简到难,源码分析勾画重点,不做无用功,会提供配套的学习资料,图文并茂,讲解上通俗易懂,技术慢慢深入串联,学员通过和老师的沟通交流从而轻松学习,来达到自己想要达到的目标。
时间自由学习高效:很多在职的开发人员除了日常上班大部分时间还要加班,对于提升自己都是挤时间,没有完整的学习时间,这样其实给自学增添了很大的难度,跟着视频学习每日定好进度下班以后有固定的学习时间学习内容,或者周末抽几个小时整时间学习,有方向感且高效。
要说报班学习的弊端,那我只能想到一个,就是会有金钱上的一个付出,但是技术学会了是会跟随你一辈子的,现在的付出可能就是以后你一个月的涨薪部分,这个账怎么算都不会亏。投资自己 是风险最低 收益最高的,在大环境中安于现状才是井底之蛙,不断学习提升自己才是程序员最需要做的,提升工作竞争力,让自己在现在的公司被需要!
现如今各行各业内卷都很严重,不要说行业不行,而是大家越来越专业,这个是行业发展的必然性,优胜劣汰适者生存,时代在改变,不提高自己的核心竞争力就要出局。
最后:
给校招的小伙伴一句话:第一份工作不亚于一次高考,珍惜校招,社招的竞争是你目前想象不到的。能去大厂觉不妥协,IT行业第一份工作背景越好,起点越高,后续发展空间越好!
给那些1-3年的安于现状的伙伴一句话:
不要抱怨市场,不要安于现状,在低端,往中端领域看,在中端往高端领域看。认知以及对自身的要求,都会有所改变。
给那些担心35岁的伙伴一句话:
决定上限的不是年纪,而是技术。最后:希望学习路线对你有所帮助,希望码农的我们越来越好!