随笔分类 - 技术点
摘要:周五晚上告警群突然收到了一条告警消息,点开一看,应用 fullGC 了。 于是赶紧联系运维下载堆内存快照,进行分析。 内存分析 使用 MemoryAnalyzer 打开堆文件 mat 下载地址:https://archive.eclipse.org/mat/1.8/rcp/MemoryAnalyze
阅读全文
摘要:背景介绍 最近要改一个导出的功能,在原有的基础上,在导出一份明细数据,要求导出内容加在原有 excel 的第二个 sheet 上。考虑到数据量还比较大,干脆引入阿里的 EasyExcel 来做。 下面我先上最终代码,再来说说我遇到的坑有哪些 代码实战 public String doHandle()
阅读全文
摘要:前情提要 我们在开发中经常碰到这样的场景,查出两个 list 集合数据,需要根据他们相同的某个属性为连接点,进行聚合。但是平时我们使用的时候关注过性能吗?下面让我们一起来看看它的表现如何。 来个例子 我们现在有两个 List集合,需要根据他们相同的 personId 进行聚合处理,我们很容易想到的写
阅读全文
摘要:背景介绍 公司最近做分库分表业务,接入了 Sharding JDBC,接入完成后,回归测试时发现好几个 SQL 执行报错,关键这几个表都还不是分片表。报错如下: 这下糟了嘛。熟悉 Sharding JDBC 的同学应该知道,有很多 SQL 它是不支持的。官方截图如下: 如果要去修改这些复杂 SQL
阅读全文
摘要:一、并行程序开发优化 1、Future 设计模式 public class Client { public Data request(final String queryStr){ final FutureData future=new FutureData(); new Thread(){ pub
阅读全文
摘要:一、Amdahl定律 加速=优化前耗时/优化后耗时比 公式图: 二、设计模式 1、单例模式 静态内部类的方式: /** * 内部类的单例模式 */ public class StaticSingleton { private StaticSingleton(){ System.out.println
阅读全文
摘要:ShardingJdbc 怎么处理写完数据立即读的情况的呢? 写在前面 我本地使用了两个库来做写库(ds_0_master)和读库(ds_0_salve),两个库并没有配置主从。 下面我就使用库里的 city 表做实验。主库的 city 表没有数据,而从库的 city 表就一条数据 我们讨论 4 种
阅读全文
摘要:前言 在一次需求的开发过程中,发现一个对象插入数据库时某个字段总是为空。 版本:lombok:1.18.24、mapstruct:1.5.2.Final 简化后的代码如下: @Autowired private PersonService personService; public void tes
阅读全文
摘要:一、Redis持久化策略 1.RDB 每隔几分钟或者一段时间会将redis内存中的数据全量的写入到一个文件中去。 优点: 因为他是每隔一段时间的全量备份,代表了每个时间段的数据。所以适合做冷备份。 RDB对redis的读写影响非常小,因为redis主进程只需要fork一个子进程进行磁盘IO操作就行了
阅读全文
摘要:简易的redis分布式锁 加锁: set key my_random_value NX PX 30000 这个命令比setnx好,因为可以同时设置过期时间。不设置过期时间,应用挂了,解不了锁,就一直锁住了。 解锁: if redis.call("get",KEYS[1])==ARGV[1] then
阅读全文
摘要:ThreadLocal基础部分 ThreadLoal的作用 保存线程的独立变量,即每个线程维护一份。这种变量在线程的生命周期内起作用,减少同一个线程内多个函数之间公共变量传递麻烦。 使用场景 需要给不同的线程保存不同的信息时。 基础使用 public class TestThreadLocal {
阅读全文