
JAVA
文章平均质量分 73
JAVA
ximeneschen
这个作者很懒,什么都没留下…
展开
-
Java9及之后关于类加载器的新特性
为了保证兼容性,。原创 2023-12-09 17:49:44 · 699 阅读 · 0 评论 -
Java serialVersionUID 有什么作用
当一个对象实现 Serializable 接口时,多数 ide 会提示声明一个静态常量 serialVersionUID(版本标识),那 serialVersionUID 到底有什么作用呢?当不显式定义 serialVersionUID 的值时,Java 根据类的多个方面(具体可参考 Java 序列化规范)动态生成一个默认的 serialVersionUID。测试发现没有什么问题。所以,为了保证在不同的 jdk 编译实现中,其 serialVersionUID 的值也一致,谈到这里,我们大概可以清楚,原创 2022-11-03 00:20:29 · 474 阅读 · 0 评论 -
JAVA中excel文件导入日期变成数字解决方案
【代码】JAVA中excel文件导入日期变成数字解决方案。原创 2022-10-20 22:36:07 · 3622 阅读 · 2 评论 -
云计算的三种服务模式:IaaS、PaaS和SaaS
基础设施即服务 (IaaS):基础设施即服务有时缩写为 IaaS,包含云 IT 的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件)以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制,其机制与现今众多 IT 部门和开发人员所熟悉的现有 IT 资源最为接近。平台即服务消除了组织对底层基础设施(一般是硬件和操作系统)的管理需要,让您可以将更多精力放在应用程序的部署和管理上面。这有助于提高效率,因为。原创 2022-10-08 02:16:00 · 10785 阅读 · 0 评论 -
数组是如何随机访问元素?数组下标为什么从0开始,而不是1?
数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储相同类型的数据。线性表就是数据排成一条线一样的结构,每个线性表的数据最多只有前后两个方向。例如:数组,链表,队列,栈 等都是线性表结构。例如:二叉树,堆,图,等,是非线性表,是因为,在非线性表中,数据之间并不是简单的前后关系。原创 2022-09-19 19:33:08 · 994 阅读 · 1 评论 -
JNDI,SPI,JMS(AMQP) , JMX,RMI与RPC
JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。原创 2022-09-05 16:19:53 · 871 阅读 · 0 评论 -
JMX详解及JConsole使用
写一段代码,把配置值缓存起来,系统在获取的时候,先看看配置文件改动没,如有改动,则从配置里获取最新值,否则从缓存里读取,例如读取Apollo配置中心数据。用JMX把需要配置的属性集中在一个类里,然后写一个MBean,再进行相关配置,并且JMX提供了JConsole工具页,方便对参数值进行修改。启动Agent后就能通过Jconsole进行连接,可以看到有两个printHello方法,一个是可以自己输入参数的,另一个是写死了参数的,写死在代码里,需要改动的时候去修改,然后重新编译发布。原创 2022-09-05 00:32:39 · 956 阅读 · 1 评论 -
json 中关于json数组跟json对象的区别
JSON 是存储和交换文本信息的语法:JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。原创 2022-09-04 22:24:31 · 922 阅读 · 0 评论 -
JDK自带工具
keytool:密钥和证书管理工具,主要用于密钥和证书的创建、修改、删除等。native2ascii: 本地编码到ASCII编码的转换器(Native-to-ASCII Converter),用于”任意受支持的字符编码”和与之对应的”ASCII编码和(或)Unicode转义”之间的相互转换。jstatd: jstatd(VM jstatd Daemon)工具是一个RMI服务器应用,用于监测HotSpot JVM的创建和终止,并提供一个接口,允许远程监测工具附加到运行于本地主机的JVM上。...转载 2022-08-31 16:45:31 · 1603 阅读 · 0 评论 -
Java 多层嵌套JSON类型数据解析及fastjson2的使用
在fastjson2.0中,package和1.x不一样,是com.alibaba.fastjson2。如果你之前用的是fastjson1,转载 2022-07-20 21:44:27 · 9427 阅读 · 1 评论 -
JAVA SPI机制及SPI机制在Tomcat中的应用和在springboot中的应用
SPI 是 JAVA 提供的一种服务提供发现接口,其实就是一种面向接口的编程,为接口去匹配具体服务实现的机制,这一点上与 IOC 的思想类似,都是把装配的控制权放到了程序之外,下面具体看看什么是 SPI。一、什么是 SPISPI 全称为 Service Provider Interface,即服务提供发现接口,这里的服务指的不是我们经常听到的微服务服务发现,这里的一个服务 Service 指的是一个接口或抽象类,服务提供方则是对这个接口或抽象类的实现。SPI 是 ”基于接口的编程 + 策略模式 + 配置原创 2022-03-10 18:27:13 · 1437 阅读 · 0 评论 -
java函数回调
一、本质函数回调本质就是:通过传递引用来调用引用指定对象的方法,回调方法一定涉及两个类,通过方法参数接收另外一个类的引用来调用另外一个类的方法,其实就是一个函数的参数是某个接口的实现类二、代码直接解释基础需求,让室友帮忙写作业代码public class RoomMate { public String getAnswer(String homework) { if("1+1=?".equals(homework)) { return "2";原创 2022-03-03 18:37:23 · 653 阅读 · 0 评论 -
Java 模块系统
一、什么是Java module与Java 中的package有些类似,module引入了Java代码分组的另一个级别。每个这样的分组(module)都包含许多子package包。通过在一个模块的源代码文件package的根部,添加文件module-info.java来声明该文件夹及其子文件夹为一个模块。该文件语法如下: module xxx.yyy{ .... }其中xxx.yyy是模块module声明的名称,不是package名称。从Java 9开始,原有的Java标准库已经由一个单一巨原创 2021-12-23 00:01:25 · 323 阅读 · 0 评论 -
接口默认方法
一、JAVA接口基础接口定义在JAVA中,接口的作用主要是定义该类型实例具有的功能,也就是定义必须执行那些工作,而不关心如何进行这些工作。所以,在接口中定义的方法没有方法体,并且接口不允许定义实例变量。以下代码中定义名为MyInterface的接口,并且在该接口中定义了getInt方法,如果有类实现了该接口,则根据JAVA语法,该类必须实现getInt方法。public interface MyInterface{ int getInt();}使用接口的优势接口的设计主要是为了支转载 2021-12-17 16:17:04 · 5220 阅读 · 0 评论 -
Java枚举详解
一、概念enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下:enum Color { RED, GREEN, BLUE }如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1,BLUE:2枚举的好处:可以将常量组织起来,统一进行管理。枚举的典型应用场景:错误码、状态机等。二、枚举类型的本质尽管 enum 看起来像是一转载 2021-12-17 10:31:26 · 767 阅读 · 1 评论 -
java内部类的四大作用
一、内部类的作用我们为什么需要内部类?或者说内部类为啥要存在?其主要原因有如下几点:内部类方法可以访问该类定义所在作用域中的数据,包括被 private 修饰的私有数据内部类可以对同一包中的其他类隐藏起来内部类可以解决java 单继承的缺陷当我们想要定义一个回调函数却不想写大量代码的时候我们可以选择使用匿名内部类来实现 举例说明如下:可以无条件地访问外围类的所有元素为什么可以引用:内部类虽然和外部类写在同一个文件中, 但是编译完成后, 还是生成各自的class文件,内部类通过this转载 2021-12-17 00:39:10 · 6934 阅读 · 1 评论 -
java中继承、多接口实现
一、子类继承父类,实现接口,父类和接口有同名方法子类直接继承父类和实现接口不实现接口方法不报错,说明这种情况下默认父类实现该方法二、一个类实现多个接口,而多个接口中出现同名方法(需要看同名方法的返回值是否相同)如果该同名方法的返回值也一样,即同名方法的方法名、参数名、参数个数、返回值都一样,那么该类只需要实现其中一个方法就可以了。如果多个接口有同名方法,但是它们的返回值不一样,那么需要分别实现返回值不同的同名方法。如果只实现一个是无法编译的。文章转自...转载 2021-12-16 23:08:56 · 451 阅读 · 0 评论 -
使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示:用eclipse或用ant则没有问题。其实原因很简单,我们忽略了2个细节。java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我们忽略了package的影响。第一个问题好解决:我们直接在CLASSPATH环境变量中加入“.;”即可。“.”的意思是搜索当前目录,但其实jdk1.5之后便无需再配置classpath第二个问转载 2021-11-10 01:50:46 · 7924 阅读 · 1 评论 -
HttpClient、OKhttp、RestTemplate对比
一、三者的对比HttpClient:代码复杂,还得操心资源回收等。代码很复杂,冗余代码多,不建议直接使用。RestTemplate: 是 Spring 提供的用于访问Rest服务的客户端, RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。okhttp:OkHttp是一个高效的HTTP客户端,允许所有同一个主机地址的请求共享同一个socket连接;连接池减少请求延时;透明的GZIP压缩减少响应数据的大小;缓存响应内容,避免一些完全重复的请求二、Ht原创 2021-10-25 16:28:18 · 14934 阅读 · 0 评论 -
Session与Cookie的安全问题
由于http协议是无状态的协议,为了能够记住请求的状态,于是引入了Session和Cookie的机制。我们应该有一个很明确的概念,那就是Session是存在于服务器端的,在单体式应用中,他是由tomcat管理的,存在于tomcat的内存中,当我们为了解决分布式场景中的session共享问题时,引入了redis,其共享内存,以及支持key自动过期的特性,非常契合session的特性,我们在企业开发中最常用的也就是这种模式。但是只要你愿意,也可以选择存储在JDBC,Mongo中,这些,spring都提供了默认的原创 2021-10-14 16:35:12 · 523 阅读 · 0 评论 -
Java Instant类
时间点此类的对象表示时间线上的一点。可以理解为人类的绝对时间。因为是时间线的一点,所以时间点可以比较大小,那么这个时间点的标准都是统一的(UTC时间);即这个时间点对于整个地球人们来说是唯一的,不是北京时间、也不是东京时间、而是世界时间。与时间点相关的两个概念就是时间线和时间的单位。一、时间线时间点在时间线上(点在线上)。时间线上有三个重要的点:最大值点、最小值点、原点(时间不知道有没有尽头)。在Java世界,时间线的末端分别是Instant.MAX和Instant.MIN;时间线的原点是Ins原创 2021-10-05 23:47:20 · 1740 阅读 · 0 评论 -
HTTP VS RPC / Feign VS Dubbo
先再次重复强调一遍,通信协议不是 rpc 最重要的部分,不要被这类回答带偏。如果要了解 rpc 请更多的去了解服务治理(SOA)的一些基本策略,推荐去看看 dubbo 的相关文档。一、详解rpc是远端过程调用,其调用协议通常包含:传输协议 和 序列化协议。 - 传输协议:比如著名的 grpc,它底层使用的是 http2 协议;还有 dubbo 一类的自定义报文的 tcp 协议 - 序列化协议:例如基于文本编码的 json 协议;也有二进制编码的 protobuf、hession 等协议原创 2021-09-30 17:01:46 · 3825 阅读 · 4 评论 -
JAVA Unsafe类
Unsafe为我们提供了访问底层的机制,这种机制仅供java核心类库使用,而不应该被普通用户使用。但是,为了更好地了解java的生态体系,我们应该去学习它,去了解它,不求深入到底层的C/C++代码,但求能了解它的基本功能。一、获取Unsafe的实例查看Unsafe的源码我们会发现它提供了一个getUnsafe()的静态方法。@CallerSensitivepublic static Unsafe getUnsafe() { Class var0 = Reflection.getCallerC原创 2021-09-27 17:33:53 · 155 阅读 · 0 评论 -
IM即时通讯实现原理
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数 据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。QQ就是使用UDP协议进行发送和接收消息的。当你的机器安装了OICQ以后,实际上,你既是服务端(Server),又是客户端(Cl转载 2021-09-27 12:41:58 · 3498 阅读 · 0 评论 -
idea debug只断点当前线程,不阻塞其他线程
https://www.bilibili.com/video/BV1py4y1E7oA?p=60&spm_id_from=pageDriver原创 2021-09-22 16:34:28 · 1081 阅读 · 0 评论 -
在windows上实现多个java jdk的共存解决办法
java17发布了,我也想尝尝鲜,本身机子是1.8的版本,如何并存两个jdk?解决思路第一步:安装jdk17,让两个jdk共存。安装教程是:直接 下一步 and 下一步安装完成后,对jdk环境变量进行如下设置:JAVA8_HOME =jdk1.8的安装路径JAVA17_HOME =jdk17的安装路径JAVA_HOME = %JAVA17_HOME% (注意:如果你想切换jdk,就在此处设置即可)设置后环境变量如下图所示:第二步:添加%JAVA_HOME%\bin到环境变量Path原创 2021-09-17 11:25:27 · 4220 阅读 · 0 评论 -
JUnit单元测试中多线程的坑
一、JUnit单元测试方法不输出在JUnit的@Test方法中启用多线程,新启动的线程会随着@Test主线程的死亡而不输出二、解决方法在@Test方法中每创建一个线程,就join一下,这样我们新建的线程不死亡,Test主线程也不会死亡让主线程睡眠一会,等待其它线程结束后本线程在结束使用CountLatch等同步器同步一下,让主线程等其它线程结束后在结束其它方法,总之就是让@Test的线程等待我们新建的线程运行结束后再结束方法1 Thread.join()@Test p转载 2021-09-10 01:03:11 · 990 阅读 · 0 评论 -
原生JAVA的TCP/UDP编程
一、TCP/UDP对比二、TCP编程TCP字节流编程- Server端:public class TCPServerStream { public static void main(String[] args) { /* * 1.在本机的 9999 端口监听,等待连接 * 2.当没有客户端链接9999端口时,程序会阻塞,等待链接 * 3.通过socket.getInputStream()读取客户端写入到数据通道的数据原创 2021-09-09 14:52:41 · 256 阅读 · 0 评论 -
Java输出流需要注意的几点细节
一、OutputStream—字节输出流FileOutputStream—字节文件输出流,write数据后立刻写到文件中去BufferedOutputStream—带缓冲区的字节输出流,数据会先存放到缓存取,缓冲区满的话会自动flush到目的地。 也就是说这个类写数据必须要调用flush方法,否则数据无法写到目的地,当然也可以调用close方法,这个方法关闭流的时候会自动flush二、Writer----字符输出流FileWriter—字符文件输出流,write后,会将字符转换成字节缓存到底层原创 2021-09-09 14:13:34 · 717 阅读 · 0 评论 -
try-with-resources引起的Socket关闭,产生java.net.SocketException: Socket is closed?
一、try-with-resources是什么?它是jdk1.7之后出现的一直新的try-catch异常捕获操作,目的就是简化操作,实现资源的自动关流。示例代码 try(FileReader fr = new FileReader("E:\\c.txt")){ int c = fr.read(); System.out.println((char)c); }catch (IOException e){ e.pri转载 2021-09-08 22:24:15 · 934 阅读 · 0 评论 -
Java中抽象类、接口、父类直接的区别与联系
抽象类与接口的区别:1)抽象类是一个只有变量或方法申明的类,这些变量(属性)和方法都是抽象类型的。抽象类没有对方法的实现。2)接口则是一个只有方法申明。没有方法的实现,接口的方法也同样是抽象方法,与抽象类不同的:接口只能定义static final成员变量。抽象类与接口的共同点:抽象类与接口的方法实现都是在继承的(子类)或者是实现接口的类中实现的。抽象类与父类的区别:1)抽象类与父类不同的地方在于:抽象类只能对属性或者方法的申明,不能对其实现。而继承这个类的子类.原创 2021-08-25 15:16:24 · 1175 阅读 · 0 评论 -
Java Arrays.asList()方法详解
本文是对Arrays.asList()方法从源码角度进行分析,解析使用中的一些困惑。首先看Arrays.asList()的源码public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); } 使用该方法 可以将一个变长参数或者数组转换成List看似很简单但实际使用起来却会发现存在很多问题,看下面代码来发现问题。先来看第一个问题,基本类型数组作为参数问题。publi转载 2021-08-25 00:30:39 · 24445 阅读 · 2 评论 -
java实体类时间属性的解决方案
一、java实体类型与mysql数据库对应的时间类型二、java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp的区别java.util.Date日期格式为:年月日时分秒java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据]java.sql.Time日期格式为:时分秒java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)关系:java.util.Date这个类是java.s原创 2021-08-24 23:03:04 · 10232 阅读 · 0 评论 -
java类的多态
一、何为多态多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:现实中,比如我们按下 F1 键这个动作:如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。java中操作符的多态 :+ 可以作为算数运算,也可以作为字符串连接类的多态:父类引用转载 2021-08-24 16:18:08 · 834 阅读 · 0 评论 -
java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗
一、简单总结,需要重写的有普通类继承抽象类,重写所有抽象类方法;(不包括普通方法)普通类继承接口,重写所有接口方法。(不包括default关键字修饰的方法)详解见下:普通类继承,并非一定要重写父类方法。抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定要实现父接口中定义的转载 2021-08-24 11:30:24 · 4743 阅读 · 0 评论 -
Java修饰符:public,protected,private,不加修饰符的区别
文章转自转载 2021-08-24 10:50:33 · 315 阅读 · 0 评论 -
后台返回给前端json字段的大小写问题,Lombok的坑
Lombok的@Data注解踩坑,@Setter的大小写问题以前在处理前端请求的实体类的时候,都是用Lombok的@Data注解对实体类进行getter、setter以及toString的声名,今天处理实体类的时候,发现生成的setter方法和Java Bean的命名规则不一致。(@Data的作用是为我们定义的字段添加Lombok的@ToString、@EqualsAndHashCode、 @Getter方法、@RequiredArgsConstructor 和 为非final字段添加@Setter)我转载 2021-08-23 08:53:32 · 1092 阅读 · 0 评论 -
SpringBoot解耦的扩展机制 Spring Factories介绍及使用
一、什么是 SPI机制Spring Boot中有一种非常解耦的扩展机制:Spring Factories。这种扩展机制实际上是仿照Java中的SPI扩展机制来实现的。SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的。在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下java SPI机制的思想。我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案转载 2021-08-17 11:17:51 · 698 阅读 · 0 评论 -
java钩子函数(hook)以spring源码为例
一、什么是钩子函数请问在Spring中,如果JVM异常终止,Spring是如何保证会释放掉占用的资源,比如说数据库连接等资源呢?钩子函数非常简单,简单到只用摘抄一段Spring代码即可。二、问题Spring 容器中 Bean 在什么时候执行销毁方法?我们知道在Spring中定义销毁方法有两种方式实现DisposableBean 的 destroy 方法。 使用 @PreDestroy 注解修饰方法@Componentpublic class DataCollectBean implements D转载 2021-08-15 04:16:14 · 2840 阅读 · 0 评论 -
抽象类调用自己的抽象方法,实现来自子类
public abstract class Parent { public abstract void dosomething(); public void say(){ dosomething(); System.out.println("www.jianshu.com"); }}public class Children extends Parent{ @Override public void dosomething转载 2021-08-12 15:24:35 · 2402 阅读 · 0 评论