- 博客(49)
- 收藏
- 关注
原创 JVM垃圾收集器
当前虚拟机的垃圾收集都基于分代收集思想,根据对象存活周期的不同,将内存分为几个不同的区域,在不同的区域使用不同的垃圾收集算法。例如: Heap 堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。在新生代中,每次收集都会有大量垃圾对象被回收,所以可以选择“标记-复制”算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。在老年代中,对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以选择“标记-清除”或“标记-整理”算法进行垃圾收集。
2024-09-25 17:58:26 669 1
原创 多线程---线程的状态及常用方法
在Java程序中,一个线程对象通过调用start()方法启动线程,并且在线程获取CPU时,自动执行run()方法。run()方法执行完毕,代表线程的生命周期结束。在整个线程的生命周期中,线程的状态有以下六种:①New新建状态,新创建的线程,此时尚未调用start()方法;②Runnable:运行状态,运行中的线程,已经调用了start()方法,线程正在或者即将调用run()方法;③Blocked阻塞状态,运行中的程序在等待竞争锁时,被阻塞,暂不执行;④Waiting等待状态。
2024-09-19 19:48:49 823
原创 线程---多线程基础
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,可以理解为程序是包含静态代码的文件。例如:浏览器软件、音乐播放器软件等软件的安装目录和文件。进程是程序的一次执行过程,是系统运行程序的基本单位。在Windows系统中,每一个正在执行的exe文件或后台服务,都是一个进程,由操作系统统一管理并分配资源,因此进程是动态的。例如:正在运行中的浏览器就是一个进程,正在运行中的音乐播放器是另一个进程,同理,正在运行中的QQ和WPS等都是进程。
2024-09-19 11:56:24 846
原创 代理模式---静态代理和动态代理
代理模式:给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。代理模式角色分为 3 种:Subject(抽象主题角色):定义代理类和真实主题的公共对外方法,通常被设计成接口;RealSubject(真实主题角色):真正实现业务逻辑的类;Proxy(代理主题角色):用来代理和封装真实主题;代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层。如果根据字节码的创建时机来分类,可以分为和。
2024-09-18 19:36:37 903
原创 Spring部分常见面试题
Spring 框架是一款轻量级的开发框架,核心思想是IOC(控制反转)和AOP(面向切面编程)为Java 应用程序开发提供组件管理服,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用(JMS、任务调度、缓存、ORM框架),是一个基础架构型的开发框架;
2024-09-12 19:35:27 1312
原创 微服务通信
Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它使得调⽤远程服务就像调⽤本 地服务⼀样简单, 只需要创建⼀个接⼝并添加⼀个注解即可。Nacos很好的兼容了Feign, Feign 默认集了Ribbon, 所以在Nacos下使⽤Fegin默认就实现了负载均衡的效果 官⽅地址: https://github.com/OpenFeign/feign类型作⽤说明修改⽇志级别包含四种不同的级别: NONE、 BASIC、 HEADERS、 FULL响应结果的解析器。
2024-08-25 16:11:53 828
原创 微服务注册中心
Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快 速实现动态服务发现、服务配置、服务元数据及流量管理。nacos的作⽤就是⼀个注册中⼼,⽤ 来管理注册上来的各个微服务是 Netflixfa 发布的⼀个负载均衡器,有助于控制 HTTP 和 TCP客户端⾏为。在 SpringCloud 中, Nacos⼀般配合Ribbon进⾏使⽤,Ribbon提供了客户端负载均衡的功能,Ribbon利⽤从Nacos中读取到 的服务信息,在调⽤服务节点提供的服务时,会合理的进⾏负载。
2024-08-21 20:09:00 755
原创 微服务基础知识
服务注册:服务实例将⾃身服务信息注册到注册中⼼。这部分服务信息包括服务所在主机IP和提供服务 的Port ,以及暴露服务⾃身状态以及访问协议等信息。服务发现:服务实例请求注册中⼼获取所依赖服务信息。服务实例通过注册中⼼,获取到注册到其中的 服务实例的信息,通过这些信息去请求它们提供的服务。Spring Cloud是⼀系列框架的有序集合。
2024-08-19 22:30:51 755
原创 SpringBoot自动配置
Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操 作。当我们为spring容器添加了redis坐标后,我们就可以通过getBean()方法获取到redisTemplate对象,如果没有添加坐标则会报错,那么spring容器是怎么知道我们要配置那个类呢?
2024-08-18 22:50:22 894 1
原创 SpringBoot(一)
JSR的全称是Java Specification Requests(Java 规范提案),是指向JCP ( Java Community Process )提出新增一个标准化技术规范的正式请求。Java API 规范( JSR303 )定义了 Bean 校验的标准 validation-api ,但没有提供实现。hibernate validation 是对这个规范的实现,并增加了校验注解如 @Email 、 @Length 等。
2024-08-14 20:03:57 631
原创 mybatis
ORM模型是数据库的和简单的(Plain Ordinary Java Object,简称POJO) 的映射关系模型,主要解决数据库的数据和POJO对象的相互映射。POJO对象实际上就是JavaBean对象。映射关系分为:①Java类和数据库中表的映射;②Java对象和表中记录的映射;③类的属性和数据库中表的字段的映射。
2024-08-08 20:00:09 989
原创 Spring框架的三种配置方式(二)---xml文件+注解
Spring框架有三种配置方式:1.在spring2.5以前,用xml文件进行配置2.在spring2.5以后,用xml文件和注解(annotation)共同进行配置3.在spring3.0以后,用注解(annotation)和JavaConfig配置类进行配置。
2024-08-08 19:59:48 1314
原创 事务和函数索引
MySQL默认10秒内没有响应SQL结果,则为慢查询(可以去修改MySQL慢查询默认时间)索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
2024-07-25 19:52:15 1105
原创 数据库(MySQL)-视图、存储过程、触发器
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数)来执行它。触发器是数据库中针对数据库表操作触发的 特殊的存储过程。
2024-07-25 13:36:08 1109
原创 数据库(MySQL)-DQL数据查询语言
DQL(Data Query Language 数据查询语言)的用途是查询数据库数据,如select语句。其中,可以根据表的结构和关系分为单表查询和多表联查。
2024-07-24 14:04:53 1187 1
原创 压缩文件的解决方法
首//为什么这里删除目录时要用: FileUtils.deleteDirectory(rootDir);而不用rootDir.delete();呢?我们尝试用delete()方法,发现目录并没有被删除,是因为delete()方法只能删除空目录,所以我们使用了commons-io包提供的FileUtils工具进行删除。
2024-07-15 13:21:27 379 1
原创 JSON解析
JSON是一种轻量级的数据交换格式,它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的,易于人的阅读和编写,同时也,并有效地提升网络传输效率。
2024-05-04 18:06:57 1212
原创 Excel文件解析--超大Excel文件读写
当我们想在Excel文件中写入100w条数据时,我们用普通的XSSFWorkbook对象写入时会发现,只有在将100w条数据全部加载入内存后才会用write()方法统一写入,这样效率很低,所以我们引入了SXSSFWorkbook进行超大Excel文件的读写。SXSSFWorkbook可以通过构造参数来控制:当数据写入内存量达到参数值时,就把这些数据flush到Excel文件中。
2024-04-22 22:23:48 1953
原创 properties文件的读取和写入
输出结果:1Xian2Baoji3Xianyang那如果我们想将这个文件以键值对的格式读取出来呢?我们可以将字符输入流加载到一个Properties对象中,这样我们就可以将文件中的内容以加载成key-value文件输出结果:{3=Xianyang, 2=Baoji, 1=Xian}怎么证明它是一个键值对文件呢?输出结果:Xian。
2024-04-17 17:25:50 527
原创 Serializable序列化、反序列化
序列化就是将一个Java对象转换为字节流写入文件。一个java对象要能序列化,必须实现一个特殊的接口---java.io.Serializable接口,例如ArrayList类,就实现了java.io.Serializable接口。那么要实现把一个Java对象转换为字节流写入文件,我们可以使用ObjectOutputStream。为什么不用BufferedOutputStream呢?
2024-04-16 17:38:43 1062
原创 Excel文件解析
在此模块的学习中,我们需要一个新的开源类库---Apahche POI开源类库。这个类库的用途是:解析并生成Excel文件(Word、ppt)。基于DOM方式进行解析,将文件直接加载到内存,所以速度比较快,适合Excel文件数据量不大的应用场景。除了Apahche POI,JXL、Alibaba EasyExcel也是可以进行Excel文件处理的主流技术,但是JXL只支持Excel 2023以下的版本,所以不太常见。
2024-04-15 22:22:35 1667 2
原创 Reader字符输入流、Writer字符输出流
Reader是Java的IO库中提供的另一个输入流接口,但是它和InputStream的区别是,InputStream是字节输入流,即以byte字节为读取单位,而Reader是字符输入流,即以char字符为读取单位的。Reader是所有字符输入流的超类。
2024-04-12 17:10:28 953
原创 InputStream字节输入流、OutputStream字节输出流
InputStream就是Java标准库提供的最基本的输入流。它位于java.io这个包中。注意,InputStream并不是一个接口,而是一个抽象类,它是所有输入流的超类。
2024-04-10 15:38:20 1221
原创 File文件对象
在计算机系统中,文件是非常重要的存储方式。Java的标准库java.io提供了File对象来操作文件和目录。要构造一个File对象,需要通过构造方法,传入该文件的本地物理路径。File类是用来访问磁盘的“目录”和“文件”的。
2024-03-19 21:48:37 1056
原创 方法的重写(Override)、fianl关键字
在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,就被称为重写(Override)。Override重写和Overload重载不同的是:如果方法的签名不同,就是Overload重载,重载方法是一个新方法,重载只有方法名相同;如果方法的签名相同,并且返回值类型也相同,就是Override重写。注意:方法名相同,方法的参数相同,但是返回值不相同,也是不同的方法,在java中出现这种情况,编译器会报错加上@Override 注释可以让编译器帮助检查是否进行了正确的重写。
2024-03-11 17:55:16 925
原创 Overload方法的重载
bookName为:西游记,publisher为:清华大学出版社,pageSize为:123,price为:17.900000。bookName为:null,publisher为:null,pageSize为:0,price为:0.000000。④int indexOf(String str,int fromIndex):根据字符查找,但指定起始位置。但是有一系列方法,他们的功能相似,只是参数不同(③int indexOf(int ch,int fromIndex):根据字符查找,但指定起始位置。
2024-03-04 20:39:26 417 1
原创 BigInteger和BigDecimal
输出结果:-2当我们给n1和n2赋予最大的整数时,他们两个相加,就会产生溢出现象,输出sum时,就会产生一个“不正常的”数:负数。这就是类型溢出,int 类型的对象已经无法存下这么大的数了,此时,我们就可以用一个超大整数:BigInteger来保存一些Int类型无法存下的数字。注意:创建BigIntegr对象时,最好用String类型来保存超大整数//计算输出结果:n3+n4=4487456663728295971755461447。
2024-02-27 20:51:52 1305
原创 String为什么是不可变的?
字符串在String类的内部是用一个char[]数组表示的,而这个数组使用final关键字修饰的,所以不能修改。输出结果:127.0.0.1127#0#0#1。
2024-02-18 16:53:34 665
原创 Arrays工具类的常见方法总结
Arrays.asList( )可以将一个数组以集合的形式传入一个集合对象。通常用来将一组元素全部添加到集合中。
2024-02-16 16:53:03 2341 1
原创 Getter和Setter方法
虽然外部代码不能直接修改private修饰的成员变量,但是外部代码可以调setPhoneNumber()和getPhoneNumber()来间接修改phoneNumber的值,在方法内部,我们可以通过if语句来判断传入的数据是否合法,如果我们传入超过11位或者首字母不为1的参数,会直接将我们手动设置的“未知手机号”传入,不会将非法值传入。会将成员变量暴露给外部,可能会破坏封装性,带来数据访问的安全隐患。通过上篇文章的学习可以发现,在我们自定义的方法中,成员变量都是用public关键字来修饰的。
2024-02-06 20:36:31 326 2
原创 OOP编程思想-方法(上)
语法格式:修饰符 返回值类型 方法名(参数类型 参数名){///**方法体**///}实例:生成一个订单编号,订单编号格式:当前日期+5位流水号(例如:20240205ABC12)//自定义方法//获取当前日期//方式一://toString():按照默认模式:yyyy-MM-dd,转换为字符串//再利用substring一个一个截取System.out.println("日期为:"+orderNo);//方式二://format();按照指定格式yyyyMMdd,转换成字符串。
2024-02-05 21:33:33 452 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人