随笔分类 - Language/Java
摘要:Jackson和Fastjson(目前推荐用fastjson2)都是Java平台非常流行的JSON库,它们在性能方面不分伯仲,差距并不明显。如果是出于性能方面的考虑,任选其一皆可。 如下是测试相关参数,配置及代码: Fastjson:2.0.60 Jackson:2.20.1 添加如下依赖: <!-
阅读全文
摘要:## 写在前面 今天在阅读`ThreadPoolExecutor`源码的时候觉得有些地方理解起来似是而非,很别扭!最后才猛然发现,原来是我自己的问题:没有真正理解Runnable和Thread的含义! 我之前对于`Runnable`和`Thread`理解的误区在于:“Runnble和Thread是实
阅读全文
摘要:## Java SPI机制概述 先给出结论:“Java的SPI是一种服务发现机制,用于约定接口和动态发现实现类,体现了分层解耦的思想”。 Java的SPI机制常用于框架扩展或组件替换,最常见的Java SPI应用就是JDBC Driver,JDK提供了`java.sql.Driver`接口,却将具体
阅读全文
摘要:## 如何使用 `java.util.concurrent.CyclicBarrier`是Java并发并发编程中的线程同步工具类,基于`java.util.concurrent.locks.ReentrantLock`实现。 `CyclicBarrier`工具类主要应用在如下场景:让一组线程同时到达
阅读全文
摘要:`java.util.concurrent.CountDownLatch`是Java并发并发编程中的线程同步工具类,基于AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)实现。 `CountDownLatch`工具类主要应用在如下场景
阅读全文
摘要:概述 为了增强邮件内容展示的样式,可以将普通的文本邮件转换为HTML内容格式。 在Java中,可以通过页面模板技术来实现。具体来说,可以使用Thymeleaf模板。 具体实现 首先,在项目中引入Thymeleaf依赖: <dependency> <groupId>org.thymeleaf</gro
阅读全文
摘要:JDK自带 HTTPURLConnect:功能单一 Apache HttpClient https://hc.apache.org/index.html 是一个比较古老的HTTP框架,使用非常普遍。 OkHTTP https://square.github.io/okhttp/ HTTP框架新秀,具
阅读全文
摘要:Java语言已经有许多非常成熟的开源基础类库,封装了日常开发中的各种常用操作,如:对象判空,字符串编码,本地缓存等等。 可以直接在项目中引入对应类库使用即可,或者参与完善相应类库的方法。 现将常用的基础类库整理如下,供使用参考。 JDK JUC工具包 java.util java.util.conc
阅读全文
摘要:使用jackson-databind可以将JavaBean对象属性转换为Map集合。 添加配置依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId
阅读全文
摘要:BUG现场 一个线上项目之前一直运行得很稳定,从没出过数据错误的问题,但是在2021.12.26这天却“意外”地出现了数据计算错误。 刚开始一头雾水,不知道是什么问题,后来经过日志排查才定位到原来是日期格式化引起的问题,原本应该是“2021-12-26”日期字符串,但是格式化为“2022-12-26
阅读全文
摘要:问题描述 最近在一个项目上开发的接口与业务方联调时计算参数签名总是对不上,经过排查后定位到原因: 1.父类定义的属性列表,全部为public类型 2.子类中未定义新的属性,所有属性都继承自父类 3.在计算签名时传递的是子类对象,子类对象使用反射方式调用getDeclaredFields()方法无法获
阅读全文
摘要:目录 "理解停止Java进程的本质" "应该如何正确地停止Java进程" "如何注册关闭钩子" "使用关闭钩子的注意事项" "信号量机制" "总结" 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境,即:JVM,启动Java进程即启动了一个JVM。 因此,所谓停止Java进
阅读全文
摘要:起因 最近做的一个小项目,因为要涉及到批量部署,每次在部署之前都需要在各个主机上先安装jdk环境(为了使用jdk自带的工具如jps等,所以没有单纯安装jre),但是因为jdk文件太大(以jdk 8u161 linux x64.tar.gz文件为例,大小为:189.8 MB),每次花费在文件拷贝上的时
阅读全文
摘要:编译VisualVM源码解决乱码问题 起因 今天在使用VisualVM对测试服务器进行JVM监控的时候,发现所有统计图的横纵坐标都是显示乱码(小方块),即使我的Ubuntu系统使用的是英文语言环境.奇怪的是整个VisualVM软件的其他地方都是显示正常的,不知道是什么原因. 之前在Windows 7
阅读全文
摘要:什么是Java NIO Java NIO是从JDK1.4开始引入的一个新的IO接口。 Java NIO包含三大核心组件:Channel,Buffer,Selector。三者相互配合,才给NIO带来了比BIO更加高效的处理能力。 Channel类图 Buffer类图 Selector类图 三者的关系可
阅读全文
摘要:目录 "类图" "源码解读" "总结" 类图 在正式分析HashMap实现原理之前,先来看看其类图。 源码解读 下面集合HashMap的put(K key, V value)方法探究其实现原理。 将上述HashMap实现插入数据的过程以插入4个数据为示例描述如下: 1.插入第一个数据时,初始化Has
阅读全文
摘要:目录 "问题描述" "解决思路" "在IntelliJ IDEA中调试JDK源码" "在eclipse中调试JDK源码" "总结" 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理。于是在IntelliJ IDEA中单步跟踪调试HashMap的put(K key,
阅读全文
摘要:写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用
阅读全文
摘要:UUID是什么 UUID的全称为:Universally Unique IDentifier,也被称为GUID(Globally Unique IDentifier)。是一种由算法生成的唯一标识,它实质上是一个128位长的二进制整数。通常表示成32个16进制数组成的字符串,如:21EC2020-3A
阅读全文
摘要:什么是范型 简言之,范型是Java支持在编译期进行类型检查的机制。 这里面包含2层含义:其一,可以使用范型进行类型检查;其二,在编译期进行类型检查。 那么,什么叫做在编译期进行类型检查?可以在运行时进行类型检查吗?带着这些疑问,我们一步步深入范型。 范型有什么用途 1. 使用Java集合类时明确指定
阅读全文

浙公网安备 33010602011771号