Linux C/C++高级全栈开发是一个涉及到多个领域的综合性技术要求,需要对Linux系统、C/C++编程语言以及各种相关的技术进行深入的理解和应用。
下面是一些涵盖的主要技术领域和技能要点:
-
Linux系统基础:熟悉Linux操作系统的原理和常用命令,包括文件系统、进程管理、网络配置等。
-
C/C++编程语言:具备扎实的C/C++编程语言基础,了解常用的编程范式、数据结构和算法,并能熟练运用C/C++进行系统级开发。
-
网络编程:理解网络通信原理,掌握Socket编程和网络协议(如TCP/IP、HTTP等),能够开发网络应用程序和服务器。
-
多线程和并发编程:熟悉多线程编程模型,了解线程同步与互斥机制,能够处理并发编程中的共享资源和线程安全问题。
-
数据库和SQL:掌握数据库基础知识,熟悉SQL语言,能够使用数据库进行数据存储和查询操作。
-
Web开发:了解Web开发的基本原理和技术栈,包括HTML/CSS、JavaScript、Web框架(如Django、Flask等)以及前后端交互。
-
安全和性能优化:了解常见的安全漏洞和攻击手段,能够编写安全可靠的代码。同时,具备性能优化的能力,包括对代码、算法和系统进行分析和改进。
-
测试和调试:掌握常用的测试方法和工具,能够编写单元测试和集成测试,并具备良好的调试技巧。
-
版本控制和协作工具:熟悉Git等版本控制工具的使用,能够与团队协同开发,进行代码管理和版本控制。
-
架构设计和系统调优:具备系统级架构设计和优化的能力,能够分析和解决系统性能瓶颈和扩展性问题。
以上只是列举了一些主要的技术领域和技能要点,Linux C/C++高级全栈开发还涉及到很多其他方面的知识和技术
Linux C/C++高级全栈开发学习
学习地址:公众号【零声架构师】
学习资料:【腾讯文档】Linux C++高级全栈开发 学习提升资料获取、视频课程
数据结构与算法
数据结构与算法的学习是一个持续的过程,可以通过阅读经典的算法书籍、参与在线算法竞赛、解决实际的编程问题等方式来提升自己的能力。在实际的开发工作中,对数据结构与算法的理解和应用能够帮助你写出高效、稳定的代码,提高系统的性能和可靠性。
红黑树
- 红黑树的应用场景进程调度cfs,内存管理
- 红黑树的数学证明与推导
- 手撕红黑树的左旋与右旋
- 红黑树添加的实现与添加三种情况的证明
- 红黑树删除的实现与删除四种情况的证明
- 红黑树的线程安全的做法
- 分析红黑树工程实用的特点
磁盘存储链式的B树与B+树
- 磁盘结构分析与数据存储原理
- 多叉树的运用以及B树的定义证明
- B树插入的两种分裂
- B树删除的前后借位与节点合并
- 手撕B树的插入,删除,遍历,查找
- B+树的定义与实现
- B+树叶子节点的前后指针
- B+树的应用场景与实用特点
- B+树的线程安全做法
数据去重的 Hash 与 BIoomFilter,bitmap
- hash的原理与hash函数的实现
- hash的应用场景
- 分布式hash的实现原理
- 海量数据去重布隆过滤器
- 布隆过滤的数学推导与证明
设计模式
掌握设计模式可以帮助你更好地设计和实现系统架构,提高代码的可读性和可维护性。同时,设计模式也是面向对象编程思想的体现,能够帮助你更好地理解和应用面向对象的设计原则。通过学习和实践设计模式,你可以更好地应对复杂的系统设计和开发任务,并写出高质量的代码。
创建型设计模式
- 单例模式
- 策略模式
- 观察者模式
- 工厂方法模式与抽象工厂模式
- 原型模式
结构型设计模式
- 适配器模式
- 代理模式
- 责任链模式
- 状态模式
- 桥接模式
- 组合模式
c++新特性
了解并掌握这些新特性可以帮助你更好地利用C++语言的功能,提高代码的效率和质量。同时,也要注意在实际开发中考虑到不同编译器的支持情况,以确保代码的兼容性和可移植性。
stI容器,智能指针,正则表达式
- unorder ed_ map
- stI容器
- hash的用法与原理
- shared_ ptr,unique_ ptr
- basic_ regex, sub_ match
- 函数对象模板function, bind
新特性的线程,协程,原子操作,lamda表达式
- atomic的用法与原理
- thread_local 与condition_variable
- 异常处理exception_ptr
- 错误处理error_category
- coroutine的用法与原理
Linux工程管理
在Linux工程中,良好的工程管理可以提高开发效率、代码质量和团队协作。
Makefile / cmake / configure
- Makefile的规则与make的工作原理
- 单文件编译与多文件编译
- Makefile的参数传递
- 多目录文件夹递归编译与嵌套执行make
- Makefile的通配符,伪目标,文件搜索
- Makefile的操作函数与特殊语法
- configure生成makefile的原则
- cmake的写法
分布式版本控制git
- git的工作流程
- 创建操作与基本操作
- 分支管理,查看提交历史
- git服务器搭建
Linux系统运行时参数命令
- 进程间通信设施状态 ipcs
- Linux系统运行时长 uptime
- CPU平均负载和磁盘活动 iostat
- 监控,收集和汇报系统活动 sar
- 监控多处理器使用情况 mpstat
- 监控进程的内存使用情况 pmap
- 系统管理员调优和基准测量工具 nmon
- 密切关注Linux系统 glances
- 查看系统调用 strace
- ftp服务器基本信息 ftptop
- 电量消耗和电源管理 powertop
- 监控mysqI的线程和性能 mytop
- 系统运行参数分析 htop/top/atop
- Linux网络统计监控工具 netstat
- 显示和修改网络接口控制器 ethtool
- 网络数据包分析利刃 tcpdump
- 远程登陆服务的标准协议 teInet
- 获取实时网络统计信息 iptraf
- 显示主机上网络接口带宽使用情况 iftop
网络编程 异步网络库zvnet
网络编程是指利用计算机网络进行数据交换和通信的编程技术。在网络编程中,开发人员可以使用各种编程语言和技术来创建客户端和服务器端的应用程序,实现数据传输、远程操作和信息交换等功能。
网络io与io多路复用select/poll/epoll
- socket与文件描述符的关联
- 多路复用 select/poll
- 代码实现LT/ET的区别
事件驱动reactor的原理与实现
- reactor针对业务实现的优点
- epoll封装send_ cb/recv_ cb/ accept cb
- reactor多核实现
- 跨平台(sel
- ect/ epol | /kqueue)的封装reactor
- redis,memcached, nginx网 络组件
http服务器的实现
- reactor sendbuffer 与recvbuffer封装http协议
- http协议格式
- 有限状态机fsm解析http
- 其他协议websocket, tcp文件传输
网络原理
学习网络原理对于从事网络相关的工作或开发网络应用程序非常重要。它可以帮助我们更深入地理解网络通信的原理,优化网络应用性能,提升网络安全性,并且适应快速发展的网络技术。
服务器百万并发实现(实操)
- 同步处理与异步处理的数据差异
- 网络io线程池异步处理
- ulimit的fd的百万级别支持
- sysctl.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的设计方案与算法原理
自研框架:协程框架NtyCo的实现(已开源)
协程框架是一种基于协程的异步编程框架,它通过协程的并发执行来提高程序的性能和可扩展性。在协程框架中,通过将多个协程调度到同一个线程中运行,可以避免线程切换带来的开销,从而提高程序的性能。同时,协程框架也提供了一些高级的异步编程特性,如异步IO、协程间通信等,使得开发人员可以更加方便地编写高性能的异步程序。
协程设计原理与汇编实现
- 协程存在的3个原因
- 同步与异步性能,服务端异步处理,客户端异步请求
- 协程原语switch,resume,yield
- 协程切换的三种实现方式,setjmp/ longjmp,ucontext, 汇编实现
- 汇编实现寄存器讲解
- 协程初始启动eip寄存器设置
- 协程栈空间定义,独立栈与共享栈的做法
- 协程结构体定义
协程调度器实现与性能测试
- 调度器的定义分析
- 超时集合,就绪队列,io等待集合的实现
- 协程调度的执行流程.
- 协程接口实现,异步流程实现
- hook钩子的实现
- 协程实现mysq|请求
- 协程多核方案分析
- 协程性能测试
自研框架:基于dpdk的用户态协议栈的实现(已开源)
用户态协议栈是一种在用户空间中实现的网络协议栈,相对于传统的内核态协议栈,在用户态中实现网络协议的处理和数据传输。
传统的网络协议栈通常由操作系统的内核提供,包括网络驱动程序、协议栈和网络设备管理等功能。这种设计可以提供较高的性能和可靠性,但也存在一些问题,比如内核态和用户态之间的切换开销、限制了用户对协议的自定义和扩展等。
而用户态协议栈将网络协议的处理和数据传输移到用户空间中,通过在用户态中实现网络协议栈的各个组件,可以更灵活地控制协议的实现和优化,同时减少了内核态和用户态的切换开销,从而提高了网络应用的性能和可扩展性。
用户态协议栈设计实现
- 用户态协议栈的存在场景与实现原理
- netmap开源框架
- eth协议,ip协议, udp协议实现
- arp协议实现
- icmp协议实现
应用层posixa api的具体实现
- socket/bind/listen的实现
- accept实现
- recv/send的实现
- 滑动窗口/慢启动讲解
- 重传定时器,坚持定时器,time_wait定时器,keepalive定时器
手把手设计实现epolI
- epoll数据结构封装与线程安全实现
- 协议栈fd就绪回调实现
- epoll接口实现
- LT/ET的实现
高性能异步io机制 io_uring
io_uring是Linux内核提供的一种高性能异步IO机制,可以用于实现高性能的网络应用和存储系统等。相对于传统的异步IO机制,io_uring具有更低的CPU占用率、更高的并发能力和更强的可扩展性。
io_uring的核心是一个用于提交IO请求和接收IO完成事件的环形队列,为用户空间提供了一种无需阻塞线程的异步IO方式。使用io_uring时,用户程序可以将IO请求提交到io_uring队列中,然后继续执行其他操作,当IO操作完成时,内核会将结果通知到用户程序,从而实现异步IO。
与epolI媲美的io_uring
- io_uring系统调用io_ uring_ setup, io_ uring_ register, io_ uring_ enter
- Iiburng的io_uring的关系
- io_uring与epoll性能对比
- io_ uring的共享内存机制
io_uring的使用场景
- io_uring的accept,connect,recv,send实现机制
- io_uring网络读写
- io_uring磁盘读写
- proactor的实现
池式组件
池式组件是一种常见的软件设计模式,用于优化资源的分配和回收,提高系统的性能和可伸缩性。
池式组件通常是一组预先分配的对象或资源,例如数据库连接、线程、内存等。在系统运行时,对象池会维护一个空闲对象列表和一个正在使用的对象列表,当需要使用对象时,从空闲列表中获取对象并进行初始化,当使用完对象后,将对象返回到空闲列表中,而不是销毁对象。这样可以避免频繁的创建和销毁对象,提高系统的性能和可伸缩性。
手写线程池与性能分析(项目)
- 线程池的异步处理使用场景
- 线程池的组成任务队列执行队列
- 任务回调与条件等待
- 线程池的动态防缩
- 扩展: nginx线程池实现对比分析
内存池的实现与场景分析(项目)
- 内存池的应用场景与性能分析
- 内存小块分配与管理
- 内存大块分配与管理
- 手写内存池,结构体封装与API实现
- 避免内存泄漏的两种万能方法
- 定位内存泄漏的3种工具
- 扩展:nginx内存池实现
mysql连接池的实现(项目)
- 连接池性能的影响的2个因素,tcp连接和mysq|认证
- 连接请求归还策略
- 连接超时未归还策略
- 链接断开重连策略
- 连接数量最优策略
高性能组件
高性能组件是指在大量数据处理、高并发、低延迟等场景下,具有卓越性能表现的软件组件。
原子操作CAS与锁实现(项目)
- 互斥锁的使用场景与原理
- 自旋锁的性能分析
- 原子操作的汇编实现
无锁消息队列实现(项目)
- 有锁无锁队列性能
- 内存屏障Barrier
- 数组无锁队列设计实现
- 链表无锁队列设计实现
网络缓冲区设计
- RingBuffer设计
- 定长消息包
- ChainBuffer设计
- 双缓冲区设计
定时器方案红黑树,时间轮,最小堆(项目)
- 定时器的使用场景
- 定时器的红黑树存储
- 时间轮的实现
- 最小堆的实现
- 分布式定时器的实现
手写死锁检测组件(项目)
- 死锁的现象以及原理
- pthread_mutex_lock/pthread_mutex_unlock dlsym的实现
- 有向图的构建
- 有向图dfs判断环的存在
- 三个原语操作 lock_before,lock_after,unlock_after
- 死锁检测线程的实现
手写内存泄漏检测组件(项目)
- 内存泄漏现象
- 第三方内存泄漏与代码内存泄漏
- malloc与free的dIsym实现
- 内存检测策略
- 应用场景测试
手把手实现分布式锁(项目)
- 多线程资源竞争互斥锁,自旋锁
- 加锁的异常情况
- 非公平锁的实现
- 公平锁的实现
开源组件
开源组件具有以下优点:
- 降低开发成本:开源组件可以免费获取和使用,可以大大降低软件开发的成本,特别是对于中小型企业和个人开发者来说更为重要。
- 提高开发效率:开源组件通常已经经过了实践验证,具有高度可靠性和稳定性,可以节省开发时间,并且通常有完善的文档和示例代码,使得使用起来更加方便快捷。
- 可扩展性:开源组件的源代码可以自由获取,并且可以根据自己的需求进行修改和扩展,可以满足特定的功能需求和技术要求,提高了系统的可扩展性和灵活性。
异步日志方案spdlog (项目)
- 日志库性能瓶颈分析
- 异步日志库设计与实现
- 批量写入与双缓存冲机制
- 奔溃后的日志找回
应用层协议设计ProtoBuf(项目)
- IM,云平台 ngInx,http,redis 协议设计
- 如何保证消息完整性
- 手撕 protobuf IM 通信协议
- protobuf 序列化与反序列化
- protobuf 编码原理
Redis
Redis是一个基于内存的高性能NoSQL数据库,它支持键值对、字符串、哈希表、列表、集合等多种数据结构,并提供多种高级功能,如发布订阅、事务处理、Lua脚本执行等。
Redis的特点包括:高性能、多样化的数据结构、强大的功能、易于部署和管理、开源免费。
Redis的应用场景非常广泛,包括缓存、计数器、消息队列、任务队列、排行榜、分布式锁等等。
Redis相关命令详解及其原理
- string,set,zset,list,hash
- 分布式锁的实现
- lua脚本解决ACID原子性
- Redis事务的ACID性质分析
Redis协议与异步方式
- Redis协议解析
- 特殊协议操作 订阅发布
- 手撕异步redis协议
存储原理与数据模型
- string的三种编码方式 int,raw,embstr
- 双向链表的 list 实现
- 字典的实现,hash函数
- 解决键冲突与 rehash
- 跳表的实现与数据论证
- 整数集合实现
- 压缩列表原理证明
主从同步与对象模型
- 对象的类型与编码
- 字符串对象
- 列表对象
- 哈希对象
- 集合对象
- 有序集合
- 类型检测与命令多态
- 内存回收
- 对象共享
- 对象空转时长
- redis的3种集群方式主从复制,sentinel,cluster
- 4种持久化方案
MySQL
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它采用了客户端-服务器架构,并支持多种操作系统。MySQL提供了高度可靠性、稳定性和性能优越的特点,使其成为互联网应用和企业级应用中最受欢迎的数据库之一。
以下是MySQL的一些特点:关系型数据库、可扩展性、安全性、多平台支持、开源免费。
MySQL广泛应用于各种类型的应用,包括网站、电子商务、社交媒体、日志分析、数据仓库等。
SQL语句,索引,视图,存储过程,触发器
- MySQL体系结构,SQL 执行流程
- SQL CURD与高级查询
- 视图,触发器,存储过程
- MySQL权限管理
MySQL索引原理以及SQL优化
- 索引,约束以及之间的区别
- B+树,聚集索引和辅助索引
- 最左匹配原则以及覆盖索引
- 索引失效以及索引优化原则
- EXPL AIN执行计划以及优化选择过程分析
MySQL事务原理分析
- 事务的ACID特性
- MySQL并发问题 脏读,不可重复读,幻读
- 事务隔离级别
- 锁的类型,锁算法实现以及锁操作对象
- S锁 X锁 IS锁 IX锁
- 记录锁,间隙锁,next-key Iock
- 插入意向锁,自增锁
- MVCC原理剖析
MySQL缓存策略
- 读写分离,连接池的场景以及其局限a
- 缓存策略问题分析
- 缓存策略强一致性解决方案
- 缓存策略最终一致性解决方案
- 2种mysq|缓存同步方案从数据库与触发器+udf
- 缓存同步开源方案 go-mysql-transfer
- 缓存同步开源方案 canaI 原理分析
- 3种缓存故障,缓存击穿,缓存穿透,缓存雪崩
Kafka
Kafka是一个高吞吐量的分布式发布订阅消息系统,它主要用于处理实时数据流和大规模数据处理。Kafka以可持久化、高性能和可扩展性而闻名,被广泛应用于构建实时流数据平台和事件驱动架构。
Kafka的一些特点和优势:高吞吐量、可持久化存储、分布式架构、实时流处理、弹性和容错性、多样化的数据源和数据目的地。
Kafka被广泛应用于各种场景,如日志收集与分析、事件驱动架构、实时数据处理、消息系统集成等。
Kafka使用场景与设计原理
- 发布订阅模式
- 点对点消息传递
- Kafka Brokers原理
- Top ics和Partition
Kafka存储机制
- Partition存储分布
- Partition文件存储机制
- Segment文件存储结构
- offset查找message
- 高效文件存储设计
微服务之间通信基石gRPC
gRPC是一个高性能、开源的远程过程调用(RPC)框架,由Google开发并在2015年对外发布。它基于HTTP/2协议,并使用Protocol Buffers作为默认的数据序列化格式。
以下是gRPC的一些特点和优势:高性能、跨语言支持、代码生成、双向流式通信、支持多种认证和安全机制、可扩展性。
gRPC被广泛应用于微服务架构、分布式系统、云原生应用开发等领域。它的高性能、跨语言支持和强大的功能使得它成为了构建可靠、高效的分布式应用的首选框架之一。
gRPC的内部组件关联
- ClientSide与ServerSide,Channel, Serivce,Stub 的概念
- 异步gRPC的实现
- 回调方式的异步调用
- Server与Client对RPC的实现
基于http2的gRPC通信协议
- 基于http协议构造
- ABNF语法
- 请求协议Request-Headers
- gRPC上下文传递
Nginx
Nginx是一个高性能的开源Web服务器和反向代理服务器。Nginx以其出色的性能、高并发处理能力和低资源消耗而闻名。
以下是Nginx的一些特点和优势:高性能、反向代理和负载均衡、静态文件服务、可扩展性、热部署、安全性。
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机制的设计与实现
- 模块性能测试
游戏服务器开发skynet
一个基于C语言开发的轻量级分布式服务框架。它专注于解决服务器集群中的高并发和高性能需求,并提供了一套简单易用的API和工具,用于开发分布式应用程序。
Skynet设计原理
- 多核并发编程-多线程,
- 多进程,csp模型,actor模型
- actor模型实现-lua服务和c服务
- 消息队列实现
- actor消息调度
skynet网络层封装以及lua/c接口编程
- skynet reactor 网络模型封装
- socket/socketchannel封装
- 手撕高性能c服务
- lua编程以及lua/c接口编程
skynet重要组件以及手撕游戏项目
- 基础接口 skynet.send,skynet.call,skynet.response
- 广播组件 multicastd
- 数据共享组件 sharedatad datasheet
- 手撕万人同时在线游戏
分布式API网关
分布式API网关是一种用于管理和路由API请求的系统,它可以将客户端请求分发到不同的后端服务,并提供一致的接口和功能。与传统的单体应用程序中的API网关相比,分布式API网关更适用于大规模、高并发和分布式系统的场景。
以下是分布式API网关的一些特点和优势:
水平扩展、负载均衡、服务发现和注册、安全性和认证、限流和熔断、监控和日志。
高性能web网关Openresty
- Nginx与lua模块
- Openresty访问Redis,MySQL
- Restful API接口开发
- Openresty性能分析
Kong动态负载均衡与服务发现
- nginx,openresty,Kong之间的“苟.且”
- 动态负载均衡的原理
- 服务发现实现的原理
- Serverless
- 监控,故障检测与恢复
- 代理层缓存与响应服务
- 系统日志
SPDK助力MySQL数据落盘,让性能腾飞(基础设施)
SPDK(Storage Performance Development Kit)是一个开源项目,旨在提供高性能、低延迟的存储软件栈。SPDK通过利用现代CPU架构和基于用户态的驱动程序来实现高效的存储解决方案,从而提高存储应用程序的性能和扩展性。
SPDK框架的主要特点包括:
用户态运行、零拷贝、NVMe加速、多核优化、块设备和对象存储、可移植性。
SPDK广泛应用于云计算、大数据分析、边缘计算等领域,为存储解决方案的开发和优化提供了强大的工具和支持。
SPDK文件系统设计与实现
- NVMe与PCle的原理
- NVMe Controller与bdev之间的rpc
- blobstore与blob的关系
文件系统的posix api实现
- 4层结构设计vfs
- spdk的异步改造posix同步api
- open/write/read/close的实现
文件系统的性能测试与承接mysql业务
- LD_PRELOAD更好mysql系统调用实现
- iodepth 讲解
- 随机读,随机写,顺序读,顺序写
高性能计算CUDA
CUDA是由NVIDIA推出的一种并行计算平台和编程模型,用于利用GPU(Graphics Processing Unit,图形处理器)进行高性能计算。CUDA提供了一套丰富的API和工具,使开发者能够以并行的方式利用GPU来加速各种计算任务。
gpu并行计算cuda的开发流程
- cpu+gpu的异构计算
- 计算机体系结构中的gpu
- cuda的环境搭建nvcc 与srun的使用
- cuda的向量加法与矩阵乘法
- MPI与CUDA
音视频编解码中的并行计算
- cuda的h264编解码
- cuda的mpeg编解码
- ffmpeg的cuda支持
并行计算与异步网络引擎 workflow
workflow 的应用场景
- workflow的编程范式与设计理念
- mysql/redis/kafka/dns的请求实现
- parallel处理与任务组装
workflow 的组件实现
- 线程池实现
- DAG图任务
- msgqueue的实现
- 纯c的jsonparser实现
物联网通信协议 mqtt的实现框架mosquitto
MQTT是一种轻量级的物联网通信协议,旨在实现设备和应用程序之间的高效通信。MQTT协议基于发布/订阅模式,具有低开销、可靠性强和易于实现等特点,在物联网领域得到了广泛应用。
以下是MQTT协议的一些关键特点:
轻量级、发布/订阅模式、QoS级别、建立在TCP/IP之上、保留消息、遗嘱消息。
由于其轻量级和灵活性,MQTT协议被广泛应用于物联网设备和应用程序之间的通信,尤其适用于传感器数据采集、远程控制和实时监控等场景。
mqtt的高效使用场景
- mqtt的发布订阅模式
- 解决低带宽网络环境的数据传输
- 3种Qos等级
- OAuth与JWT的安全认证
mqtt的broker
- mqtt的遗嘱机制
- 发布订阅的过滤器
- mosquitto的docker部署
- mqtt的日志实时监控
Docker
Docker是一个开源的容器化平台,用于在轻量级、可移植和隔离的环境中构建、打包和运行应用程序。通过使用Docker,您可以将应用程序及其依赖项打包成一个称为"容器"的标准单元,然后在不同的环境中部署和运行这些容器,而无需担心环境差异和依赖关系。
以下是Docker的一些关键特点:
容器化、轻量级、可移植性、管理工具、应用程序生态系统。
Docker风光下的内核功能
- 进程 namespace
- UTS namespace
- IPC namespace
- 网络 namespace
- 文件系统 namesapce
- cgroup的资源控制
Docker容器管理与镜像操作
- Docker 镜像下载与镜像运行
- Docker 存储管理
- Docker 数据卷
- Docker 与容器安全
Docker网络官理
- 5种Docker网络驱动
- pipework跨主机通信
- OvS划分vlan与隧道模式
- GRE实现跨主机Docker间通信
Docker云与容器编排
- Dockerfile的语法流程
- 编排神器 Fig/Compose
- FIynn体系架构
- Docker改变了什么?
Kubernetes
Kubernetes(通常称为"k8s")是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。Kubernetes旨在提供一个统一的接口,简化了分布式系统的部署、维护和扩展,以便更好地实现微服务架构和云原生应用程序。
以下是Kubernetes的一些关键特点:
应用程序编排、自动伸缩、服务发现和负载均衡、状态管理、插件机制、可移植性。
k8s环境搭建
- k8s集群安全设置
- k8s集群网络设置
- k8s核心服务配置
- kubectI 命令工具
- yaml 文件语法
Pod与Service的用法
- Pod的管理配置
- Pod升级与回滚
- DNS服务之于k8s
- http 7层策略与TLS安全设置
k8s集群管理的那些事儿
- Node的管理
- namespace隔离机制
- k8s集群日志管理
- k8s集群监控
k8s二次开发与k8s API
- RESTful接口
- API聚合机制
- API组
- Go访问k8s API
性能与测试工具
测试框架gtest以及内存泄漏检测
- googletest与googlemock文件
- 函数检测以及类测试
- test fixture测试夹具
- 类型参数化
- 事件测试
- 内存泄漏
- 设置期望,期待参数,调用次数,满足期望
性能工具与性能分析
- MySQL性能测试工具 mysqlslap
- Redis性能测试工具 redis-benchmark
- http性能测试工具 wrk
- Tcp性能测试工具 TCPBenchmarks
- 磁盘,内存,网络性能分析
火焰图的生成原理与构建方式
- 火焰图工具讲解
- 火焰图使用场景与原理
- nginx 动态火焰图
- MySQL 火焰图
- Redis 火焰图
观测技术bpf与ebpf
BPF是一种内核级别的观测技术,它最初是为了在网络设备上过滤数据包而开发的。随着时间的推移,BPF已经演变为一种通用的观测技术,可以用于监控各种系统活动,如网络、存储、CPU、内存等。
eBPF是BPF的一个扩展版本,它可以在Linux内核中动态注入和运行代码。通过使用eBPF,开发者可以编写用户空间程序,并将其注入到内核中,以便在内核中执行自定义的观测逻辑。eBPF提供了一种安全和高效的方式来监控内核级别的活动,同时避免了传统的内核模块开发所面临的安全和稳定性问题。
内核bpf的实现原理
- 跟踪,嗅探,采样,可观测的理解
- 动态hook: kprobe/ uprobe
- 静态hook: tracepoint和USDT
- 性能监控计时器 PMC模式
- cpu的观测 taskset的使用
- BPF工具 bpftrace,BCC
bpf对内核功能的观测
- 内存观测kmalloc与vm_area_struct
- 文件系统观测vfs的状态
- 磁盘io的观测bitesize,mdflush
- bpf对网络流量的统计
- bpf对redis-server观测
- 网络观测tcp_ connect,tcp_accept,tcp_close
内核源码机制
内核源码机制通常指的是操作系统内核的源代码组织结构和编写风格。Linux内核作为一个开源项目,其源代码机制具有
一定的特点:模块化、分层结构、统一的风格、大量注释、设备驱动模型、内核API。
进程调度机制哪些事儿
- qemu调试内存
- 进程调度cfs与其他的四个调度类
- task_struct结构体
- RCU机制与内存优化屏障
内核内存管理运行机制
- 虚拟内存地址布局
- SMP/NUMA模型
- 页表与页表缓存原理
- 伙伴系统实现
- 块分配(SIab/SIub/SIob) 原理实现
- brk/kmalloc/vmalloc 系统调用流程
文件系统组件
- 虚拟文件系统vfs
- Proc文件系统
- super_block与inode结构体
- 文件描述符与挂载流程
分布式数据库
分布式数据库是指将数据存储在多个物理位置上,并通过网络连接进行管理和访问的数据库系统。与传统的集中式数据库相比,分布式数据库具有以下特点:数据分片、高可用性、扩展性、分布式事务、数据一致性、数据分发和路由。
不一样的kv存储RocksDB的使用场景
- 前缀搜索
- 低优先级写入
- 生存时间的支持
- Transactions
- 快照存储
- 日志结构的数据库引擎
TiDB存储引擎的原理
- TiKV的Key-Value存储引擎
- 基于RBAC的权限管理
- 数据加密
TiDB集群方案与Replication原理
- 集群三个组件TiDB Server,PD Server,TiKV Server
- Raft协议讲解
- OLTP与OLAP
分布式文件系统
分布式文件系统(Distributed File System,DFS)是一种将文件存储在多个物理节点上的文件系统。与传统的本地文件系统相比,分布式文件系统具有以下特点:数据分布和存储、可扩展性、高可用性、数据一致性、分布式文件访问。
内核级支持的分布式存储Ceph
- ceph的集群部署
- monitor与OSD
- ceph 5个核心组件
- ceph集群监控
- ceph性能调调优与benchmark
分布式ceph存储集群部署
- 同步机制
- 线性扩容
- 如何实现高可用
- 负载均衡
分布式协同
注册服务中心Etcd
- etcd配置服务、服务发现、集群监控、leader选举、分布式锁
- etcd体系结构详解(gRPC, WAL,Snapshot、Bo ItDB、Raft)
- etcd存储原理深入剖析(B树、B+树)
- etcd读写机制以及事务的acid特性分析
- raft共识算法详解(leader选举+日志复制)
协同事件 用户态文件系统fuse(项目)
- fuse的使用场景
- 文件系统读写事件
- fuse的实现原理
- /dev/fuse的作用
快播核心技术揭秘 P2P框架的实现
- 网关NAT表分析
- NAT类型,完全锥型NAT,对称NAT,端口限制锥形NAT,IP限制锥型NAT
- 代码逻辑实现NAT类型检测
- 网络穿透的原理
- 网络穿透的3种情况
dkvstore实现
DKVStore是一种分布式键值存储系统。“DKV"代表"Distributed Key-Value”,即分布式键值。它类似于传统的键值存储(Key-Value Store),但具有分布式的特性。
在DKVStore中,数据被组织成键值对的形式,每个键对应一个唯一的值。与传统的键值存储不同的是,DKVStore将数据存储在多个节点上,以实现分布式的数据存储和访问。
DKVStore具有以下特点:分布式存储、高可用性、数据一致性、高性能、灵活性。
kv存储的架构设计
- 存储节点定义
- tcp server/client
- hash数据存储
- Iist数据存储
- skiptable数据存储
- rbtree数据存储
网络同步与事务序列化
- 序列化与反序列化格式
- 建立事务与释放事务
- 线程安全的处理
内存池的使用与LRU的实现
- 大块与小块分配策略
- 内存回收机制
- 数据持久化
KV存储的性能测试
- 网络测试tps
- 吞吐量测试
- go,lua,java多语言支持
- hash/Iist/skiptable/rbtree 测试
图床共享云存储(上线项目)
fastdfs架构分析和配置
- fastdfs架构分析
- 快速配置fastdfs
- 上传文件逻辑分析
- 下载文件逻辑分析
文件传输和接口设计
- http接口设计
- 图床数据库设计
- 图床文件 上传,下载,分享功能实现
- 业务流程实现
容器化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实现未读消息机制
- 如何实现群消息的推送
- 单聊消息推送、拉取优缺点
文件服务器和docker部署
- 在线文件传输机制分析
- 离线文件传输机制分析
- etcd微服务注册与发现
- docker制作与部署
产品上云公网发布/公网测试上线
- 单元测试案例
- testbench如何设计
- IM项目性能压测
- 定制私有功能
- 拓展新功能(代码)
- 云服务器部署
AI助手
AI助手架构设计与需求分析
- chatgpt的构想与需求分析
- 基于开源项目初步构建项目
- gin框架实现代理服务
接口功能设计
- grpc与protobuf的使用流程
- token计数器与tokenizer的服务封装
- 敏感词识别服务
向量数据库与连接池设计
- redis实现上下文管理
- 问题记录保存
- web端协议解析
- OneBot协议
服务部署上线
- docker stack 服务部署
- wrk接口吞吐量测试
- 线上节点监控
魔兽世界后端TrinityCore
魔兽世界的后端服务器是游戏服务器的核心组件,负责处理玩家的登录、游戏世界的管理、NPC行为、任务系统、战斗机制等各种游戏逻辑。TrinityCore 是一个知名的魔兽世界后端服务器项目,它是一个基于 C++ 编写的开源项目,旨在模拟魔兽世界游戏服务器的行为。
网络模块实现
- boost.asio跨平台网络库
- boost.asio核心命名空间以及异步io接口
- boost.asio在TrinityCore 中的封装
- 网络模块应用实践
地图模块实现
- 地图模块抽象: map、 area、grid、cell
- 地图模块驱动方式
- AOI 核心算法实现
- AABB 碰撞检测实现
- A*寻路算法实现
战斗模块实现
- 技能设计以及实现
- AI 设计
- 怪物管理
- 副本设计
TrinIityCore 玩法实现
- 用户玩法实现-任务系统
- 数据配置以及数据库设计
- 触发机制实现
- 多人玩法实现-工会设计