快速熟悉业务的技巧总结

151 阅读2分钟

怎么用IDEA快速查看类图关系

IDEA插件:arthas

阿里巴巴开源的应用诊断利器Arthas Java 应用诊断利器 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

  • 线上排查利器。

IDEA插件:jstatk

查看Java程序堆内存的插件。

方法抽取

  • 优化三级分类,优化前 对二级菜单的每次遍历都需要查询数据库,浪费大量资源 优化后 仅查询一次数据库,剩下的数据通过遍历得到并封装 image.png

版本问题

类似这样,不写版本号,由父项目来控制,是什么意思。 image.png

  • 引入redis或其他中间件的starter后,就会有相应的自动配置。比如这里搜索redisAutoConfigration。以后可以搜索xxAutoConfigration。

image.png autoconfig会把redis相关的配置放在RedisProperties.class中。 image.png 而配置redis,就要来到我们的配置文件当中。

IntelliJ IDEA中 查看某个类中的所有方法

  • 方法一:alt + 7 (可以查看类的字段、属性、方法,是否继承等)
  • 方法二: ctrl + F12

把一个对象或对象数组,转换成json,使用fastjson。

String valueJson = JSON.toJSONString(parentCid);

序列化与反序列化机制

这是把一个对象转换成json字符串。
String valueJson = JSON.toJSONString(parentCid);

image.png

把从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,这个是堆外内存溢出,很严重,一般是内存不够导致的,线上很多运行时间长了也会发生类似情况。

image.png

原因分析

image.png

redisTemplate和jedis、letuce的联系

image.png image.png

缓存击穿的解决:加锁逻辑梳理

  • springboot中,所有组件在容器中的对象,都是单例的。

image.png

  • 几种本地锁机制:几种锁机制:synchronized和JUC(Lock) 这些都是本地锁,只所当前进程。

image.png

image.png

image.png

image.png

普通的分布式锁,效果类似JUC包下的可重入锁。 JUC包下的一些高级锁:读写锁,闭锁,信号量