IDEA插件:arthas
阿里巴巴开源的应用诊断利器Arthas Java 应用诊断利器 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
- 线上排查利器。
IDEA插件:jstatk
查看Java程序堆内存的插件。
方法抽取
- 优化三级分类,优化前 对二级菜单的每次遍历都需要查询数据库,浪费大量资源 优化后 仅查询一次数据库,剩下的数据通过遍历得到并封装
版本问题
类似这样,不写版本号,由父项目来控制,是什么意思。
- 引入redis或其他中间件的starter后,就会有相应的自动配置。比如这里搜索redisAutoConfigration。以后可以搜索xxAutoConfigration。
autoconfig会把redis相关的配置放在RedisProperties.class中。
而配置redis,就要来到我们的配置文件当中。
IntelliJ IDEA中 查看某个类中的所有方法
- 方法一:alt + 7 (可以查看类的字段、属性、方法,是否继承等)
- 方法二: ctrl + F12
把一个对象或对象数组,转换成json,使用fastjson。
String valueJson = JSON.toJSONString(parentCid);
序列化与反序列化机制
这是把一个对象转换成json字符串。
String valueJson = JSON.toJSONString(parentCid);
把从redis查到的json字符串,转换成我们要的map对象。
Map<String, List<Catelog2Vo>> result =
JSON.parseObject(catalogJson,new TypeReference<Map<String, List<Catelog2Vo>>>(){});
匿名内部类实现TypeReference
JSON.parseObject方法需要传递new TypeReference,这个告诉他把json解析成什么对象。
而这个TypeReference的构造函数是个protected受保护的,需要用一个实现类来new对象,我们这里为了方便,使用匿名内部类来实现。
new TypeReference<MAP_要转换的类型>(){}
redis操作导致堆外内存溢出OutOfDirectMemoryError
引入redis作为缓存后,保存:OutOfDirectMemoryError,这个是堆外内存溢出,很严重,一般是内存不够导致的,线上很多运行时间长了也会发生类似情况。
原因分析
redisTemplate和jedis、letuce的联系
缓存击穿的解决:加锁逻辑梳理
- springboot中,所有组件在容器中的对象,都是单例的。
- 几种本地锁机制:几种锁机制:synchronized和JUC(Lock) 这些都是本地锁,只所当前进程。
普通的分布式锁,效果类似JUC包下的可重入锁。 JUC包下的一些高级锁:读写锁,闭锁,信号量