数据库分库分表从理论到实战
1.分库分表基础理论
1.1 分库分表基本概念
- 定义:分库分表是一种将单一数据库中的数据分散存储到多个数据库或表中的技术方案,其核心思想是通过"分而治之"的方式解决数据库性能瓶颈问题。
- 分库:将表按业务或数据量拆分到不同数据库中。是指将表按业务或数据量拆分到不同数据库中。例如,一个电商系统可以将用户数据、订单数据和商品数据分别存储在不同的数据库中
。这种拆分可以是物理上的,即不同的数据库实例运行在不同的服务器上;也可以是逻辑上的,即同一个数据库实例中的不同数据库。 - 分表:将单表数据按规则拆分到多个表中。就是将单表数据按规则拆分到多个表中。例如,一个包含10亿条用户数据的表可以拆分为100个表,每个表存储1000万条数据。分表可以是水平拆分(按行拆分)或垂直拆分(按列拆分)。
- 核心目的:解决单库单表性能瓶颈,提高系统扩展性和可用性 ,突破单机存储限制,实现业务模块解耦
1.2 为什么需要分库分表
- 单库性能瓶颈:这是推动分库分表的最大因素。当并发请求量达到一定规模时,单台数据库服务器无法满足性能需求。例如,MySQL默认的最大连接数为151,在电商大促期间可能远远不够。接数、CPU、内存、磁盘IO等资源限制。
- 单表数据量过大:会导致B+树层级变高,查询性能下降。MySQL的InnoDB引擎使用B+树索引结构,当单表数据超过500万行时,索引层级可能从3层增加到4层,导致查询时需要多一次磁盘IO。此外,大数据量表也会导致备份、维护和DDL操作时间过长。
- 业务发展需求:微服务架构演进,业务模块解耦。随着微服务架构的流行,业务模块需要独立部署和扩展,不同业务模块对数据库的要求(如事务隔离级别、读写比例等)可能不同,分库可以实现专库专用。单台服务器的存储容量有限,而业务数据可能持续增长,分库分表提供了理论上无限的存储扩展能力。
1.3 分库分表适用场景
- 单表数据量接近或超过500万行
- 数据库备份/维护时间过长
- 高并发场景下数据库连接数不足
- 业务模块需要独立部署和扩展
2.分库分表核心策略
2.1 垂直拆分
- 垂直分库:按业务模块拆分到不同库
- 示例:用户库、订单库、商品库分离
- 优点:业务解耦,专库专用 ,减少单库压力,提升性能,便于微服务架构开发设计
- 例如:在电商系统中:
用户库(user_db):存储用户注册、登录、个人信息等数据
订单库(order_db):存储订单、支付、物流等数据
商品库(product_db):存储商品信息、库存、类目等数据
- 垂直分表:按字段拆分大表,将不常用或大字段拆分到扩展表中。
- 示例:将用户表拆分为基础信息表和扩展信息表
- 优点:减少IO,提高缓存效率
- 例如:拆分用户表:
user_basic:用户ID、用户名、密码、手机号等核心字段
user_extend:个人简介、兴趣爱好、教育经历等扩展字段
2.2 水平拆分
水平拆分是指按照某种规则将同一表的数据分散到多个库或表中,包括水平分库和水平分表两种方式:
- 水平分库:同一表数据分散到不同库
- 示例:订单表按订单ID哈希分到多个库 。例如,订单表可以按订单ID哈希值分散到10个库中,每个库存储一部分订单数据。这种方式通常需要配合分布式ID生成策略,确保ID的唯一性和有序性。
- 水平分表:单表数据分散到多个具有相同表结构的表 。
- 示例:订单表可以拆分为order_0到order_9共10个表,每个表存储订单ID以特定数字结尾的记录。
- 优点:解决单表数据量过大问题 ,提升高并发处理能力(不同分片可并行处理),数据分布均匀,避免热点问题。
2.3 混合拆分策略
- 先垂直后水平的分层拆分
- 按业务垂直分库+按数据量水平分表
例如电商系统:
- 先垂直拆分为用户库、订单库、商品库等
- 对订单库中的订单表,再水平拆分为order_0到order_9
- 对用户库中的用户表,按用户ID范围拆分为user_0到user_4
这种混合策略结合了垂直拆分和水平拆分的优点,既能实现业务解耦,又能解决单表数据量过大的问题。
3.分片算法与路由机制
3.1 常用分片算法
-
哈希分片:取模(hash(key)%N)或一致性哈希
- 优点:数据分布均匀
- 缺点:扩容需数据迁移
-
范围分片:按ID或时间范围划分
- 优点:便于范围查询
- 缺点:可能产生热点
-
目录分片:维护分片映射表
- 优点:灵活度高
- 缺点:需额外维护映射表
3.2 分片键选择原则
分片键的选择直接影响分库分表的效果,应遵循以下原则:
- 选择查询频率高的字段:如订单系统常用order_id查询,则应选择order_id作为分片键。
- 避免选择有明显倾斜的字段:如按性别分片会导致数据分布不均。
- 考虑业务增长模式:如按时间分片需考虑数据随时间增长的均匀性。
- 常用分片键包括:用户ID、订单ID、时间戳等 。
3.3 分片路由设计
- 客户端路由(Sharding-JDBC)
// Sharding-JDBC示例配置
spring.shardingsphere.datasource.names=ds0,ds1
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order_$->{0..15}
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{order_id % 16}
- 代理层路由(MyCat/Sharding-Proxy) :通过中间件代理完成路由。这种方式对应用透明,但多一层网络开销。
- 分布式ID生成方案:分库分表需要全局唯一的ID生成方案
雪花算法(Snowflake):时间戳+机器ID+序列号
数据库号段:批量获取ID段,减少数据库访问
UUID:简单但无序,不适合作为数据库主键
雪花算法示例:
// 雪花算法ID生成示例
public class SnowflakeIdGenerator {private static final long START_TIMESTAMP = 1480166465631L;private static final long SEQUENCE_BITS = 12L;private static final long WORKER_ID_BITS = 5L;private static final long MAX_WORKER_ID = -1L ^ (-1L << WORKER_ID_BITS);private long workerId;private long sequence = 0L;private long lastTimestamp = -1L;public synchronized long nextId() {long timestamp = timeGen();if (timestamp < lastTimestamp) {// 处理时钟回拨throw new RuntimeException("Clock moved backwards");}if (lastTimestamp == timestamp) {sequence = (sequence + 1) & ((1 << SEQUENCE_BITS) - 1);if (sequence == 0) {timestamp = tilNextMillis(lastTimestamp);}} else {sequence = 0L;}lastTimestamp = timestamp;return ((timestamp - START_TIMESTAMP) << (WORKER_ID_BITS + SEQUENCE_BITS))| (workerId << SEQUENCE_BITS)| sequence;}
}
4.分库分表技术实现
4.1.ShardingSphere
ShardingSphere是Apache顶级项目,提供了一套完整的分库分表解决方案。它包含三个主要组件:
- Sharding-JDBC:轻量级Java框架,在JDBC层提供分库分表能力
- Sharding-Proxy:透明化的数据库代理,支持所有兼容MySQL协议的客户端
- Sharding-Sidecar:面向云原生的数据库代理
核心特性:
- 支持多种分片策略和算法
- 提供分布式事务和读写分离能力
- 兼容大多数ORM框架(JPA/Hibernate/MyBatis等)
- 提供弹性伸缩和治理能力
架构原理:
- 解析引擎:将SQL解析为抽象语法树(AST)
- 路由引擎:根据分片规则确定数据节点
- 改写引擎:将逻辑SQL改写为可在真实节点上执行的SQL
- 执行引擎:多线程执行器,支持内存限制和连接限制模式
- 归并引擎:将多个数据节点的结果合并为单一结果集
4.2.MyCat:基于Cobar二次开发
MyCat是基于Cobar二次开发的开源数据库中间件,主要特点包括:
- 支持MySQL协议,可作为数据库代理
- 提供分库分表、读写分离功能
- 支持全局序列号生成
- 支持数据自动迁移
MyCat的执行流程:
- SQL解析:解析客户端发送的SQL语句
- 路由分析:确定SQL应该路由到哪些数据节点
- SQL改写:根据路由结果改写原始SQL
- SQL执行:并行执行到多个数据节点
- 结果合并:将多个节点的结果合并返回
4.3.TDDL:阿里开源方案,功能有限
TDDL(Taobao Distributed Data Layer)是阿里开源的分布式数据访问层,特点包括:
- 动态数据源管理
- 支持分库分表规则
- 提供主备切换和故障转移
- 功能相对简单,适合特定场景
其他方案:
- Vitess:YouTube开发的MySQL集群管理工具,适合超大规模场景
- Cobar:早期的分库分表中间件,已逐渐被淘汰
- Atlas:Qihoo 360开源的MySQL代理,功能相对简单
5.分库分表实践与挑战
5.1 实施步骤
- 评估需求:确定是否真的需要分库分表,评估数据量和访问模式
- 设计分片策略:选择合适的分片键和分片算法
- 选择技术方案:根据团队技术栈选择合适的技术实现
- 数据迁移:设计平滑迁移方案,避免停机
- 测试验证:进行性能测试和功能验证
- 上线监控:上线后密切监控系统表现
5.2 常见问题与解决方案
跨分片查询:需要查询多个分片并合并结果,解决方案:
- 使用冗余字段避免跨分片查询
- 使用广播表(小表在所有分片冗余存储)
- 使用全局索引表
分布式事务:跨分片操作需要保证原子性。解决方案:
- 使用XA协议等强一致性方案
- 采用最终一致性模式(如TCC、SAGA)
扩容难题:增加分片数量时数据迁移困难。解决方案:
- 设计时可考虑未来扩展(如一致性哈希)
- 使用在线数据迁移工具
- 采用逻辑分片+物理分片双层架构
全局唯一ID:需要跨分片的唯一ID生成方案,解决方案:
- 使用雪花算法等分布式ID生成器
- 使用数据库号段模式
- 使用UUID(但无序)
5.3 性能优化建议
- 合理设置分片数量:避免过多分片导致管理复杂
- 优化分片键选择:选择区分度高、分布均匀的字段
- 使用缓存层:如Redis缓存热点数据,减少数据库访问
- 读写分离:将读操作路由到从库,减轻主库压力
- 监控与调优:持续监控分片负载,必要时调整分片策略
6. 写在最后
分库分表是解决数据库性能瓶颈的有效手段,但也是一把双刃剑。合理的设计和实施可以显著提升系统性能和扩展性,而不当的使用则可能带来复杂性和维护成本,未来发展趋势包括:
- 云原生支持:如ShardingSphere的Sidecar模式,更好支持Kubernetes环境
- 自动化运维:智能化的分片策略调整和负载均衡
- 多模数据库:结合NewSQL和传统关系型数据库的优势
- Serverless架构:按需分配数据库资源,自动弹性伸缩
在实际应用中,建议根据业务特点和技术能力选择合适的分库分表方案,避免过度设计。对于中小型系统,可以考虑先使用读写分离、缓存优化等手段;只有当数据量确实达到一定规模时,再考虑引入分库分表。
相关文章:
数据库分库分表从理论到实战
1.分库分表基础理论 1.1 分库分表基本概念 定义:分库分表是一种将单一数据库中的数据分散存储到多个数据库或表中的技术方案,其核心思想是通过"分而治之"的方式解决数据库性能瓶颈问题。分库:将表按业务或数据量拆分到不同数据库中…...
Java异常处理与File类终极指南
Java异常处理与File类终极指南 目录 异常体系全维度拆解异常处理十五种高阶模式自定义异常企业级实践File类深度探索与NIO进化论分布式系统异常处理架构性能调优与安全防护全网最全异常代码库一、异常体系全维度拆解 1.1 Java异常DNA解析 // 异常类的核心继承关系 public cla…...
pmap中的mode列,脏页,写时复制
写时复制(Copy-on-Write,简称 COW) 是一种计算机编程中的优化技术,主要用于内存或存储资源的管理。其核心思想是:只有在真正需要修改数据时,才会执行实际的复制操作,从而避免不必要的资源开销。…...
通过COM获取正在运行的Excel实例并关闭 c#实现
利用COM对象模型获取正在运行的Excel实例并关闭。示例代码如下: using Excel Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; try { Excel.Application excelApp (Excel.Application)Marshal.GetActiveObject("Excel.Applicatio…...
运行在华为云kubernetes应用接入APM服务
1 APM概述 在云时代微服务架构下应用日益丰富,纷杂的应用异常问题接踵而来。应用运维面临巨大挑战: 分布式应用关系错综复杂,应用性能问题分析定位困难,应用运维面临如何保障应用正常、快速完成问题定位、迅速找到性能瓶颈的挑战…...
虚幻引擎5-Unreal Engine笔记之摄像头camera
虚幻引擎5-Unreal Engine笔记之摄像头camera code review! 目录 第一部分:摄像头的基础概念 1.1 UE5 中摄像头的定义与作用1.2 UE5 中摄像头的类型与分类 第二部分:摄像头的代码结构与分类 2.1 摄像头是类还是组件?2.2 组件的本质ÿ…...
mysql的基础命令
1.SQL的基本概念 SQL 是用于管理和操作关系型数据库的标准编程语言。是所有关系型数据库(如 MySQL、PostgreSQL、Oracle 等)的通用语言。 SQL语句分类 DDL: Data Defination Language 数据定义语言 CREATE,DROP,ALTER DML: Da…...
去中心化算力池:基于IPFS+智能合约的跨校GPU资源共享平台设计
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、问题背景:高校算力孤岛的困境 现状痛点 各高校GPU集群利用率差异显著&…...
数据库(二):ORM技术
什么是 ORM? ORM(Object-Relational Mapping) 是一种用于实现 对象模型(面向对象)与关系模型(数据库)之间映射的技术,使程序员可以通过操作对象的方式访问数据库数据,而无…...
Oracle基础知识
目录 1.别名的使用 2.AND的优先级高于OR 3.where后面可以接别名,order by后面不可以 4.Oracle中SQL的执行顺序(重点) 5.dual万用表 6.是否区分大小写 7.Oracle常用数据类型 8.Oracle常用函数 (1)length字符、lengthb字节和cast强制类型转换 (2)数据类型转…...
使用 vite-plugin-dynamic-base 实现运行时动态设置上下文路径
我们一般会在编译之前设置上下文,那么如何在编译之后动态设置上下文的路径? 本文使用的技术栈是 Go(Gin) Vue.js(Vite) 本文使用到的第三方包:https://github.com/chenxch/vite-plugin-dynam…...
spark-shuffle 类型及其对比
1. Hash Shuffle 原理:将数据按照分区键进行哈希计算,将相同哈希值的数据发送到同一个Reducer中。特点:实现简单,适用于数据分布均匀的场景。但在数据分布不均匀时,容易导致某些Reducer处理的数据量过大,产…...
力扣-快乐数
1.题目要求 2.题目链接 202. 快乐数 - 力扣(LeetCode) 3.题目分析 首先,因为需要频繁地用到数字变为各个位上的平方的过程,我们可以将"对于一个正整数,每一次将该数替换为它每个位置的数字的平方和"这一操作抽象出来,定义成一个…...
每日算法刷题Day10 5.19:leetcode不定长滑动窗口求最长/最大4道题,结束定长滑动窗口,用时1h
不定长滑动窗口 不定长滑动窗口主要分为三类:求最长子数组,求最短子数组,以及求子数组个数。 注:滑动窗口相当于在维护一个队列。右指针的移动可以视作入队,左指针的移动可以视作出队。 滑动窗口【基础算法精讲 03】…...
FreeSWITCH 纯内网配置
纯内网,且同一个网段,Fs 可简化配置,要点是: 1. 不需要事先配置 directory,任意号码都可以注册,且无挑战 2. 呼叫无挑战 不需要考虑那么多安全问题 配置如下: 1. 全局变量 <X-PRE-PROCESS cmd"…...
STL中list的模拟
这里写目录标题 list 的节点 —— ListNodelist 的 “导览员” —— ListIteratorlist 的核心 —— list 类构造函数迭代器相关操作容量相关操作 结尾 在 C 的 STL(标准模板库)中,list 是一个十分重要的容器,它就像一个灵活的弹簧…...
【iOS】类结构分析
前言 之前我们已经探索得出对象的本质就是一个带有isa指针的结构体,这篇文章来分析一下类的结构以及类的底层原理。 类的本质 类的本质 我们在main函数中写入以上代码,然后利用clang对其进行反编译,可以得到c文件 可以看到底层使用Class接…...
Android 万能AI证件照 v1.3.2
在日常的生活和工作场景里,证件照的身影随处可见。找工作投简历时,它是展现你形象的 “第一张名片”;办理各类证件,缺了它可不行;参加各种考试报名,同样需要它。可以说,证件照虽小,却…...
【Java】封装在 Java 中是怎样实现的?
包 关于包有两个关键字 package : 声明当前类属于哪个包 和 import : 允许当前类使用其他类或接口时不使用全限定名 , 也就是导包 . IDEA 的普通项目文件包括 src : 包含源码和资源文件 和 out : 包含编译产物字节码文件 . 在 IDEA 开发环境建包会在 src 源码目录中生成 , 可…...
牛客网 NC14736 双拆分数字串 题解
牛客网 NC14736 双拆分数字串 题解 题目分析 解题思路 通过分析,我们可以发现: 当n≤3时,无法构造出双拆分数字串,因为数字位数太少对于n>3的情况,我们可以构造两种特殊形式: 当n为奇数时,…...
超长文本注意力机制如何突破传统 O(n²) 瓶颈
介绍了当前在超长文本(可达百万级及以上 Token)生成与预测中,注意力机制如何突破传统 O(n) 瓶颈,并阐释多种高效注意力算法如何支持 超长上下文处理能力。 概览 当前主流 Transformer 在处理长序列时,由于每个 Token…...
异丙肌苷市场:现状、挑战与未来展望
摘要 本文聚焦异丙肌苷市场,深入分析了其市场规模与增长趋势、应用价值与市场驱动因素、面临的挑战以及竞争格局。异丙肌苷作为一种具有重要应用价值的改性核苷衍生物,在药物研发和治疗领域展现出潜力,但市场发展也面临诸多挑战。文章最后为…...
JAVA面向对象——对象和类的基本语法
JAVA面向对象——对象和类的基本语法 一、面向对象编程基础 1. 程序中的数据存储方式 基本类型:变量(如 int max 15;)。数据结构:数组(一维/二维)、对象(特殊数据结构,用于存储复…...
【windows】音视频处理工具-FFmpeg(合并/分离)
一、FFmpeg介绍 FFmpeg是一个开源的跨平台音视频处理框架。 法国计算机程序员 Fabrice Bellard 于 2000 年创建。 “FF”(代表 “Fast Forward”,快进之意)与 “mpeg”(流行的视频压缩标准 MPEG,即运动图像专家组&am…...
Java并发编程:从基础到高级实战
在现代软件开发中,并发编程已成为不可或缺的核心技能。随着多核处理器的普及和分布式系统的发展,能否编写高效、线程安全的并发程序直接决定了应用程序的性能和可靠性。Java作为一门成熟的企业级编程语言,提供了丰富的并发编程工具和API&…...
在 Excel 中使用东方仙盟软件————仙盟创梦IDE
安装插件 用仙盟创梦编写插件代码 源码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ExcelDna.Integration;namespace 东方仙盟.仙盟创梦IDE_招标系统 {public static class 仙盟创梦_招标专…...
win7无线网络名称显示为编码,连接对应网络不方便【解决办法】
使用多个网络时可能需要切换到打印机的网络来打印东西,但是win7的编码问题导致不知道哪个网络是对应网络,可以使用批处理命令来自动连接道指定网络 将这个代码用文本文件打开后粘贴,然后另存为ansi格式的bat文件 代码中使用两种方式进行连接…...
.NET 10 - 尝试一下Minimal Api的Validation新特性
1.简单介绍 2025年11月微软将会发布.NET10,这是LTS(Long Term Support)版本。当前.NET10已经处于Preview4版本,微软对Runtime, Library, SDK, C#, Asp.NET Core, MAUI等都做了很多enhancement。近些年微软对Minimal Api一直在持续地更新。在.NET8中, Mi…...
C# Task 与 SynchronizationContext
示例代码 using System; using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks;namespace Test {internal class Program{static void Main(string[] args){_mainThreadSynchronizationContext new ThreadSynchronizationContext(&qu…...
iOS Runtime与RunLoop的对比和使用
Runtime 机制 核心概念 Objective-C 的动态特性:Objective-C 是一门动态语言,很多工作都是在运行时而非编译时决定的消息传递机制:方法调用实际上是发送消息 objc_msgSend(receiver, selector, ...)方法决议机制:动态方法解析、…...
JavaSenderMail发送邮件(QQ及OFFICE365)
前言 这是今天处理的公司安排的一个任务:客户系统发送offices365邮件报错535 之前没怎么解除邮件业务,于是先搭个简单的QQ邮件Demo熟悉一下吧,没有啥公网内网的麻烦(之前听说有内网限制,我还处理了一些环境上的问题&…...
八股文--JVM(2)
⭐️⭐️6.类加载 类加载器 JVM只会运行二进制文件,类加载器的作用就是将字节码加载到JVM中,从而让程序启动 1.启动类加载器 ----JAVA_HOME/jre/libC编写加载的是JAVA_HOME/jre/lib 2.拓展类加载器 ----JAVA_HOME/jre/lib/ext 3.应用类加载器 ----C…...
【HTML-3】HTML 中的水平线与换行:基础元素详解
在网页设计中,合理的布局和内容分隔对于提升用户体验至关重要。HTML 提供了两个简单但强大的元素来实现这些功能:水平线 (<hr>) 和换行 (<br>)。本文将深入探讨这两个元素的用法、最佳实践以及现代替代方案。 1. 水平线 <hr> 元素 1…...
绿色云计算:数字化转型与可持续发展的完美融合
目录 引言 绿色云计算的概念与定义 云计算的环境影响与绿色云计算的重要性 绿色云计算的技术实践与策略 绿色云计算的案例研究与最佳实践 绿色云计算的挑战与限制 绿色云计算的未来趋势与预测 结论与展望 引言 随着云计算技术的迅猛发展和广泛应用,其环境影…...
AMO——下层RL与上层模仿相结合的自适应运动优化:让人形行走操作(loco-manipulation)兼顾可行性和动力学约束
前言 自从去年24年Q4,我司侧重具身智能的场景落地与定制开发之后 去年Q4,每个月都会进来新的具身需求今年Q1,则每周都会进来新的具身需求Q2的本月起,一周不止一个需求 特别是本周,几乎每天都有国企、名企通过我司找到…...
大模型——多模态检索的RAG系统架构设计
文章目录 1. 系统架构设计核心组件 2. 跨模态向量空间对齐方案方法一:预训练对齐模型(如CLIP)方法二:跨模态投影网络方法三:联合微调 3. 混合检索策略4. 关键问题解决Q: 如何解决模态间向量尺度不一致?Q: 如…...
BUUCTF——Kookie
BUUCTF——Kookie 进入靶场 一个登录页面 左上角提示让以admin身份登录 找到了cookie 应该与cookie相关 测试了一下admin admin没登上 We found the account cookie / monster 回头看了一下 这个是不是账号密码 测试一下 成功登入 但是没有flag 应该还是跟cookie相关 …...
代码随想录算法训练营
力扣684.冗余连接【medium】 力扣.冗余连接Ⅱ【hard】 一、力扣684.冗余连接【medium】 题目链接:力扣684.冗余连接 left x300 视频链接:代码随想录 题解链接:灵茶山艾府 1、思路 可以从前向后遍历每一条边(因为优先让前面的边连上…...
服务器磁盘不同格式挂载区别
在Linux系统中,磁盘不同格式挂载的核心区别主要体现在文件系统类型和挂载方式两个方面,以下为具体差异分析: 一、文件系统类型区别 磁盘格式即文件系统类型的选择直接影响挂载后的性能和功能: 常见文件系统比较 e…...
AI智能分析网关V4人员摔倒检测打造医院/工厂等多场景智能安全防护体系
一、方案背景 随着全球老龄化加剧,我国老年人口占比持续攀升,老年人摔倒伤亡事件频发,居家、养老机构等场景的摔倒防控成为社会焦点。同时,工厂、医院、学校等人员密集场所也易发生意外摔倒安全事故。传统人工监控存在视觉疲劳…...
window 显示驱动开发-准备 DMA 缓冲区
显示微型端口驱动程序必须及时准备 DMA 缓冲区。 当 GPU 处理 DMA 缓冲区时,通常调用显示微型端口驱动程序来准备下一个 DMA 缓冲区,以便提交到 GPU。 若要防止 GPU 耗尽,显示微型端口驱动程序在准备和提交后续 DMA 缓冲区时所花费的时间必须…...
程序设计实践--排序(1)
1、插入排序(一个数组) #include<bits/stdc.h> using namespace std; const int N1e35; int a[N]; int n; int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}for(int i1;i<n;i){int va[i];int ji-1;while(j>1&am…...
window 显示驱动开发-GDI 硬件加速
Windows 7 引入的 GDI 硬件加速功能在图形处理单元 (GPU) 上提供加速的核心图形设备接口 (GDI) 操作。 若要指示 GPU 和驱动程序支持此功能,显示微型端口驱动程序必须将DXGKDDI_INTERFACE_VERSION设置为 > DXGKDDI_INTERFACE_VERSION_WIN7。 显示微型端口驱动程…...
驱动开发硬核特训 · Day 31:理解 I2C 子系统的驱动模型与实例剖析
📚 训练目标: 从驱动模型出发,掌握 I2C 子系统的核心结构;分析控制器与从设备的注册流程;结合 AT24 EEPROM 驱动源码与设备树实例,理解 i2c_client 与 i2c_driver 的交互;配套高质量练习题巩固理…...
网络安全之网络攻击spring临时文件利用
0x00 传统攻击流程 我们之前传统的攻击流程由以下几个步骤来完成 攻击者找到可以控制目标JDBC连接fakeServer的地方目标向fakeServer发起连接请求fakeServer向目标下发恶意数据包目标解析恶意数据包并完成指定攻击行为(文件读取、反序列化),…...
统一端点管理(UEM):定义、优势与重要性
统一终端管理(UEM)是一种通过单一平台集中管理、监控和保护企业所有终端设备(如笔记本电脑、移动设备、服务器、物联网设备等)的综合性策略。其核心在于跨操作系统(Windows、macOS、iOS、Android等)实现…...
什么是Rootfs
Rootfs (Root Filesystem) 详解 buildroot工具构建了一个名为"rootfs.tar"的根文件系统压缩包。 什么是rootfs Rootfs(Root Filesystem,根文件系统)是操作系统启动后挂载的第一个文件系统,它包含系统正常运行所需的基…...
黑马Java基础笔记-13常用查找算法
查找算法 基本查找(也叫顺序查找,线性查找) 二分查找(需要有序数据) public static int binarySearch(int[] arr, int number){//1.定义两个变量记录要查找的范围int min 0;int max arr.length - 1;//2.利用循环不断的去找要查找的数据wh…...
#渗透测试#批量漏洞挖掘#LiveBos UploadFile(CVE-2021-77663-2336) 任意文件上传漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
Git 和 GitHub 学习指南本地 Git 配置、基础命令、GitHub 上传流程、企业开发中 Git 的使用流程、以及如何将代码部署到生产服务器
Windows 上 Git 安装与配置 下载安装:访问 Git 官方网站下载适用于 Windows 的安装程序。运行安装包时会出现许可协议、安装目录、组件选择等界面(如下图)。在“Select Components”页面建议勾选 Git Bash Here 等选项,以便在资源…...