Linux C/C++高级全栈开发(后端/游戏/嵌入式/高性能网络/存储/基础架构)

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 玩法实现

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

命名管道:简单案例实现

📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解了什么是命名管道,匿名管道和命名管道的…

咨询+低代码,强强联合为制造业客户赋能

内容来自演讲:沈毅 | 遨睿智库 | 董事长 & 王劭禹 | 橙木智能 | 联合创始人 摘要 文章主要讲述了智库董事长沈毅创办广告公司的经历,以及他在管理公司过程中遇到的问题和挑战,最后通过与明道云以及橙木智能联合创始人王邵禹老师的合作&…

java二十章多线程

概念 有很多工作是可以同时完成的,这种思想放在Java中被称为并发,并发完成每一件事被称为线程。 程序员可以在程序中执行多个线程,每一个线程完成一个功能//与其他线程并发执行,这种机制被称为多线程,并不算所有编程…

如何提高3D建模技能?

无论是制作影视动画还是视频游戏,提高3D建模技能对于你的工作都至关重要的。那么如何能创建出精美的3D模型呢?本文给大家一些3D建模技能方面的建议。 3D建模通过专门的软件完成,涉及制作三维对象。这项技能在视频游戏开发、建筑、动画和产品…

FFmpeg架构全面分析

一、简介 它的官网为:https://ffmpeg.org/,由Fabrice Bellard(法国著名程序员Born in 1972)于2000年发起创建的开源项目。该人是个牛人,在很多领域都有很大的贡献。 FFmpeg是多媒体领域的万能工具。只要涉及音视频领…

【Vulnhub 靶场】【DriftingBlues: 9 (final)】【简单】【20210509】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/driftingblues-9-final,695/ 靶场下载:https://download.vulnhub.com/driftingblues/driftingblues9.ova 靶场难度:简单 发布日期:2021年05月09日 文件大小:738 …

达索系统SOLIDWORKS 2024工程图新功能

工程图概述 设计模型不仅能比绘制直线更快;SOLIDWORKS 从模型中生成工程图,模型的参数和几何关系在工程图中被保留,这样工程图可反映模型的设计意图;模型或工程图中的更改反映在其相关文件中,这样更改起来更容易&…

map文件解析

Map文件内容分为以下五段: 1)Section Cross References:模块、段(入口)交叉引用;(ASR编译生成的map文件没有输出该段信息) 2)Removing Unused input sections from the image:移除未使用的模块&#xff1…

【Linux】基础IO--文件基础知识/文件操作/文件描述符

文章目录 一、文件相关基础知识二、文件操作1.C语言文件操作2.操作系统文件操作2.1 比特位传递选项2.2 文件相关系统调用2.3 文件操作接口的使用 三、文件描述符fd1.什么是文件描述符2.文件描述符的分配规则 一、文件相关基础知识 我们对文件有如下的认识: 1.文件 …

java设计模式学习之【建造者模式】

文章目录 引言建造者模式简介定义与用途实现方式: 使用场景优势与劣势建造者模式在spring中的应用CD(光盘)的模拟示例UML 订单系统的模拟示例UML 代码地址 引言 建造者模式在创建复杂对象时展现出其强大的能力,特别是当这些对象需…

带大家做一个,易上手的家常炒鸡蛋

想做这道菜 先准备五个鸡蛋 然后将鸡蛋打到碗里面 然后 加小半勺盐 这个看个人喜好 放多少都没问题 不要太咸就好 将鸡蛋搅拌均匀 起锅烧油 油温热了之后 放三个干辣椒进去炒 干辣椒烧黑后 捞出来 味道就留在油里了 然后 倒入鸡蛋液 翻炒 注意翻炒 不要粘锅底 或者 一面糊…

嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

一、前言: 这个项目主要分为两部分,客户端(ARM板端)负责利用OpenCV采集人脸数据,利用TCP将人脸数据发送给服务器,然后服务器根据人脸数据进行人脸识别,将识别后的结果返还给客户端,客…

【Linux】环境变量

文章目录 1. 环境变量的概念2. 常见的环境变量3. 查看环境变量的方法4. 测试PATH5. 和环境变量有关的命令6. 环境变量的组织方式7. 通过代码获取环境变量7.1 通过命令行的第三个参数7.2 通过第三方变量environ 8. 通过系统调用获取9. 环境变量的全局属性 1. 环境变量的概念 **…

函数指针数组指针数组传参的本质字符指针(进阶篇)

🚀 作者:阿辉不一般 🚀 你说呢:不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞…

【带头学C++】----- 八、C++面向对象编程 ---- 8.5 struct结构体类型增强使用说明

目录 8.5 struct结构体类型增强使用说明 8.5.1 C结构体可以定义成员函数 8.5.2 c中定义结构体变量可以不加struct关键字 8.6 bool布尔类型关键字 8.5 struct结构体类型增强使用说明 第六章对结构体的使用、内存对齐以及数组、深拷贝和浅拷贝进行了一个详细的说明&#xff0c…

带键扫的LED专用驱动方案

一、基本概述 TM1650 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路。内部集成有MCU输入输出控制数字接口、数据锁存器、LED 驱动、键盘扫描、辉度调节等电路。TM1650 性能稳定、质量可靠、抗干扰能力强,可适用于24 小时长期…

对抗产品团队中的认知偏误:给产品经理的专家建议

今天的产品经理面临着独特的挑战。他们不仅需要设计和构建创新功能,还必须了解这些功能将如何为客户带来价值并推进关键业务目标。如果不加以控制,认知偏差可能会导致您构建的内容与客户想要的内容或业务需求之间不一致。本文将详细阐述产品经理可以避免…

【EI会议征稿】第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024)

第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024) 2024 4th International Conference on Applied Mathematics, Modelling and Intelligent Computing 第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024)将于…

超详细!Opencv人脸识别!附源码!

一、新建环境 注意!!确定后需要关闭项目,重新打开,终端的环境才会变化!! 二、下载安装包(只需要3个即可) 1. 下载dlib包 pip install dlib-19.19.0-cp38-cp38-win_amd64.whl.whl …

XTU OJ 1339 Interprime 学习笔记

链接 传送门 代码 #include<bits/stdc.h> using namespace std;const int N1e610; //78498 我计算了一下&#xff0c;6个0的范围内有这么多个素数&#xff0c;所以开这么大的数组存素数 //计算的代码是一个循环 int prime[80000]; int a[N],s[N];//s数组是前缀和数组b…