解决 CMS Old GC 频繁触发线上问题技术方案
目录
一、CMS GC 工作原理
二、现象分析
(一)具体表现说明
(二)触发条件
三、总结优化措施
(一)调整 CMS 启动条件:降低 Old 区触发阈值
1. 原理分析
2. 建议配置
(二)调整 CMS GC 等待时间:控制 GC 频率
1. 原理分析
2. 建议配置
(三) 启用 Class Unloading:回收 MetaSpace 和 PermGen 区域内存
1. 原理分析
2. 建议配置
(四)控制对象晋升:避免过早晋升至 Old 区
1. 原理分析
2. 建议配置
(五)优化内存泄漏问题:定位与解决内存泄漏
1. 原理分析
2. 建议配置与步骤
四、总结
干货分享,感谢您的阅读!
在 Java 应用的内存管理中,垃圾回收(GC)是一个至关重要的组成部分。随着应用的复杂度增加,GC 的表现和效率直接影响着系统的吞吐量和响应时间。**CMS(Concurrent Mark-Sweep)**垃圾回收器作为一种低暂停时间的垃圾回收策略,广泛应用于高性能应用场景。然而,CMS Old GC 频繁触发的问题却困扰着许多开发者和运维人员。本文将深入分析 CMS Old GC 频繁触发的原因,并提供优化策略,帮助开发者在实际工作中解决这一问题。
一、CMS GC 工作原理
在讨论 CMS Old GC 频繁触发的原因之前,我们首先需要了解 CMS GC 的工作原理。CMS 是一种基于 标记-清除(Mark-Sweep)算法的垃圾回收器,采用了并发标记与清除的方式,旨在减少 GC 时的停顿时间。
CMS GC 的基本流程:
- Young GC:清理年轻代内存,回收新生对象。
- Concurrent Marking:并发标记所有存活的对象,标记结束后,标记的对象被分配到相应的区。
- Concurrent Sweep:在并发标记之后,清除被标记为垃圾的对象。
- CMS Old GC:当 Old 区内存占用达到阈值时,进行 Old GC,回收长时间存活的对象。
CMS 的目标是尽量减少 STW(Stop-The-World)事件,尤其是在 Old 区的垃圾回收时,通过并发的方式进行处理。然而,如果 Old GC 频繁发生,可能会对系统的性能产生负面影响,导致吞吐量下降,延迟增大。
二、现象分析
(一)具体表现说明
在生产环境中,CMS Old GC 频繁的问题表现为:
- GC 频繁触发:每次执行 Old GC 的时间虽然不长,但却经常发生。
- 吞吐量下降:由于 GC 频繁,应用程序的吞吐量明显下降。
- 响应时间增大:频繁的 GC 导致应用的响应时间波动,影响用户体验。
(二)触发条件
CMS GC 是否触发,取决于一系列的条件。以下是触发 CMS Old GC 的常见情形:
- Old 区内存占用达到阈值:当 Old 区的占用率超过一定阈值时,CMS 会触发垃圾回收。
- Young GC 失败或将要失败:当 Young 区执行 GC 失败,或者预期下一次 Young GC 可能失败时,CMS 会尝试回收 Old 区。
- 手动请求 Full GC:通过
System.gc()
等方式显式请求垃圾回收,也可能触发 Old GC。 - MetaSpace 的 GC:如果开启了
-XX:+CMSClassUnloadingEnabled
,CMS 也会参与 MetaSpace 的回收。
具体来说,ConcurrentMarkSweepThread 类中的方法 shouldConcurrentCollect()
用于判断是否满足回收条件。代码中的判断逻辑会根据多个因素来决定是否需要触发 Old GC:
if (_cmsGen->occupancy() >= _bootstrap_occupancy) {return true; // 触发 GC 的条件:Old 区占用率过高
}
此外,CMSWaitDuration
和 CMSCheckInterval
参数的设置也会影响 Old GC 触发的频率,较短的检查间隔可能导致过于频繁的 GC 触发。
三、总结优化措施
当 CMS Old GC 频繁时,优化措施的核心目标是减少 GC 的频率,提高系统的吞吐量和响应时间。以下总结几种在实际应用中的经验和建议:
(一)调整 CMS 启动条件:降低 Old 区触发阈值
通过调整 -XX:CMSInitiatingOccupancyFraction
参数,可以控制 CMS 启动回收的触发阈值。默认情况下,当 Old 区占用超过 92% 时,CMS 会启动 Old GC。然而,在高并发、内存压力较大的应用场景中,等待 Old 区占用达到 92% 才触发 GC 可能会导致回收过晚,从而造成频繁的 GC 和性能下降。
1. 原理分析
-XX:CMSInitiatingOccupancyFraction
设置了 CMS 触发回收的占用率阈值。默认值为 92%,即当 Old 区占用超过 92% 时触发 GC。- 如果系统负载较重,尤其是内存占用较高的情况下,降低阈值可以更早地触发回收,避免 Old 区占满后才开始清理。
2. 建议配置
-XX:CMSInitiatingOccupancyFraction=85
将阈值降低到 85%,可以使 CMS 更早地启动回收,减少内存压力,避免频繁的 Old GC。当系统负载较低时,可以适当提高此阈值,减少 GC 频率。
应用场景:
- 在内存较紧张的高并发应用中,建议将该参数设置为 80%-85%,通过提前回收 Old 区来避免后续的频繁 GC。
- 对于内存使用较为宽松的系统,可以适当提高此值,以减少不必要的回收。
(二)调整 CMS GC 等待时间:控制 GC 频率
参数 -XX:CMSWaitDuration
控制了 CMS GC 的等待时间,默认值为 2 秒。此参数的作用是在触发一个完整的 CMS GC 周期前,等待多久进行下一次的检查。如果 GC 周期过短,可能会导致不必要的频繁轮询,从而加重系统负担。
1. 原理分析
- CMS GC 的后台线程通过
sleepBeforeNextCycle()
方法等待下次检查周期,期间会根据CMSWaitDuration
设置的时间间隔进行睡眠。 - 通过增加等待时间,可以减少检查频率,避免过度轮询造成的性能开销。
2. 建议配置
-XX:CMSWaitDuration=5000
将等待时间增至 5 秒(或更长),可以减少不必要的频繁轮询,特别是在系统负载较低或者不需要频繁回收的情况下。
应用场景:
- 在负载较低的应用中,增加等待时间能够降低过于频繁的 CMS GC 检查,从而提升系统的吞吐量。
- 在高负载的生产环境中,需要小心增加等待时间,以免影响到 GC 的及时触发。
(三) 启用 Class Unloading:回收 MetaSpace 和 PermGen 区域内存
在默认情况下,CMS 并不会回收 MetaSpace 或 PermGen 区域的内存。对于类的卸载和元数据回收,CMS 不会触及这些区域。如果应用中存在大量的类加载和卸载操作,未回收的类信息会占用大量内存,增加 Old GC 负担。
1. 原理分析
-XX:+CMSClassUnloadingEnabled
启用后,CMS 将开始对 MetaSpace(或者 PermGen)区域进行垃圾回收。该功能对于运行时动态加载大量类的应用场景尤为重要。- 启用此功能后,可以减少内存压力,特别是在长时间运行的应用中,避免类信息堆积导致 CMS Old GC 频繁。
2. 建议配置
-XX:+CMSClassUnloadingEnabled
在需要对 MetaSpace 或 PermGen 进行回收的应用中,启用该参数可以减少内存占用,从而减轻 Old 区的负担。
应用场景:
- 对于复杂的 Java Web 应用,尤其是需要动态加载大量类的场景,启用该选项有助于释放大量不再使用的类信息。
- 对于基于 OSGi 等框架的应用,动态的类加载和卸载操作可以通过启用此参数优化内存回收。
(四)控制对象晋升:避免过早晋升至 Old 区
在 CMS 中,对象在 Young 区存活一定时间后会晋升至 Old 区。默认情况下,CMS 会将存活时间较长的对象晋升到 Old 区,但如果这些对象其实并不需要长期存活,这会导致 Old 区的内存压力增大,进而触发频繁的 Old GC。
1. 原理分析
-XX:MaxTenuringThreshold
控制对象晋升到 Old 区的年龄阈值。较低的值会导致对象较早晋升,而较高的值则会推迟晋升。合理配置该参数可以控制对象的晋升时机,从而避免不必要的内存消耗。- 如果设定值过低,可能导致许多短生命周期的对象提前晋升,增加 Old 区的内存压力。
2. 建议配置
-XX:MaxTenuringThreshold=10
将晋升阈值设置为 10,意味着只有当对象在 Young 区存活超过 10 次 GC 后才会晋升到 Old 区。根据应用特点适当调整此值,可以有效控制晋升时机。
应用场景:
- 对于长期存活的对象(如缓存数据或数据库连接),适当提高此阈值可以避免这些对象过早晋升到 Old 区。
- 对于短生命周期的对象,减少晋升阈值可以避免它们占用过多的 Old 区内存。
(五)优化内存泄漏问题:定位与解决内存泄漏
内存泄漏是导致 Old GC 频繁的另一个常见原因。Java 应用中的内存泄漏通常表现为某些对象未被及时回收,占用了大量内存。常见的内存泄漏包括长时间持有对大对象的引用、静态引用、线程池中的线程等。
1. 原理分析
- 使用
jmap
、arthas
等工具进行堆 Dump,能够帮助我们识别哪些对象占用了异常大的内存。 - 通过对 Unreachable Objects(不可达对象)进行分析,查看它们的 Shallow Size 和 Retained Size,可以定位哪些对象未被及时回收。
- 通过 Histogram 分析对象分布,查找是否有异常的对象或类占用了大量内存。结合 incoming 和 outgoing 引用关系,可以定位对象的引用链和生命周期。
2. 建议配置与步骤
- 使用
jmap
或arthas
进行堆 Dump,获取内存快照。 - 通过 Histogram 分析对象的分布,关注那些占用大量内存的类。
- 使用
-XX:+HeapDumpOnOutOfMemoryError
捕捉内存溢出时的堆 Dump 快照,帮助定位内存泄漏。 - 分析不可达对象(Unreachable Objects),关注 Shallow Size 和 Retained Size,找出长时间存活但未被回收的对象。
应用场景:
- 对于复杂业务逻辑,常常存在未释放的对象引用,导致内存泄漏。定期分析堆 Dump 文件,及时发现并解决这些问题。
- 使用
jprofiler
或VisualVM
等工具监控应用的内存使用情况,提前发现异常对象。
通过这些优化措施,我们可以有效降低 CMS Old GC 频繁触发的问题,提升系统的内存管理效率,减少 GC 对系统吞吐量和响应时间的影响。在实际操作过程中,建议结合实际应用负载、GC 日志分析和性能监控工具来进行动态调整,以达到最佳的内存管理效果。
四、总结
CMS Old GC 频繁触发不仅会对系统的吞吐量造成影响,还可能导致响应时间波动,严重时甚至可能影响到整个应用的稳定性。通过深入分析其触发原因和优化措施,我们可以采取一系列的解决方案来缓解或消除这一问题,从而提升系统的性能和响应能力。
-
合理配置 CMS 启动条件:通过调整
-XX:CMSInitiatingOccupancyFraction
,提前触发 Old GC 回收,避免 Old 区过度占用内存,提高内存回收的及时性,从而减轻系统压力。 -
调整 GC 等待时间:合理设置
-XX:CMSWaitDuration
,避免频繁轮询和回收。适当延长等待时间,可以减少不必要的 GC 触发,减轻系统负担。 -
启用 Class Unloading 功能:通过启用
-XX:+CMSClassUnloadingEnabled
,回收 MetaSpace 或 PermGen 区域的内存,尤其在动态加载大量类的场景中,能够有效减轻 Old 区的内存压力,避免频繁的 Old GC。 -
控制对象晋升阈值:合理配置
-XX:MaxTenuringThreshold
,避免对象过早晋升到 Old 区,减少 Old 区内存压力,降低频繁 Old GC 的可能性。 -
优化内存泄漏问题:内存泄漏是频繁 Old GC 的重要原因之一。通过堆 Dump 工具和分析方法,及时发现并解决内存泄漏问题,可以有效避免不必要的内存占用,减少 GC 的触发。
综上所述,频繁的 CMS Old GC 触发问题需要开发者在配置、内存管理、GC 策略等多个方面进行综合优化。除了调整 JVM 参数外,定期分析 GC 日志、使用性能监控工具、及时发现内存泄漏等手段都能帮助我们优化系统的 GC 行为,确保应用程序的稳定性和高效性。
感谢您的阅读,希望本文能够帮助您解决 CMS Old GC 频繁触发的问题,提升 Java 应用的性能。如果您有任何问题或建议,欢迎随时讨论!
相关文章:
解决 CMS Old GC 频繁触发线上问题技术方案
目录 一、CMS GC 工作原理 二、现象分析 (一)具体表现说明 (二)触发条件 三、总结优化措施 (一)调整 CMS 启动条件:降低 Old 区触发阈值 1. 原理分析 2. 建议配置 (二&…...
后端实现加解密工具类(记录)
后端利用3DES加解密工具类实现特殊字段加解密,比如个人信息、请求参数等 ,可以自定义密钥和IV加密,代码如下,直接使用即可。 import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory…...
云原生技术赋能企业数字化转型:实战案例与架构演进
引言:数字化转型的云原生机遇 在VUCA时代背景下,某金融科技企业面临系统扩展性差、运维成本高企的困境。通过采用云原生技术栈,6个月内实现资源利用率提升300%,故障恢复时间从小时级缩短至分钟级。本文将深度解析该企业技术演进路…...
驱动开发系列49 - 搭建 Vulkan 驱动调试环境(编译 mesa 3D)- Ubuntu24.04
一:搭建Vulkan运行环境 安装vulkan依赖包: 1. sudo apt install vulkan-tools 2. sudo apt install libvulkan-dev 3. sudo apt install vulkan-utility-libraries-dev spirv-tools 4. sudo apt install libglfw3-dev libglm-dev 5. sudo apt install libxxf86vm-dev libxi-…...
自然语言处理(26:(终章Attention 2.)带Attention的seq2seq的实现)
系列文章目录 终章 1:Attention的结构 终章 2:带Attention的seq2seq的实现 终章 3:Attention的评价 终章 4:关于Attention的其他话题 终章 5:Attention的应用 目录 系列文章目录 前言 一、编码器的实现 二、解…...
Qt5.14.2+mingw64编译OpenCV3.4.14一次成功记录
上一文中编译opencv4.5成功了,但是使用过程中没有成功,网上很多的代码没法跑起来,所以才有了此文来编译一个低版本的opencv3的过程记录,全程截图。 一、软件安装 1.1 Python3.8版本安装路径:C:\Users\Administrator\AppData\Loca…...
【数据库原理】基础篇:MySQL基础入门与实战指南
前言 在当今数字化时代,数据已成为企业运营的核心资产之一。而MySQL作为一款广泛使用的开源关系型数据库管理系统,凭借其高性能、可靠性和易用性,成为众多开发者和企业的首选。本文将从MySQL的基础概念出发,逐步深入到实际操作&a…...
使用Python解析PPT文件并生成JSON结构详解
引言 PowerPoint(PPT)文件的自动化处理是办公自动化和数据提取的常见需求。本文将介绍如何通过Python的python-pptx库,将PPT文件的样式、结构、文本内容等信息解析为标准化的JSON格式,为后续的自动化处理、数据迁移或样式复用提供…...
C#:第一性原理拆解属性(property)
目录 第一步:从最基本的需求出发 第二步:引入控制需求 第三步:优化访问方式 第四步:剖析属性的本质 第五步:进一步简化和演化 自动属性的定义和作用 自动属性的特点和限制 第六步:总结属性的第一性…...
nacos 2.x使用java语言实现自定义Loadbalance
一、核心实现思路 Nacos 2.x 的负载均衡自定义支持两种模式: 基于 Ribbon 的兼容方案(适用于 Spring Cloud 2020 之前版本)基于 Spring Cloud LoadBalancer 的方案(推荐,适配最新 Spring Cloud 2023 和 Nacos 2.x&am…...
torch.nn.Conv2d介绍——Pytorch中的二维卷积层
torch.nn.Conv2d是torch.nn模块中的二维卷积层类,用于构建神经网络中的二维卷积层。 1、基本语法 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)将 2D …...
ubuntu虚拟机裁剪img文件系统
1. 定制文件系统前期准备 将rootfs.img文件准备好,并创建target文件夹2. 挂载文件系统 sudo mount rootfs.img target #挂载文件系统 sudo chroot target #进入chroot环境3. 内裁剪文件系统 增删裁剪文件系统 exit #退出chroot环境 sudo umount target…...
一文详细讲解Python(详细版一篇学会Python基础和网络安全)
引言 在当今数字化时代,Python 作为一种简洁高效且功能强大的编程语言,广泛应用于各个领域,从数据科学、人工智能到网络安全等,都能看到 Python 的身影。而网络安全作为保障信息系统和数据安全的关键领域,其重要性不言…...
使用QT调试LidarView
前段时间使用VeloView想进行点云的显示,后来发现VeloView的尺子测距不好用,也没有筛选点的功能,就放弃了。kitware同家的还有LidarView,功能多一些,更新的时间更晚,而且还兼容速腾、禾赛等多家点云设备可以…...
JAVA:使用 Curator 进行 ZooKeeper 操作的技术指南
1、简述 Apache Curator 是一个基于 ZooKeeper 的 Java 客户端库,它极大地简化了使用 ZooKeeper 的开发工作。Curator 提供了高层次的 API,封装了很多复杂的 ZooKeeper 操作,例如连接管理、分布式锁、Leader 选举等。 在分布式系统中&#…...
【SpringCloud】LoadBalance-负载均衡
4. 负载均衡-LoadBalance 4.1 为什么需要负载均衡? 不知道各位心中有没有女神,通常来说一个女神就会有多个舔狗,那这些舔狗呢,就会心甘情愿的帮女神干活,假设女神小美现在有三个舔狗,小美喜欢让这三个舔狗…...
[250401] OpenAI 向免费用户开放 GPT-4o 图像生成功能 | Neovim 0.11 新特性解读
目录 OpenAI 向免费用户开放 GPT-4o 图像生成功能Neovim 0.11 新特性解读更简化的 LSP 设置和配置内置自动补全改进的悬停文档诊断信息增强更多默认键映射终端模拟器改进其他改进 OpenAI 向免费用户开放 GPT-4o 图像生成功能 2025年4月1日早上,OpenAI CEO Sam Altm…...
VBA数据库解决方案第二十讲:SQL在VBA中几种常见的表达方式
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...
SAIL-RK3588J 核心板技术方案——高精度装配式建筑机器人控制
(本方案契合《建筑机器人产业目录》政策要求) 一、方案背景与政策支持 政策驱动 2025年2月《建筑机器人产业目录》明确将“高精度建筑机器人控制设备”纳入重点补贴范围,要求定位精度≤0.5mm、支持实时质检与多机协同,…...
人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!
人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开! 近年来,人工智能在生物医药行业中的应用受到广泛关注。 2024年10月,2024诺贝尔化学奖被授予“计算蛋白质设计和蛋白质结构预测”,这为行业从业人员带来…...
C#高级:利用LINQ进行实体列表的集合运算
问题引入: Teacher实体的唯一标识符是Name和Classes字段(或者说这两个字段唯一确定一条数据),如何对两个实体列表做交集、差集运算呢?(并集直接调用AddRange方法即可) 一、重写方法实现 1.原…...
Python项目-基于Flask的个人博客系统设计与实现(2)
源代码 续 {% extends base.html %}{% block title %}评论管理{% endblock %}{% block content %} <div class"container py-4"><div class"row"><div class"col-md-3"><div class"list-group mb-4"><a h…...
2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题题解)(C++/Java题解)
记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、日期统计-(解析)-暴力dfs(😉蓝桥专属 2、01串的熵-(解析)-不要chu…...
前端界面在线excel编辑器 。node编写post接口获取文件流,使用传参替换表格内容展示、前后端一把梭。
首先luckysheet插件是支持在线替换excel内容编辑得但是浏览器无法调用本地文件,如果只是展示,让后端返回文件得二进制文件流就可以了,直接使用luckysheet展示。 这里我们使用xlsx-populate得node简单应用来调用本地文件,自己写一个…...
在 Fedora 系统下备份远程 Windows SQL Server 数据库的完整方案
一、环境准备与工具安装 1. 安装 Microsoft SQL Server 命令行工具 Fedora 需安装 mssql-tools 和 ODBC 驱动: # 添加 Microsoft 仓库 sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo# 安装工具包 …...
从24GHz到71GHz:Sivers半导体的广泛频率范围5G毫米波产品解析
在5G技术的浪潮中,Sivers半导体推出了创新的毫米波无线产品,为通信行业带来高效、可靠的解决方案。这些产品支持从24GHz到71GHz的频率,覆盖许可与非许可频段,适应高速、低延迟的通信场景。 5G通信频段的一点事儿及Sivers毫米波射频…...
从【抖音安全与信任中心】观察企业如何做算法透明
抖音主动公开算法原理树立行业新标杆: “抖音安全与信任中心”网站(95152.douyin.com) 1 算法透明的几点准则 需涵盖技术逻辑公开、治理机制可查、用户参与共建等维度。以下是基于抖音案例总结的可行路径,以及几个准则࿱…...
html处理Base文件流
处理步骤 从服务返回的字符串中提取文件流数据,可能是Base64或二进制。将数据转换为Blob对象。创建对象URL。创建<a>元素,设置href和download属性。触发点击事件以下载文件。删除缓存数据 代码 // 假设这是从服务返回的Base64字符串(…...
MySQL内存管理机制详解
目录标题 MySQL内存管理机制详解1. **内存组成与核心组件**2. **RSS与共享内存的关系**3. **OOM问题排查步骤**4. **典型案例** Buffer Pool(缓冲池) 确实属于共享内存(Shared Memory)的核心组成部分?1. **Buffer Pool…...
《算法笔记》9.7小节——数据结构专题(2)->堆 问题 C: 合并果子(堆)
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,…...
化繁为简解决leetcode第1289题下降路径最小和II
1289.下降路径最小和II 难度:困难 问题描述: 给你一个nxn整数矩阵grid,请你返回非零偏移下降路径数字和的最小值。 非零偏移下降路径定义为:从grid数组中的每一行选择一个数字,且按顺序选出来的数字中,…...
蓝桥杯省模拟赛 数位和
问题描述 只能被 1 和本身整除的数称为质数。 请问在 1 (含)到 1000000 (含)中,有多少个质数的各个数位上的数字之和为 2323 。 提示:599 就是这样一个质数,各个数位上的数字之和为 59923 。…...
MySQL和Oracle批量插入SQL差异详解
文章目录 MySQL和Oracle批量插入SQL差异详解1. 基本批量插入语法1.1 MySQL批量插入1.2 Oracle批量插入 2. 带序列的批量插入2.1 MySQL带自增ID的批量插入2.2 Oracle带序列的批量插入 3. 条件批量插入3.1 MySQL条件批量插入3.2 Oracle条件批量插入 MySQL和Oracle批量插入SQL差异…...
YOLOv5配置训练以及华为昇腾910B推理
参考文章: 保姆式yolov5教程,训练你自己的数据集 - 知乎 Windows 10|11下安装mmyolo-0.5.0版本 - 知乎 Ubuntu22.04安装教程&基于华为Ascend AI处理器的om模型atc转换环境安装_ubuntu安装atc工具-CSDN博客嵌入式AI---在华为昇腾推理自己的yolov5目标…...
Visual Studio Code配置自动规范代码格式
目录 前言1. 插件安装2. 配置个性化设置2.1 在左下角点击设置按钮 ,点击命令面板(或者也可以之间按快捷键CtrlShiftP)2.2 在弹出的搜索框输入 settings.json,打开首选项:打开工作区设置;2.3 在settings.jso…...
【网安面经合集】42 道高频 Web 安全面试题全解析(附原理+防御+思路)
对于正在准备 安全岗求职或实习的同学们来说,Web 安全面试题几乎是必问项。 尤其是一些经常出现的考点,比如 SQL 注入、XSS、CSRF、反序列化、逻辑漏洞、WAF 绕过等等,不仅需要你知道“是什么”,还得能“讲清楚原理、分类、修复和…...
论文笔记(七十五)Auto-Encoding Variational Bayes
Auto-Encoding Variational Bayes 文章概括摘要1 引言2 方法2.1 问题场景2.2 变分下界2.3 SGVB估计器与AEVB算法2.4 重参数化技巧 3 示例:变分自编码器(Variational Auto-Encoder)4 相关工作5 实验6 结论7 未来工作 文章概括 引用࿱…...
前端学习记录之HTML
1. 网页 1.1 什么是网页 网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”,通常是HTML格式的文件,它要通过浏览器来阅读 网页是构成网站的基本元素。它通常由图片,…...
程序化广告行业(39/89):广告投放的数据分析与优化秘籍
程序化广告行业(39/89):广告投放的数据分析与优化秘籍 在程序化广告的领域中,数据分析与优化调整是实现精准投放、提升广告效果的核心环节。作为一名热衷于探索程序化广告的学习者,我希望通过这篇博客,和大…...
蓝桥杯 01游戏
问题描述 小蓝最近玩上了 01 游戏,这是一款带有二进制思想的棋子游戏。 游戏在一个大小为 N N 的棋盘上进行。棋盘上的每个位置都需要放置一个数字 0 或 1。初始情况下,棋盘上有一部分位置已经放置了固定的数字,玩家不可以更改这些位置。其…...
NoSQL 数据库的适用场景与局限性分析
NoSQL(Not Only SQL)数据库是一类非关系型数据库,通过灵活的数据模型和分布式架构解决传统关系型数据库在扩展性、性能和数据多样性上的瓶颈。以下从技术特性、适用场景、不适用场景及行业实践展开分析: 一、NoSQL数据库的核心技术特性 四大数据模型 文档型:以JSON/BSON格…...
个人网站:基于html、css、js网页开发界面
1、注册 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>注册页面</title><link rel&qu…...
嵌入式图像采集与显示系统实战详解:基于V4L2与Framebuffer的实现
在嵌入式Linux开发中,图像采集与显示是非常典型的一类应用场景。本文将基于 ARM9(S3C2410) 平台,深入讲解如何使用 V4L2 框架从 USB 摄像头采集图像数据,并通过 Framebuffer 接口实时显示到 LCD 屏幕。内容涵盖驱动架构…...
庙算兵棋推演AI开发初探(6-神经网络开发)
碎碎念: 老师让我和同学组队参加10月底截止报名的庙算比赛,我俩走运进了64强,打的过程中发现了一个重要问题——为什么别人总能打我,但是我都看不见!就像玩dota被对面英雄莫名其妙单杀了但是他就一直隐身我都不知道怎…...
嵌入式硬件篇---嘉立创PCB绘制
文章目录 前言一、PCB绘制简介1.1绘制步骤1.1.1前期准备1.1.2原理图设计1.1.3原理图转PCB1.1.4PCB布局1.1.5布线1.1.6布线优化和丝印1.1.7制版 1.2原理1.2.1电气连接原理1.2.2信号传输原理1.2.3电源和接地原理 1.3注意事项1.3.1元件封装1.3.2布局规则1.3.3过孔设计1.3.4DRC检查…...
AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用
1. 引言 在人工智能技术飞速发展的今天,大型语言模型(Large Language Models, LLMs)已成为智能应用开发的核心驱动力。从智能客服到自动化内容生成,LLMs的应用正在深刻改变我们的工作和生活方式。 对于.NET开发者而言,…...
Vue 组件 - Slot 内容分发
Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue组件 - Slot 内容分发 目录 Slot内容分发 旧版slot 单插槽 使用插槽 具名插槽 插槽实现导航 使用插槽优点 新版slot Or 插槽版抽屉 总结 Slot内容分发 混合父组件的内容和子组件自己模板 -- 内容分发 父组件模…...
Mysql之事务(下)
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 5. 事务的隔离级别与并发控制 5.1事务的隔离级别 5.2查看与设置事务的…...
LabVIEW液压控制系统开发要点
液压控制系统开发需兼顾高实时性、强抗干扰性和安全性,尤其在重工业场景中,毫秒级响应延迟或数据异常都可能导致设备损坏。本文以某钢厂液压升降平台项目为例,从硬件选型、控制算法、安全机制三方面,详解LabVIEW开发中的关键问题与…...
mybatis-genertor(代码生成)源码及扩展笔记
文章目录 生成过程MyBatisGenerator.generate()代码入口 pid0,id0context.generateFiles()代码 pid0,id1introspectedTable.getGeneratedJavaFiles() java部分生成 pid1,id11introspectedTable.getGeneratedXmlFiles() xml部分生成 pid1,id12这里是一波三连调用XMLMapperGenera…...