JAVA
文章平均质量分 69
今天例外
这个作者很懒,什么都没留下…
展开
-
几种常见的JAVA日志框架的简单介绍
接口级别的Java日志框架:slf4j 和common-log实现级别的:JDK自带的, log4j, log4j2, logback(这个是slf4j旗下的具体实现)为什么会有接口呢?是为了方便日志框架的选择:slf4j 和common-log 都能自动识别你要用的日志的框架(也就是实现级别的日志框架),大致的原理是这两个接口会根据你引进的jar包来调用相应的原创 2017-12-20 17:19:24 · 1428 阅读 · 0 评论 -
日志配置文件详解-logback,log4j
常见的日志配置文件详解原创 2022-08-19 16:49:57 · 22954 阅读 · 0 评论 -
JAVA8特性之函数式接口-@FunctionalInterface注解
JAVA8的新特性函数式接口的介绍和使用原创 2022-08-08 09:23:04 · 23062 阅读 · 0 评论 -
NIO实现聊天场景
Server端代码原创 2021-06-07 11:26:09 · 21761 阅读 · 0 评论 -
从Servlet到SpringMVC演变过程详解(ServletContext 和WebApplicationContext, ApplicationContext给你安排上了)
无图言屌:以前我们用servlet进行编程:所有的配置都会在配置在web.xml里面,其实类似于现在的任务编排我们会把我们的Filter和Servlet还有Listener,初始化的一些参数都写到web.xml中,然后相信大家也都看到了上面的这张图,里面有两个Context,这两个都是servletcontext,对应的是两个web应用,一个servletcontext对应的是...原创 2019-06-06 17:13:55 · 20541 阅读 · 1 评论 -
Spring循环依赖-出现的原因,发现机制和解决方法
SpringBean依赖注入——循环依赖Spring循环依赖出现的原因循环依赖的现象就是Spring的容器在创建Bean的生命周期中,出现了相互依赖的场景,A->B->A,比如上面A的实例属性值是B的实例,B的实例属性值也是A的实例,这样A在进行初始化并且属性赋值的时候发现依赖B,就去实例化B,发现在给B初始化进行属性赋值的时候,也依赖A,这样就出现了最简单的循环依赖。针对上面的问题:首先我们要知道循环依赖只发生在作用域是单例的场景里面,即scope=“singleton”,如原创 2021-02-26 16:41:06 · 21727 阅读 · 0 评论 -
永久代,方法区 和 元空间之间的关系
永久区(PGS)JVM内存结构分为 堆,方法区,栈,程序计数器,本地方法区。 这些都是逻辑内存区域划分,实际上不同的虚拟机的实现方式是不同的,我们常用的也是普及率最高 的虚拟机HotSpot,只有他有永久代这个概念。PGS算是方法区实现,他和堆的内存是连续的一个整体,但是逻辑上是隔离的,所以在垃圾回收的时候,常常说新生代,老年代时,也会说到永久代。PGS主要存储,对象的Class实例和Meta信息,在运行时,不会对PGS进行垃圾回收。当第一次使用类的静态方法(包括构造方法)时,JVM会将对应的原创 2020-07-23 17:21:02 · 23476 阅读 · 0 评论 -
JAVA的四种引用类型的作用——强引用、软引用、弱引用、虚引用
Java四种引用类型,按照引用类型的强弱顺序分别是强引用软引用弱引用虚引用背景:我们希望有这样一种场景像缓存一样,即:在内存还足够时,希望能够保留这些对象,当内存不够时,则删除这些对象(当然是由垃圾回收完成)。强引用:即我们日常的操作,像:Object obj=new Object(); 有一个引用指向这个对象。只要强引用还存在就不会被垃圾回收线程回收了。软引用:即那些不是必需的对象,进行垃圾回收时,如果内存够,被垃圾回收程序标记,并在第二次垃圾回收时进行回收,如果内存不够就会原创 2020-06-30 17:28:40 · 20145 阅读 · 0 评论 -
线程池参数和状态详解
线程池的状态转换原创 2020-06-05 17:16:13 · 19610 阅读 · 0 评论 -
线程控制—优雅的结束线程
线程结束的几种方式:执行完正常的逻辑,正常结束。提前结束的方式有以下几种:先了解几个比较常见的方法 //中断线程(实例方法)public void Thread.interrupt();//判断线程是否被中断(实例方法)public boolean Thread.isInterrupted();//判断是否被中断并清除当前中断状态(静态方法)public static boolean Thread.interrupted();这里中断线程的场景大致可以分为两类:线程阻塞时中原创 2020-06-01 16:37:46 · 19587 阅读 · 0 评论 -
JAVA Try Catch Finally 代码执行顺序
public void test () { //1 throw new RuntimeException(); //2 }基本知识如果有错误,不进行try-catch则会编译报错。 public void test () { try { // 1 throw new NullPointerException(); //2 } catch (Run...原创 2020-05-27 18:22:09 · 19606 阅读 · 0 评论 -
ConcurrentHashMap JDK1.8的原理详解
版本JDK 1.8(内含bug)数据结构:ConcurrentHashMap的数据结构和HashMap是一样的哈希表,上面数组,数组的每个数据单元下面是链表或者红黑树,只不过在ConcurrentHashMap上用了大量的CAS操作,尤其是在putVal()的时候,ConcurrentHashMap通过CAS和Synchronized来保证多线程数据安全。主要变量介绍: ...原创 2020-01-19 14:19:41 · 20743 阅读 · 0 评论 -
计算机中的位运算—正数,负数,原码,反码,补码
计算机中正数是按照原码存储的,负数是按照补码存储的下面举例 1 和-1,按照8位存储。:正数:正数的原码,反码,补码都和原码一样,即正常的二进制表示。负数:原码就是正常的二进制表示。反码就是原码的按位取反(符号位不变),补码是在反码的基础上+1。1-1原码0000 00011000 0001反码0000 00011111 1110补码0000 00011111 11111 +...原创 2020-01-14 17:16:38 · 21557 阅读 · 0 评论 -
ConcurrentHashMap JDK1.7的原理详解
ConcurrentHashMap的数据结构视图数据结构图解析上面就是ConcurrentConcurrentHashMap的数据结构图原创 2020-01-03 11:20:33 · 19672 阅读 · 0 评论 -
I/O操作—计算机的零拷贝和Netty的零拷贝
零拷贝零拷贝的拷贝指的是什么拷贝传统读操作传统的读操作:当应用发起一个读取文件的操作时,请求会先经过内核,然后内核去读取磁盘,进行交互,数据会从磁盘拷贝到内核的缓冲区中,这个copy动作由DMA完成,整个过程基本上不消耗CPU,但是当数据拷贝到系统的内存空间后,从系统的内存空间拷贝到应用的空间时,这里就是一个CPU copy的动作,将数据从内核缓冲区中拷贝到应用缓冲区中这个copy动...原创 2019-11-05 17:23:44 · 19699 阅读 · 0 评论 -
JAVA的SPI机制究竟是什么玩意儿?为什么要有?怎么使用呢?
SPI是什么玩意儿: SPI:全名为Service Provider Interface,我对于该机制的理解是为接口寻找服务实现类。现在公司的系统都是进行了模块的划分,系统抽象为多个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。为什么要有它:面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里...原创 2019-06-10 23:43:04 · 21610 阅读 · 0 评论