What a Life

「Live for yourself」

一次应用卡死,无响应的排查过程

问题情形 springboot + jpa + querydsl + mysql + druid 的web应用,服务启动后,几次请求之后便无响应,甚至请求都没有进到controller断点,无任何报错。 排查过程 jps 查看应用进程号 (可选步骤:top -Hp 进程号 显示该进程下的线程) jstack -l 进程号 查看该进程的堆栈 搜索应用包名关键字,定位到具...

强软弱虚引用

作用 以代码的方法控制对象的生命周期。 以下四种引用类型对象生命周期由长至短。 强引用 new的方式默认就是强引用。 只要强引用存在,即使OOM,也不会被gc回收。 只有当显式置为null,切断了引用与对象的联系,才会被回收。所以经常会在一些地方看到 xxx = null的写法,就是提醒jvm该对象已经不需要了,可以进行回收。 软引用 gc后如果内存空间还不够用,便会...

内存泄漏

内存泄漏的原因 一般有以下几种: static字段,尤其是static的集合类型 static字段的生命周期和jvm的生命周期一样长,随着类的加载被加载,存放于方法区内,只要类没有被卸载,就不会被gc回收。 所以对于static字段的使用应该最小化,尤其是大容量的集合类型,对于不需要全生命周期的对象使用完毕以后应该及时清理或移除。 ...

ConcurrentHashMap

为什么 HashMap 线程不安全? HashMap 从设计之初就不是用在多线程环境下,内部所有操作都没有同步。 随便举两个例子: 哈希碰撞时值可能会被覆盖 以 put 为例,部分源码如下: 1 2 3 4 5 6 7 8 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, ...

MySQL学习笔记(十二):join

先说个结论,join的优化思路都是尽量让被驱动表上join的字段用上索引。 所以,分析join也从被驱动表上join字段有没有索引两种情况来分析。 可以使用被驱动表的索引 NLJ-Nested Loop Join 这是一种最自然的算法,假设由我们来实现join首先也会想到这种方法。 以 select * from t1 join t2 on t1.a=t2.a 为例,t2.a 上有...

(转载)全网最全 | MySQL EXPLAIN 完全解读

转载自:https://www.itmuch.com/mysql/explain/#filtered EXPLAIN作为MySQL的性能分析神器,读懂其结果是很有必要的,然而我在各种搜索引擎上竟然找不到特别完整的解读。都是只有重点,没有细节(例如type的取值不全、Extra缺乏完整的介绍等)。 所以,我肝了将近一个星期,整理了一下。这应该是全网最全面、最细致的EXPLAIN解读文章了,...

SpringMVC方法映射原理解析

HandlerMapping接口 package:spring-webmvc。 顶级接口。 用于定义请求和处理对象之间的映射关系。 主要方法: 1 HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; 主要实现类:HandlerMapping(接口)-> Abstrac...

Mybatis-plus 源码解析二:一级缓存和二级缓存

mybatis-plus本身不提供缓存功能,一级缓存和二级缓存是mybatis中的实现 一级缓存 又称本地缓存。在同一个 SqlSession 内可以对相同sql的执行结果进行缓存。 1 2 3 4 5 6 7 @Test public void testFirstLevelCacheOnlyQueryOnce() { SqlSession session = ...

Springboot中自定义Jackson命名转换策略

这篇文章来源于这么一个需求:前端传递过来的json格式不统一,有下划线格式的、驼峰格式的,需要都能正确反序列化。而序列化则统一采用驼峰格式。 如果反序列化和序列化都采用同一种格式,则直接可以使用内置的 com.fasterxml.jackson.databind.PropertyNamingStrategy,它有如下几种预定义的属性命名策略: SNAKE_CASE UPPER_...

Springboot中校验Enum

方式一:全局异常处理 + @JsonCreator 直接监听 HttpMessageNotReadableException 异常,在全局异常处理器中判断、整理异常信息,简单粗暴,如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @ExceptionHandler(HttpMessageNotReadableException.c...