- 博客(99)
- 收藏
- 关注
原创 【GC日志查看】
gc日志:看法简述:堆空间示图: 事件类型: :这表示这是一个垃圾回收事件,具体原因是分配失败(即没有足够的内存来分配新对象)。 垃圾回收范围: :这是年轻代(PSYoungGen)的垃圾回收详情。 是垃圾回收前年轻代使用的总内存。 是垃圾回收后年轻代使用的总内存。 是年轻代的总大小。 整体堆信息: :整个Java堆的信息。
2025-04-29 15:02:14
448
原创 PageHelper编写注意及内存泄漏处理
原因:确保分页参数被消费掉,并正确执行分页参数清理操作。2:分页参数被消费后,抛出异常(无内存泄漏)1:分页参数被消费前,抛出异常(内存泄漏)2:执行sql时抛出异常 (无内存泄漏)
2025-04-27 15:49:28
318
原创 @TrandLocal原理简述 与 可能存在的长事务问题
ThrandLocal 自动从数据库连接池获取链接,并开启事务,自动绑定到TrandLocal上,耗时操作会导致占用这个链接时间长,数据库连接被占用不释放,相似操作过多,会导致数据库连接池耗尽【典型的长事务】被这个注解包裹的方法都使用同一个链接,
2025-04-25 11:03:38
108
原创 【FastJSON】的parse与parseObject
功能:parseObject 方法专门用于将 JSON 字符串解析为一个 Java Bean(即指定类型的对象)。功能:parse 方法是 FastJSON 提供的一个通用解析方法,它可以将 JSON 字符串解析成一个 Object 类型的结果。适用场景:当你不确定或者不关心 JSON 字符串的具体结构(比如它可能是一个数组、对象或者其他类型)时,可以使用 parse 方法。返回类型:parse 返回的是 Object 类型,而 parseObject 可以指定返回类型。自定义类型会报类型转换异常!
2025-04-25 11:02:26
243
原创 【延迟双删】简单解析
首次删除:当需要更新某个数据项时,首先删除缓存中的该项。更新数据库:接着,更新数据库中的该项。短暂延迟:然后等待一段很短的时间(例如50毫秒),这段时间允许任何正在进行的读操作完成。二次删除:最后,再次删除缓存中的该项。这样做的目的是防止在这段延迟期间有任何读操作将旧数据重新写入了缓存。2:为什么要进行再次删除(二次删除):1:为什么延迟:短暂的等待时间(延迟)是为了确保所有可能的读取请求都已完成,避免旧的数据被再次写入缓存。
2025-04-22 21:55:58
185
原创 加锁注意事项
• 说明二:如果lock方法在try代码块之内,可能由于其它方法抛出异 常,导致在finally代码块中,unlock对未加锁的对象解锁,它会调用 AQS 的 tryRelease 方法(取决于具体实现类),抛出 IllegalMonitorStateException异常。2:并且在加锁方法 与try代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在 finally中无法解锁。• 说明一:如果在lock方法与try代码块之间的方法调用抛出异常,那么无 法解锁,造成其它线程无法成功获取锁。
2025-04-18 17:21:07
178
原创 字符串循环拼接,不能用 + 连接, 需要用 StringBuilder 代替
然后,在循环中,我们调用 append() 方法来追加 "hello" 字符串。这不会创建新的字符串实例,而是直接在现有的 StringBuilder 实例上进行修改。这行代码时,实际上是在创建一个新的 String 对象。这是因为 String 在 Java 中是不可变的,这意味着每次你“改变”一个 String 的值时,实际上是创建了一个新的 String 实例。随着循环次数的增加,这种操作会显著增加内存消耗和垃圾回收的负担,因为每次迭代都会生成一个新的临时对象。用 StringBuilder 代替+
2025-04-18 16:14:53
125
原创 BigDecimal(double)会丢失精度
或使用BigDecimal的 valueOf方法,此方法内部其实执行了Double的toString,而 Double 的toString按double的实际能表达的精度对尾数进行了截断。优先推荐入参为String的构造方法:BigDecimal recommend1 = new BigDecimal("0.1");• 说明: BigDecimal(double)存在精度损失风险,在精确计算或值比 较的场景中可能会导致业务逻辑异常。• 最坏影响: 数据精度丢失。• 级别: 【MAJOR】
2025-04-16 10:23:09
206
原创 所有的包装类对象之间值的比较,全部使用equals方法比较
• 说明:对于Integer在-128至127之间的值会在缓存里对象复用,区间 外数据会产生新对象。正例:Integer.valueOf(a).equals(Integer.valueOf(b));反例:Integer.valueOf(a) == Integer.valueOf(b);所有的包装类对象之间值的比较,全部使用equals方法比较。• 级别: 【BLOCKER】• 最坏影响:导致业务逻辑错误。• 规约类型:BUG。
2025-04-15 17:51:29
96
原创 ArrayList的subList的数据仍是集合
说明:subList 返回的是ArrayList的内部类SubList,并不是 ArrayList而是ArrayList的一个视图,一个片段,对于SubList子列表 的所有操作最终会反映到原列表上。ArrayList的subList结果不可强转成ArrayList,否则会抛出 ClassCastException异常 •。反例:List test = (ArrayList) list.subList(0, 1);级别: 【CRITICAL】 •。最坏影响: 程序错误,抛出异常。规约类型:BUG •。
2025-04-15 17:44:34
391
原创 Arrays.asList()的对象不能调用add/remove/clear方法
使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相 关的方法,它的add/remove/clear方法会抛出 UnsupportedOperationException异常 •。Arrays.asL ist体现的是适配器模式,只是转换接口,后台的数据 仍是数组。第二种情况:str[0] = "changed";sList的返回对象是一个Arrays内部类,并没有实现集合的修改 方法。第一种情况:list.add("yangguanbao");最坏影响:程序错误,抛出异常 •。
2025-04-15 17:31:39
145
原创 plus 批量插入的底层原理 及 处理方式(优化)
service层提供了另一种方案,掉service层的实现进行批量插入。【就是需要填写俩参数那个,其中一个是waper】
2025-03-10 15:06:42
142
原创 instr,locate是否使用索引实验
函数(在MySQL中)用于查找一个子字符串在另一个字符串中的起始位置。查找一个字符串在另一个字符串中首次出现的位置。(只用模糊查询不考虑哪一位开始,写死>0)它返回的是子字符串首次出现的位置索引,如果未找到该子字符串,则返回0。
2025-03-07 10:00:20
197
原创 JDK 14,15,17的一些新特性(部分常用)
实现, 只允许指定的子类去继承,结合sealec使用)属性位置就是 小括号里的userid,username。备注:父类子类必须位于同一个包下。4.1:permits(限制。作用相当于只读的class类。
2025-02-13 23:30:33
250
原创 CPU飙高排查步骤
备注:这里1328线程号是十进制,转为16进制,找到对应nid。根据返回信息,排查到1313进程里,1328线程cpu占用超高。(这张图仅做展示,红框tid,nid随意圈展示用)查看进程里每个线程的详细占用。计算器里HEX是十六进制。
2024-09-05 19:51:41
651
1
原创 oracle索引字段存储数据过长,导致索引失效
此问题发现于6月中旬,线上问题优化。但是基于优化查询,是的查询保持毫秒级。2:长位索引,索引不生效。并未解决索引不生效问题,1:短位数据,索引生效。
2024-07-09 21:18:18
339
原创 排查问题心得
答案:实施手滑,俩没勾选上!1:排查一上午,发现其他同事写的需求存在bug,且仓储系统因为新需求导致取消幂等性校验。===========推送数据出现了重复(我们推送给仓储)========================修复后又出现了问题,数据显示不正确============1:推送数据出现了重复(我们推送给仓储)排查一整夜没结果,还原代码发现就是该两个。2:修复后又出现了问题,数据显示不正确。问:为什么第一次发送4个第二次发送两个。实施第一次手动勾选推送4个。第二次手动勾选推送两个。
2024-05-05 21:42:49
217
原创 (包治百病)江湖老中医治疗oracal序列重复
今日测试来报此问题,觉方案一太麻烦,所以写了个懒人版,江湖老中医,包治百病。报错: ORA-00001: 违反唯一约束条件 (mes.SYS_C0020470)
2024-04-25 10:49:05
202
原创 ORACAL执行计划
解释:| Id | - 表示执行计划的步骤编号,从0开始,按执行顺序递增。| Operation | - 描述数据库执行的具体操作类型,如:SELECT STATEMENT、SORT AGGREGATE、INDEX FULL SCAN等。| Name | - 操作所涉及的对象名称,如索引名、表名等。| Rows | - 预估的执行此操作将读取或产生的行数,是Oracle优化器根据统计信息做出的估算。| Bytes | - 预估处理的字节数,反映了操作所需处理的数据量。
2024-04-09 19:09:06
808
原创 记一次SQL优化
我们的主库查询的快,但是查询走的是只读库,只读库运行需两分钟。去掉排序功能(运维,及生产人员可接受,且此排序并用不到),原本执行此查询,需要占用546G内存数据,但经过与实施人员沟通,以及对于业务的排查。(精简SQL,站在业务的角度优化SQL)最终在确保业务完整性的前提下,将2分钟的查询,优化到3S钟,并节约500余G内存空间。
2024-04-09 19:07:46
141
原创 Oracal执行计划解析
解释:| Id | - 表示执行计划的步骤编号,从0开始,按执行顺序递增。| Operation | - 描述数据库执行的具体操作类型,如:SELECT STATEMENT、SORT AGGREGATE、INDEX FULL SCAN等。| Name | - 操作所涉及的对象名称,如索引名、表名等。| Rows | - 预估的执行此操作将读取或产生的行数,是Oracle优化器根据统计信息做出的估算。| Bytes | - 预估处理的字节数,反映了操作所需处理的数据量。
2024-03-29 17:48:28
1081
原创 Oracal执行计划解析
解释:| Id | - 表示执行计划的步骤编号,从0开始,按执行顺序递增。| Operation | - 描述数据库执行的具体操作类型,如:SELECT STATEMENT、SORT AGGREGATE、INDEX FULL SCAN等。| Name | - 操作所涉及的对象名称,如索引名、表名等。| Rows | - 预估的执行此操作将读取或产生的行数,是Oracle优化器根据统计信息做出的估算。| Bytes | - 预估处理的字节数,反映了操作所需处理的数据量。
2024-03-29 17:46:38
1525
原创 生产约束问题
解决:后经领导知道,物理外键,可以开启关闭。生产开,无法删除,测试开发关,所以删除不报错可以删除。今日生产无法删数据,报xxxx,核心:存在物理外键,直接删主表数据报此异常(子表有主表的关联)解决经过:开发测试环境,对比生产,都存在外键。开发测试可以删除,生产不可以。问题:开发测试存在外键可以正常删除?
2024-03-26 19:32:05
160
原创 Oracal序列冲突问题解决
5:修改缓存为默认的20(改之前是多少,这里改多少,写20是因为oracal默认20)原因:假设,序列化当前为61,但是表里已经被人为或者直接导入了61这个ID的数据,1:修改序列步长,此时步长为:当前库里最大ID值 - 序列ID值。2:记录当前缓存值,设置缓存为1(怕下一步获取很多导致ID异常)这一次插入序列值ID会在最大ID值基础上+1。3:执行如下SQL: 记得修改序列名,表名。目的:使序列自增,达到当前数据库ID最大值。那么,当基于序列化再次插入,则会报此问题。
2024-03-15 19:37:34
428
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人