Code Life

boris1993的个人博客

Java 的垃圾回收算法一文中,我们知道 JVM 是根据一个对象有没有被引用来判断要不要对其进行垃圾回收的。但是,如果我们为了提升垃圾回收的效率,想要再把垃圾回收的条件更细化一些,比如只在内存非常紧张的时候才回收某些对象,那么光靠一个粗略的 “引用”,就显得心有余而力不足了。所以,在 JDK 1.2 版本之后,Java 扩充了引用的概念,将其扩充成了强引用软引用弱引用虚引用四个更细化的概念。

本文将参考《深入理解 Java 虚拟机 (第 3 版)》中再谈引用一节,简述一下这四种引用的概念,以及被引用的对象何时会被垃圾回收器回收。

阅读全文 »

在排查垃圾回收相关的问题时,一个必不可少的技能就是要能看懂 Java 的垃圾回收日志。本文将介绍打印 GC 日志相关的 JVM 参数,以及使用不同参数时 JVM 将会打印出的日志内容。

阅读全文 »

做技术,不能只知其然而不知其所以然。在知道了工具的原理之后,才能更高效的使用这个工具。在程序的世界里,源码里面没有秘密,看懂了源码,也就看懂了原理。

这次就来阅读一下 HashMap 的源码。

阅读全文 »

做技术,不能只知其然而不知其所以然。在知道了工具的原理之后,才能更高效的使用这个工具。在程序的世界里,源码里面没有秘密,看懂了源码,也就看懂了原理。

这次就来阅读一下 Object 类里面 hashCode 方法和 equals 方法的源码。

阅读全文 »

最近做了一个有点不一样的项目,它是将传入接口的业务参数以 JSON 的形式放在了一个统一的请求体里面,我要将它取出来,再反序列化到一个 Bean 里面。这样会带来一个问题,就是我不能直接使用 @Valid 注解来让框架自行校验参数的合法性,而需要手动调用 Validator 实现对 bean 的校验。

阅读全文 »

在使用 nohup 的时候,它总会打印一条 nohup: appending output to 'nohup.out' 这样的信息,并且必须敲一下回车。

因为 nohup: appending output to 'nohup.out' 这条信息是打印到 STDERR 的,所以解决的方法很简单,把 STDERR 重定向至 STDOUT 就可以了,比如这样:

1
nohup doSomething > nohup.out 2>&1 &

做技术,不能只知其然而不知其所以然。在知道了工具的原理之后,才能更高效的使用这个工具。在程序的世界里,源码里面没有秘密,看懂了源码,也就看懂了原理。

这次就来阅读一下 LinkedList 的源码。

阅读全文 »

在前后端分离的架构下,后端通常是一个 RESTFul 的接口,而因为 HTTP 的响应码数量有限,无法灵活的反映出接口执行的各种结果,在这种情况下,就需要通过自定义的结构来表达接口最终的状态和返回的信息。而我正好最近在一个项目中实现了一个基于 ControllerAdvice 的统一请求响应的功能,在这里记录一下实现的方式。

阅读全文 »

application.yml 中添加如下配置,即可在 Spring Boot 项目中开启 HTTPS。

1
2
3
4
5
6
7
8
9
10
11
12
13
server:
# 如果有需要的话,配置应用监听HTTPS的默认端口
port: 443
ssl:
# 我把证书放在了 resources/cert/certificate.pfx下
# 使用时需要按照实际情况修改下面的路径
key-store: classpath:cert/certificate.pfx
key-store-password: pA55w0Rd
# 证书类型需要按照实际类型填写
# 本例使用PKCS12格式,所以写PKCS12。如果是JKS格式,那么需要填写JKS
# 因为PKCS12比JKS有更好的通用型,所以个人建议使用PKCS12格式
key-store-type: PKCS12
enabled: true
阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 业务异常基类
*/
public abstract class BaseBizException extends RuntimeException {
public BaseBizException(String message) {
super(message);
}

/**
* 覆盖fillInStackTrace()方法,抹掉异常中的堆栈跟踪信息
*/
@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
}
0%