- 博客(49)
- 收藏
- 关注
原创 GC垃圾回收
给对象添加一个引用计数器,当对象增加一个引用时计数增加1,当引用失效的时候,计数减1。当引用计数为0的时候,对象就可以被回收。通过GC Roots作为起点进行搜索,能够到达对象的都是存活的,不可达的对象是可被回收的,两个对象被循环引用的时候,引用计数永远不为0,导致无法对其进行回收。·方法区中类静态属性引用的对象。·本地方法栈中引用的对象。·方法区中常量引用的对象。·虚拟机栈中引用的对象。
2025-09-10 14:33:16
155
原创 MySQL一条SQL语句的执行过程
MySQL查询语句执行流程解析:1)连接建立和权限验证;2)查询缓存检查;3)SQL语法解析和预处理;4)优化器生成执行计划;5)执行器执行查询。其中涉及连接管理、缓存机制、语法分析、优化决策等关键环节,特别是优化器会根据索引情况优化查询效率。
2025-09-09 20:43:30
262
原创 MySQL中char和varchar的区别
varchar的优点是兼容性更好,以及可变的数据长度。但可能会带来一些问题,varchar可能会产生内存碎片,以及update会导致。char的优点是定长的字符串类型,减少内存碎片,无需额外的磁盘空间去存储长度空间。缺点是会丢失数据列末尾的空格信息。char是一种定长的数据类型,长度固定且会自动在结尾添加空格来讲字符串填满至固定的长度,其长度范围是0到255。varchar是一种可变长度的数据类型,只会存储实际的字符串内容,不会填充空格。
2025-09-09 20:34:43
151
原创 关系型数据库和非关系型数据库
关系型数据库采用二维表格结构存储数据,强调ACID原则(原子性、一致性、隔离性、持久性),通过结构化查询语言管理数据,但以降低读写性能为代价保证数据一致性。数据通常存储在硬盘中,通过undolog和redolog等机制实现事务特性。相比之下,非关系型数据库不严格遵循ACID原则,多基于内存存储,读写速度更快,但可能牺牲部分数据一致性。两种数据库各有特点,适用于不同场景。
2025-09-09 20:23:52
267
原创 常见的字符编码
3.utf系列字符集,由于Unicode没有规定如何存储,因为如果统一规定,每个符号就要用三到四个字节表示,因为字符太多,需要那么多字节才能表示。对于英文字母而言,统一规定必然会导致每个英文字母前有二到三个字节为0,因为在ASCII中英文字母都有,都可以用一个字节表示,剩余位置要补充0,那么会导致文件膨胀2-3倍,对于存储而言极度浪费。4.GBK字符集,针对大部分仅服务于一个国家的网站,GBK+ASCII就可以满足用户需求,而且针对utf系列字符集而言,会减少更多的字节空间。
2025-09-09 17:30:56
120
原创 字符串常量
字符串常量池中的常量有两种来源,一种是字面量会在编译期进入到class常量池,然后再进入到字符串池,还有一种就是在运行期间通过intern方法将字符串对象手动添加到字符串常量池。字符串常量指的是在源代码中直接被双引号引用的字符串字面量。
2025-09-09 17:05:43
105
原创 Class常量池
class常量池可以理解为class文件中的资源仓库,Class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项就是信息就是常量池,用于存放编译器生成的各种字面量和符号引用。其中字面量类似于java中的常量概念,比如文本字符串、final常亮等。
2025-09-09 16:58:11
106
原创 Java集合
基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是 查找效率不如HashSet,HashSet的查找效率为O(1),而TreeSet的查找效率为O(logN)基于哈希表实现,支持快速查找,但是不支持有序操作。并且失去了元素插入顺序的信息,也就是说每次Iterator遍历HashSet得到的结果是不确定的。基于双向链表实现,只能顺序访问,但可以快速的在链表中间插入和删除元素。具有HashSet的查找效率,且内部使用双向链表维护元素的插入顺序。基于堆结构实现,可用来实现优先队列。
2025-09-09 16:43:38
184
原创 Java常用注解
3.@SuppressWarnings,用于表明要忽略的警告。2.@Deprecated,用于表明某个类或方法过时。1.@Override,用于表明重写某个方法。
2025-09-09 15:25:18
89
原创 String、StringBuilder、StringBuffer的区别
3.StringBuffer是线程安全的(使用synchronized进行声明),而StringBuilder是非线程安全的,但效率相对StringBuffer要高。2.StringBuilder和StringBuffer是可变的。1.String是不可变的。
2025-09-09 14:44:03
110
原创 Java绝对值
有一种特殊情况,当int类型的数据为-2147483648的时候,得到的绝对值还是-2147483648,因为int的范围在-2**31到2**31-1范围内,简单来说绝对值超出了int范围,但只需要将该值转换为long数据类型,就不会出现越界。一般使用Math.abs方法。
2025-09-09 14:38:14
158
原创 为什么不能用BigDecimal的equals方法做等值比较
可以看到上面的示例,看上去精度不同,但一个为true,一个为false。因为0.1和0.10所创建出来的bigdecimal的值都是属于double自身的一个近似值,小数点后大约55位,标度相同,而字符串所创建出来的值如代码所示,一个为0.1,标度为1,一个为0.10,标度为2.因为BigDecimal方法会同时比较值(value)和标度 (scale),而对于0.1和0.10两个数字而言,虽然值是相同的,但是精度不一样。一般采用compareTo方法进行值的比较。
2025-09-09 14:29:39
112
原创 为什么不能用浮点数表示金额
举例为 十进制的0.2,转换为二进制,过程为 0.2*2=0.4取0,0.4*2=0.8取0,0.8*2=1.6取1,0.6*2=1.2取1,0.2*2=0.4取0,到这步就开始无限循环了。实际举例比如0.1+0.2!= 0.3,而是等于0.30000000000000004。浮点数知识近似值,而不是精确值,不能用来表示金额,否则会有精度丢失。float和double都不能用,只能使用BigDecimal。因为不是所有的小数都能用二进制表示。
2025-09-09 14:14:43
138
原创 Java基本数据类型
int,4字节,范围-2147483648到2147483647,long,8字节,范围-9223372036854775808到9223372036854775807。为了让基本类型也有对象的特征,就出现了包装类型,它相当于将基本类型包装起来,使它具有对象的性质,并为其添加了属性和方法,丰富了基本类型的操作。另外基本类型的默认值和包装类型的默认值不同,如基本类型的默认值基本是0,false,\u0000等,而包装类型的默认值为null。4.浮点型:float,4字节,范围约-3.4E38到3.4E38;
2025-09-09 14:02:40
167
原创 面向对象编程与面向过程编程
例如,用户管理模块不应同时处理用户认证和日志记录,而是拆分为独立的类。依赖倒置原则:高层模块不应依赖低层模块,二者应共同依赖抽象。多态:子类继承父类的属性和方法后,可以重写父类的方法,可以使得父类与子类的同样方法具有不同的实现。面向对象将问题分解为一个一个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之间的调用,组合解决问题。:单一职责原则,开放封闭原则,Liskov替换原则,依赖倒置原则,接口隔离原则。面向过程把问题分解为一个一个步骤,每个步骤用函数实现,依次调用即可。:封装、继承、多态。
2025-09-09 12:34:35
320
原创 Java和C++主要区别以及优缺点
Java是解释型语言。源代码不直接翻译成机器码,而是先翻译成中间代码(Java字节码,.class文件),再由解释器对中间代码进行解释运行。执行速度相对较慢、效率较低。依赖解释器,跨平台兼容性好。C++是编译型语言。首先将源代码编译生成机器码,再由机器运行机器码,执行速度快,效率高,依赖编译器、跨平台性相对较差。Java是自动内存管理和垃圾回收的,C++需要手动进行内存管理。
2025-09-09 12:16:55
123
原创 Ar开源框架
Vuforia:Vuforia是一个强大的增强现实平台,提供了图像识别、跟踪、虚拟内容生成和渲染等功能。它支持多种平台,包括Android、iOS和Unity等。ARToolKit:这是一个广泛使用的增强现实框架,提供了图像识别、跟踪和渲染等功能。它支持多种平台,包括Android、iOS和Windows等。ARCore:ARCore是由Google开发的增强现实框架,专门用于Android平台。它提供了图像识别、跟踪、环境感知和虚拟内容渲染等功能。它提供了图像识别、跟踪、环境感知和虚拟内容渲染等功能。
2023-08-12 10:07:57
1697
原创 Spring Boot 引入 thymeleaf
static里面放dist文件夹的东西(就是vue打包之后的东西,css和js文件以及html都在里面)(注意static里面放的不是dist文件夹,而是dist里面的那些文件)第一步,首先将vue项目打包至dist文件夹(若开发者不熟悉vue前端,直接将此项任务交给前端,让他传给你dist)第三步,在 resources文件夹下 创建两个文件夹,一个命名为 static,一个命名为 templates。在第四步中,我配置的访问路径是 /# , springboot端口是8081。
2023-02-25 12:11:01
1574
原创 springboot配置mybatis
第一步,在pom.xml文件中引入依赖。第二步,在application.yml中配置 数据库连接信息 和 mybatis配置。
2023-02-25 10:41:59
667
原创 vue设置全局变量
在src下新建一个utils文件夹,并在此文件夹下新建一个config.js文件。配置完成,.vue文件都可以访问此变量,访问方式为 this.baseurl。在config文件中写入,这里以配置全局请求url为例。到main.js文件中引入此全局变量。
2023-02-23 16:55:14
1187
原创 springboot配置ssl
第七步,在application.yml配置ssl,key-store就是pfx文件的路径,注意在前面添加一个classpath。key-store-password就是下载中的pfx-password.txt文件中的一串密码。第四步,下载tomcat的证书,因为springboot是建立与tomcat服务器的。第五步,下载成功后,会有两个文件,一个是配置文件,一个配置文件的密码。第八步,在对应的服务器启动jar包,就可以进行https访问了。第二步,找到SSL证书中的,免费证书。第三步,点击证书的下载。
2023-02-23 15:59:11
2566
原创 js上传文件流
第一步,创建FormData对象。第二步,读取文件列表,并添加到FormData实例化对象中。第三步,使用axios上传文件至后端。
2023-02-23 15:17:36
1737
原创 Java中使用restTemplate发送get请求
第一步,在springboot的启动类(Application)中添加RestTemplate的类。第二步,在controller层或service层使用restTemplate发送请求。
2023-02-23 14:58:42
969
原创 AOP的五种类型
After Throwing Advice(后置返回建议),即在方法抛出异常时 执行该后置方法。After Returning Advice(后置建议),即在方法正确执行后 才执行后置方法。After (Finally) Advice(后置抛出建议),即在方法执行后 执行后置方法。Around Advice(环绕建议),即在方法执行前后 进行执行前后置方法。Before Advice(前置建议),即在方法执行前 执行前置方法。根据spring官方文档所介绍,目前Aop共有五种通知类型。
2022-11-30 18:32:26
861
原创 spring配置AOP
Aop中有三种主要通知方式,分别为前置通知--@Before(""),后置通知--@After(""),环绕通知@Around(""),execution(* com.Aop.service.dao.save() 就是选择某个方法注入切面aop。如图所示,我在Aop包下创建了AopMethod的Aop操作类。如图所示,创建service接口层和impl实现类层。第三步,创建service层,用于测试Aop操作类。Aop操作类中,需注入切入点,即。第二步,创建AOP的方法类。第四步,书写Aop操作类。
2022-11-30 18:08:50
982
原创 html+css实现三角形
一个div盒子,盒子宽度和高度设置为0,然后给盒子设定border边框线,赋予不同的颜 色。思路就是给不同的边线赋予不同的颜色。
2022-11-30 14:53:27
504
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1