Java
文章平均质量分 77
Java
CoderLi_
微信搜一搜:CoderLi
展开
-
Lombok builder 默认值
但是在 Lombok builder 模式默认值这个地方我却不止跌倒两次了。一个人不可能在同一个地方跌倒两次。原创 2024-04-27 22:07:23 · 219 阅读 · 0 评论 -
GC 日志
当使用本地方法 JNI 函数访问 JVM 中的字符串或数组数据,为保证数据安全性和准确性,获取数据(GetStringCritical)和释放数据(ReleaseStringCritical)这段过程必须在 “critical region”(临界区)执行 如果在执行临界区这段时间发生了 GC,JVM 会阻断 GC 的发生,也会阻断其他线程进入临界区,同时调 ReleaseStringCritical。当最后一个临界区的线程退出后,JVM 再进行一个 GC,即 GCLocker Initiated GC。原创 2023-04-06 22:13:58 · 486 阅读 · 1 评论 -
Java-随机数
SecureRandom 阻塞导致生产故障原创 2023-02-05 16:17:12 · 1590 阅读 · 0 评论 -
静态方法杂谈
何时使用静态方法一个 stackoverflow 上面的问题、一个高赞的回答也是比较认可的答案调用此方法是否有意义,即使尚未构造任何对象假设 Car 类中有如下方法public class Car { double convertMpgToKpl(double mpg){ ........ }}那么这个方法将是静态的、因为将 Mpg 转换为 Kpl 我们不需要创建 Carvoid setMileage(double mpg)但是该方法不能是静态的、因为该方法的功能是为原创 2022-05-16 12:00:00 · 89 阅读 · 0 评论 -
Java Type
Type 体系Class这个我们是最常见的。我们经常会问某个对象/变量是什么类型、我们经常回答都是对应一个具体的 Classpublic class ClassMain { private Integer age; private String name; private List<String> alias; public static void main(String[] args) { ClassMain classMain = ne原创 2022-05-15 10:04:09 · 140 阅读 · 0 评论 -
package-info.java
package-info.java 文件估计大家见过但是自己却很少去创建和使用它、因为对于一般应用来说可能真的太少见了。它的作用主要是三个描述包使用注解修饰包、达到修饰该包下的类声明包中使用的类和常量(这个比较少用)描述包package-info.java 文件/** * 我是描述信息 */package com.demo.test.info;生成 JavaDoc 可以看到包的注释在说明列中使用注解修饰包假如某个包下、我们希望所有的返回值都应该非 Null、并且当我们编码的原创 2022-05-14 10:29:38 · 655 阅读 · 0 评论 -
package-info.java
package-info.java 文件估计大家见过但是自己却很少去创建和使用它、因为对于一般应用来说可能真的太少见了。它的作用主要是三个描述包使用注解修饰包、达到修饰该包下的类声明包中使用的类和常量(这个比较少用)描述包package-info.java 文件/** * 我是描述信息 */package com.demo.test.info;生成 JavaDoc 可以看到包的注释在说明列中使用注解修饰包假如某个包下、我们希望所有的返回值都应该非 Null、并且当我们编码的原创 2022-12-01 15:22:55 · 648 阅读 · 0 评论 -
为什么不要使用 import *
Java 存在两种包的导入机制单类型导入、这个也是推荐并且也是常见常用的按需类型导入、这个是不推荐的、也就是我们常说的 import xxx.xx.*单类型导入仅仅是导入一个接口或者类、而按需导入也是仅仅导入当前类所需要使用的类、两者的差别只是对类文件的定位算法不一样。Java 编译器会从启动目录、扩展目录以及用户类路径目录去定位需要导入的类。这三个目录也是我们所说的类的顶级目录。编译器定位类文件的方法大概如下顶层路径名(也就是目录) \ 包名\文件名.class这三者加起来就是一个绝对原创 2022-03-29 07:33:00 · 1830 阅读 · 0 评论 -
Java 内省
何为 JavaBean ?一种特殊的类、主要用于传递数据信息、这种类中的方法主要用于访问私有的字段、且方法符合某种命名规则。JavaBean 的特征属性都是私有的存在无参构造方法私有属性的 getter/setter 方法分别为 getXxx/setXxxgetter 方法必须有返回值且无入参、setter 方法必须有入参且无返回值符合这些特征的类、称为 JavaBean。JDK 提供了一套 API 用来访问某个属性的 getter/setter 方法、这个就是 Java 内省。内省与原创 2021-11-30 20:24:58 · 1037 阅读 · 0 评论 -
优雅停机 Java
什么叫优雅停机简单说就是、在对应用进程发送停止指令之后、能保证正在执行的业务操作不受影响。应用接收到停止指令之后的步骤应该是、停止接收访问请求、等待已经接收的请求处理完成、并能成功返回、这时才真正停止应用。就Java 语言生态来说、底层技术是支持的、所以我们才能实现在 Java 语言上各个 Web 容器的优雅停机。关于 kill 命令在 Linux 中 kill 指令负责杀死进程、其后可以紧跟一个数字,代表信号编号 signal。执行 kill -l 可以打印出所有的信号编号。kill -l原创 2021-03-06 15:24:06 · 864 阅读 · 0 评论 -
关于 FastJson
因为公司提供的基础框架使用的是 FastJson 框架、而部门的架构师推荐使用 Jackson。所以特此了解下 FastJson 相关的东西。FastJson 是阿里开源的 Json 解析库、可以进行序列化以及反序列化。https://github.com/alibaba/fastjson最广为人所知的一个特点就是快fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。贴上几张对比图从上面可以原创 2021-01-22 23:50:16 · 835 阅读 · 0 评论 -
万字面试知识点助力金九银十
关注微信公众号:CoderLi,回复面试获取PDF版本说明本文档为本人整理网上资源以及自己的一些知识点、为面试准备的。当时整理的时候并没有考虑到发布出来、所以对于引用整理的网上的一些文章链接可能并没有列出来、抱歉!如有请评论告知,谢谢引用周志明-深入理解JVM(第三版)Redis 深度历险深入理解 KafkaMysql 技术内幕高性能Mysqlpaxos 到 ZookeeperSpring Cloud 微服务实战https://juejin.im/post/6844903860658原创 2020-10-07 12:50:19 · 521 阅读 · 0 评论 -
扯淡 Java 集合
大致分类:List、Set、Queue、MapIterableCollection 接口中继承 Iterable 接口。这个接口为 for each 循环设计、接口方法中有返回Iterator对象public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objects.re...原创 2020-07-07 23:13:41 · 117 阅读 · 0 评论 -
Java 序列化
读完这篇文章你将会收获到Serializable和 Externalizable的使用序列化 ID问题静态变量序列化父类的序列化ArrayList序列化:为啥 size被序列化两次?序列化对单例的破坏序列化就是将对象的状态信息转为可以存储或者传输的形式的过程比如说将对象序列化之后存储在硬盘上比如说将对象序列化之后返回给调用方反序列化则是序列化的反过程Serializable我们在 Java中经常借助 Serializable和 ObjectOutputStream和 Obj.原创 2020-06-12 16:03:20 · 265 阅读 · 0 评论 -
Java synthetic
读完这篇文章你将会收获到synthetic fieldssynthetic methodsynthetic class概述上一篇 Java 枚举 提及到编译成 class文件之后、编译器会在枚举类里帮我们生成一个 VALUES的静态数组 , 这种编译器生成的都有一个 flag叫做 synthetic那么 synthetic的定义是什么、什么情况下才会有这个 flag?由编译器生成的,在源代码中没有出现的,都会被标记为 synthetic。当然有一些例外的情况:默认的构造函数、类的初始化原创 2020-06-10 13:01:53 · 276 阅读 · 0 评论 -
Java 枚举
读完这篇文章你将会收获到枚举类的真正实现原理为啥可以使用枚举类实现单例模式Class类中对枚举实例的缓存概述枚举是我们日常开发经常用到的一个类型 , 比如说我们有个用户系统 , 那么我们怎么判断这个是一个我们的忠实用户或者说是一个忠实粉丝呢 ? 我们就定义如下的行为枚举public enum BehaviorEnum { /** * 关注 */ FOLLOW{ @Override void action() {原创 2020-06-09 09:51:40 · 185 阅读 · 0 评论 -
Nested Classes
static nested class ,inner class local class anonymous class 介绍原创 2016-08-09 16:02:52 · 429 阅读 · 0 评论 -
String 与 intern理解
1.public static void main(String[] args) { String s = new String("abc"); System.out.println(s == s.intern());}在这个代码中,首先创建的String对象是“abc”这个string字面量,然后才是new String 这个对象,为什么?因为在编译期,“abc”就已经原创 2016-05-07 14:53:52 · 421 阅读 · 0 评论 -
JVM运行时数据区域
基本概念:每运行一个java程序,就会有一个对应的JVM实例和一个进程,一个进程可以包含多个线程。每个JVM实例(进程)都有自己的堆,每个线程都有自己私有的栈。进程所创建的所有类的实例(也就是对象)或数组(指的是数组的本身,不是引用)都放在堆中,并由该进程所有的线程共享。每一个对象的存储内存都是在堆中分配,而引用就是在栈中,栈里的引用生命周期结束后,马上出栈,而堆中的对象就会等待GC的回收。原创 2016-05-07 10:05:56 · 909 阅读 · 0 评论 -
初识volatile
有时候仅仅为了一个或者两个的实例域就是用synchronized的话,开销就会很大,而Java为我们提供了另一种同步的免锁机制,volatile。Volatile可以看成是synchronized的轻量级,功能也仅仅是synchronized的一部分,认识volatile之前,先认识Java内存模型和Java的原子性,可见性,有序性Java的内存模型在Java虚拟机中,每一个线程私原创 2016-09-13 22:24:40 · 532 阅读 · 0 评论 -
对象的容纳
对象的容纳数组在两方面可以将数组与其他的集合类区分开来,效率和类型。对于Java来说,访问一组对象的最有效的方法莫过于是数组,数组实际上只是一个简单的线性序列,这样使得它的访问速度非常的快。但是却带来了另一个的问题,就是数组的大小一旦创建之后就不能改变(除非在它满的时候判断重新创建一个新的更大的数组,将旧数组全部移过去)。关于类型,我们知道,在Java中List,Set最开始没有采用泛型的原创 2016-09-15 14:58:27 · 291 阅读 · 0 评论 -
String.intern();
String.intern()前话其实以前已经被这个东西迷惑了很久的,现在已经是第三次去看,去理解这个东西了,网上很多的答案,但最近终于找到一些非常好的资料,所以自己就写下记录。Step One环境:JDK1.7 IDE:IJ 在1.7中运行时常量池已经在head中 code ①String s1 = "hello world"; 那么我们可以通过查看.class文件中,可以看到在.cla原创 2016-11-08 22:37:49 · 292 阅读 · 0 评论 -
Java Exchanger
简介使两个线程之间传输数据,可以传输任意的数据类型 exchange()阻塞特性调用exchange方法后盖线程会等待其他线程来交换数据,一直阻塞等待下去,直到来交换获取 public static void main(String[] args) { Exchanger exchanger = new Exchanger(); ExchangerThreadA exc原创 2017-11-23 10:38:17 · 244 阅读 · 0 评论 -
学习摘抄Thread
大神原文链接Thread和Runnable的介绍Runnable是一个接口里面只有一个方法public interfaceRunnable { public abstractvoid run();}Runnable的作用就是实现多线程,可以使一个类实现这个接口,比如A类实现了Runnable,然后new Thread(new A)方式创建线程Thread是原创 2016-09-10 15:20:23 · 538 阅读 · 0 评论