Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)
阿里云的KMS(Key Management Service)也是一种托管式密钥管理服务,帮助用户安全地创建、控制和使用密钥,保护敏感数据。通过使用KSM,您可以专注于构建和优化应用程序,而不必担心密钥管理的复杂性。
1、主要功能
- 密钥托管:支持多种类型的对称和非对称加密密钥的创建,并提供安全的密钥存储。
包括密钥的创建、启用、禁用、计划删除等操作,确保密钥在其整个生命周期内的安全性和有效性。 - 数据加密:提供加密、解密、签名验签等密码学操作。
- 严格的访问控制:集成阿里云RAM(Resource Access Management),可以为不同的用户或角色设置细粒度的权限控制。
- 审计跟踪:记录所有与密钥相关的操作,如创建、删除、启用/禁用等,以供审计之用。
- 合规性认证:满足多项国际和地区的安全标准和法规要求,如ISO 27001、CSA STAR等。
2、使用场景
- 数据加密:可用于加密静态数据,如数据库中的敏感信息、备份文件等,确保数据的安全性。
- 应用层加密:开发者可以在应用层面使用KMS提供的API进行数据加密解密操作,提高数据处理过程中的安全性。
- 密钥轮换:自动或手动更新加密密钥,降低长期使用同一密钥带来的风险。
3、安全措施
- 硬件安全模块(HSM)保护:阿里云KMS使用经过验证的硬件安全模块来保护您的密钥,确保其存储和使用的安全性。
- 多因素认证(MFA):增强对关键操作的保护,防止未经授权的访问。
- 网络隔离:KMS运行于阿里云的高安全等级环境中,确保服务之间的网络隔离,减少潜在的安全威胁。
4、密钥类型
阿里云 KMS 提供三种密钥类型,适用于不同场景:
(1)、默认密钥(Default Key)
- 特点:
- 免费:无需额外付费,用户开通 KMS 即可使用。
- 功能限制:仅支持云产品服务端加密(如 ECS、RDS 等),不支持客户端数据加密。
- 密钥类型:对称密钥(AES-256)。
- 适用场景:
- 云产品(如 RDS、OSS)的服务端加密,无需用户管理密钥,由云产品自动使用默认密钥加密数据。
(2)、软件密钥(Software Key)
- 特点:
- 托管在阿里云服务器:密钥存储在软件加密服务中,成本较低。
- 功能丰富:
- 支持客户端数据加密(如应用层数据加密)。
- 支持密钥轮换(自动更新密钥,降低泄露风险)。
- 支持对称密钥(如 AES-256)和非对称密钥(如 RSA、ECC)。
- 合规性:符合中国等保 2.0 标准。
- 适用场景:
- 应用层数据加密:如加密数据库密码、API 密钥等敏感信息。
- 云产品服务端加密:如 RDS、OSS 的加密存储。
(3)、硬件密钥(Hardware Security Module, HSM)
- 特点:
- 物理安全隔离:密钥存储在 FIPS 140-2 Level 3 认证的硬件安全模块中,安全性最高,费用最高。
- 合规性:满足金融、医疗等高安全要求场景的合规需求(如 GDPR、PCI DSS)。
- 功能限制:
- 不支持密钥轮换:需手动操作。
- 支持更多密钥规格:如国密 SM2/SM4 算法。
- 计费:按实例和 QPS 计费,成本较高。
- 适用场景:
- 高安全场景:如金融行业的敏感数据加密、数字签名。
- 合规要求严格:需符合国际或国内安全标准。
5、阿里云平台配置
(1)、创建阿里云KMS密钥
- 登录阿里云控制台:
- 访问阿里云官网,登录账号。
- 进入KMS控制台:
- 导航到 产品与服务 → 安全 → 密钥管理服务(KMS)。
- 创建密钥:
- 点击 创建密钥 → 选择 对称密钥(默认AES-256)。
- 填写密钥别名(如 my-springboot-key),选择地域(如华东1)。
- 点击 立即创建,完成密钥创建。
- 记录密钥ID:
- 进入密钥详情页,复制密钥ID(Key ID),后续代码中需要用到。
(2)、配置RAM权限
- 创建RAM用户(可选但推荐):
- 进入 RAM控制台 → 用户 → 创建用户,赋予用户 KMS权限。
- 授予策略:AliyunKMSFullAccess(全权限)或自定义策略(如仅允许加密/解密操作)。
- 关联密钥权限:
- 在KMS控制台,进入密钥详情页 → 权限策略 → 添加RAM用户权限。
(3)、获取AccessKey
- 获取AccessKey:
- 点击右上角头像 → 访问控制RAM → AccessKey管理。
- 点击 创建AccessKey,保存生成的 AccessKey ID 和 AccessKey Secret(注意:AccessKey Secret仅显示一次,需妥善保存)。
说明:
秘钥Id(Key ID)为秘钥的value对应的key。这个用于获取加密秘钥。
AccessKey ID 和 AccessKey Secret为接入权限的认证信息,标识用户身份。
6、代码示例
(1)、添加依赖
在 pom.xml 中添加阿里云KMS SDK依赖:
示例:
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-kms</artifactId><version>6.2.0</version> <!-- 请使用最新版本 -->
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.10.2</version>
</dependency>
(2)、配置参数
在 application.yml 中配置阿里云KMS参数:
示例:
aliyun:kms:access-key-id: "your-access-key-id" # 步骤2中获取的AccessKey IDaccess-key-secret: "your-access-key-secret" # 步骤2中获取的AccessKey Secretregion: "cn-hangzhou" # 地域(如华东1对应cn-hangzhou)key-id: "your-kms-key-id" # 步骤1中创建的密钥ID
(3)、创建KMS配置类
创建一个配置类,初始化KMS客户端:
示例:
import com.aliyun.kms.model.*;
import com.aliyun.kms.profile.DefaultProfile;
import com.aliyun.kms.profile.IClientProfile;
import com.aliyun.kms.transform.KmsDefaultAcsClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class KmsConfig {@Value("${aliyun.kms.access-key-id}")private String accessKeyId;@Value("${aliyun.kms.access-key-secret}")private String accessKeySecret;@Value("${aliyun.kms.region}")private String regionId;@Beanpublic KmsDefaultAcsClient kmsClient() {IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);return new KmsDefaultAcsClient(profile);}
}
(4)、编写KMS工具类
创建工具类实现加密和解密功能:
示例:
import com.aliyun.kms.model.EncryptRequest;
import com.aliyun.kms.model.EncryptResponse;
import com.aliyun.kms.model.DecryptRequest;
import com.aliyun.kms.model.DecryptResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;@Component
public class KmsUtil {@Resourceprivate KmsDefaultAcsClient kmsClient;@Value("${aliyun.kms.key-id}")private String keyId;/* 加密数据* @param plaintext 明文数据* @return 加密后的密文*/public String encrypt(String plaintext) {try {EncryptRequest request = new EncryptRequest();request.setKeyId(keyId);request.setPlaintext(plaintext.getBytes());EncryptResponse response = kmsClient.getAcsResponse(request);return response.getCiphertextBlob(); // 返回Base64编码的密文} catch (Exception e) {throw new RuntimeException("加密失败", e);}}/* 解密数据* @param ciphertext 密文(Base64编码)* @return 明文数据*/public String decrypt(String ciphertext) {try {DecryptRequest request = new DecryptRequest();request.setCiphertextBlob(ciphertext);DecryptResponse response = kmsClient.getAcsResponse(request);return new String(response.getPlaintext());} catch (Exception e) {throw new RuntimeException("解密失败", e);}}
}
(5)、使用示例
在Controller或Service中调用加密/解密方法。
示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class KmsController {@Autowiredprivate KmsUtil kmsUtil;@GetMapping("/encrypt")public String encrypt(@RequestParam String text) {String encrypted = kmsUtil.encrypt(text);return "加密结果: " + encrypted;}@GetMapping("/decrypt")public String decrypt(@RequestParam String cipherText) {String decrypted = kmsUtil.decrypt(cipherText);return "解密结果: " + decrypted;}
}
注意:
以上的编码为仅为使用示例,在实际开发过程中还需要注意一些其他情况。
1. 安全建议:
- AccessKey管理:避免将AccessKey硬编码在代码中,可使用环境变量或配置中心(如Nacos),或独立文件中,在读取文件获取等。
- 密钥权限:仅给RAM用户分配最小必要权限(如 AliyunKMSCryptoUserAccess)。
2. 地域匹配: - 确保 region 配置与KMS密钥所在的地域一致(如 cn-hangzhou 对应华东1)。
3. 异常处理: - 在实际项目中,需对 KmsClient 的调用添加重试机制和异常捕获。
7、秘钥轮换注意
为了降低长期使用同一密钥带来的风险,自动或手动更新加密密钥在大厂实践中是必须的。
可以在阿里云KMS中配置每 90 天轮换一次密钥,或结合需要自行设置。
解决方法:
(1)、保留旧版本密钥(不推荐)
- 在 KMS 中,即使密钥轮换了,旧版本的密钥仍然可以用于解密历史数据。
- 确保不要删除旧版本的 CMK。
解释:
新数据使用新的秘钥进行加密和解密。历史版本数据需要获取历史版本的CMK秘钥进行解密。这种方案需要业务上处理秘钥的版本或KMS支持自动解析才能实现。通常不推荐
(2)、数据重新加密(大数据时不推荐)
- 如果你需要更高的安全性,可以在密钥轮换后重新加密所有数据。
- 这可以通过以下步骤实现:
- 使用旧版本密钥解密所有数据。
- 使用新版本密钥重新加密数据。
解释:
历史数据都需要重新通过旧秘钥解密,在按照新秘钥重新加密。这样能保证所有的数据都可以使用新秘钥进行处理。这种方式对于数据少的情况还行,数据量巨大的场景并不适用。
(3)、数据密钥(DEK)与主密钥(CMK)结合(推荐)
- 使用阿里云生成的主密钥CMK对数据秘钥DEK进行加密,将加密后的DEK存储到客户程序中。
- 客户程序通过CMK对DEK进行解密后,在加密数据。
- CMK秘钥轮换后,对DEK解密后重新加密(KMS有API),这样仅对数据秘钥DEK进行了重新加密,数据就无需重新处理。
8、阿里云KMS对比AWS KMS
阿里云KMS(Key Management Service)和AWS KMS(Key Management Service)都是提供密钥管理服务的云产品,旨在帮助用户安全地创建、存储和管理加密密钥。两者都提供了强大的功能来保护数据的安全性。
(1)、密钥管理
- 阿里云KMS:支持对称密钥和非对称密钥的生成、导入和管理。它还允许用户通过硬件安全模块(HSM)来增强密钥的安全性。
- AWS KMS:同样支持对称密钥和非对称密钥的管理,并且也使用了HSM来保护密钥材料。此外,AWS KMS还提供了更高级的功能,比如自定义密钥存储(Custom Key Store),它允许用户将密钥存储在自己的AWS CloudHSM集群中。
(2)、访问控制
- 阿里云KMS:集成阿里云RAM(Resource Access Management)系统,可以为不同的用户或角色设置细粒度的权限控制。
- AWS KMS:利用IAM(Identity and Access Management)策略来控制谁可以访问哪些密钥以及他们可以执行的操作类型。
(3)、审计与监控
- 阿里云KMS:记录所有与密钥相关的操作日志,并且这些日志可以通过阿里云的日志服务进行分析。
- AWS KMS:集成了CloudTrail服务,能够记录所有API调用,包括谁调用了哪个密钥以及何时调用等信息。
(4)、加密解密能力
- 阿里云KMS:可以直接通过API进行加密解密操作,同时也支持与其他阿里云服务(如OSS, RDS等)集成以自动处理加密需求。
- AWS KMS:不仅提供直接的加密解密API,还可以与S3, EBS, Redshift等多种AWS服务无缝集成,使得数据在传输和静态时都能得到保护。
(5)、合规性
- 阿里云KMS:符合多项国际标准,例如ISO 27001、CSA STAR等。
- AWS KMS:除了满足上述标准外,还符合HIPAA、FedRAMP等特定行业的要求。
(6)、成本模型
- 阿里云KMS:按照请求次数收费,同时对于密钥的创建、启用/禁用、计划删除等操作也有相应的费用。
- AWS KMS:采用类似的按请求次数计费模式,但具体费率可能有所不同。AWS还提供预留密钥选项,可以帮助客户节省长期使用的成本。
(7)、地理位置和服务可用性
- 阿里云KMS:主要服务于中国市场,但在全球范围内也有数据中心。
- AWS KMS:在全球多个区域提供服务,适合需要跨国界运营的企业。
(8)、对比总结
建议在中国境内或国产项目使用阿里云KMS。在境外区域使用AWS可能比较合适。
-
阿里云KMS:
- 优势:中国境内低延迟、合规性强(等保2.0、国密算法)、成本低。
- 局限:全球覆盖有限,国际合规认证(如GDPR)需额外配置。
-
AWS KMS:
- 优势:全球覆盖、高可用性、丰富的集成生态、国际合规认证。
- 局限:中国境内访问可能受网络限制,成本较高。
逆风翻盘,Dare To Be!!!
相关文章:
Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)
阿里云的KMS(Key Management Service)也是一种托管式密钥管理服务,帮助用户安全地创建、控制和使用密钥,保护敏感数据。通过使用KSM,您可以专注于构建和优化应用程序,而不必担心密钥管理的复杂性。 1、主要…...
游戏引擎学习第218天
构建并运行,注意一下在调试系统关闭前人物的移动速度 现在我准备开始构建项目。如果我没记错的话,我们之前关闭了调试系统,主要是为了避免大家在运行过程中遇到问题。现在调试系统没有开启,一切运行得很顺利,看到那个…...
城电科技 | 光伏太阳花:碳减排路上的璀璨新光光伏智慧花
当谈及 “碳减排” 与 “碳中和”,你脑海中率先浮现的是什么?想必很多人都会想到太阳能发电。太阳能光伏,作为人类取之不尽、用之不竭的绿色清洁能源,具备充分的清洁性、高度的安全性以及相对的广泛性。正因如此,在探讨…...
AI领域再突破,永洪科技荣获“2025人工智能+创新案例”奖
在2025年的今天,人工智能已从技术概念全面渗透至产业核心。中国作为全球AI技术应用的前沿阵地,正通过“人工智能”行动加速推进技术与实体经济深度融合。 这一背景下,永洪科技凭借其“国内某头部ICT人力资源板块GenAI项目”荣获“2025全国企业…...
大模型day1 - 什么是GPT
什么是GPT 全称 Generative Pre-trained Transformer 是一种基于 Transformer 架构的大规模 预训练 语言模型,由OpenAI研发,但GPT仅仅只是借鉴了Transformer 中 Decoder 的部分,并且做了升级 Transformer 架构 Transformer架构 是一种用于…...
飞凌嵌入式T527核心板正式发布OpenHarmony4.1系统,实现从芯片架构到操作系统的全链路国产化
飞凌嵌入式FET527N-C核心板正式发布OpenHarmony4.1系统,实现了从芯片架构到操作系统的全链路国产化。该产品具备灵活可编程、高效能运算、低成本控制等多重优势,通过多核异构设计同步支持边缘智能计算与精准实时控制,能够满足智能制造、能源管…...
机动车号牌管理系统设计与实现(代码+数据库+LW)
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对机动车号牌信息管理的提升&…...
测试模板1
本篇技术博文摘要 🌟 引言 📘 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...
小试牛刀-抽奖程序
编写抽奖程序 需求:设计一个抽奖程序,点击抽奖按钮随机抽取一个名字作为中奖者 目标:了解项目结构,简单UI布局,属性方法、事件方法,程序运行及调试 界面原型 待抽奖: 点击抽奖按钮&#x…...
Foundry框架在FISCO BCOS区块链中的高级应用与实战技巧
引言:从入门到精通的进阶之路 在看过我发布的《FISCO BCOS区块链智能合约测试利器:Foundry框架从入门到实战》基础上,我们可以进一步深入探索Foundry框架在FISCO BCOS生态中的高级应用场景。Foundry作为一款强大的区块链开发工具集,其功能远不止于基础测试,它还能为FISCO…...
反转链表系列
206. 反转链表 - 力扣(LeetCode) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int …...
算力租赁:数字经济时代的 “电力革命”—— 从资源租赁到创新生态的范式重构
引言:当算力成为新 “石油”,租赁模式如何重塑商业未来? 在数字经济浪潮中,算力早已超越传统硬件范畴,成为驱动企业创新的核心生产要素。据 IDC 预测,全球数据总量将在 2025 年突破 175 ZB,而人…...
Go:基本数据
文章目录 整数浮点数复数布尔值字符串字符串字面量UnicodeUTF - 8字符串和字节 slice字符串和数字的相互转换 常量常量生成器 iota无类型常量 整数 分类 Go 的整数类型按大小分有 8 位、16 位、32 位、64 位 ,同时有符号整数包括int8、int16、int32、int64 &#…...
金融行业软件介绍
金融,本质为货币资金的融通,是经济活动中至关重要的领域。它围绕货币、信用、利率等核心要素运转,借助银行、证券机构、保险机构等众多主体,在货币市场与资本市场中实现资金的调配与流转,具有优化资源配置、分散风险及…...
Python的那些事第四十九篇:基于Python的智能客服系统设计与实现
基于Python的智能客服系统设计与实现 摘要 随着人工智能技术的飞速发展,智能客服系统逐渐成为企业提升客户服务质量和效率的关键工具。本文详细介绍了基于Python的智能客服系统的设计与实现方案,涵盖了系统架构、核心功能、技术选型及优化建议,旨在为企业构建高效、智能的客…...
vscode报错:unins000.exe 尝试在目标目录创建文件时发生一个错误
打开vscode,报错 这个错误提示表明在卸载或安装 Visual Studio Code 时,系统拒绝访问目标目录中的文件 unins000.exe。以下是解决此问题的有效方法: 检查文件权限 找到文件所在目录(如 D:\software\Microsoft VS Codeÿ…...
当气象水文遇见R语言——破解时空数据的“达芬奇密码“
在气象水文科学领域,数据从来不只是简单的数字阵列。台风路径的时空跳跃、流域径流的非线性涨落、气候要素的混沌演变,这些充满不确定性的自然现象转化为数据时,呈现出多维时空交织的复杂图景。研究人员常常要在TB级遥感数据中捕捉毫米级降水…...
LEARNING DYNAMICS OF LLM FINETUNING【论文阅读笔记】
LEARNING DYNAMICS OF LLM FINETUNING 一句话总结 作者将LLM的学习动力机制拆解成AKG三项,并分别观察了SFT和DPO训练过程中正梯度信号和负梯度信号的变化及其带来的影响,并得到以下结论: SFT通过梯度相似性间接提升无关…...
【射频仿真学习笔记】变压器参数的Mathematica计算以及ADS仿真建模
变压器模型理论分析 对于任意的无源电路或者等效电路,当画完原理图后,能否认为已经知道其中的两个节点?vin和vout之间的明确解析解 是否存在一个通用的算法,将这里的所有元素都变成了符号,使得这个算法本身就是一个函…...
改善 Maven 的依赖性
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项: 还有另一个用例, mvn dependency:analyze 它可…...
循环神经网络 - LSTM 网络的各种变体
前面的博文中,我们了解和学习了长短期记忆网络,本文我们来学习LSTM 网络的各种变体。 目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息.我们可以对门控机制进行改进并获…...
LangGraph 概述
LangGraph 介绍 LangGraph 是 LangChain 框架的扩展,专为创建基于大型语言模型(LLMs)的有状态、多角色应用而设计。它提供了一个灵活的架构,用于构建复杂的多步骤 LLM 应用,其中状态管理和流程控制至关重要。 为什么…...
Linux系统06---信号
目录 信号 1.1 进程间通信方式 1.2 信号的概念 1.3 查看信号 1.4 信号的产生 1.5 信号的处理 信号的 API 函数 2.1 函数名:kill() 2.2 函数名:raise() 2.3 函数名:alarm() 2.4 函数名:pause() 2.5…...
Java 程序调试与生产问题排查工具Arthas
好的,以下是修改后的博客内容,将公司信息替换为通用的占位符: 深入探索 Arthas:Java 程序调试与生产问题排查的利器 在 Java 开发中,调试和诊断问题往往是一个复杂且耗时的过程。Arthas(Alibaba Java Dia…...
PH热榜 | 2025-04-11
1. Voicenotes Pages 标语:如果出版的感觉像是在和朋友聊天呢? 介绍:Voicenotes Pages 是一个极其简单的发布创意和故事的方式。它就像是一个简易的博客或播客,但更容易上手。你只需录制内容,点击发布,就…...
从三围学校项目看:中建海龙智能建造的崛起与突破
在建筑行业迈向智能化、数字化的浪潮里,中建海龙科技有限公司(以下简称“中建海龙”)从中脱颖而出,成为推动智能建造发展的重要力量。凭借深厚的技术积累、创新的理念以及先进的实践,中建海龙正引领着建筑行业的变革&a…...
aviator 自定义表达式
引入依赖 如果你使用的是 Maven 项目,在 pom.xml 中添加以下依赖: <dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>5.3.2</version> </dependency>…...
电商中的购物车(redis的hash类型操作)
购物车样式 ①、创建service-cart模块 spring:profiles:active: devserver:port: 8513 spring:application:name: service-cartcloud:nacos:discovery:server-addr: localhost:8848data:redis:host: localhostport: 6379启动类 SpringBootApplication(excludeDataSourceAutoC…...
Ubuntu 系统错误日志常见问题
一、Ubuntu 系统日志文件位置 1. 核心系统日志 日志文件用途说明/var/log/syslog所有系统级别的日志(包括内核、服务等)/var/log/kern.log内核相关的详细日志(如硬件驱动问题)/var/log/auth.log用户认证日志(SSH登录、sudo权限等)/var/log/dpkg.log软件包安装/卸载日志/…...
《Uniapp-Vue 3-TS 实战开发》TypeScript 泛型详解
泛型(Generics)是 TypeScript 中非常重要的特性,它允许我们创建可重用的组件,这些组件可以支持多种类型,而不会丢失类型安全性。 一、泛型基础 1. 基本概念 泛型允许我们在定义函数、接口或类时不预先指定具体类型,而是在使用时再指定类型。 // 不使用泛型 function …...
mysql 删除表等待
今天有个表加字段,语句是先删除,后重新建,表没有数据 ,但是删除一个表的时候,语句drop table 提示超时 show processlist 后,等待类型是 Waiting for table metadata lock 取消重试几次后仍然是如此…...
如何深入理解protobuf
Protocol Buffers(protobuf)是一种轻便高效的结构化数据存储格式,用于数据序列化和反序列化,具有语言无关、平台无关、可扩展性强等特点,能有效提高数据存储和传输的效率。 一.协议的设计 我们在介绍protobuf之前我们…...
《分布式软总线牵手云服务,拓展应用新维度》
分布式软总线与云服务的融合,正掀起一场前所未有的变革,重塑着我们工作、生活和交互的方式。二者的结合,犹如天作之合,不仅打破了设备与数据之间的壁垒,更开启了一系列令人瞩目的全新应用场景。 分布式软总线…...
ReentrantLock 实现公平锁和非公平锁的原理!
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗! 🌟了解 ThreadLocal请看: ThreadLocal有趣讲解,小白也能听懂ÿ…...
算法训练之动态规划(四)——简单多状态问题
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
【JavaScript】错误处理与调试
个人主页:Guiat 归属专栏:HTML CSS JavaScript 文章目录 1. JavaScript 错误处理基础1.1 错误类型1.2 try...catch 语句 2. 错误抛出与自定义错误2.1 throw 语句2.2 自定义错误类型 3. 异步错误处理3.1 Promise 错误处理3.2 async/await 错误处理 4. 调试…...
MySQL 管理与配置:查看端口、修改密码与数据存储位置
1.MySQL查看端口号 show global variables like port; 2.MySQL修改密码 grant all privileges on *.* to root% identified by 你的mysql密码 with grant option;flush privileges; 3.查询 MySQL 数据库的数据存储目录 MySQL 的所有数据库文件、表数据、索引、日志文件等都存…...
(四十二)Dart 中的接口与抽象类
Dart 中的接口与抽象类 Dart 的接口特性 在 Dart 中,接口的实现方式与 Java 有所不同。Dart 没有专门的 interface 关键字来定义接口,而是通过普通类或抽象类来实现接口的功能。以下是 Dart 接口的主要特点: 普通类或抽象类都可以作为接口 …...
Java习题:合并两个有序数组
文章目录 前言一、题目描述二、方法2.1 方法一2.2 方法二 前言 虽然这个题目很简单,但是在使用java语言实现的过程中,存在多种方法这是很有意思的一道题,所以小编在这里写下它的各种方法加深javase语法的学习。 提示:以下是本篇文…...
spm12_fMRI 2*4混合方差分析 Flexible factorial 对比矩阵
实验设计:2*4被试内设计 分析模型:spm 二阶分析中的 Flexible factorial 问题:Flexible factorial交互作用对比矩阵如何编写? 老师:deepseek老师【大神们看看这个矩阵是否可以如下编写?】 以下是来自de…...
力扣第272场周赛
周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台 这场周赛是在课堂上模拟的, 总体来说比较简单, 但不幸被老师压力了。以下分享一下我的解题思路 如果你每天没有时间刷题的话, 可以看一下我写的东西, 我尽量讲解的通俗一些, 不会…...
【5】深入学习npm-Nodejs开发入门
深入学习npm npm详解npm的组成-registrynpm的组成-websitenpm的组成-clinpm-confignpm-initnpm-installnpm-startnpm-uninstallnpm-version其他命令 再谈registrypackage.json配置基本结构必填字段可选字段依赖管理其他配置完整配置 node_modules其他 npm详解 我们在前面安装N…...
2025.04.05 广东汕尾两日游记
2025.04.05 广东汕尾两日游记 文章目录 2025.04.05 广东汕尾两日游记一、前言二、我的两日游行程1、行程2、这两天吃喝玩乐的地方 三、其他1、汕尾两日游小结2、汕尾前十景点(1)玄武山旅游区(2)红海湾遮浪旅游区(3&…...
【数学建模】(智能优化算法)鲸鱼优化算法(Whale Optimization Algorithm)详解与应用
鲸鱼优化算法(Whale Optimization Algorithm)详解与应用 文章目录 鲸鱼优化算法(Whale Optimization Algorithm)详解与应用1. 引言2. 算法原理2.1 生物学基础2.2 数学模型[^3]1. 包围猎物阶段2. 气泡网攻击(螺旋更新)3. 随机搜索猎物(全局探索…...
11-Java并发编程终极指南:ThreadLocal与并发设计模式实战
Java并发编程终极指南:ThreadLocal与并发设计模式实战 一、ThreadLocal核心原理剖析 1. 线程本地存储实现机制 #mermaid-svg-EX865K5oO873R6OO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EX865K5o…...
数据库数据恢复——sql server数据库被加密怎么恢复数据?
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。 SQL server数据库数据恢复过程: 1、将所有数据库做完整只读备份。后续所有数据恢…...
0501路由-react-仿低代码平台项目
文章目录 1 react路由1.1 核心库:React Router安装 1.2 基本路由配置路由入口组件定义路由 1.3 导航方式使用 <Link> 组件编程式导航 1.4 动态路由参数定义参数获取参数 1.5 嵌套路由父路由配置子路由占位符 1.6 重定向与404页面重定向404页面 1.7 路由守卫&a…...
C++二分查找
一、模板①:向下取整(mid (l r) >> 1) while (l < r) {int mid l r >> 1; // 等价于 (l r) / 2(向下取整)if (check(mid)) r mid; // 保留左半区else l mid 1; // 舍弃左半区 } 适用场…...
c++将jpg转换为灰度图
c将jpg转换为灰度图 step1:添加依赖 下载这两个文件,放在cpp同一目录下,编译生成 https://github.com/nothings/stb/blob/master/stb_image_write.h https://github.com/nothings/stb/blob/master/stb_image.hstep2:C:\Users\wangrusheng\source\repos…...
react/vue中前端多图片展示页面优化图片加载速度的五种方案
需求背景 在多项目中 例如官网项目中 会出现很多大图片显示的情况 这个时候就会出现图片过大 公司带宽不够之类导致页面加载速度过慢及页面出现后图片仍然占位但并未加载出来 或者因为网络问题导致图片区域黑块等等场景 这个时候我们就要对图片和当前场景进行优化 方案定…...