大道至简 少字全意 易经的方式看 jvm基础 、 内存模型 、 gc、 内存异常、内存调优实战案例 、类加载机制、双亲委派模型 适用于 懂而久未用回忆 ,不懂而需明正理而用
目录
介绍
内存模型
一、线程私有区域
二、线程共享区域
1.堆Heap
2. 方法区Method Area
3.运行时常量池 Runtime constant Pool
三、直接内存(Direct Memory)
四、内存异常与调优
五、总结对比
类加载机制
一、类加载的三大阶段
二、双亲委派模型
三、类加载的特殊场景
四、注意事项
****双亲委派模型****
一、什么事双亲委派模型
二、类加载器的层级结构
三、工作流程(以加载一个用户自定义类为例)
四、核心有点
五、通俗比喻
*自定义类加载器*
1.为什么需要
2.实现原理
3.简单代码逻辑
典型场景
注意事项
***JVM 性能调优 案例 实战***
一、调优核心目标 (平衡三要素)
二、调优工具 (快速定位问题)
三、调优步骤(六步法)
四、常见问题与解决
五、通俗比喻理解
六、注意事项
jvm基础
一、基本定义与作用
二、核心架构组成
三、运行机制
1.类加载流程
2.线程执行模型
3.跨平台实现
四、核心特点
五、常见JVM 实现
介绍
jvm基础 、 内存模型 、 gc、 内存异常、内存调优实战案例 、类加载机制、双亲委派模型、 文章上下文 没有强关联性 根据需要读章节即可
内存模型
一、线程私有区域
1. 程序计数器(Program Counter Register)
每个线程独立拥有,记录当前线程执行字节码的指令地
唯一不会出现 outofMemoryError的区域,生命周期与线程一致。
2.虚拟机栈 (JVM Stack)
用于Java方法执行,每个方法对应一个栈顿 (Stack Frame) ,存储局部变量表、操作数栈、动态链接、方法出口等信息
局部变量表大小在编译期确定,栈深度不足会抛出 StackOverfilowError;无法扩展时触发 outofMemoryError
3本地方法栈(Native Method Stack)
与虚拟机栈类似,但服务于Native方法 (如C/C++实现的方法)
部分JVM实现 (如HotSpot) 将虚拟机栈与本地方法栈合并
二、线程共享区域
1.堆Heap
- 最大内存区域,存放对象实例及数组,分为新生代 (Young Generation)和老年代 (Old Generation)
- 新生代: 包含Eden区和两个Survivor区(SO/S1),对象优先分配在Eden,Minor GC后存活对象进入Survivor,多次存活后晋升老年代 。
- 老年代:存放长期存活对象,Major GC (Full GC) 触发时回收 。
- 参数控制:-xms (初始堆大小) 、-xmx (最大堆大小)。
2. 方法区Method Area
- 存储类元数据 (类名、字段、方法》 、常量、静态变量、即时编译器 (JIT) 生成的代码 0 3
- JDK演变:
- JDK7及之前:通过永久代(PermGen) 实现,受-xx:PermSize和-xx:MaxPermSize控制。
- JDK8+:改用元空间 (Metaspace)使用本地内存,大小由-xX:MaxMetaspaceSize 限制
3.运行时常量池 Runtime constant Pool
- ·方法区的一部分,存储编译期生成的字面量(如字符串)和符号引用,支持运行期间动态添加(如 String.intem0)
三、直接内存(Direct Memory)
- 方法区的一部分,存储编译期生成的字面量(如字符串)和符号引用,支持运行期间动态添加(如 Strina.intern() )
四、内存异常与调优
1.常见异常
- outofMemoryError:堆、方法区、直接内存不足时触发
- StackOverflowError :栈深度超过限制时触发
2.调优参数示例
- -xX:MaxTenuringThreshold :控制对象晋升老年代的年龄
- -XX:+UseAdaptiveSizePolicy :动态调整堆各区域比例
五、总结对比
类加载机制
Java类加载机制是JVM将.class文件加载到内存并生成可执行类的核心过程
一、类加载的三大阶段
1. 加载(Loading)
- 通过类的全限定名获取二进制字节流,将静态存储结构转化为方法区的运行时数据结构,并在堆中生成对应的`java.lang.Class`对象作为访问入口
- 数据来源包括本地文件、JAR包、网络资源、动态代理生成等
2. 连接(Linking)
- 验证:确保字节流符合规范,包括文件格式验证(魔数、版本号等)、元数据验证(语义正确性)、字节码验证(逻辑合法性)、符号引用验证(解析可行性)
- 准备:为类变量(`static`修饰)分配内存并设置默认值(如`int`初始化为0),`final static`变量直接赋代码中定义的值
- 解析:将常量池中的符号引用转换为直接引用(如内存地址偏移量)
3. 初始化(Initialization)
- 执行类构造器`<clinit>()`方法,为静态变量显式赋值并执行静态代码块
- 初始化触发条件包括:`new`实例、调用静态方法/字段、反射加载类、初始化子类、启动主类等
二、双亲委派模型
. 1.类加载器层级
- Bootstrap ClassLoader:加载`%JAVA_HOME%/lib`核心类(如`java.lang.*`),由C++实现
- Platform/Extension ClassLoader(Java 9+):加载平台扩展模块或`%JRE_HOME%/ext`目录的类
- Application ClassLoader:加载用户类路径(`-classpath`)的类
2. 委派机制
- 类加载请求优先委派父加载器处理,若父类无法加载(如搜索路径中不存在),子类才尝试加载
- 优点:避免重复加载核心类,保证安全性(如防止自定义`java.lang.String`破坏核心功能)
三、类加载的特殊场景
1. 自定义类加载器
- 继承`ClassLoader`并重写`findClass()`方法,用于加载加密类、热部署、模块化隔离等场景
- 打破双亲委派:如Tomcat为每个Web应用单独使用`WebappClassLoader`,实现类隔离
2. Java 9+的调整
- 引入模块化系统,将扩展类加载器重命名为平台类加载器(`PlatformClassLoader`),支持模块化依赖管理
四、注意事项
1. 主动使用与被动引用
- 访问父类静态字段不会触发子类初始化,但通过数组定义类(如`MyClass[] arr`)不会触发初始化
2. 类卸载条件
- 类的所有实例被回收,且对应的`Class`对象无引用,同时加载该类的`ClassLoader`被回收
通过理解类加载机制,开发者能优化内存管理、实现动态扩展(如插件系统)、规避类冲突问题
****双亲委派模型****
简单理解先找爹再自己干
一、什么事双亲委派模型
当类加载器收到类加载请求时,会先将任务向上委派给父类加载器处理。只有当父类加载器无法完成时,子类加载器才会自己尝试加载,这种机制形成了自下而上的层级委托链,最终由顶层的启动类加载器(Botstrap ClassLoader)作为兜底
二、类加载器的层级结构
1.启动类加载器 (Bootstrap ClassLoader
由 C++实现,负责加载 JAVA_HOME/ib 下的核心类库(如 jar) ,是唯一没有父类的加载器 。
2.扩展类加载器(Extension ClassLoader
加载 JAVA HOME/ib/ext 目录下的扩展类(如JDK 的扩展功能)
3.应用程序类加载器(Application ClassLoader)
加载用户类路径 (ClassPath) 下的类,如项目中的 .class 文件和第三方 Jar 包
三、工作流程(以加载一个用户自定义类为例)
1.应用程序类加载器收到请求,先检查是否已加载过该类
2.向上委派:将请求传递给扩展类加载器
3.扩展类加载器继续向上委派给启动类加载器
4.启动类加载器尝试加载:若成功则返回结果;若失败(如核心库中没有该类),则逐层向下通知子加载器尝试加载
5.最终由应用程序类加载器加载用户类,并缓存结果
四、核心有点
1.安全性:防止核心类库(如 java.lang.string)被篡改。例如,用户自定义的同名类不会被加载,因为父加载器已优先加载了 JDK的核心类
2.避免重复加载: 每个类只加载一次,由父加载器缓存结果,子加载器无需重复处理
3.类隔离性:不同层级的加载器加载的类相互隔离,避免冲突(如 Tomcat 通过自定义加载器隔离不同 Web 应用)
五、通俗比喻
想象一家公司处理问题的方式
- 基层员工 (应用类加载器)遇到问题先向上级汇报
- 中层领导 (扩展类加载器):若解决不了,继续上报给 CEO
- CEO (启动类加载器): 处理重大问题,若无法解决,再逐级向下指派
这种机制保证了核心决策由高层把控,同时基层也能处理个性化需求
通过这种机制,Java 既保证了核心类库的安全,又实现了灵活的动态加载
*自定义类加载器*
1.为什么需要
- 加密保护:防止别人反编译你的代码。例如,将 .cass 文件加密后,只有你的加载器能解密使用
- 非标准来源:比如从网络、数据库加载类,而不是传统的本地文件
- 热更新:不重启程序就能替换已加载的类
2.实现原理
- 继承 classLoader 类,重写 findClass() 方法 (而不是直接改 loadClass() ,避免破坏双亲委派机制)
- 在findclass0 中读取类文件的二进制数据(如解密文件或网络请求),调用 defineClass 将其转为 JVM 可识别的类
3.简单代码逻辑
class MyLoader extends ClassLoader {@Override protected Class<?> findClass(String name) {// 1. 从加密文件/网络等读取二进制数据 byte[] bytes = loadClassData(name); // 2. 解密或处理数据(如果需要)// 3. 将数据转为类对象 return defineClass(name, bytes, 0, bytes.length);}
}
典型场景
- 游戏插件:动态加载新功能模块
- 企业应用:不同模块用不同加载器隔离,避免类冲突,
- 代码保护:防止核心代码被反编译
注意事项
- 不要随便破坏双亲委派: 默认机制能保证核心类安全,自定义时尽量只扩展不推翻
- 类隔离:同一个类被不同加载器加载会被视为不同的类 (可能导致类型转换异常)
***JVM 性能调优 案例 实战***
JVM性能调优的核心目标是让 Java程序在合理的内存占用下,减少卡顿 (GC停顿时间)并提高运行效率(吞叶量)
一、调优核心目标 (平衡三要素)
1.内存占用:程序运行时需要的内存大小
堆内存太大可能导致GC时间变长,太小可能频繁触发GC甚至溢出
2.延迟:垃圾回收导致的程序卡顿时间
例如Full GC会暂停所有线程,严重影响用户体验
3.吞吐量:程序运行时间占总时间的比例
高吞吐量意味着程序大部分时间在处理业务而非垃圾回收
二、调优工具 (快速定位问题)
三、调优步骤(六步法)
1.监控问题
通过GC日志(-xloggc:gc.log) 和工具观察:
- 是否频繁Full GC?
- Young区对象是否过快晋升到 old区?
- 内存泄漏迹象 (如老年代占用持续增长)
2.调整参数
- 堆内存:-Xmx4g -Xms4g(最大和初始堆设为相同值,避免动态调整开销)
- 年轻代:-Xmn2g(年轻代大小,建议占堆的1/3~1/2)
- GC算法: 低延迟选G1 (-xx:+UseG1gc),高吞吐选Parallel
3.验证效果
对比调整前后的GC频率、停顿时间 (如原Full GC每次5秒>优化后1秒)
四、常见问题与解决
五、通俗比喻理解
堆内存:像房间,年轻代是 临时储物间(频繁清理),老年代 长期仓库 (很少清理)
GC调优: 调中房间布局,让垃圾 无用对象 即使被清理掉,避免房间堵塞 大扫除 Full GC 耗时
内存泄漏: 像忘关水龙头 水(内存)不断累积,最终益处池子
六、注意事项
1.避免优化过早:先通过日志和工具 确认瓶颈再调整
2.参数逐步调整:每次只改1 2个参数 观察效果
3.关注业务场景: 高并发系统 优先 降低延迟 ,离线计算机系统优先提高吞吐
jvm基础
一、基本定义与作用
1.虚拟计算机架构
JVM是一个虚构的计算机系统。通过软件模拟硬件功能,屏蔽底层操作系统差异,实现Java程序*“一次编译,到处运行”**的特性
2.核心功能
字节码执行:将.class 文件中的字节码转换为机器码执行
内存管理: 自动分配和回收内存 (堆、栈等) ,避免手动管理导致的内存泄漏 跨平台支持: 不同操作系统只需安装对应JVM版本,即可运行同一Java程序
二、核心架构组成
1.类加载子系统 (Class Loader)
负责加载 class 文件,完成类的加载、链接(验证、准备、解析)和初始化,形成可被JVM直接使用的Java类型
2.运行时数据区
- 堆(Heap) : 存储所有对象实例和数组,线程共享,是垃圾回收的主要区域
- 方法区 (Method Area) : 存储类结构信息 (如类名、方法代码) 、静态变量和常量池
- 虚拟机栈 (JVM Stack): 线程私有,存储局部变量、方法调用栈帧,方法执行时入栈,结束则出栈
- 程序计数器 (PC Register) : 记录当前线程执行的字节码指令地址,确保多线程切换后能恢复执行
- 本地方法栈 (Native Method Stack) : 服务于JVM调用的Native方法(如C/C++库)
3.执行引擎
解释器:逐行解释字节码为机器码,启动速度快但执行效率低,
即时编译器 (JIT) : 将热点代码编译为本地机器码,提升执行效率
垃圾回收器 (GC): 自动回收堆内存中不再使用的对象,通过分代算法(新生代、老年代)优化回收效率
三、运行机制
1.类加载流程
- 按需加载类文件,过程包括加载>验证>准备->解析 -初始化。例如,首次使用 new关键字时触发类加载
2.线程执行模型
- 每个线程独立拥有程序计数器、虚拟机栈和本地方法栈,共享堆和方法区,通过线程调度实现并发
3.跨平台实现
- Java源码编译为与平台无关的字节码 (.class文件),由JVM根据当前操作系统动态转换为本地机器码执行
四、核心特点
1.自动内存管理
通过垃圾回收机制自动释放无用对象内存,开发者无需手动干预,但需避免内存泄漏(如长生命周期对象持有短生命周期引用).
2.安全机制
提供字节码校验、类加载验证和安全管理器,防止恶意代码破坏系统
3.高性能优化
JIT编译器与自适应优化技术 (如热点代码检测)结合,平衡启动速度与运行效率
五、常见JVM 实现
HotSpot: Oracle官方默认虚拟机,广泛用于生产环境,支持高效的JIT编译和垃圾回收
GraaIVM: 支持多语言 (Java、Python等)的高性能虚拟机,适用于云原生场景
***************持续更新 易经的方式看技术*************************
***************持续更新 易经的方式看技术*************************
***************持续更新 易经的方式看技术*************************
相关文章:
大道至简 少字全意 易经的方式看 jvm基础 、 内存模型 、 gc、 内存异常、内存调优实战案例 、类加载机制、双亲委派模型 适用于 懂而久未用回忆 ,不懂而需明正理而用
目录 介绍 内存模型 一、线程私有区域 二、线程共享区域 1.堆Heap 2. 方法区Method Area 3.运行时常量池 Runtime constant Pool 三、直接内存(Direct Memory) 四、内存异常与调优 五、总结对比 类加载机制 一、类加载的三大阶段 二、双亲委派模型 三、类加载的特…...
【Java学习】继承
一、继承 子类继承父类,子类这个类变量的引用在原有的指向子类自己类变量空间的原有访问权限上,增加上了父类类变量空间的访问权限,此时子类类变量指向的空间变为了原来子类类变量空间加上父类类变量空间,此时子类类变量空间就变成…...
Ubuntu24安装MongoDB(解压版)
目录 0.需求说明1.环境检查2.下载软件2.1.下载MongoDB服务端2.2.下载MongoDB连接工具(可略过)2.3.检查上传或下载的安装包 3.安装MongoDB3.1.编辑系统服务3.2.启动服务3.3.客户端连接验证3.3.1.创建管理员用户 4.远程访问4.1.开启远程访问4.2.开放防火墙 0.需求说明 问&#x…...
计算机毕业设计Python考研院校推荐系统 考研分数线预测 考研推荐系统 考研可视化(代码+LW文档+PPT+讲解视频)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Python 爬虫框架对比与推荐
Python 爬虫框架对比与推荐 Python 爬虫框架对比与推荐1. Scrapy1.1 框架介绍1.2 优点1.3 缺点1.4 适用场景 2. PySpider2.1 框架介绍2.2 优点2.3 缺点2.4 适用场景 3. Selenium3.1 框架介绍3.2 优点3.3 缺点3.4 适用场景 4. BeautifulSoup Requests(自定义方案&am…...
本地DeepSeek模型GGUF文件转换为PyTorch格式
接前文,我们在本地Windows系统上,基于GGUF文件部署了DeepSeek模型(DeepSeek-R1-Distill-Qwen-1.5B.gguf版本),但是GGUF是已经量化的版本,我们除了对其进行微调之外,无法对其训练,那么还有没有其他办法对本地的GGUF部署的DeepSeek模型进行训练呢?今天我们就反其道而行之…...
自动化测试框架搭建-单次接口执行-三部曲
目的 判断接口返回值和提前设置的预期是否一致,从而判断本次测试是否通过 代码步骤设计 第一步:前端调用后端已经写好的POST接口,并传递参数 第二步:后端接收到参数,组装并请求指定接口,保存返回 第三…...
SAP F1搜索帮助 添加自定义功能按钮
最近deepseek 比较火,好多伙伴把deep seek 调用集成到SAP 系统,集成需要方便的去查询问题,方便一点就是添加在F1搜索帮助的地方,看到有朋友问看自定义按钮怎么添加在F1的工具栏,跟踪了下代码,尝试了下&…...
Webpack,Vite打包的理解
Webpack 和 Vite 都是现代前端开发中常用的构建工具,用于打包和优化项目代码。尽管它们的目标相似,但在设计理念、工作方式和适用场景上存在显著差异。 Webpack Webpack 是一个模块打包工具,主要用于将多个模块(如 JavaScript、…...
ollama部署大模型,本地调用
Ollama是一个强大的大型语言模型平台,它允许用户轻松地下载、安装和运行各种大型语言模型。在本文中,我将指导你如何在你的本地机器上部署Ollama,并展示如何使用Python进行简单的API调用以访问这些模型。 最近很多人在学习大模型的时候&…...
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑩】
ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase10 作者:车端域控测试工程师 更新日期:2025年02月18日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-010测试用例 用例ID测试场景验证要点参考条款预期结果TC…...
opencv实时二维码识别的一种实现与思路分享
在嵌入式平台上比如 rk3568 这种弱鸡的平台,要做到实时视频处理就非常鸡肋,不像英伟达那种 deepstrem 什么的。 开始的时候,我们使用python 下的 pyzbar + opencv opencv 读取摄像头的数据然后每帧送到 pyzbar 二维码识别函数里面进行处理,然后打印出识别的数字。结果,非常…...
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑫】
ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase12 作者:车端域控测试工程师 更新日期:2025年02月18日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-012测试用例 用例ID测试场景验证要点参考条款预期结果TC…...
Jenkins同一个项目不同分支指定不同JAVA环境
背景 一些系统应用,会为了适配不同的平台,导致不同的分支下用的是不同的gradle,导致需要不同的JAVA环境来编译,比如a分支需要使用JAVA11, b分支使用JAVA17。 但是jenkins上,一般都是Global Tool Configuration 全局所有环境公用一个JAVA_HOME。 尝试过用 Build 的Execut…...
小爱音箱连接电脑外放之后,浏览器网页视频暂停播放后,音箱整体没声音问题解决
背景 22年买的小爱音箱增强版play,小爱音箱连接电脑外放之后,浏览器网页视频暂停播放后,音箱整体没声音(一边打着游戏,一边听歌,一边放视频,视频一暂停,什么声音都没了,…...
AIGC(生成式AI)试用 21 -- Python调用deepseek API
1. 安装openai pip3 install openai########################## Collecting openaiUsing cached openai-1.61.1-py3-none-any.whl.metadata (27 kB) Collecting anyio<5,>3.5.0 (from openai)Using cached anyio-4.8.0-py3-none-any.whl.metadata (4.6 kB) Collecting d…...
使用linux脚本部署discuz博客(详细注释版)
使用脚本部署一个discuzz项目 1.显示当前环境状态 防火墙状态 selinux状态 httpd状态 由上可知,虚拟机已处于最初始状态 2.脚本编写 #!/bin/bash #这是一个通过脚本来部署discuzz博客 firewalld关闭 systemctl stop firewalld if [ $? -eq 0 ];then echo "…...
Kafka的生产者和消费者模型
Kafka的生产者和消费者模型是一种消息传递模式,以下是该模型的详细描述: 一、生产者(Producer) 定义:生产者是消息的生产者,它将消息发布到Kafka的主题(Topic)中。 功能࿱…...
调用openssl实现加解密算法
由于工作中涉及到加解密,包括Hash(SHA256)算法、HMAC_SHA256 算法、ECDH算法、ECC签名算法、AES/CBC 128算法一共涉及5类算法,笔者通过查询发现openssl库以上算法都支持,索性借助openssl库实现上述5类算法。笔者用的op…...
【Python项目】信息安全领域中语义搜索引擎系统
【Python项目】信息安全领域中语义搜索引擎系统 技术简介:采用Python技术、MYSQL数据库等实现。 系统简介:系统主要是围绕着语义搜索展开的,要将输入的文字在爬取数据时能够通过深层次的内涵理解,来更好的查找到与之相关的精准信息…...
快速排序_912. 排序数组(10中排序算法)
快速排序_912. 排序数组(10中排序算法) 1 快速排序(重点)报错代码超时代码修改官方题解快速排序 1:基本快速排序快速排序 2:双指针(指针对撞)快速排序快速排序 3:三指针快…...
BS5852英国家具防火安全条款主要包括哪几个方面呢?
什么是BS5852检测? BS5852是英国针对家用家具的强制性安全要求,主要测试家具在受到燃烧香烟和火柴等火源时的可燃性。这个标准通常分为四个部分进行测试,但实际应用中主要测试第一部分和第二部分,包括烟头测试和利用乙炔火焰模拟…...
高考或者单招考试需要考物理这科目
问题:帮忙搜索一下以上学校哪些高考或者单招考试需要考物理这科目的 回答: 根据目前获取的资料,明确提及高考或单招考试需考物理的学校为湖南工业职业技术学院,在部分专业单招时要求选考物理;其他学校暂未发现明确提…...
基于vue3实现的课堂点名程序
设计思路 采用vue3实现的课堂点名程序,模拟课堂座位布局,点击开始点名按钮后,一朵鲜花在座位间传递,直到点击结束点名按钮,鲜花停留的座位被点名。 课堂点名 座位组件 seat.vue <script setup>//组合式APIimpo…...
压力传感器
压力传感器是一种用于测量气体或液体压力的设备,广泛应用于工业控制、汽车电子、医疗设备、航空航天等领域。以下是关于压力传感器的详细介绍: 一、压力传感器的分类 1. 按测量原理分类 - 压阻式压力传感器: - 原理:利用压…...
Django REST Framework (DRF) 中用于构建 API 视图类解析
Django REST Framework (DRF) 提供了丰富的视图类,用于构建 API 视图。这些视图类可以分为以下几类: 1. 基础视图类 这些是 DRF 中最基础的视图类,通常用于实现自定义逻辑。 常用类 APIView: 最基本的视图类,所有其…...
DeepSeek介绍[Cache-Through、Cache-Around、Cache-Behind、Cache-Asid]
Cache-Through、Cache-Around、Cache-Behind和Cache-Aside是几种常见的缓存策略,每种策略有其独特的工作机制和应用场景。以下是对这些缓存模式的详细介绍: 1. Cache-Through 工作原理: 读操作:应用程序首先向缓存层请求数据。…...
React 前端框架介绍
什么是 React? React 是一个由 Facebook 开发并维护的开源 JavaScript 库,用于构建用户界面。它主要用于创建交互式用户界Face(UI),尤其是当数据变化时需要更新部分视图时非常有效。React 的核心思想是组件化和声明性…...
自制简单的图片查看器(python)
图片格式:支持常见的图片格式(JPG、PNG、BMP、GIF)。 import os import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTkclass ImageViewer:def __init__(self, root):self.root rootself.root.…...
基于Electron+Vue3创建桌面应用
Electron 是一个开源框架,基于 Chromium 和 Node.js,用于开发跨平台桌面应用程序。它允许开发者使用 HTML、CSS 和 JavaScript 等 Web 技术构建原生桌面应用,支持 Windows、macOS 和 Linux。Electron 以其开发便捷性、强大的功能和丰富的生态系统而广泛应用于工具类应用、媒…...
Redis实战-扩展Redis
扩展Redis 1、扩展读性能2、扩展写性能和内存容量3、扩展复杂的查询3.1 扩展联合查询3.2 扩展分片排序 如有侵权,请联系~ 如有错误,也欢迎批评指正~ 本篇文章大部分是来自学习《Redis实战》的笔记 1、扩展读性能 单台Redis服务器…...
Vue 前端开发中的路由知识:从入门到精通
文章目录 引言1. Vue Router 简介1.1 安装 Vue Router1.2 配置 Vue Router1.3 在 Vue 实例中使用 Vue Router 2. 路由的基本用法2.1 路由映射2.2 路由视图2.3 路由链接 3. 动态路由3.1 动态路径参数3.2 访问动态参数3.3 响应路由参数的变化 4. 嵌套路由4.1 定义嵌套路由4.2 渲染…...
为AI聊天工具添加一个知识系统 之109 详细设计之50 三性三量三境
本文要点 纵观整个讨论过程 最初我提“相得益彰的三性(三性) 相提并论的三者(三量) 相映成趣的三化(三境)” “ 确定 今天的讨论题-- “我”的知识树:相得益彰的三性(即 三性&…...
51-ArrayList
51-ArrayList Collection 类型介绍 仓颉中常用的几种基础 Collection 类型,包含 Array、ArrayList、HashSet、HashMap。 可以在不同的场景中选择适合对应业务的类型: Array:如果不需要增加和删除元素,但需要修改元素ÿ…...
工业制造能耗管理新突破,漫途MTIC-ECM平台助力企业绿色转型!
在工业制造领域,能源消耗一直是企业运营成本的重要组成部分。随着“双碳”目标的推进,如何实现高效能耗管理,成为制造企业亟待解决的问题。漫途MTIC-ECM能源能耗在线监测平台,结合其自研的硬件产品,为工业制造企业提供…...
sql注入之python脚本进行时间盲注和布尔盲注
一、什么是时间盲注和布尔盲注? 答:时间盲注是攻击者通过构造恶意sql语句利用sleep()等延迟函数来观察数据库响应时间差异来进行推断信息和条件判断。如果条件为真,数据库会执行延时操作,如果为假则立即返回。响应时间较短。 SELE…...
map的使用(c++)
在了解map之前,我们先看看两个场景,通过这两个场景的对比,让我们知道为什么要存在存储双关键字的容器 场景一:判断一堆字符串中,某一个字符串是否出现过 在没学set容器之前,我们只能想到把这一堆字符串存到…...
Android13-包安装器PackageInstaller-之apk安装流程
目的 我们最终是为了搞明白安装的整个流程通过安卓系统自带的包安装器来了解PMS 安装流程实现需求定制:静默安装-安装界面定制-安装拦截验证。【核心目的】 安装流程和PMS了解不用多说了; 安装定制相关: 如 手机上安装时候弹出锁屏界面需要输入密码;安…...
前端函数在开发环境与生产环境中处理空字符串的差异及解决方案
在前端开发过程中,我们经常会遇到一些函数在开发环境中运行正常,但在生产环境中却出现报错的情况。本文将通过具体的代码示例和分析,探讨一个函数在开发环境和生产环境中处理空字符串的差异,并提供解决方案。 1. 问题描述 我们有…...
数智读书笔记系列014 MICK《SQL进阶教程》第一版和第二版对比和总结
引言 在当今数字化时代,数据已成为企业和组织的核心资产之一。而 SQL(Structured Query Language)作为管理和操作关系型数据库的标准语言,其重要性不言而喻。无论是数据查询、插入、更新还是删除,SQL 都能高效地完成任务,广泛应用于数据分析、数据挖掘、数据仓库、Web 开…...
智能猫眼实现流程图
物理端开发流程图 客户端端开发流程图 用户功能开发流程图 管理员开发流程图...
docker安装kafka,并通过springboot快速集成kafka
目录 一、docker安装和配置Kafka 1.拉取 Zookeeper 的 Docker 镜像 2.运行 Zookeeper 容器 3.拉取 Kafka 的 Docker 镜像 4.运行 Kafka 容器 5.下载 Kafdrop 6.运行 Kafdrop 7.如果docker pull wurstmeister/zookeeper或docker pull wurstmeister/kafka下载很慢&#x…...
Spring Boot 中自动装配机制的原理
Spring Boot 的自动装配机制是其核心特性之一,它简化了 Spring 应用的配置,让开发者能够快速构建应用。以下是对其原理的详细总结: 1. 核心概念 自动装配 (Auto-configuration): Spring Boot 根据应用依赖和配置,自动配置 Spring…...
python继承中super() 不是简单的“调用父类”,而是调用 MRO 里的下一个类
Python 里的一个类可以同时继承多个父类。这让我们的模型设计变得更灵 活,但同时也带来一个新问题:“在复杂的继承关系下,如何确认子类的 某个方法会用到哪个父类?” 这里有点需要理解: MRO(方法解析顺序…...
【智慧校园】分体空调节能监管:打造高效节能的学习环境
随着科技的飞速发展和生活品质的不断提升,人们对于家居和办公环境的舒适度与智能化要求也越来越高。分体空调集中控制系统作为一种先进的空调管理方式,正逐渐成为现代家庭和办公场所的标配,为用户带来更加便捷、高效和节能的空调使用体验。随…...
【达梦数据库】dblink连接[SqlServer/Mysql]报错处理
目录 背景问题1:无法测试以ODBC数据源方式访问的外部链接!问题分析&原因解决方法 问题2:DBLINK连接丢失问题分析&原因解决方法 问题3:DBIINK远程服务器获取对象[xxx]失败,错误洋情[[FreeTDS][SQL Server]Could not find stored proce…...
STM32 ADC介绍(硬件原理篇)
目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器(维持-阻塞D触发器ÿ…...
蚁剑(AutSword)的下载安装与报错解决
蚁剑(AutSword)的下载安装与报错解决 1.下载 唯一官方github下载地址 GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 2.安装 打开并且进入到下面的界面 下载需要的的版本 进行初始化 3.报错 出现下面的报错 4.解决方法 出现上面报错…...
BT401双模音频蓝牙模块如何开启ble的透传,有什么注意事项
BT401音频蓝牙模块如何开启ble的透传? 首先BT401的蓝牙音频模块,分为两个版本,dac版本和iis数字音频版本 DAC版本:就是BT401蓝牙模块【9和10脚】直接输出模拟音频信号,也就是说,直接推动耳机可以听到声音 …...
209. 长度最小的子数组
这个题目之前做过是用c语言写的 但是我这里用python来写 写的不是很好 感觉自己这里写的还是有问题 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,…...