- 博客(106)
- 收藏
- 关注
原创 常规方法不能用于实体判断(需要精确判断字段值)
你需要手动编写逻辑来判断该对象是否是“业务意义上的空对象”。想法实现方式blackVo!= null只能判断对象是否存在,不能判断内容是否为空同上同上toString()toJson()输出内容可见,但不能直接用于判断想判断对象字段是否为空✅ 必须自己写逻辑判断字段,或使用反射。
2025-06-09 10:58:47
221
原创 手动事务的使用
【观察其他定时任务,采用return Result写法,异常-1,正常1,所以排除@Transactional,因为异常时return,无法回滚(抛异常会跟相同功能的写法背离),所以采用手动事务处理】定时将前端页面配置的字典数据(标签数据)同步到数据库特定的表(标签表)原因:上来就手动事务,或者手动事务开启过早,容易出现长事务问题。都有,判断名称,名称不同修改。字典有,数据库表没有=新增。公司需要写一个定时任务,涉及增改查操作,范围要小,在增删改的地方,创建手动事务,异常里做回滚。
2025-06-03 10:35:29
201
原创 in跟exist的执行顺序
如果sql语句中包含了exists关键字,它优先执行exists左边的语句(即主查询语句)。如果匹配上,则可以查询出数据。如果sql语句中包含了in关键字,则它会优先执行in里面的子查询语句,然后再执行in外面的语句。如果in里面的数据量很少,作为条件查询速度更快。提高缓存命中率:较小的数据集更容易被加载到内存中,这可以增加数据访问的局部性并提高缓存的使用效率。优化索引使用:如果小表上的连接条件上有索引,那么查找匹配的大表记录会更加高效。不管是用in,还是exists关键字,其核心思想都是用小表驱动大表。
2025-05-23 14:03:07
227
原创 for循环实现死循环
/ 逻辑代码,通过 break 或 return 控制循环结束。//逻辑代码,通过return或者break空值循环结束。//逻辑代码,通过return或者break空值循环结束。) { //嵌入式常见写法。备注:这两种for循环写法 等价 于死循环。2:写死ture的for。
2025-05-23 11:38:57
375
原创 【GC日志查看】
gc日志:看法简述:堆空间示图: 事件类型: :这表示这是一个垃圾回收事件,具体原因是分配失败(即没有足够的内存来分配新对象)。 垃圾回收范围: :这是年轻代(PSYoungGen)的垃圾回收详情。 是垃圾回收前年轻代使用的总内存。 是垃圾回收后年轻代使用的总内存。 是年轻代的总大小。 整体堆信息: :整个Java堆的信息。
2025-04-29 15:02:14
467
原创 PageHelper编写注意及内存泄漏处理
原因:确保分页参数被消费掉,并正确执行分页参数清理操作。2:分页参数被消费后,抛出异常(无内存泄漏)1:分页参数被消费前,抛出异常(内存泄漏)2:执行sql时抛出异常 (无内存泄漏)
2025-04-27 15:49:28
359
原创 @TrandLocal原理简述 与 可能存在的长事务问题
ThrandLocal 自动从数据库连接池获取链接,并开启事务,自动绑定到TrandLocal上,耗时操作会导致占用这个链接时间长,数据库连接被占用不释放,相似操作过多,会导致数据库连接池耗尽【典型的长事务】被这个注解包裹的方法都使用同一个链接,
2025-04-25 11:03:38
123
原创 【FastJSON】的parse与parseObject
功能:parseObject 方法专门用于将 JSON 字符串解析为一个 Java Bean(即指定类型的对象)。功能:parse 方法是 FastJSON 提供的一个通用解析方法,它可以将 JSON 字符串解析成一个 Object 类型的结果。适用场景:当你不确定或者不关心 JSON 字符串的具体结构(比如它可能是一个数组、对象或者其他类型)时,可以使用 parse 方法。返回类型:parse 返回的是 Object 类型,而 parseObject 可以指定返回类型。自定义类型会报类型转换异常!
2025-04-25 11:02:26
342
原创 【延迟双删】简单解析
首次删除:当需要更新某个数据项时,首先删除缓存中的该项。更新数据库:接着,更新数据库中的该项。短暂延迟:然后等待一段很短的时间(例如50毫秒),这段时间允许任何正在进行的读操作完成。二次删除:最后,再次删除缓存中的该项。这样做的目的是防止在这段延迟期间有任何读操作将旧数据重新写入了缓存。2:为什么要进行再次删除(二次删除):1:为什么延迟:短暂的等待时间(延迟)是为了确保所有可能的读取请求都已完成,避免旧的数据被再次写入缓存。
2025-04-22 21:55:58
207
原创 加锁注意事项
• 说明二:如果lock方法在try代码块之内,可能由于其它方法抛出异 常,导致在finally代码块中,unlock对未加锁的对象解锁,它会调用 AQS 的 tryRelease 方法(取决于具体实现类),抛出 IllegalMonitorStateException异常。2:并且在加锁方法 与try代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在 finally中无法解锁。• 说明一:如果在lock方法与try代码块之间的方法调用抛出异常,那么无 法解锁,造成其它线程无法成功获取锁。
2025-04-18 17:21:07
192
原创 字符串循环拼接,不能用 + 连接, 需要用 StringBuilder 代替
然后,在循环中,我们调用 append() 方法来追加 "hello" 字符串。这不会创建新的字符串实例,而是直接在现有的 StringBuilder 实例上进行修改。这行代码时,实际上是在创建一个新的 String 对象。这是因为 String 在 Java 中是不可变的,这意味着每次你“改变”一个 String 的值时,实际上是创建了一个新的 String 实例。随着循环次数的增加,这种操作会显著增加内存消耗和垃圾回收的负担,因为每次迭代都会生成一个新的临时对象。用 StringBuilder 代替+
2025-04-18 16:14:53
150
原创 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
245
原创 所有的包装类对象之间值的比较,全部使用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
109
原创 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
403
原创 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
178
原创 plus 批量插入的底层原理 及 处理方式(优化)
service层提供了另一种方案,掉service层的实现进行批量插入。【就是需要填写俩参数那个,其中一个是waper】
2025-03-10 15:06:42
163
原创 instr,locate是否使用索引实验
函数(在MySQL中)用于查找一个子字符串在另一个字符串中的起始位置。查找一个字符串在另一个字符串中首次出现的位置。(只用模糊查询不考虑哪一位开始,写死>0)它返回的是子字符串首次出现的位置索引,如果未找到该子字符串,则返回0。
2025-03-07 10:00:20
235
原创 JDK 14,15,17的一些新特性(部分常用)
实现, 只允许指定的子类去继承,结合sealec使用)属性位置就是 小括号里的userid,username。备注:父类子类必须位于同一个包下。4.1:permits(限制。作用相当于只读的class类。
2025-02-13 23:30:33
260
原创 CPU飙高排查步骤
备注:这里1328线程号是十进制,转为16进制,找到对应nid。根据返回信息,排查到1313进程里,1328线程cpu占用超高。(这张图仅做展示,红框tid,nid随意圈展示用)查看进程里每个线程的详细占用。计算器里HEX是十六进制。
2024-09-05 19:51:41
679
1
原创 oracle索引字段存储数据过长,导致索引失效
此问题发现于6月中旬,线上问题优化。但是基于优化查询,是的查询保持毫秒级。2:长位索引,索引不生效。并未解决索引不生效问题,1:短位数据,索引生效。
2024-07-09 21:18:18
352
原创 排查问题心得
答案:实施手滑,俩没勾选上!1:排查一上午,发现其他同事写的需求存在bug,且仓储系统因为新需求导致取消幂等性校验。===========推送数据出现了重复(我们推送给仓储)========================修复后又出现了问题,数据显示不正确============1:推送数据出现了重复(我们推送给仓储)排查一整夜没结果,还原代码发现就是该两个。2:修复后又出现了问题,数据显示不正确。问:为什么第一次发送4个第二次发送两个。实施第一次手动勾选推送4个。第二次手动勾选推送两个。
2024-05-05 21:42:49
220
原创 (包治百病)江湖老中医治疗oracal序列重复
今日测试来报此问题,觉方案一太麻烦,所以写了个懒人版,江湖老中医,包治百病。报错: ORA-00001: 违反唯一约束条件 (mes.SYS_C0020470)
2024-04-25 10:49:05
212
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人