性能优化-Spring参数配置、数据库连接参数配置、JVM调优
SpringBoot配置参数
server:tomcat:#线程池配置max-threads: 200 # 最大工作线程数(建议:2~4倍CPU核心数,如16核设200-400)min-spare-threads: 20 # 最小空闲线程(应对突发流量,建议:max-threads的10%~20%)# 连接控制max-connections: 10000 # 最大连接数(需结合系统句柄数ulimit -n设置,建议:系统句柄数的70% / 应用数)accept-count: 500 # 等待队列长度(建议:max-threads的1~2倍)connection-timeout: 5000 # 连接超时(毫秒,建议:3~5秒)# 高级参数max-swallow-size: -1 # 处理中断请求的剩余数据(-1表示无限制,大文件上传场景建议设置)keep-alive:timeout: 15000 # KeepAlive超时时间(建议:10~15秒)
具体参数项依据和所占比例
在 Spring Boot 中,server.tomcat.max-connections
是 Tomcat 服务器的关键配置参数,用于控制并发连接数上限。它与系统文件句柄数(File Descriptor Limit)直接相关,若配置不当可能导致 Too many open files
错误。以下是详细解释和配置建议:
1. server.tomcat.max-connections
的作用
- 定义:Tomcat 能同时接受的最大连接数(包括活跃和空闲连接)。
- 默认值:
- Tomcat 8.5+:
10000
(但实际受系统文件句柄数限制)。
- Tomcat 8.5+:
- 场景:
- 高并发场景(如电商大促、API 网关)需调高此值,避免因连接数不足拒绝请求。
- 低负载场景可适当降低,节省资源。
2. 为什么需要与系统文件句柄数匹配?
(1) 文件句柄(File Descriptor)
- 定义:Linux 系统中,每个 TCP 连接、打开的文件、套接字等都会占用一个文件句柄。
- 默认限制:
- 系统级全局限制:
cat /proc/sys/fs/file-max
(通常数万到百万)。 - 用户级限制:
ulimit -n
(默认通常为1024
)。
- 系统级全局限制:
(2) 关键关系
- Tomcat 的每个连接需要占用 1~2 个文件句柄(TCP 连接本身和可能的 I/O 缓存)。
- 若
max-connections=10000
,但系统文件句柄数仅为4096
,当并发连接超过 4096 时,会触发java.net.SocketException: Too many open files
错误。
3. 配置建议
(1) 调整系统文件句柄数
-
临时生效(重启失效):
ulimit -n 65535 # 设置当前会话的文件句柄数为 65535
-
永久生效:
修改/etc/security/limits.conf
,添加以下内容:* soft nofile 65535 # 所有用户软限制 * hard nofile 65535 # 所有用户硬限制
(2) 合理配置 max-connections
server:tomcat:max-connections: 10000 # 建议不超过系统文件句柄数的 70%(如 65535 * 0.7 ≈ 45000)# 其他参数max-threads: 200 # 工作线程数(处理请求的核心并发能力)accept-count: 100 # 等待队列长度(超出后拒绝连接)
(3) 公式参考
max-connections ≤ (系统文件句柄数 - 其他应用占用) * 安全系数
- 示例:
- 系统文件句柄数为
65535
,假设其他应用占用5000
,安全系数为0.8
。 - 则
max-connections ≤ (65535 - 5000) * 0.8 ≈ 48428
,可配置40000
。
- 系统文件句柄数为
4. 验证与监控
(1) 查看当前文件句柄使用
# 查看系统全局已用句柄数
cat /proc/sys/fs/file-nr# 查看 Tomcat 进程占用的句柄数
lsof -p <tomcat_pid> | wc -l
(2) 监控 Tomcat 连接数
-
通过 Spring Boot Actuator 的
metrics
端点:curl http://localhost:8080/actuator/metrics/tomcat.connections.max
-
输出示例:
{"name": "tomcat.connections.max","measurements": [{"statistic": "VALUE", "value": 10000}] }
(3) 日志排查
若出现 Too many open files
错误:
- 检查系统文件句柄限制:
ulimit -n
和/proc/sys/fs/file-max
。 - 查看当前连接数:
netstat -an | grep ESTABLISHED | wc -l
。
5. 其他关联参数
参数 | 说明 |
---|---|
server.tomcat.max-threads | Tomcat 工作线程池大小(决定并发请求处理能力)。 |
server.tomcat.accept-count | 等待队列长度,当所有线程繁忙时,新连接进入队列,超出后拒绝连接。 |
server.connection-timeout | 连接超时时间(毫秒),超时后关闭空闲连接。 |
6. 总结
- 核心原则:
max-connections
必须小于系统文件句柄数,否则会导致连接拒绝或崩溃。 - 推荐配置:
- 系统文件句柄数:至少
65535
(通过limits.conf
设置)。 max-connections
:根据业务并发量设定(如10000~40000
)。- 预留 20%~30% 的句柄余量供其他进程(如数据库连接、日志文件)使用。
- 系统文件句柄数:至少
- 高并发场景:
结合max-threads
和accept-count
,确保线程池和队列能应对突发流量。
合理配置数据库连接数-DRUID配置DRDS
针对 Druid 连接池的性能优化,需从 连接池配置、监控集成、SQL 优化、防御性设计 四个方向入手。以下是详细的优化策略和配置示例:
一、基础配置优化
1. 连接池大小调优
在 application.yml
中配置合理参数(假设 DRDS 最大连接数为 300,3 个应用共存):
spring:datasource:druid:# 核心连接池参数initial-size: 5 # 初始连接数(避免冷启动延迟)min-idle: 5 # 最小空闲连接(维持基本可用性)max-active: 30 # 最大活跃连接数(按 DRDS 总配额分配)max-wait: 2000 # 获取连接最大等待时间(毫秒,避免线程阻塞)# 连接有效性检查validation-query: SELECT 1 # 心跳检测 SQL(简单查询)test-on-borrow: true # 借用连接时校验(确保连接有效)test-while-idle: true # 空闲时定期校验(默认 true)time-between-eviction-runs-millis: 60000 # 空闲连接检查间隔(60秒)min-evictable-idle-time-millis: 300000 # 连接最小空闲时间(5分钟)
2. 连接泄漏检测
spring:datasource:druid:remove-abandoned: true # 启用泄漏连接回收remove-abandoned-timeout: 300 # 连接被占用超过 300 秒视为泄漏log-abandoned: true # 记录泄漏连接的堆栈信息(便于排查)
二、启用 Druid 内置监控
1. 开启监控统计功能
spring:datasource:druid:# 监控统计stat-view-servlet:enabled: true # 启用监控页面url-pattern: /druid/* # 监控访问路径login-username: admin # 监控账号(生产环境必设)login-password: druid@123web-stat-filter:enabled: true # 启用 Web 请求统计url-pattern: /* # 统计所有 URLexclusions: "*.js,*.css,/druid/*" # 排除静态资源filter:stat:enabled: true # 启用 SQL 统计slow-sql-millis: 1000 # 定义慢 SQL 阈值(1秒)log-slow-sql: true # 记录慢 SQL 日志
2. 访问监控页面
- 访问
http://your-server:8080/druid
,输入账号密码后可查看:- 实时数据源状态(活跃连接、池大小)。
- SQL 执行统计(执行次数、耗时、慢 SQL)。
- Web 请求监控(URI 访问量、耗时)。
三、防御性设计与性能提升
1. 启用防火墙和 SQL 注入防御
spring:datasource:druid:filters: stat,wall,slf4j # 启用统计、防火墙、日志过滤器wall:enabled: trueconfig:delete-allow: false # 禁止 DELETE 无 WHERE 语句drop-table-allow: false # 禁止 DROP TABLEmulti-statement-allow: false # 禁止批量执行 SQL
2. 预编译语句池(防 SQL 注入 + 性能提升)
spring:datasource:druid:max-pool-prepared-statement-per-connection-size: 20 # 每个连接缓存的预编译语句数pool-prepared-statements: true # 启用预编译语句池
3. 异步初始化连接池(加速启动)
spring:datasource:druid:async-init: true # 异步初始化连接池(避免应用启动阻塞)
四、性能调优参数
1. 连接回收策略优化
spring:datasource:druid:# 连接存活策略keep-alive: true # 启用保活机制(默认 false)phy-timeout-millis: 600000 # 物理连接最大存活时间(10分钟)# 连接有效性检查优化validation-query-timeout: 3000 # 心跳检测超时时间(3秒)
五、与 Spring 生态整合
1. 监控数据接入 Actuator
通过 druid-spring-boot-starter
将监控数据暴露给 Spring Boot Actuator:
management:endpoints:web:exposure:include: health,druid
2. 分布式链路追踪(如 SkyWalking)
在 druid
过滤器中添加 Trace ID 传递:
@Bean
public FilterRegistrationBean<Filter> druidFilter() {FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();registration.setFilter(new WebStatFilter());registration.addInitParameter("exclusions", "*.js,*.css,/druid/*");registration.addInitParameter("profileEnable", "true");registration.addUrlPatterns("/*");return registration;
}
六、维护与监控建议
- 定期分析慢 SQL:
- 通过 Druid 监控页面的
SQL 监控
和慢 SQL 日志
,优化索引和查询逻辑。
- 通过 Druid 监控页面的
- 连接泄漏排查:
- 启用
remove-abandoned
并分析日志中的泄漏堆栈。
- 启用
- 动态调整参数:
- 根据业务高峰/低谷期调整
max-active
和max-wait
。
- 根据业务高峰/低谷期调整
- 驱动版本升级:
- 定期更新 MySQL JDBC 驱动(如
mysql-connector-java:8.0.33
),修复已知性能问题。
- 定期更新 MySQL JDBC 驱动(如
七、完整配置示例
spring:datasource:druid:url: jdbc:mysql://drds-proxy:3306/db?useSSL=falseusername: userpassword: passinitial-size: 5min-idle: 5max-active: 30max-wait: 2000validation-query: SELECT 1test-on-borrow: truetime-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000filters: stat,wall,slf4jstat-view-servlet:enabled: trueurl-pattern: /druid/*login-username: adminlogin-password: druid@123web-stat-filter:enabled: trueurl-pattern: /*wall:config:delete-allow: falseasync-init: truekeep-alive: truephy-timeout-millis: 600000
总结
通过上述优化,Druid 连接池可实现:
- 性能提升:合理连接复用、预编译语句缓存、异步初始化。
- 稳定性增强:泄漏检测、慢 SQL 拦截、防火墙规则。
- 可观测性:内置监控 + Spring Actuator 集成,快速定位瓶颈。
- 防御性设计:防止 SQL 注入、限制危险操作。
最终需结合压测工具(如 JMeter)验证配置效果,并根据实际业务负载动态调整参数。
一台服务器上多个程序的JVM参数配置情况
在 16核64G 内存 的服务器上运行 5个 Java 程序(其中两个是核心主应用),需为这两个主应用分配更多资源,同时预留足够内存和 CPU 给其他程序和系统。以下是针对两个主应用的 JVM 参数配置方案及详细说明:
一、配置目标
- 资源隔离:为核心主应用分配更多内存和 CPU,确保高优先级任务稳定运行。
- 稳定性保障:避免内存溢出(OOM)和频繁 Full GC,预留资源给其他 3 个程序。
- 性能优化:根据 16 核特性调整 GC 线程和并行计算能力。
二、主应用 JVM 参数配置
应用 1(核心计算/高吞吐场景)
java -Xms24G -Xmx24G \ # 堆内存 24GB(占 64G 的 37.5%)-XX:MaxMetaspaceSize=1G \ # 元空间上限 1GB(防类加载泄露)-XX:MaxDirectMemorySize=4G \ # 堆外内存上限(Netty/NIO 场景需要)-XX:+UseG1GC \ # 启用 G1 垃圾收集器(平衡吞吐和延迟)-XX:MaxGCPauseMillis=200 \ # 目标最大 GC 停顿时间 200ms-XX:ParallelGCThreads=8 \ # 并行 GC 线程数(16核 * 0.5 = 8)-XX:ConcGCThreads=4 \ # 并发 GC 线程数(ParallelGCThreads * 0.5)-XX:InitiatingHeapOccupancyPercent=45 \ # 堆占用 45% 触发并发标记-XX:+ExplicitGCInvokesConcurrent \ # System.gc() 触发并发 GC-XX:+PrintGCDetails \ # 打印 GC 日志(生产环境可关闭)-XX:+PrintGCDateStamps \-Xloggc:/opt/app1_gc.log \-jar app1.jar
应用 2(低延迟/实时响应场景)
java -Xms20G -Xmx20G \ # 堆内存 20GB(占 64G 的 31.25%)-XX:MaxMetaspaceSize=1G \-XX:MaxDirectMemorySize=2G \-XX:+UseZGC \ # 启用 ZGC(亚毫秒级停顿,JDK 17+)-XX:ConcGCThreads=8 \ # ZGC 并发线程数(16核 * 0.5 = 8)-XX:SoftMaxHeapSize=18G \ # 弹性堆内存上限(ZGC 特性)-XX:+UnlockExperimentalVMOptions \ # 启用实验性参数(JDK 17 需要)-XX:+ZGenerational \ # 启用分代 ZGC(JDK 21+)-XX:+PrintGCDetails \-XX:+PrintGCDateStamps \-Xloggc:/opt/app2_gc.log \-jar app2.jar
三、配置说明
1. 内存分配
资源 | 应用1 | 应用2 | 其他3个程序 | 系统预留 | 总计 |
---|---|---|---|---|---|
堆内存 | 24G | 20G | ~10G | 10G | 64G |
元空间 | 1G | 1G | ~1G | - | 3G |
堆外内存 | 4G | 2G | ~2G | - | 8G |
- 总内存占用:
24+20+10 +1+1+2 +10= 68G
(略超 64G,需根据实际调整,优先保障主应用)。
2. GC 选择与线程配置
- 应用1(G1 GC):
ParallelGCThreads=8
:16 核下分配 50% 给并行 GC,避免 GC 线程抢占业务线程。ConcGCThreads=4
:并发标记阶段线程数,减少对业务影响。- 适用场景:高吞吐、允许短暂停顿(如批量处理、数据分析)。
- 应用2(ZGC):
- 亚毫秒级停顿:适合实时响应场景(如交易系统、API 网关)。
- 分代 ZGC(JDK 21+):减少年轻代回收开销。
SoftMaxHeapSize
:允许堆弹性伸缩,应对突发负载。
3. 防御性参数
MaxMetaspaceSize
:限制元空间,防止第三方库(如反射、动态代理)导致内存泄漏。MaxDirectMemorySize
:控制堆外内存(如 Netty 的 DirectByteBuffer),避免 Native 内存溢出。ExplicitGCInvokesConcurrent
:防止代码调用System.gc()
触发 Full GC。
四、系统级优化
1. CPU 绑定(NUMA 优化)
# 将应用1绑定到 CPU 0-7,应用2绑定到 CPU 8-15(需 root 权限)
taskset -c 0-7 java -Xms24G ... app1.jar
taskset -c 8-15 java -Xms20G ... app2.jar
2. 内存大页(HugePages)
# 配置大页(需系统支持)
-XX:+UseLargePages -XX:LargePageSizeInBytes=2M
3. 文件句柄与网络
# 修改 /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535# 修改 /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
五、监控与调优
1. 关键监控指标
指标 | 工具 | 健康阈值 |
---|---|---|
JVM Heap Used | VisualVM/Prometheus | < 80% Xmx |
GC Pause Time | GC 日志 | < 200ms(G1)、< 10ms(ZGC) |
CPU Usage | top/htop | < 70%(单核) |
Direct Memory | NMT(Native Memory Tracking) | < MaxDirectMemorySize |
2. 调优步骤
- 基准测试:使用 JMeter 或 Gatling 模拟真实负载,记录 GC 和吞吐量。
- 分析 GC 日志:检查 Full GC 频率和停顿时间,调整
IHOP
或MaxGCPauseMillis
。 - 堆外内存监控:通过
jcmd <pid> VM.native_memory
查看 Native 内存分布。 - 动态调整:根据监控逐步增加
Xmx
或优化代码逻辑(如缓存策略、对象池)。
六、总结
- 应用1(G1):适合高吞吐场景,24G 堆内存 + 并行/并发 GC 线程精细化分配。
- 应用2(ZGC):适合低延迟场景,20G 堆内存 + 分代 ZGC 减少停顿。
- 系统预留:至少 10G 内存给其他 3 个程序及 OS 内核、文件缓存等。
- 监控告警:实时跟踪资源使用,防止主应用挤压其他程序资源。
通过上述配置,可在 16核64G 服务器上实现多应用共存下的资源平衡与性能优化。
相关文章:
性能优化-Spring参数配置、数据库连接参数配置、JVM调优
SpringBoot配置参数 server:tomcat:#线程池配置max-threads: 200 # 最大工作线程数(建议:2~4倍CPU核心数,如16核设200-400)min-spare-threads: 20 # 最小空闲线程(应对突发流量,…...
【2025年泰迪杯数据挖掘挑战赛】B题 数据预处理+问题建模与求解
目录 2025年泰迪杯数据挖掘挑战赛 B题数据预处理 问题一、二建模与求解三、数据预处理3.1 基于多核并行的协同处理方法的数据读取3.2 基于多核并行协同处理的数据聚合 四、问题一五、问题一技术文档与matlab代码 2025年泰迪杯数据挖掘挑战赛 B题 数据预处理 问题一、二建模与求…...
git怎么使远程分支回退到指定的节点处
git使远程分支回退到指定的节点 引言场景描述步骤 引言 最近提交代码的时候,总将分支合并错,原本要合到A分支,结果合并到了B分支,这样就导致b分支需要回退到我没有合并之前的节点处。 本文记录下怎么将远程分支回退到指定的节点。…...
Spring Boot 使用 QQ 企业邮箱发送邮件的完整指南(含 535 错误排查)
在 Spring Boot 项目中集成邮件功能非常常见,尤其是用户注册通知、异常报警、定期报告等场景。但如果你使用的是 QQ 企业邮箱(smtp.exmail.qq.com),可能会遇到如下典型错误: 535 Error: authentication failed, system busy这篇博客将详细解析出现该问题的原因、排查路径…...
MySQL联合查询||多表查询
mysql中如何注释...
java 递归遍历JSON字符串获取某个字段的值
在 Java 中,若要递归遍历 JSON 字符串并获取特定字段的值,可借助 Jackson 库。以下是一个示例代码,它能实现递归遍历 JSON 字符串并获取指定字段的值。 import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.data…...
OceanBase4.0社区版 单机快速部署
以下内容结合OceanBase官方文档进行安装部署测试 官方文档地址:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012693 一.部署方式 OceanBase 企业版: • 使用 OCP 部署 OceanBase 集群 • 使用 OBD 部署 OceanBase 集群 •…...
CExercise_05_1伪随机数_2编写程序模拟掷骰子的游戏(每一次投掷,都投掷两个骰子)
题目: 编写程序模拟掷骰子的游戏(每一次投掷,都投掷两个骰子)。每局游戏的规则如下: 第一次掷的时候: 如果点数之和为 7 或 11 则获胜; 如果点数之和为2、3或12则落败; 其他情况下的…...
【更新至2023年】2000-2023年中国气候政策不确定性指数(全国、省、市三个层面)
【更新至2023年】2000-2023年中国气候政策不确定性指数(全国、省、市三个层面) 1.时间:2000-2023年 2.来源:使用人工审计和深度学习算法MacBERT模型,基于中国《人民日报》《光明日报》《经济日报》《环球时报》《科技…...
机器学习中 提到的张量是什么?
在机器学习中, 张量(Tensor) 是一个核心数学概念,用于表示和操作多维数据。以下是关于张量的详细解析: 一、数学定义与本质 张量在数学和物理学中的定义具有多重视角: 多维数组视角 传统数学和物理学中,张量被定义为多维数组,其分量在坐标变换时遵循协变或逆变规则。例…...
【Python爬虫】简单案例介绍3
本文继续接着我的上一篇博客【Python爬虫】简单案例介绍2-CSDN博客 目录 3.3 代码开发 3.3 代码开发 编写代码的步骤: request请求科普中国网站地址url,解析得到类名为"list-block"的div标签。 for循环遍历这个div列表里的每个div࿰…...
对于客户端数据存储方案——SQLite的思考
SQLite 比较适合进行本地小型数据的存储,在功能丰富性和并发能力上不如 MySQL。 数据类型差异 SQLite 使用动态类型系统:只有 5 种基本存储类 (NULL, INTEGER, REAL, TEXT, BLOB) 类型亲和性:SQLite 会将声明的列类型映射到最接近的存储类 …...
基于Nacos+动态线程池的分布式系统弹性设计:投行交易与风控场景实战
业务痛点和需求分析 在投行高频交易系统和对公贷款风控计算引擎中,我们面临两大核心挑战: 流量洪峰波动剧烈 交易时段TPS可达10万/秒,非交易时段下降80%风控模型计算存在突发性批量任务(如月末集中评审) 架构设计与…...
高并发内存池(定长内存池基础)
定长内存池的设计 定长内存池定长内存池的原理讲解代码实现定义对象New对象的主要逻辑delete对象的主要逻辑完整代码 定长内存池 为什么我们要设计这个定长内存池呢?首先malloc是c标准库中向堆申请空间的接口,变相的说malloc是普遍性,而我们…...
element-ui plus 中 filter-method 函数多次触发问题解决
前情提要 点进这个文章的小伙伴,应该都是为了解决一个需求,把原本的前端过滤改为后端过滤,但是将filter-method修改为后端取数据后,发现其触发了很多次。博主也是在修改表格过滤时用到了这个坑,本篇文章为大家解决一下…...
物联网场景实战:智能电表数据管理与分析(一)
智能电表与物联网的融合 在当今数字化时代,随着物联网(IoT)技术的飞速发展,各行业都在积极探索如何利用这一技术实现转型升级 。电力行业也不例外,智能电表作为电力系统与物联网融合的关键节点,正发挥着越来…...
网络中的基本概念
这篇文章主要介绍我们在学习网络的过程中,会碰到的一系名词,对其概念进行解释,让大家知道这些都是干什么的。 网络:若干个节点和连接这些节点的链路组成的,用于实现信息交换资源共享。 节点:网络中各种接地…...
行锁(Row Locking)和MVCC(多版本并发控制)
在数据库系统中,**行锁(Row Locking)和MVCC(多版本并发控制)**是两种不同的并发控制机制,它们的使用场景和原理有显著区别。以下是详细对比和适用场景分析: 一、行锁(Row Locking&am…...
AlexNet神经网络详解及VGGNet模型和
AlexNet模型细节 一共8层,5个卷积层,3个全连接层 AlexNet工程技巧 多GPU训练,ReLU激活函数,LRN归一化,Dropout,重叠池化,数据增强等 多GPU训练 除了将模型的神经元进行了并行,还使…...
【Linux网络】Socket 编程TCP
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP socket API 详解 socket(): bind(): listen(): accept(): connect V0…...
代码训练day27贪心算法p1
贪心的本质是选择每一阶段的局部最优,从而达到全局最优 贪心算法一般分为如下四步: 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 1.分发饼干 先将饼干数组和小孩数组排序。 然后从后向前遍历…...
基于RV1126开发板的车辆检测算法开发
1. 车辆检测简介 车辆检测是一种基于深度学习的对人进行检测定位的目标检测,能广泛的用于园区管理、交通分析等多种场景,是违停识别、堵车识别、车流统计等多种算法的基石算法。 人脸检测算法mAP0.5CAR0.78029 基于EASY-EAI-Nano硬件主板的运行效率&…...
Leetcode——137 260找出只出现一次的数
文章目录 找出只出现一次的数引入Leetcode 260Leetcode 137 找出只出现一次的数 对于数组中有一类题,即某些数据在数组中只出现一遍,需要我们找出,今天我们来看看这个类型的题。 引入 想必大家应该见过这么一道题: 现给定一个数…...
【多线程-第四天-自己模拟SDWebImage的下载图片功能-看SDWebImage的Demo Objective-C语言】
一、我们打开之前我们写的异步下载网络图片的项目,把刚刚我们写好的分类拖进来 1.我们这个分类包含哪些文件: 1)HMDownloaderOperation类, 2)HMDownloaderOperationManager类, 3)NSString+Sandbox分类, 4)UIImageView+WebCache分类, 这四个文件吧,把它们拖过来…...
【5G学习】基本概念之多频资源以及子载波和信道
在5G通信中,子载波、信道以及时域、频域、码域、空域是构建无线传输系统的核心概念。它们共同定义了信号的传输方式、资源分配和多维复用技术。以下是详细解释及其相互关系: 一、核心概念定义 1. 子载波(Subcarrier) 定义&#…...
鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解
大家好,我是 V 哥。 在鸿蒙 NEXT 开发中,ArkUI 提供了丰富的 3D 变换和手势事件功能,可用于创建生动且交互性强的用户界面。下面详细介绍 ArkUI 的 3D 变换和手势事件,并给出相应的 ArkTS 案例代码。 1. ArkUI 3D 变换 ArkUI 支…...
敏感数据触发后怎么保障安全?
当敏感数据被触发或泄露时,需立即采取系统化措施控制风险。以下为分阶段应对策略,结合技术与管理手段: 一、即时响应阶段 阻断扩散 隔离受影响系统:立即断开网络连接、暂停服务或关闭相关端口。 终止可疑进程:通过华…...
【CVE-2024-10929】ARM CPU漏洞安全通告
安全之安全(security)博客目录导读 目录 一、概述 二、CVE详情 三、受影响产品 四、建议措施 五、致谢 六、版本历史 一、概述 在部分基于Arm架构的CPU中发现了一个潜在安全问题,称为Spectre-BSE(Branch Status Eviction,分支状态驱逐…...
高级java每日一道面试题-2025年4月06日-微服务篇[Nacos篇]-如何诊断和解决Nacos中的常见问题?
如果有遗漏,评论区告诉我进行补充 面试官: 如何诊断和解决Nacos中的常见问题? 我回答: 在Java高级面试中诊断和解决Nacos常见问题的综合回答 在Java高级面试中,当被问及如何诊断和解决Nacos中的常见问题时,可以从以下几个方面进行详细阐述…...
【模块化拆解与多视角信息3】教育背景:学历通胀时代的生存法则
教育背景:学历通胀时代的生存法则 写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算…...
无人机3S与4S电池技术对比!
一、基础参数对比 1. 电芯与电压 3S电池:由3节锂电芯串联组成,标称电压为11.1V(单节3.7V3),满电电压约12.6V。 4S电池:由4节电芯串联,标称电压14.8V(3.7V4)&#…...
linux电源管理(二),内核的CPUFreq(DVFS)和ARM的SCPI
更多linux系统电源管理相关的内容请看:https://blog.csdn.net/u010936265/article/details/146436725?spm1011.2415.3001.5331 1 简介 CPUFreq子系统位于drivers/cpufreq目录下,负责进行运行过程中CPU频率和电压的动态调整,即DVFS (Dynami…...
短波红外高光谱相机:高光谱成像在塑料分选中的应用
随着塑料工业的迅猛发展,塑料包装制品需求量增长迅速,消耗量不断上升,废塑料产生量也急剧增加。由于塑料化学结构稳定,难以自然降解,不当使用和处置及累积会造成严重的环境污染和资源浪费。因此,快速、精准…...
通过OBD部署OceanBase社区版集群v4.3.5
以下内容结合OceanBase官方文档进行安装部署测试 官方文档地址:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016072 一.环境准备 准备三台虚拟机,配置信息如下 192.168.232.8 centos7.9 4c16g 硬盘100g 192.168.232.9 …...
【Java学习笔记】注释
注释 为什么要写注释? 养成良好的编程习惯,方便后续阅读和查看,理顺思路,增加可读性 对自己的代码负责,对别人负责 说明 1. 被注释的文字,不会被 JVM(虚拟机)解释执行 2. 多行注…...
Python 调用 YOLO ONNX
Python 调用 YOLO ONNX 1 下载ONNX文件2 Python代码 1 下载ONNX文件 ONNX下载地址 2 Python代码 import cv2 from ultralytics import YOLO# 加载 YOLOv11 model YOLO(./yolo11n.pt)# 读取图片 image_path ./11.png img cv2.imread(image_path)# 推理(可以传…...
Linux 下 Module 工具的介绍与使用
参考: https://www.fasteda.cn/post/22.html https://modules.readthedocs.io/en/latest/module.html Linux 下 Module 工具的介绍与使用 一、前言 在 Linux 中,当同一款编辑器、运行库、软件存在多个版本且多个版本都需要在不同的场景或人员使用时&a…...
批量归一化(Batch Normalization)原理与PyTorch实现
批量归一化(Batch Normalization)是加速深度神经网络训练的常用技术。本文通过Fashion-MNIST数据集,演示如何从零实现批量归一化,并对比PyTorch内置API的简洁实现方式。 1. 从零实现批量归一化 1.1 批量归一化函数实现 import t…...
Flutter 文本组件深度剖析:从基础到高级应用
引言 在 Flutter 应用开发中,文本是向用户传达信息的重要媒介。Flutter 提供了丰富且强大的文本组件和相关属性,使开发者能够轻松实现多样化的文本展示效果。无论是简单的静态文本显示,还是复杂的富文本渲染,Flutter 都能满足需求…...
FABC是什么?
在销售和品牌营销领域,FABC 是一种用于构建销售话术和营销信息的框架,其全称为 Features(特点)、Advantages(优势)、Benefits(利益)、Case(案例)。该模型帮助…...
【MySQL】MVCC工作原理、事务隔离机制、undo log回滚日志、间隙锁
一、什么是MVCC? MVCC,即 Multiversion Concurrency Control(多版本并发控制),它是数据库实现并发控制的一种方式。 MVCC 的核心思想是: 为每个事务提供数据的“快照”版本,从而避免加锁&…...
Spring Boot 集成 RocketMQ 全流程指南:从依赖引入到消息收发
前言 在分布式系统中,消息中间件是解耦服务、实现异步通信的核心组件。RocketMQ 作为阿里巴巴开源的高性能分布式消息中间件,凭借其高吞吐、低延迟、高可靠等特性,成为企业级应用的首选。而 Spring Boot 通过其“约定优于配置”的设计理念&a…...
PCL 点云RANSAC提取平面(非内置函数)
文章目录 一、算法实现1.1实现步骤二、实现代码三、实现效果参考资料一、算法实现 1.1实现步骤 1、确定模型。三个点确定一个平面,方程式为 a x + b y + c z + 1 = 0 ax+by+cz+1=0...
中介者模式:理论、实践与 Spring 源码解析
摘要 本论文以中介者模式为核心,系统阐述其设计原理、应用场景及在 Spring 框架中的实现机制。通过机票预订系统、银行交易系统等典型案例,具象化展示模式如何解耦复杂对象交互;结合 Spring 5.3.29 源码,深入剖析事件驱动模型中ApplicationEventPublisher与ApplicationLis…...
2025.04.14【Table】| 生信数据表图技巧
Custom title A set of examples showing how to customize the titles of a table made with GT Custom footer How to customize the footer and the references section of a gt table 文章目录 Custom titleCustom footer 生信数据可视化:Table图表详解1. R语…...
Unified Modeling Language,统一建模语言
UML(Unified Modeling Language,统一建模语言)是一种标准化的图形化建模语言,用于可视化、规范和文档化软件系统的设计。UML 提供了一套通用的符号和规则,帮助开发者、架构师和团队成员更好地理解和沟通软件系统的结构…...
OCP证书有效期是永久,但需要更新
在数据库管理领域,OCP证书作为Oracle认证体系中的重要组成部分,一直是数据库专业人士追求的目标。许多考证者会有疑惑:OCP证书是永久有效的吗?需要更新吗? Oracle官方明确规定:OCP证书一经获得,终身有效。无…...
服务器本地搭建
socket函数 它用于创建一个新的套接字(socket)。 函数原型 #include <sys/socket.h> int socket(int domain, int type, int protocol);参数解释 domain:它指定了通信所使用的协议族,常见的取值如下: AF_INET…...
调节磁盘和CPU的矛盾——InnoDB的Buffer Pool
缓存的重要性 无论是用于存储用户数据的索引【聚簇索引、二级索引】还是各种系统数据,都是以页的形式存放在表空间中【对一个/几个实际文件的抽象,存储在磁盘上】如果需要访问某页的数据,就会把完整的页数据加载到内存中【即使只访问页中的一…...
[dp12_回文子串] 最长回文子串 | 分割回文串 IV
目录 1.回文子串 题解 2.最长回文子串 题解 3.分割回文串 IV 题解 dp[i][j] 表示 s 字符串 [i, j] 的子串,是否是回文串( 建始末表) 将两个 for 循环的结果,借助二维 dp 来存 1.回文子串 链接:647. 回文子串 给你一个字符…...