如何进行 JVM 性能调优?
进行 JVM 性能调优是一个系统性的过程,旨在提高 Java 应用程序的响应速度、吞吐量、降低资源消耗(如 CPU 和内存)以及提高稳定性。
以下是一个通用的 JVM 性能调优步骤和常用方法:
第一步:明确目标与建立基线 (Define Goals & Establish Baseline)
- 明确目标: 你希望达到什么性能指标?例如:
- 减少请求响应时间到 X 毫秒以下。
- 提高系统吞吐量到 Y 次请求/秒。
- 降低 CPU 使用率到 Z% 以下。
- 减少内存占用,避免 OOM (OutOfMemoryError)。
- 减少 Full GC 的频率和停顿时间。
- 建立基线: 在进行任何调优之前,需要测试当前系统的性能。
- 负载测试: 使用 JMeter, LoadRunner, Gatling 等工具模拟真实用户或请求,施加一定的负载。
- 收集数据: 在负载测试过程中,记录关键性能指标:响应时间、吞吐量、CPU 使用率、内存使用率、GC 活动(GC 次数、停顿时间、总耗时)等。
- 稳定环境: 确保测试环境尽量模拟生产环境,并且在测试期间环境稳定。
第二步:监控与分析 (Monitor & Analyze)
这是识别瓶颈的关键步骤。需要使用各种工具来观察 JVM 和应用程序的行为。
- OS 层面监控:
top
,htop
(Linux): 查看整体 CPU、内存、进程状态。vmstat
: 查看内存、交换空间、磁盘 I/O、CPU 使用率。iostat
: 查看磁盘 I/O。netstat
: 查看网络连接和流量。
- JVM 内置工具:
jps
: 列出运行的 Java 进程 ID。jstat
: 监控 JVM 统计信息,特别是 GC 活动 (jstat -gc <pid>
)。jmap
: 生成堆内存快照 (jmap -dump:format=b,file=heap.bin <pid>
),或查看堆内存统计信息 (jmap -heap <pid>
)。jstack
: 生成线程堆栈信息 (jstack <pid>
),用于分析线程阻塞、死锁等。jcmd
: 一个多功能工具,可以替代大部分jstat
,jmap
,jstack
的功能,并支持更多命令(如jcmd <pid> GC.heap_dump
)。- JMX (Java Management Extensions): 通过 JConsole, VisualVM, 或自定义 JMX 客户端连接到 JVM,实时监控各种指标。
- 专业 APM/Profiler 工具:
- Java Mission Control (JMC) / Flight Recorder (JFR): Oracle 官方强大的工具,低开销的收集 JVM 和应用程序事件,提供丰富的分析视图(GC、热点方法、锁竞争、I/O 等)。
- VisualVM: 免费的多合一工具,支持 CPU、内存、线程分析,可通过插件扩展功能。
- JProfiler, YourKit: 商业级性能分析工具,功能强大,提供详细的内存、CPU、线程分析报告。
- Async-Profiler: 一个低开销的采样式 profiler,非常适合查找 CPU 热点和锁竞争。
- APM (Application Performance Management) 工具: 如 Dynatrace, New Relic, AppDynamics, SkyWalking 等,提供端到端应用性能监控和分布式追踪。
分析重点:
- 高 CPU 使用率: 是 GC 导致的?还是某些热点方法(代码执行效率低下)导致的?还是锁竞争导致的?
- 高内存使用率/OOM: 堆内存是否过小?是否存在内存泄漏?对象创建速度过快?
- GC 频繁或停顿长: Minor GC 或 Full GC 频率如何?每次停顿时间多长?GC 是否成为瓶颈?
- 线程问题: 线程数量是否过多?是否存在大量 BLOCKED 或 WAITING 的线程?是否存在死锁?
- 响应时间长: 请求是在哪里耗时?是数据库查询?外部服务调用?GC 停顿?还是某个代码块执行慢?
第三步:确定瓶颈并诊断原因 (Identify Bottleneck & Diagnose)
基于监控和分析的数据,定位主要的性能瓶颈。例如:
- 如果 CPU 主要花费在 GC 上,瓶颈就是 GC。
- 如果 CPU 主要花费在某个方法上,瓶颈就是该方法的代码效率。
- 如果应用出现 OOM,瓶颈是内存分配和回收。
- 如果线程大量阻塞,瓶颈是锁竞争或外部依赖。
深入诊断瓶颈的根本原因。例如,GC 频繁可能是因为新生代太小,对象过快晋升到老年代;代码执行慢可能是因为算法复杂度高或大量重复计算;内存泄漏可能是因为对象引用未释放。
第四步:实施调优措施 (Implement Tuning Measures)
根据诊断结果,采取相应的调优策略。通常涉及以下几个方面:
-
垃圾回收器 (Garbage Collector) 调优:
- 选择合适的 GC:
- ParallelGC (
-XX:+UseParallelGC
): 吞吐量优先,适用于后台任务、批处理等对停顿时间不敏感的场景。 - G1GC (
-XX:+UseG1GC
): 适用于大堆内存,尝试在吞吐量和停顿时间之间找到平衡,是 Java 9+ 的默认 GC。 - ZGC (
-XX:+UseZGC
) / ShenandoahGC (-XX:+UseShenandoahGC
): 追求极低的停顿时间(亚毫秒级),适用于对延迟要求极高的应用。需要较高的 JVM 版本和特定配置。
- ParallelGC (
- 调整堆大小:
-Xmx<size>
: 最大堆内存。根据应用需求和可用物理内存设置,避免过小导致频繁 GC,或过大导致操作系统内存不足或 Full GC 时间过长。-Xms<size>
: 初始化堆内存。通常设置为-Xmx
的值,避免运行时扩展堆内存的开销。
- 调整新生代/老年代比例:
-XX:NewRatio=<n>
: 设置老年代与新生代的比例(老年代/新生代 = n),默认通常是 2。例如-XX:NewRatio=2
表示新生代占堆的 1/3。-XX:SurvivorRatio=<n>
: 设置 Eden 区与 Survivor 区的比例(Eden/Survivor = n),默认通常是 8。- 注意: 对于 G1/ZGC/Shenandoah 等现代 GC,通常不需要手动设置 NewRatio/SurvivorRatio,GC 会自动调整。
- 设置 GC 目标或并行线程数:
-XX:MaxGCPauseMillis=<ms>
: 设置 G1GC 期望的最大停顿时间(目标,不保证达到)。-XX:ParallelGCThreads=<n>
: 设置并行 GC 时使用的线程数,通常设为 CPU 核数。
- 启用 GC 日志:
-Xlog:gc*=info:file=/path/to/gc.log:uptime,pid,tags:filecount=5,filesize=10m
(Java 9+ 的统一日志格式)。分析 GC 日志是调优的关键。
- 选择合适的 GC:
-
内存使用调优:
- 查找内存泄漏: 使用
jmap
生成堆转储文件.hprof
,然后用 Eclipse MAT (Memory Analyzer Tool) 或 VisualVM 的 heap walker 分析,查找可疑对象和引用链。 - 减少对象创建: 避免在循环中创建大量临时对象。考虑使用对象池(需谨慎,可能引入复杂性)。使用基本类型数组而不是包装类型集合。
- 优化数据结构: 选择适合场景的数据结构,例如,如果需要快速查找,使用
HashMap
而不是ArrayList
。 - 清除不再使用的引用: 例如,静态集合如果存储了大量不再使用的对象引用,会导致内存泄漏。
- 查找内存泄漏: 使用
-
线程与并发调优:
- 分析线程转储 (
jstack
): 查找大量 BLOCKED 或 WAITING 的线程,定位锁竞争点。 - 减少锁竞争:
- 缩小同步代码块的范围。
- 使用
java.util.concurrent
包中的并发工具类(如ConcurrentHashMap
,Atomic*
类,ReentrantLock
)替代synchronized
关键字,它们通常更灵活或效率更高。 - 读多写少的场景考虑使用读写锁
ReentrantReadWriteLock
。 - 考虑使用无锁数据结构或原子操作。
- 合理设置线程池大小: 过小的线程池导致任务排队,过大的线程池导致资源消耗和上下文切换开销。通常依赖于任务类型(CPU 密集型 vs. I/O 密集型)进行调整。
- 排查死锁:
jstack
可以帮助发现死锁。
- 分析线程转储 (
-
JIT 编译器调优:
- JVM 会将热点代码编译成机器码以提高执行速度。通常使用默认的 Server 模式 (
-server
) 即可,它能进行更激进的优化。 -XX:+PrintCompilation
可以打印哪些方法被编译。- 一般情况下,很少需要深入调整 JIT 参数,除非遇到特定编译问题。
- JVM 会将热点代码编译成机器码以提高执行速度。通常使用默认的 Server 模式 (
-
应用代码优化:
- 算法优化: 使用更高效的算法可以指数级地提升性能。
- 减少重复计算: 缓存计算结果。
- 优化 I/O 操作: 使用缓冲 I/O,减少文件或网络操作次数,异步 I/O 等。
- 数据库优化: 慢查询是常见的性能瓶颈,优化 SQL、索引、数据库连接池。
- 第三方库使用: 确保使用的库是高效且没有明显性能问题的版本。
第五步:测试与验证 (Test & Verify)
- 重新运行负载测试: 在应用了调优措施后,使用与基线测试相同的负载模型重新测试。
- 比较结果: 对比调优前后的性能指标(响应时间、吞吐量、CPU、内存、GC 数据)。
- 检查副作用: 新的调优措施是否引入了其他问题?(例如,GC 停顿减少了,但 CPU 使用率显著升高)。
第六步:迭代 (Iterate)
性能调优通常是一个迭代的过程。如果第一次调优没有达到目标,回到第二步,重新监控、分析,找到下一个瓶颈,然后再次实施调优措施并验证,直到达到预期的性能目标。
重要原则:
- 测量为先: 不要凭猜测进行调优,必须基于数据。
- 循序渐进: 一次只修改一个或少数几个参数/代码块,这样才能确定是哪个改动产生了效果。
- 在生产环境相似的环境中调优: 开发环境的性能表现可能与生产环境差异很大。
- 理解应用: 深入了解应用的业务逻辑、架构和负载特性,才能做出更明智的调优决策。
- 权衡: 性能目标之间可能存在冲突(例如,追求极低的停顿时间可能牺牲一些吞吐量),需要根据实际需求进行权衡。
相关文章:
如何进行 JVM 性能调优?
进行 JVM 性能调优是一个系统性的过程,旨在提高 Java 应用程序的响应速度、吞吐量、降低资源消耗(如 CPU 和内存)以及提高稳定性。 以下是一个通用的 JVM 性能调优步骤和常用方法: 第一步:明确目标与建立基线 (Defin…...
艺华直播 5.0 |专注于提供港澳台及央视频道的电视直播应用,加载快,播放流畅
艺华直播是一款专注于提供港澳台及央视频道的电视直播应用。它以加载速度快、播放流畅不卡顿著称,是目前少数能够稳定观看港澳台频道的应用之一。此次分享的版本为测试版,支持4K秒播,带来极致的观看体验。尽管该应用已开始收费,但…...
【软件设计师:复习】上午题核心知识点总结(三)
一、编译原理(基础题) 1.编译过程概述(必考) 编译过程分为六个阶段,各阶段核心任务与典型输出如下: 阶段核心任务输入输出关键方法/工具词法分析将字符流转换为标记(Token)流源代码字符串Token序列(如<ID, "x">)正则表达式、有限自动机(DFA/NFA)…...
SAE极速部署弹性微服务商城——实验记录
SAE极速部署弹性微服务商城 本实验带您体验在SAE上快速部署一个弹性的在线商城微服务应用,使得终端用户可以通过公网访问该商城,并进行压力测试以验证其性能与稳定性。 文章目录 SAE极速部署弹性微服务商城使用SAE部署应用有哪些优势? 对商城…...
内存 “舞台” 上,进程如何 “翩翩起舞”?(转)
在数字世界里,计算机的每一次高效运转都离不开内存与进程的默契配合。内存,恰似一座宏大且有序的舞台,为进程提供了施展拳脚的空间。而进程,则如同舞台上的舞者,它们在内存的舞台上,遵循着一套复杂而精妙的…...
产品手册小程序开发制作方案
公司产品手册小程序系统主要是为了解决传统纸质或PDF格式手册更新成本高、周期长,难以及时反映最新产品信息。线下分发效率低,线上分享体验差,不利于品牌推广。传统手册单向传递信息,无法与用户进行互动,企业难以了解用…...
【dify—8】Agent实战——占星师
目录 一、创建Agent应用 二、创建提示词 三、创建变量 四、添加工具 五、发布更新 六、运行 第一部分 安装difydocker教程:【difydocker安装教程】-CSDN博客 第二部分 dock重装教程:【dify—2】docker重装-CSDN博客 第三部分 dify拉取镜像ÿ…...
Redis的键过期删除策略与内存淘汰机制详解
Redis 的键过期删除策略与内存淘汰机制详解 一、键过期删除策略 Redis 通过 定期删除(Active Expire) 和 惰性删除(Lazy Expire) 两种方式结合,管理键的过期清理。 1. 惰性删除(Lazy Expire) …...
数据结构——树(中篇)
今日名言: 人生碌碌,竞短论长,却不道枯荣有数,得失难量 上次我们讲了树的相关知识,接下来就进一步了解二叉树吧。本文为个人学习笔记,如有侵权,请 联系删除,如有错误,欢…...
实验三 软件黑盒测试
实验三 软件黑盒测试使用测试界的一个古老例子---三角形问题来进行等价类划分。输入三个整数a、b和c分别作为三角形的三条边,通过程序判断由这三条边构成的三角形类型是等边三角形、等腰三角形、一般三角形或非三角形(不能构成一个三角形)。其中要求输入变量&#x…...
PHP-Cookie
Cookie 是什么? cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。 设置Cookie 在PHP中,你可…...
提升采购管理,打造核心竞争力七步战略采购法详解P94(94页PPT)(文末有下载方式)
资料解读:《提升采购管理,打造核心竞争力 —— 七步战略采购法详解》 详细资料请看本解读文章的最后内容。 在当今竞争激烈的商业环境中,采购管理已成为企业打造核心竞争力的关键环节。这份文件围绕七步战略采购法展开,深入剖析了…...
单片机-89C51部分:13、看门狗
飞书文档https://x509p6c8to.feishu.cn/wiki/LefkwDPU7iUUWBkfKE9cGLvonSh 一、作用 程序发生死循环的时候(跑飞),能够自动复位。 启动看门狗计数器->计数器计数->指定时间内不对计数器赋值(主程序跑飞,无法喂…...
基于MyBatis的银行转账系统开发实战:从环境搭建到动态代理实现
目标: 掌握mybatis在web应用中怎么用 mybatis三大对象的作用域和生命周期 ThreadLocal原理及使用 巩固MVC架构模式 为学习MyBatis的接口代理机制做准备 实现功能: 银行账户转账 使用技术: HTML Servlet MyBatis WEB应用的名称&am…...
纹理采样+光照纹理采样
普通纹理显示 导入纹理 1.将纹理拷贝到项目中 2.配置纹理 纹理显示原理 原始纹理(边长是),如果原始图的边长不是,游戏引擎在运行时,会自动将 纹理的边长补偿为,所以补偿是有损耗的(纹理不一定是…...
408真题笔记
2024 年全国硕士研究生招生考试 计算机科学与技术学科联考 计算机学科专业基础综合 (科目代码:408) 一、单项选择题 第 01~40 小题,每小题 2 分,共 80 分。下列每小题给出的四个选项中,只有一个…...
【Shell 脚本编程】详细指南:第一章 - 基础入门与最佳实践
Shell 脚本编程完全指南:第一章 - 基础入门与最佳实践 引言:Shell 脚本在现代开发中的重要性 Shell 脚本作为 Linux/Unix 系统的核心自动化工具,在 DevOps、系统管理、数据处理等领域扮演着关键角色。本章将系统性地介绍 Shell 脚本的基础知…...
PostgreSQL数据库操作SQL
数据库操作SQL 创建 创建数据库 create database db_test;创建并指定相关参数 with owner : 所有者encoding : 编码connection limit :连接限制 create database db_test1 with owner postgresencoding utf-8connection limit 100;修改 修改数据库名称 renam…...
RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)
Multi-Query 多路召回 多路召回流程图 多路召回策略利用大语言模型(LLM)对原始查询进行拓展,生成多个与原始查询相关的问题,再将原始查询和生成的所有相关问题一同发送给检索系统进行检索。它适用于用户查询比较宽泛、模糊或者需要…...
VBA数据库解决方案第二十讲:Select From Where条件表达式
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...
Linux架构篇、第1章_02源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62
Linux_基础篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.01 适用环境: Centos7 文档说明 本文…...
【Machine Learning Q and AI 读书笔记】- 03 小样本学习
Machine Learning Q and AI 中文译名 大模型技术30讲,主要总结了大模型相关的技术要点,结合学术和工程化,对LLM从业者来说,是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第3篇,对应原…...
Webug4.0靶场通关笔记08- 第11关万能密码登录(SQL注入漏洞)
目录 第13关 万能密码登录 1.打开靶场 2.源码分析 3.渗透方法1 4.渗透方法2 第13关 万能密码登录 本文通过《webug靶场第13关 万能密码登录》来进行渗透实战。 万能密码是利用 SQL 注入漏洞,构造出能够绕过登录验证的特殊密码字符串。通常,登录验…...
terraform中statefile文件的实现原理及作用
Terraform 的 State 文件(terraform.tfstate)是其基础设施即代码(IaC)机制的核心组件,用于记录和管理云资源的实际状态。以下是其实现原理及核心作用的详细分析: 一、State 文件的实现原理 1. 数据结构与…...
7.0/Q1,GBD数据库最新文章解读
文章题目:Cardiovascular disease s mortality in Brazilian municipalities: estimates from the Global Burden of Disease study, 2000-2018 DOI:10.1016/j.lana.2025.101106 中文标题:巴西城市的心血管疾病死亡率:来自2000-20…...
linux 使用nginx部署next.js项目,并使用pm2守护进程
前言 本文基于:操作系统 CentOS Stream 8 使用工具:Xshell8、Xftp8 服务器基础环境: node - 请查看 linux安装node并全局可用pm2 - 请查看 linux安装pm2并全局可用nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&…...
0基础 | Proteus电路仿真 | 电机使用
目录 电机类型 51单片机对直流电机的控制 基于89C51主控的直流电机控制电路仿真 代码《基于Keil C51》 51单片机对步进电机的控制 控制代码《基于Keil C51》 基于89C51主控的步进电机控制电路仿真 电机类型 直流电机 步进电机 51单片机对直流电机的控制 直流电机&#…...
人工智能100问☞第14问:人工智能的三大流派(符号主义、联结主义、行为主义)有何区别?
目录 一、通俗解释 二、专业解析 三、权威参考 一、通俗解释 人工智能的三大流派,就像三位不同性格的工程师用各自的方法造机器人: 1、符号主义(逻辑派) 核心:用“教科书式规则”教机器思考。比如教计算机下棋,先写一本《国际象棋必胜法则》,机器…...
油气人工地震资料信号处理中,机器学习和AI应用
在油气人工地震资料信号处理中,机器学习和AI可以应用于多个环节,显著提升数据质量、解释效率和勘探准确性。以下是主要应用场景及对应的开源工具推荐: 1. 数据预处理 应用场景: 噪声压制(如随机噪声、多次波、面波&am…...
Python数据分析课程实验-1
1.1数据分析简介 当今世界对信息技术的依赖程度日渐加深,每天都会产生和存储海量的数据。数据的来源多种多样一自 动检测系统、传感器和科学仪器等。不知你有没有意识到,你每次从银行取钱、买东西、写博客、发微博也会产生新的数据。 什么是数据呢?数据实际上不同于…...
算法--模拟题目
算法–模拟问题 1576. 替换所有的问号 思路:遍历字符串,找到?, 然后遍历字符a 到 z 找到不等于前后字符,替换即可 class Solution { public:string modifyString(string s) {for(int i 0; i < s.size(); i){if(s[i] ?){//替换for(char a a; a < z; a){//当字符不等…...
PDF24 Tools:涵盖20+种PDF工具,简单高效PDF工具箱,支持一键编辑/转换/合并
一、软件介绍 PDF 24 Tools是一款由德国公司开发的PDF编辑工具,拥有18年的历史,并且一直免费使用,这在同类软件中非常难得。 早在许久之前,我就推荐过这款工具的免费网页版,但由于网页使用起来可能不太方便且速度较慢…...
12.多边形的三角剖分 (Triangulation) : Fisk‘s proof
目录 1.Fisks proof Trangulation Coloring Domination Pigeon-Hold Principle Generation 2.Orthogonal Polygons (正交多边形) Necessity of floor(n4) Sufficiency by convex Quadrilateralization Generalization 1.Fisks proof Trangulation 引入内对角线&…...
数据库基本概念:数据库的定义、特点、分类、组成、作用
一:数据库相关概念 1.1 定义 (1)数据库:存储数据的仓库 (2)数据库管理系统:模拟和管理数据库的大型软件 (3)SQL:操作关系型数据库的编程语言,定义…...
PostgreSQL 数据库下载和安装
官网: PostgreSQL: Downloads 推荐下载网站:EDB downloads postgresql 我选了 postgresql-15.12-1-windows-x64.exe 鼠标双击,开始安装: 安装路径: Installation Directory: D:\Program Files\PostgreSQL\15 Serv…...
【c++】【STL】queue详解
目录 queue的作用什么是容器适配器queue的接口构造函数emptysizefrontback queue类的实现 queue的作用 queue是stl库提供的一种容器适配器,也就是我们数据结构中学到的队列,是非常常用的数据结构,特点是遵循LILO(last in last ou…...
循环插入数据库行
文章目录 循环插入数据库行 循环插入数据库行 -- 声明变量 DECLARE i INT 201;-- 开始循环 WHILE i < 200 BEGIN-- 插入数据INSERT INTO T_AGVPOS (POS) VALUES (i);SET i i 1; END;...
QMK机械键盘固件开发指南:从源码到实践
QMK机械键盘固件开发指南:从源码到实践 前言 QMK(Quantum Mechanical Keyboard)是一款开源的键盘固件,支持众多自定义键盘的功能配置。通过QMK,您可以完全掌控键盘的每一个按键,实现复杂的宏指令、多层按…...
Unity SpriteMask(精灵遮罩)
🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎SpriteMask:精灵遮罩 💡作用就是对精灵图片产生遮罩,…...
AdaBoost算法详解:原理、实现与应用指南
AdaBoost算法详解:原理、实现与应用指南 1. 引言 在机器学习领域,AdaBoost(Adaptive Boosting) 是最早提出的集成学习(Ensemble Learning)**算法之一,由Yoav Freund和Robert Schapire于1995年…...
Flink流式计算核心:DataStream API与时间语义深度解析
本文将围绕Flink最核心的DataStream API展开,结合其独特的时间语义体系,深入解析Flink如何实现对无界流数据的精准控制,并通过真实业务场景案例演示其工程实践方法。 一、DataStream API:Flink处理无界流的“中枢神经” Flink的A…...
C# 方法的结构与执行详解
在编程世界里,方法是一块具有名称的代码,它就像是一个功能盒子,我们可以使用方法的名称从别的地方执行其中的代码,还能把数据传入方法并接收数据输出。方法是类的函数成员,主要由方法头和方法体两个部分构成。 方法头…...
《AI大模型应知应会100篇》第41篇:多轮对话设计:构建高效的交互式应用
第41篇:多轮对话设计:构建高效的交互式应用 摘要 在银行客服机器人突然准确回答出用户第7次追问的信用卡额度规则时,在医疗问诊系统记住患者既往病史的瞬间,多轮对话技术正在创造令人惊叹的交互体验。本文将以工业级案例为经&am…...
【Day 14】HarmonyOS分布式数据库实战
一、分布式数据库基础 1. 核心概念速记表 术语解释示例场景分布式数据库数据自动同步到同账号设备手机添加商品→平板立即显示KV数据模型键值对存储(类似JSON){"cart_item1": {"name":"牛奶","price":10}}数据…...
terraform 删除资源前先校验资源是否存在关联资源
Terraform 删除资源前校验关联资源的解决方案 在使用 Terraform 进行资源删除操作时,确实存在直接删除可能影响关联资源的风险。以下是几种在删除前校验关联资源的方法: 1. 使用 Terraform Data Sources 进行预检查 在删除主资源前,可以通…...
如何免费使用 DeepSeek-Prover-V2?
近日,Deepseek 发布了一个新模型,这是一个在数学推理方面表现卓越的模型,即 DeepSeek Prover V2。 DeepSeek-Prover-V2 是一个专门使用 Lean 4 证明助手进行形式化定理证明的高级语言模型。 简单来说, DeepSeek-Prover-V2 旨在支持数学家和计算机科学家创建和验证形式化证…...
dify+ollama+知识库 部署
这篇文章的前提是已经部署了deepseek和ollama deepseek和ollama安装 代码、配置 本地电脑如果是Windows的话,需要安装Git # 拉取Dify代码 git clone https://github.com/langgenius/dify.git复制配置 进入dify\docker目录 复制.env.example到.env 复制.middlewa…...
补题:K - Magic Tree (Gym - 105231K)
来源:问题 - K - Codeforceshttps://codeforces.com/gym/105231/problem/K 题目描述: 一、题目分析 本题给定一个2行m列的网格,从(1, 1)格子开始进行深度优先搜索,每个格子可到达至少一个边相邻的格子且不重复访问,…...
文章记单词 | 第58篇(六级)
一,单词释义 naive:英 [naɪˈiːv , nɑːˈiːv] 美 [naɪˈiːv , nɑːˈiːv],形容词,意为 “天真的;幼稚的;轻信的;易受骗的;无经验的;率真的;质朴的”…...
红利底波是什么意思?
红利低波是一种结合了红利策略和低波策略的投资策略,主要选取股息率高且波动率低的股票进行投资,具有 “高收益低风险” 的特点,适合大多数投资者的权益资产配置。以下是具体介绍: 策略构成要素 红利策略 :关注股息率…...