Java
文章平均质量分 70
一个双子座的Java攻城狮
博客中涉及有Java、Spring、数据库、微服务等,热爱技术,乐于分享,一起成长,遇见未知的自己
展开
-
xxl-Job分布式任务调度
当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eVGMnOeX-1690642441216)(assets\分布式任务调度.png)]将任务调度程序分布式构建,这样就可以具有分布式系统的特点,并且提高任务的调度处理能力:1、并行任务调度。原创 2023-07-29 23:03:45 · 427 阅读 · 0 评论 -
Java通用异常
代码中如果发生系统异常,则直接会给用户抛出不友好的异常信息。为了增加用户的体验,应该给一些适当信息进行提示。项目开发中肯定会设置全局异常处理,不管系统发生了任何不可知的异常信息,都应该给用户返回友好提示信息。原创 2023-07-14 08:30:00 · 216 阅读 · 0 评论 -
Java接口通用请求和响应
【代码】Java接口通用请求和响应。原创 2023-07-13 19:11:05 · 210 阅读 · 0 评论 -
Java中的时间日期类
秒杀开始时间是2020年11月11日 00:00:00,结束时间是2020年11月11日 00:10:00,用户小贾下单时间是2020年11月11日 00:03:47,用户小皮下单时间是2020年11月11日 00:10:11,判断用户有没有成功参与秒杀活动。 SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。SimpleDateFormat类的常用方法。SimpleDateFormat类构造方法。SimpleDateFormat类概述。1秒 = 1000毫秒。原创 2023-02-12 13:25:37 · 366 阅读 · 0 评论 -
重写 equals 时为什么一定要重写 hashCode
hashCode 和 equals 两个方法是用来协同判断两个对象是否相等的,采用这种方式的原因是可以提高程序插入和查询的速度,如果在重写 equals 时,不重写 hashCode,就会导致在某些场景下,例如将两个相等的自定义对象存储在 Set 集合时,就会出现程序执行的异常,为了保证程序的正常执行,所以我们就需要在重写 equals 时,也一并重写 hashCode 方法才行。原创 2023-01-24 10:00:35 · 1453 阅读 · 0 评论 -
int 和 Integer 有什么区别?为什么要有包装类?
在 Java 中,一共有 8 种基本类型(primitive type),其中有 4 种整型、2 种浮点类型、1 种用于表示 Unicode 编码的字符类型 char 和 1 种用于表示真假值的 boolean 类型。4 种整型:int、short、long、byte2 种浮点类型:float、double字符类型:char真假类型:boolean基本数据类型是指不可再分的原子数据类型,内存中直接存储此类型的值,通过内存地址即可直接访问到数据,并且此内存区域只能存放这种类型的值,int 就是 Java 中一原创 2023-01-18 14:52:07 · 841 阅读 · 0 评论 -
元素排序 Comparable 和 Comparator 有什么区别?
Comparable 和 Comparator 都是用来实现元素排序的,它们二者的区别如下:Comparable 是“比较”的意思,而 Comparator 是“比较器”的意思;Comparable 是通过重写 compareTo 方法实现排序的,而 Comparator 是通过重写 compare方法实现排序的;Comparable 必须由自定义类内部实现排序方法,而 Comparator 是外部定义并实现排序的。原创 2023-01-18 14:42:57 · 673 阅读 · 0 评论 -
Java 中 List 排序的 3 种方法
本文介绍了 3 种 List 排序的方法,前两种方法常用于 JDK 8 之前的版本,其中比较器 Comparator 有两种实现的写法,而在 JDK 8 之后的版本,就可以使用 Comparator.comparing 实现排序了,如果排序字段中可能出现 null 值,要使用 Comparator.nullsXXX 进行排序处理(否则会报错)。原创 2023-01-12 23:50:17 · 5690 阅读 · 0 评论 -
Java 中的浅拷贝和深拷贝
第二个方法是利用 serializable 实现深拷贝,这种方式的原理在于通过 IO 流的方式先将序列化后的对象写进 IO 流中,再取出来实现深拷贝。对于 String字符串,这个比较特殊,虽然拷贝的也是引用,但是在修改的时候,它会从字符串池中重新生成新的字符串,原有的字符串对象保持不变。如果是一个对象,拷贝的是地址引用,也就是说此时新拷贝出的对象与原有对象共享该实例变量,不受访问权限的限制。深拷贝的其中一个方法是把被拷贝对象中的所有引用类型也都实现深拷贝,最后逐层拷贝实现引用地址是新的而不是用的同一个。原创 2022-12-30 08:45:00 · 789 阅读 · 0 评论 -
接口和抽象类的区别
接口通过 interface 关键字声明,接口通常使用 public 修饰,也允许默认修饰符,只限本包访问。所有的方法在接口中不能有实现(在 JDK8 时接口可以有默认方法和静态方法);抽象方法可以被 public、protected、default 修饰,但是不能被 private 和 final 修饰,抽象类可以有非抽象的方法;抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。接口里的接口方法如果不能被全部实现,那么该类也只能为抽象类。原创 2022-12-28 08:45:00 · 49 阅读 · 0 评论 -
java中的Stream流
Collection体系集合:使用默认方法stream()生成流, default Stream stream()同种数据类型的多个数据:通过Stream接口的静态方法of(T…中间操作的意思是,执行完此方法之后,Stream流依然可以继续执行其他操作。终结操作的意思是,执行完此方法之后,Stream流将不能再执行其他操作。对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中。数组:通过Arrays中的静态方法stream生成流。Stream流的三类方法。生成Stream流的方式。原创 2022-12-26 17:18:41 · 477 阅读 · 0 评论 -
String 字符串
new String()创建的字符串按照最标准的对象创建方式,生成在堆中,并且一个 new String 会在堆中创建一个对象。每次改变 String 类型的值时,会生成一个新的 String 对象,然后将指针指向新的 String 对象。String 应该是 Java 中最常用的一个对象,他不是八种基本数据类型的其中之一,但是随便翻了一下项目代码,用 String 定义的变量超过百分之八十。字符串常量池是虚拟机中的内容,但是接下来的几个问题需要用到,就简单了解下。原创 2022-12-26 08:30:00 · 285 阅读 · 0 评论 -
Integer的toString()函数
Integer.toString(100,36),表示把100转成36进制表示的字符串,即100到36之间的数字表示为a到z的表示。Integer.toString(100,10),表示把100转成10进制表示的字符串,Integer.toString(100,16),表示把100转成16进制表示的字符串,Integer.toString(100,2),表示把100转成2进制表示的字符串,3、Integer.toString(int i);就是将i转为string。Integer的toString()原创 2022-12-23 22:01:26 · 2474 阅读 · 0 评论 -
线程安全问题是怎么产生的?
但是指令重排序也有“副作用”,而“副作用”是发生在多线程执行中的,还是以张三借书和帮舍友还书为例,如果张三是一件事做完再做另一件事是没有问题的(也就是单线程执行是没有问题的),但如果是多线程执行,就是两件事由多个人混合着做,比如张三在图书馆遇到了自己的多个同学,于是就把任务分派给多个人一起执行,有人借了几本书、有人借了还了几本书、有人再借了几本书、有人再借了还了几本书,执行的很混乱没有明确的目标,到最后悲剧就发生了,这就是在指令重排序带来的线程安全问题。接下来我们演示一下,程序中非线程安全的示例。原创 2022-12-22 23:25:04 · 88 阅读 · 0 评论