
Java
诗人不写诗
当你足够努力时,全世界都会给你让路
展开
-
疑问大集锦
依赖倒置,以前是上层直接依赖下层,下层被直接依赖,后来加入抽象层,下层就不被依赖,而是主动依赖抽象层,对下层来说,依赖关系反转。控制反转是说以前是业务代码控制对象的创建,新增IOC容器后,由IOC容器控制对象创建,对象创建的控制权反转到IOC容器了。1、a依赖b就是a需要调用b吗。原创 2025-04-06 00:37:03 · 56 阅读 · 0 评论 -
语言的自省机制
introspect:自省自省是自我反省的意思,什么叫自我反省,就是能够清楚的认识自己,并提供自己的各项元信息,这就可以称为反省。在Java语言中,也有自省机制,具体表现是反射,因为他能提供出类型的元信息,进而可以访问操作类型,运行时进行实例化或者调用方法。原创 2021-06-23 20:48:45 · 425 阅读 · 0 评论 -
异常不要用来做流程控制,条件控制
异常机制的引入完善了Java语言的设计原创 2021-06-02 18:09:24 · 3001 阅读 · 1 评论 -
Java注解工作原理
注解是Java的一大特色功能原创 2021-05-30 18:36:08 · 106 阅读 · 0 评论 -
Java SPI机制
SPI:Service Provider Interface服务提供接口他是由第一方系统提供的组件接口,是对不同第三方实现方案的规范和约定,能够让xi't原创 2021-05-29 17:18:40 · 159 阅读 · 0 评论 -
编码基本功
Collections.emptyList()java.util.Map#getOrDefault()原创 2021-05-29 12:35:29 · 98 阅读 · 0 评论 -
Java类型的加载和实例的生成
Java的每一个类型在被使用前,是需要加载进虚拟机的。且一个类型只会被加载一次,但是Java类型是可以用来创建多个实例的,所以初始化过程是会进行多次的。那哪些过程是单次的?哪些过程是和实例创建关联的? 首先,类型要使用需要被装载进虚拟机,这个阶段我们称为Loading,主要任务是通过类型的完全限定名,读取class文件,产生一个代表该类型的二进制数据流,解析class文件到方法区内的内部数据结, 构建一个表示该类型的java.lang.Class类的实例。接下来的任务是链接(Linking...原创 2021-02-03 23:45:08 · 200 阅读 · 0 评论 -
Java数组
参考资料:1.《java jdk5.0 学习笔记》良葛格 第五章数组2.如何理解数组的length?http://blog.youkuaiyun.com/treeroot/archive/2005/01/22/264001.aspx3.关于java数组的深度思考http://dev.youkuaiyun.com/author/DeepNightTwo/afb7e220bdf5423ba656f84b6a183b44.html一.为什么需要数组?(《java jdk5.0 学习笔记》良葛格)例如,现在要整理全班的Jav原创 2021-01-02 17:51:04 · 149 阅读 · 0 评论 -
Java内存映射mmap
mmap:memory map,内存映射mmap的思想是将一个对象映射到用户空间的虚拟地址上,就可以直接操作,从而不必进行系统调用,将对象反复在用户空间和内核空间之间拷贝。大大提高了性能。目前Java提供的mmap只有内存文件映射,其他IO操作还没有内存映射功能。Java内存映射文件(Memory Mapped Files)就已经在java.nio包中,但它对很多程序开发者来说仍然是一个相当新的概念。引入NIO后,Java IO已经相当快,而且内存映射文件提供了Java有可能达到的最快IO操作,原创 2020-12-13 18:25:17 · 626 阅读 · 0 评论 -
i++和++i的区别
C++中,++i返回左值,i++返回右值原创 2020-12-06 19:00:55 · 232 阅读 · 0 评论 -
Java集合归纳
Java集合设计时基本接口主要为Collection和Map,请牢牢抓住这个要点,这样你就知道处理数据的结构从顶层分类上是什么样的,Collection主要用来存储数据并提取数据,Map存储键值对数据并根据键值提取数据。当然,集合框架具备简单处理数据的能力。根据下图我们看到,左上角灰色区域里的部分是线程安全且被遗弃的类型,其中Dictionary的替代品的Map,Dictionary在很多语言中代表的就是键值对,例如python中,就有dictionary这种结构,Dictionary虽然被Java遗弃,但原创 2020-11-17 22:09:58 · 300 阅读 · 0 评论 -
Java classpath原理
Java class path是每个Java应用使用到的。原创 2020-10-07 18:24:19 · 301 阅读 · 0 评论 -
JDK各个版本重大改变
我们经常使用的JDK历史变化过程是很有意思和规律的,他反映了Java的前进轨迹,也是我们与时俱进的方向。原创 2020-10-07 17:51:22 · 391 阅读 · 0 评论 -
Java监听器模式和观察者模式区别
很相似。原创 2020-09-24 22:00:00 · 3338 阅读 · 3 评论 -
Java main函数
一个简单的Java main函数签名如下:public static void main(String[] args) { System.out.println(args.length); for (int i = 0; i < args.length; i++) { System.out.println(args[i]); }}一、使用应用程序参数:1、在IDE中使用结果如下:2、打包启动java -jar x.jar x.原创 2020-09-20 10:30:47 · 410 阅读 · 0 评论 -
Java枚举
1、枚举不能继承任何类,因为编译时会隐式继承Enum类。2、编译器最终将enum处理为一个final class,枚举无法被继承。3、编译器会默认生成valutOf()方法和values()方法,你可以直接使用。4、枚举进阶使用时可以定义多个字段,需要定义带参构造函数,无参构造定义与否取决于是否使用,这点和class一致。一个最简单的枚举类public enum Company{ Apple, Tesla}public class X { public原创 2020-07-25 19:14:01 · 119 阅读 · 0 评论 -
Java中equals()和==使用|自动拆箱装箱|字符串常量池
我们先归纳一下使用的场景:1、原始数据类型的等值比较只能用==运算符2、非基本数据类型等值比较可用==和equals()方法基本原始数据类型包括byte,short,char,int,long,float,double,boolean,原始数据类型使用==时比较的是两个操作数的值,非基本数据类型的等值比较,也可以说是对象的等值比较规则如下:1、==运算符比较两个操作数对象指向的目标...原创 2018-07-26 18:43:14 · 404 阅读 · 0 评论 -
占位
首先说使用规则:ClassLoader#getResource(name)name是形如"org/apache/ibatis/io/ClassLoaderWrapper.class"的字符串且不能以正斜杠/开头。Class#getResource(name)name如果以正斜杠/开头,则加载classpath下的资源,如果不以正斜杠/开头,则加载当前目录下的资源。...原创 2018-07-19 23:17:45 · 228 阅读 · 0 评论 -
Java注解是如何工作的
Java的注解功能能够为我们节省很多源代码,其实就是用机器来批量处理事情了,那注解的工作原理是什么样的呢?其实使用了注解,肯定要有解析注解的代码,解析注解又可以分为两种,一种是运行时通过反射解析处理,一种是通过定义注解处理器编译生成新的文件,区别就是前者运行效率较后者差,前者使用较后者方便,所以不同技术手段往往具有相反的特性,可以满足不同环境下的需求。这里我们讨论下运行时注解的情况,我们知道注...原创 2019-01-18 17:46:59 · 731 阅读 · 0 评论 -
Java Copy-On-Write机制
Copy-On-Write机制往往用于在程序中往内存写数据的时候,在高并发环境下,读写需要保证线程安全,就会耗费一部分性能用来保证数据安全,java读写锁是一种优化手段,读和读并发不需要竞争,读和写,写和写才需要竞争,这样在大量读的环境下是有很大优化余地的,另外一种优化手段就是Copy-On-Write机制,当要写数据时,将原数据对象拷贝一份,在副本上进行写入,原数据对象依然可以进行读取,等到写入...原创 2019-01-08 17:45:11 · 466 阅读 · 0 评论 -
Java动态代理原理
理解动态代理,我们先将道理讲清楚,这里我们描述的都是JDK提供的动态代理技术,不是针对CGLIB的。首先我们知道,最终我们是生成了一个代理对象来替代我们塞进去的原生对象,注意这里都是对象,不是类,另外,运行时是没有生成物理文件的,但是会生成类型的元信息相关数据也即Class对象,下面我们先看看源码:public static Object newProxyInstance(ClassLoad...原创 2019-01-23 18:08:35 · 149 阅读 · 0 评论 -
Java转义字符
在书写字符串相关代码或者使用正则时总会涉及到转义字符的使用,有时会出现很多反斜杠的情况,如何理解这些,需要我们对转义字符建立系统的认知体系,首先,我们应该知道,转义字符的出现是为了能书写无法直接输入的字符,比如换行符,这类具有特殊含义的字符无法直接输入,所以就由转义字符来表达了。另外还有一点,编译器在解释字符串时,遇到反斜杠就会认为是转义字符的开始,所以如果你写的转义字符并不存在,就会报错,比如:...原创 2019-02-15 16:11:06 · 1363 阅读 · 0 评论 -
swagger使用
前后端协同开发的时候,交流的方式就是API接口,所以需要快速定义出API接口,让开发工作可以同时进行,最原始的办法就是写文档,手敲,速度不仅慢还难以修改,后来我们使用淘宝的RAP,目前已经更新到RAP2了,它可以线上设计接口,大大提升了协同开发效率,但是却没有和code联系起来,现在我们使用swagger,嵌入到项目中,接口文档和项目接口直接关联,这样的接口文档真实且及时,特别是项目开发完成后新增...原创 2019-04-05 09:43:38 · 243 阅读 · 0 评论 -
编程规约
在感情的世界,感觉能指导你走向幸福,在科学的世界,规则能让你变得可怕。编程规约背后是由历史经验得出的宝贵准则,遵守一定能得到巨大的好处。1、大量参数的构造函数是有问题的,意味着类型的职责太多,需要重构拆分。...原创 2019-09-09 23:13:15 · 119 阅读 · 0 评论 -
nohup和&启动程序区别
nohup: no hang up,忽略挂断信号sigint: signal interrupt,ctrl+c会发送此信号sighup: signal hang up,关闭终端会发送此挂断信号&: 放在执行命令最后,使启动的程序忽略sigint信号所以最终的结果就是使用nohub启动的程序可以使用ctrl+c关闭,关闭终端无法终止程序,使用&启动的程序无法使用ctr...原创 2019-01-10 21:55:37 · 2380 阅读 · 0 评论 -
Java 文件操作|流操作
我们先来看下有关流的类图:我们在使用的时候,往往需要进行转换,原创 2018-08-27 12:14:21 · 122 阅读 · 0 评论 -
Java正则表达式
先说些常规字符代表的含义. // 1字符,一定是一个,多一个少一个都不行? // 0个或一个* // 0个或多个+ // 1个或多个中括号用途:[]某个区间内所有字符 如 [a-zA-Z0-9]某几个的范围所有字符 [abcd]取非的所有字符[^a]在中括号中的字符不再有特殊的含义,匹配全部的 .和* [.][*]转义的使用首先要明白的是如果正则表达式是在字符串里,那么使用转义的话,先是编程语...原创 2018-07-03 14:51:13 · 371 阅读 · 0 评论 -
Java JIT
JIT概念JIT:Just In Time Compiler,一般翻译为即时编译器,这是是针对解释型语言而言的,而且并非虚拟机必须,是一种优化手段,Java的商用虚拟机HotSpot就有这种技术手段,Java虚拟机标准对JIT的存在没有作出任何规范,所以这是虚拟机实现的自定义优化技术。 HotSpot虚拟机的执行引擎在执行Java代码是可以采用【解释执行】和【编译执行】两种方式的,如...原创 2018-07-01 15:44:41 · 3031 阅读 · 0 评论 -
cron表达式使用
Cron表达式是一个字符串,分为6或7个域,每一个域代表一个含义,格式分别如下:Seconds Minutes Hours DayofMonth Month DayofWeekSeconds Minutes Hours DayofMonth Month DayofWeek Year每个域的取值写法如下:Seconds:可出现【, - * /】四个字符,有效范围为0-59的整数Minute...原创 2018-09-13 18:35:01 · 440 阅读 · 0 评论 -
Java线程堆栈信息|jstack|dump
1jstack PIDjstack PID > 123.txt可以查看指定进程的所有线程状态 2jmap -dump:format=b,file=123.hprof PID原创 2018-10-24 18:05:38 · 1453 阅读 · 0 评论 -
Java Double Float数值运算|精度缺失
Java中小数默认是double,整数默认int,例如你写4.0这种字面值,Java认为是double类型,你写4这个字面值,Java认为是int类型,你写float f = 4.0;Java就报错,原因有两个,一是4.0是double类型,二是double不能隐式转换为float(可以强转)。所以你要这样写:float f = 4.0f;或者:float f = (float)4.0;使用强转时...原创 2018-10-26 10:53:21 · 262 阅读 · 0 评论 -
Java Socket|IO流关闭|shutdownInput|shutdownOutput
这里直接给出结论,因为没有什么道理可讲,编码的时候不要写触犯这些规则的代码即可,OutputStream os = socket.getOutputStream();os.close();InputStream is = socket.getInputStream();is.close();类似这种关闭流的操作会导致Socket关闭,所以后续如果有对Socket的操作,都会抛出...原创 2018-09-19 22:41:15 · 2198 阅读 · 0 评论 -
Java对象模型
Java对象存在于堆内存中,具体的存储内容分为三部分:对象头、实例数据、对齐填充。原创 2018-06-30 11:21:01 · 304 阅读 · 0 评论