C/C++发展方向(强烈推荐!!)(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: C/C++发展方向(强烈推荐!!)

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秒的低延迟直播

以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911领取专属大额优惠券。

助大家全面掌握FFmpeg的核心技术点:

  • 本课程为音视频全栈开发技术提升体系
  • 原理,源码分析,案例分析,项目实战全包含
  • 详细技术点参考音视频第6代课程大纲
  • 全新升级FFmpeg6.0-全网唯一

9、适宜工程师人群(本课程涵盖最主流的音视频全栈开发技术,适合各类技术人员)

  • 从事音视频岗位开发,但没有时间系统学习的在职工程师
  • 从事嵌入式方向开发,想转入音视频开发的在职工程师
  • 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
  • 从事Android/IOS移动开发,想往音视频方向发展的在职工程师
  • 从事C/C+ +后台开发,想往流媒体服务器方向发展的在职工程师
  • 自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员
  • 计算机相关专业想进入大厂的在校生(本科及以上学历,有c/C+ +基础)

音视频自学难点音视频自学非常困难,网上通俗易懂的难找到。

网上部分资源是对应的开源版本较低,比如雷霄骅(雷神)博客的FFmpeg版本较低

音视频涉及大量的开源库和协议:

  • 1、比如ffmpeg的编译,如果不熟悉各种编译报错
  • 2、Janus编译涉及各种开源组件编译不通过
  • 3.比如WebRTC涉及的RTP、RTCP、SDP、STUN等协议

部分嵌入式音视频的朋友技术面窄, 技术不深入。比如有同学做了2年的音视频驱动, 一帧音频能持续播放多久都不明白。

至于学习效果怎么样?👇

640.png

10、补录:webrtc入门到精通

  • (1)WebRTC入门
  • (2)WebRTC开发环境搭建
  • (3)Coturn穿透和转发服务器搭建
  • (4)音视频采集和播放
  • (5)Nodejs实战
  • (6)手把手实现音视频一对一通话(包含信令协议设计、Web to Web、Android to Web、 Android to Android)
  • (7)开源方案介绍
  • (8)AppRTC开源方案搭建


DPDK高性能专家

DPDK使用了轮询(polling)而不是中断来处理数据包。在收到数据包时,经DPDK重载的网卡驱动不会通过中断通知CPU,而是直接将数据包存入内存,交付应用层软件通过DPDK提供的接口来直接处理,这样节省了大量的CPU中断时间和内存拷贝时间。

还不熟悉的朋友,这里可以先领取一份dpdk新手学习资料包(入坑不亏)


本文介绍下DPDK进阶到高性能专家的学习路线,整个学习路线,直接对标DPDK资深架构师岗位,知识点包括dpdk、储存、网关开发、网络协议栈、网络安全、TRex、vpp、OVS、DDos、虚拟化技术等等 。其次你把整个内容,全部消化,是完全可以胜任任何DPDK资深架构师岗位招聘,DPDK开发招聘。

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

以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911领取专属大额优惠券。

7、适学人群

  1. 工作中技术没有挑战,工作中接触不到新技术的在职工程师
  2. 从事嵌入式开发对网络存储底层感兴趣在职工程师
  3. 自己研究学习速度较慢,不能系统构建知识体系的开发人员
  4. 从事网络存储安全的工程师,想深入了解底层技术原理

8、课程目标岗位

  • 高级网络开发工程师
  • DPDK开发工程师
  • 云基础开发工程师
  • NFV开发工程师
  • 高性能优化工程师
  • 云产品研发工程师
  • SDN开发工程师

学习成果检验

640.png

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++设计模式

  • 单例模式
  • 工厂模式
  • 模板模式
  • 访问者模式
  • 责任链模式

以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911领取专属大额优惠券。


9、适宜工程师人群

  • 从事游戏后端岗位开发,但没有时间系统学习的在职工程师
  • 从事嵌入式方向开发,想转入游戏后端开发的在职工程师
  • 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
  • 从事C/C++后台开发,想往游戏服务器方向发展的在职工程师
  • 自己研究学习速度较慢,不能系统构建游戏开发知识体系的开发人员
  • 计算机相关专业想从事游戏开发的在校生(本科及以上学历)

Qt开发工程师

Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

还不熟悉的朋友,这里可以先领取一份qt开发新手学习资料包(入坑不亏)


本文介绍下qt开发从入门到高级进阶的学习路线,整个学习路线,直接对标qt工程师开发岗位,知识点包括语言编程基础、Qt编程入门到精通专栏、Qt高级进阶专栏、Qt项目开发实战专栏、Qt开发工程师提升专栏等 。其次你把整个内容,全部消化,是完全可以胜任任何qt开发招聘,C++ qt开发招聘。

1、Qt C++语言编程基础专栏

(一)Qt C++语言编程基础

  • Visual Studio 2022安装
  • C++语言基础概述
  • C++指针与引用
  • C++类与对象(一)
  • C++类与对象(二)
  • 类的基它特性
  • 构造函数&析构函数&拷贝构造函数
  • C++友元与动态内存
  • 函数重载与运算符重载

(二)Qt C+ +语言进阶

  • 单继承
  • 多继承
  • 虚继承及其它特性
  • 虚函数与抽象类
  • 命名空间与模板
  • C+ +I0流类库
  • STL(vector & deque & stack)
  • STL(queue & set & map)
  • C+ +异常处理,

(三)Qt C+ +语言新特性

  • 类型推导: auto & decltype
  • 序列for循环
  • lambda表达式
  • 构造函数:委托构造和继承构造
  • 容器: array & forward list & tuple
  • 垃圾回收机制
  • 正则表达式基础
  • 智能指针: shared_ ptr & unique_ ptr & weak_ ptr
  • 关键字: nullptr & constexpr
  • 共享内存&互斥量mutex
  • C++11: STL hashmap
  • 关联容器: unordered_ map
  • atomic flag & atomic应用
  • 条件变量: condition variable
  • 异常处理: exception
  • is integral应用实战
  • is_ rvalue_ reference应用实战
  • is_ arithmetic应用实战
  • is volatile应用实战
  • is class应用实战
  • 变量模板
  • inline应用实战

2、Qt编程入门到精通专栏

(一)Qt开发基础体系

  • Qt下载与安装配置
  • Windows Qt环境安装
  • Linux Qt环境安装
  • Qt Creator工具介绍与使用.
  • Qt信号与槽机制
  • Qt字符串&数据类型&容器类
  • 字符串类应用与常见数据类型
  • 常用容器类
  • QMap类& QHash类& QVector类
  • QList类& QLinkedList类
  • QVariant类应用
  • 常用算法及正则表达式

(二)Qt开发常用控件详解

  • Layouts & Spacers
  • Buttons & Containers
  • Item Views
  • Item Widgets
  • Input Widgets
  • Display Widgets

(三)Qt布局及对话框详解

  • 布局管理
  • QLayout & QStackedWidget类
  • QSplitter类& QDockWidget类
  • 对话框
  • 文件对话框
  • 颜色对话框
  • 字体对话框
  • 输入对话框
  • 消息对话框
  • 自己定义消息框

(四)Qt图形&模型&视图

  • 绘图原理双缓冲机制
  • Graphics View特性详解
  • Mode & View & Delegate

(五)Qt文件操作及事件处理

  • 目录操作及文件系统
  • QCoreApplication类
  • QFilelnfo类
  • QDir类
  • QTemporaryDir
  • QTemporaryFile
  • 获取文件特性实现
  • 鼠标及键盘事件
  • 事件过滤处理分析

(六)Qt服务应用操作

  • INI文件操作
  • JSON文件操作
  • XML文件操作

(七)Qt网络及多线程

  • 套接字编程API函数详解
  • UDP协议工作原理
  • TCP服务器设计
  • TCP客户端设计
  • TCP协议工作原理
  • UDP服务器设计
  • UDP客户端设计
  • 多线程编程
  • 互斥量
  • 信号量
  • 多线程C/S模型项目实战
  • HTTP协议编程技术
  • Websocket原理及编程技术

(八)Qt数据分析:图表详解

  • Qt图表基础知识
  • Qt ChartView详解
  • Qt常用图表类型
  • 曲线图
  • 拆线图
  • 柱形图
  • 饼状图

(九)Qt应用程序打包及发布

  • 打包QT应用程序
  • 发布QT应用程序

3、Qt高级进阶专栏

(一)MySQL数据库编程技术

  • 数据库基础知识
  • MySQL基本操作
  • MySQL运算符
  • 数据类型及存储引擎
  • 表数据增&删&改&查&高级查询
  • MySQL流程控制语句
  • SQL语句详解
  • 索引
  • 视图
  • 存储过程和函数
  • 触发器
  • 事件
  • MySQL备份与恢复
  • Qt操作MySQL数据库实战

(二)sQLite数据库编程技术

  • SQLite下载与安装配置
  • sQLite创建数据库
  • SQL ite附加&分离数据库
  • SQLite数据类型
  • SQLite创建表&删除表
  • SQLite insert into语句详解
  • SQLite select & update & delete语句
  • sQLite Distinct & Orderby & Groupby
  • SQLite触发器
  • sQLite索引
  • SQLite视图
  • sQLite事务
  • Qt操作SQLite数据库实战

(三)OpenCV编程开发常用技术

  • OpenCV与VS2022环境搭建
  • OpenCV常见API及绘图详解
  • OpenCV图像读写技术
  • OpenCV视频读写技术
  • OpenCV图像滤波技术
  • OpenCV视频录制技术
  • OpenCV图像翻转技术
  • OpenCV图像旋转技术
  • OpenCV实现窗口置顶
  • OpenCV边缘检测技术1
  • OpenCV边缘检测技术2
  • OpenCV向上向下采样
  • OpenCV形态学之膨胀
  • OpenCV图像浮雕技术
  • OpenCV图像人脸识别

(四)C++ 23种设计模式

  • 创建型模式(5种)
  • 工厂模式
  • 抽象工厂模式
  • 原型模式
  • 单例模式
  • 建造者模式
  • 结构型模式(7种)
  • 适配器模式
  • 桥接模式
  • 组合实体模式
  • 装饰器模式
  • 外观模式
  • 享元模式
  • 代理模式
  • 行为模式(11种)
  • 责任链模式
  • 中介者模式
  • 策略模式
  • 模板模式
  • 状态模式
  • 观察者模式
  • 备忘录模式
  • 命令模式
  • 访问者模式
  • 解释器模式
  • 迭代器模式

4、Qt项目开发实战专栏

(一)文字编辑: Word处理软件

  • Word文字编辑软件架构设计分析
  • 菜单栏工具栏状态栏功能模块设计
  • 菜单栏工具栏状态栏动作与实现
  • 系统模块整体功能关联与实现
  • Word文件编辑软件调试及测试

二)音频项目实战: MP3播放器搜索引擎(Qt5+SQLite)

  • MP3音乐播放器搜索引 |擎设计与实现
  • SQLite数据库 数据表设计与实现歌曲搜索
  • HTTP下载音乐数据解析Json显示歌词
  • 上一曲播放暂停下一 曲循环播放实现
  • 音乐搜索引|擎关于皮肤更换系统托盘

(三)信息管理项目:库存管理系统(Qt5+ MySQL)

  • 商品数据库设计及配置测试
  • 库存新增商品和查询商品
  • 商品入库与商品出库
  • 商品删除与导出数据
  • 数据汇总及数据备份

(四)即时通讯项目:腾讯QQ客户端软件

  • 即时通讯项目简介
  • QQ客户端登录设计
  • QQ登录窗口翻转效果实现
  • IP地址控件设置
  • 主界面及窗口移动实现
  • QQ登录逻辑业务处理分析
  • 项目全局类定义与实现
  • 完善MainWindow及托盘技术
  • QQ好友组及U|效果实现
  • QQ聊天窗口和排版设计
  • 头像裁剪技术
  • 音频技术分析与实现
  • QQ添加好友逻辑业务处理
  • QQ聊天逻辑处理分析
  • 消息时序图和头像截图处理技术
  • 即时通讯群组功能实现
  • QQ表情与gif图片处理技术
  • 文件上传功能实现
  • QQ文件传输技术
  • QQ头像显示与添加好友显示实现

(五)视频项目实战:视频播放器(Qt+ FFmpeg)

  • 播放器项目需求分析
  • Player UI主界面设计
  • 播放文件Title设计实现
  • 控制条CtrlBar设计实现
  • 播放文件列表Playlist实现
  • 播放器模块分析与设计
  • 打通UI到播放器核心的通道消息队列
  • 打通Ul到播放器核心的通道类名和接口
  • 状态处理: stream open和stream close
  • 解复用&数据读取read thread设计
  • 解码线程Decoder封装
  • 音频输出及视频渲染输出
  • 音视频同步原理与技术详解

5、Qt开发工程师提升专栏

(一)Qt开发工程师提升: Quick编程常用技术

  • QML基础知识
  • QML语言基础
  • QML元素1: Image & Rectangle & Text
  • QML元素2: ButtonStyle & ltem & BusyIndicator
  • Quick事件处理
  • 键盘事件
  • 鼠标事件
  • 定时器
  • Quick组件及元素布局
  • Component & Loader
  • 定位器及布局管理器
  • Quick开发常用元素及Canvas(画布)
  • TextField & TextArea & TextInput
  • CheckBox & GroupBox & TabView
  • Canvas(画布)绘制图形
  • 动画及.Mode & View
  • 动画常用元素
  • Animation & PropertyAnimation & NumberAnimation
  • ColorAnimation & PathAnimation & SpringAnimation
  • 组合动画部分: ParallelAnimation & SequentialAnimation
  • 动画协同元素: Behavior & ParentAnimation & AnchorAnimation

(二)Qt开发工程师提升: QSS编程常用技术

  • QSS实战开发1: QSS作用及应用场景
  • QSS实战开发2: QSS常用基本语法
  • QSS实战开发3: QSS控件样式QL abel & QLineEdit & QPushButton
  • QSS实战开发4: QSS控件样式QComboBox
  • QSS实战开发5: QSS控件样式QTableWidget
  • QSS实战开发6: QSS控件样式QProgressBar
  • QSS实战开发7: QSS控件样式QSlider
  • QSS实战开发8: QSS控件样式CheckBox
  • QSS实战开发9: Ubuntu系统控件风格
  • QSS实战开发10: Mac系统控件风格

(三)Qt开发工程师提升:核心技术模块

  • QtConcurrent线程处理(过滤和映射)
  • Qt之QWebEngineView框架分析
  • Qt生成及读取XML文件及应用实战

以上是系统学习课程大纲,需要系统学习请扫码添加小雯老师(备注911领取专属大额优惠券。

6、Qt参考书籍资料

  • 《Qt C+ +编程从入门到实战》主编:彭源
  • 《Qt 5编程入门第2版》编著:程梁霍亚飞
  • 《嵌入式Qt开发项目教程》编著:王浩著王浩
  • 《Qt Quick核心编程》编著:安晓辉
  • 《零基础学Qt 4编程》作者:吴迪著
  • 《C+ +并发编程实战(第2版)》作者: [英]安东尼:威廉姆
  • 《C+ +20实践入门](第6版)》作者: [比]艾弗霍尔顿(Ivor Horton)
  • 《OpenCV算法精解》 作者:张平编著
  • 《Qt圾Qt Quick开发实战精解》编著:霍亚飞
  • 《C++ GUIQt 4编程第二版》作者: Jasmin Blanchette & Mark Summerfield

至于学习效果怎么样?👇

自学的弊端:网上资料繁杂,知识零碎,看过之后容易很快就忘掉,遇到问题只能自己钻研,有些很简单的问题不知不觉就浪费了很多时间,除非你是定力耐心毅力非常强的人,不然学习起来会没有方向感,盲目的看书枯燥乏味耗时比较长,会导致没有学习积极性失去信心与坚持下去的决心等等。总的来说自学不能说完全不行,只是适合少数人,自学的难度比报班系统学习一定是困难很多很多倍,多付出很多很多倍的。

反之报班学习的优势在于:

节约时间,知识串联:视频学习老师会提取知识点讲解出来比看书快了很多倍,并且理解起来比枯燥乏味的读书更有意思,尤其计算机相关的理论知识更是繁琐复杂交错依附,报班会让你更加系统的学习,知道前因后果来龙去脉,老师会把知识串联起来交给你,配套的资料发给你,而不是独立零散的知识点学习,对于提升来说,是高效且快速的。

老师答疑:遇到不懂得问题,老师会在自己看到的第一时间给到解答,24小时的答疑服务,会大大节约了你的学习时间。老师在知识体系,课程内容上,简历书写,面试指导,谈薪技巧等等方面都有着丰富的经验,课程内容也是由简到难,源码分析勾画重点,不做无用功,会提供配套的学习资料,图文并茂,讲解上通俗易懂,技术慢慢深入串联,学员通过和老师的沟通交流从而轻松学习,来达到自己想要达到的目标。

时间自由学习高效:很多在职的开发人员除了日常上班大部分时间还要加班,对于提升自己都是挤时间,没有完整的学习时间,这样其实给自学增添了很大的难度,跟着视频学习每日定好进度下班以后有固定的学习时间学习内容,或者周末抽几个小时整时间学习,有方向感且高效。

要说报班学习的弊端,那我只能想到一个,就是会有金钱上的一个付出,但是技术学会了是会跟随你一辈子的,现在的付出可能就是以后你一个月的涨薪部分,这个账怎么算都不会亏。投资自己 是风险最低 收益最高的,在大环境中安于现状才是井底之蛙,不断学习提升自己才是程序员最需要做的,提升工作竞争力,让自己在现在的公司被需要!

现如今各行各业内卷都很严重,不要说行业不行,而是大家越来越专业,这个是行业发展的必然性,优胜劣汰适者生存,时代在改变,不提高自己的核心竞争力就要出局。

最后:

给校招的小伙伴一句话:第一份工作不亚于一次高考,珍惜校招,社招的竞争是你目前想象不到的。能去大厂觉不妥协,IT行业第一份工作背景越好,起点越高,后续发展空间越好!

给那些1-3年的安于现状的伙伴一句话:

不要抱怨市场,不要安于现状,在低端,往中端领域看,在中端往高端领域看。认知以及对自身的要求,都会有所改变。

给那些担心35岁的伙伴一句话:

决定上限的不是年纪,而是技术。最后:希望学习路线对你有所帮助,希望码农的我们越来越好!

精品文章推荐阅读:

相关文章
|
2月前
|
开发者
探索未知,拥抱变化——我的技术之旅与哲学思考###
在技术的浩瀚星海里,每一个代码片段都是探索未知的航标。本文不仅是一次技术的回顾,更是一场关于成长、挑战与自我超越的深刻对话。通过分享个人的技术学习历程,我希望能激发每位读者心中对未知的好奇与渴望,共同踏上这场充满奇迹与挑战的旅程。 ###
|
7月前
|
网络协议 Docker 微服务
拥抱变化:我的技术适应之旅
【5月更文挑战第13天】在技术的瞬息万变中,持续学习和适应是每个技术人员不可或缺的能力。本文通过个人的技术感悟,探讨了如何在快速迭代的技术领域保持个人的竞争力,以及如何将变化转化为个人成长和项目成功的契机。
|
7月前
|
人工智能 前端开发 vr&ar
探索前端技术的未来发展方向
【2月更文挑战第4天】在当前数字化时代,前端技术的快速发展为互联网应用的用户界面提供了更多可能性。本文将探讨前端技术的未来发展方向,包括移动端开发、增强现实和虚拟现实应用、人工智能与前端的结合等,并分析这些趋势对前端工程师的影响。
|
算法 Cloud Native 程序员
C++ 程序员入门之路——旅程的起点与挑战
C++ 程序员入门之路——旅程的起点与挑战
87 0
C++ 程序员入门之路——旅程的起点与挑战
|
存储 缓存 Linux
C/C++发展方向(强烈推荐!!)(上)
C/C++发展方向(强烈推荐!!)
|
云安全 安全 网络安全
网络安全方向系统学习指南
网络安全方向系统学习指南
160 0
|
安全 程序员
大龄程序员的发展方向是做管理还是继续写程序
大龄程序员的发展方向是做管理还是继续写程序
58 0
|
Web App开发 移动开发 缓存
说说前端未来几年的发展方向
说说前端未来几年的发展方向
246 0
说说前端未来几年的发展方向
|
XML Java 测试技术
2020年Android开发的未来发展方向该如何走?
作为一名资深的Android 开发者。从2017年下半年开始,就听到各种言论,例如“Android 开发凉凉”、“移动端开发没出路了赶紧转行”、“要被XXX 替代了” 等等,充分反映了大家焦虑的心态。 移动端开发真的要凉凉了吗?也经常有粉丝私信我,在群里聊起这个话题,今天我决定写下自己的一些看法,供大家参考。
2020年Android开发的未来发展方向该如何走?
|
SQL 分布式计算 资源调度
未来发展方向|学习笔记
快速学习未来发展方向