- 博客(1792)
- 收藏
- 关注
原创 MAC-out.write报错xss,改成hutool工具类IoUtil.copy
根据图片中的代码,可以将out.write替换为 Hutool 的方法。以下是修改后的代。
2026-07-18 00:45:23
14
原创 MAC-UriComponentsBuilder扩展2
路径变量顺序:确保传递的变量值与路径模板中的占位符顺序一致编码处理:始终调用.encode()来确保特殊字符被正确编码变量验证:在展开路径变量前验证其有效性可重用builder:对于同一主机的URL,可重用UriComponentsBuilder实例结合Spring MVC:在控制器中使用构建响应URI错误处理:捕获,当路径变量不匹配时会抛出此异常。
2026-06-09 20:28:57
57
原创 MAC-UriComponentsBuilder(Spring框架中用于安全构建URI的工具类)
自动编码:它会自动对参数值中的特殊字符(如空格、中文、等)进行 URL 编码,防止 URL 断裂或产生歧义。类型安全:避免了手动使用字符串拼接 () 或时容易出现的空格多一个少一个、漏写号等低级错误。链式调用:支持流畅的链式编程风格,代码可读性更高。
2026-05-26 17:06:54
42
原创 MAC-分页查询全局去重,使用GROUP BY+子查询 、 ROW_NUMBER()或DISTINCT ON
特性GROUP BY标准SQL是是(但窗口函数)PostgreSQL特有语法简洁性复杂(需要子查询)中等最简洁灵活性低(只能获取聚合值)高(可灵活排序)中等性能中等(需要多次扫描)好(一次扫描)好(一次扫描)获取完整记录需要JOIN直接获取直接获取多字段去重支持支持支持排序控制有限完全控制有限(ORDER BY必须包含去重字段)适用场景简单聚合统计复杂去重逻辑PostgreSQL环境下的简单去重。
2026-03-09 17:26:13
91
原创 SQL-窗口函数ROW_NUMBER()
例如:筛选 “分数前 3 名的学生”,若有两个第 3 名,row_number()会只保留 1 个,而rank()或dense_rank()能保留两个并列第 3 名,符合 “前 3 名” 的实际需求。当需要按某字段分组,保留每组内 “最新 / 最优 / 指定条件” 的唯一记录时,row_number()是首选 —— 其 “唯一序号” 特性可精准定位目标记录。适用场景:学校成绩单、赛事排名榜、绩效考核等级分配(如 “前 10% 为 A 级,10%-30% 为 B 级”,需按实际排名比例划分)。
2026-03-03 15:12:37
118
原创 Java-前端传参到不了后端问题,@Data生成sTimeS是req.getSTimeS(),但是如果手动生成就是req.getsTimeS()
(即首字母大写,但注意属性名第一个字母是's',第二个字母'T',所以Lombok会将整个属性名首字母大写,变成“STimeS”)第二个字母'T',但注意属性名是“sTimeS”,所以第二个字母是'T',是大写)。但是,对于“sTimeS”这个属性,第一个字母's'小写,第二个字母'T'大写,属于“前两个字母不都大。根据规范,如果属性名的前两个字母都是大写,则getter/setter中属性名保持不变。实际上,规范中规定,如果属性名的第一个字母小写,第二个字母大写,那么getter/setter方。
2026-01-15 20:23:23
122
原创 Windows-休眠按钮看不见,怎么启用休眠
在开始菜单搜索“cmd”或“PowerShell”,右键点击它,选择 。执行此命令后,系统会创建休眠文件,并在关机选项中显示“休眠”选项。这个方法也非常快捷,尤其适合喜欢键盘操作的用户。会弹出一个高级用户菜单。
2025-12-02 10:59:29
511
原创 Java应用中,CPU 使用率过高问题排查(手动用top+jstack或阿里Arthas)
1. 发现 CPU 过高↓2. 找到是哪个 Java 进程(top / 任务管理器)↓3. 找出进程中哪个线程 CPU 高(top -Hp <pid>)↓4. 将线程 TID 转为十六进制(printf "%x" <tid>)↓5. 导出线程堆栈(jstack <pid> > thread_dump.txt)↓6. 在堆栈中查找对应 nid 的线程,分析其调用栈↓7. 定位到问题代码(某个方法/循环/计算)↓8. 优化代码 / 算法 / 线程模型 / 配置等。
2025-11-12 15:05:29
118
原创 Java面试题-两个对象相等equals相等吗,equals相等对象相等吗
这是一个非常经典的Java面试题,它核心考察的是你对对象相等性判断的深入理解。简单来说,这两个说法并不总是成立,关键在于如何定义“相等”。下面这个表格清晰地展示了它们的关系:情形两个对象相等 (内存地址相同)equals方法返回true说明equals✅ 意味着equals为true❌ 对象相等此时equals等价于==,比较内存地址。equals❌ equals为true✅ 意味着 被认为是相等的此时equals比较的是对象内容(如字段值)。
2025-10-22 20:33:27
426
原创 MAC-Java集合求差集,如果B集合中的id在A集合中存在就移除,如果不在就返回A集合
——正是集合运算中的操作。简单来说,就是求 的结果,即找出所有属于集合A但不属于集合B的元素。
2025-10-22 20:22:54
924
原创 MAC-Spring框架TaskScheduler接口延时和定时任务
在Spring框架中,接口提供了一种非常方便的方式来安排延时和定时任务。如何使用它来创建延时任务。
2025-10-11 10:12:03
98
原创 MAC-枚举反射工具类
/ 简单枚举类ACTIVE("A", "活跃用户", true),INACTIVE("I", "未激活用户", false),SUSPENDED("S", "已停用", false);// 另一个枚举类RED(1, "红色"),GREEN(2, "绿色"),BLUE(3, "蓝色");return id;
2025-09-17 13:58:31
211
原创 MAC-简化版枚举工具类
设计一个更简单的枚举工具类,不需要定义接口,而是通过函数式接口来获取枚举的code值这样枚举类不需要实现特定接口,更加灵活同时保留缓存机制提高性能。
2025-09-17 10:44:40
222
1
原创 MAC-Java枚举工具类实现
上述代码有空指针问题:: 每次调用此方法都会遍历所有枚举值。对于枚举成员数量不多的情况,这没问题。但如果成员很多且频繁调用,可以考虑使用静态Map进行缓存以提高查找效率。: 建议对输入的codeStr进行空值判断,避免潜在的。: 返回“未知”是合理的业务逻辑,但最好将其定义为一个常量,例如,以提高可维护性。可以考虑使用静态Map进行缓存以提高查找效率Map使用确保线程安全在静态初始化块中一次性构建映射关系查找操作从 O(n) 降为 O(1)
2025-09-17 10:21:37
191
原创 MAC-画图
画图工具的官网地址是:https://app.diagrams.net/,它的前身是:https://draw.io/。这两个url都能访问。
2025-08-20 11:22:31
237
原创 MAC-安装Homebrew、安装Git
1.首先尝试用中科大和清华的源发现不行中国科学技术大学(USTC)提供了 Homebrew 的镜像仓库,同步官方更新,适合国内用户。curlPATH清华大学 TUNA 协会的镜像源同样稳定,适合备用。2.若镜像站路径变更,可通过 间接访问(利用国内 CDN 加速)。(此命令直接指向 GitHub 官方仓库的install.sh,若网络允许,会自动跳转到可用的镜像节点。有点慢,换了热点,再次安装问题解决:遇到的错误是由于 PATH 导致的。
2025-06-09 00:01:15
1374
原创 MAC-线程不安全的代码分析解决
🔥 关键缺陷:所有异步任务共享同一个 req 对象,在任务中直接调用 req.setCurrent() 修改请求参。通过修复请求对象共享问题并合理配置线程池,可有效提升代码的线程安全性。📍 问题代码: req.setCurrent(String.valueOf(finalI))🧨 危险场景:当多个异步线程同时修改 req 对象的页码时,会导致请求参数错乱(如线程A设置。页码2后,被线程B覆盖为页码3,但实际请求可能发送了错误的页码):为每个异步任务创建独立的请求对象副本,实现线程间数据隔离。
2025-06-05 20:23:49
142
原创 Java-多线程导出线程安全性问题
代码的主要逻辑是分页查询数据,通过异步任务并行获取后续页的数据,最后汇总并导出Excel。这段代码存在,主要集中在param和上。
2025-05-14 22:24:14
183
原创 JSON-将json保存到数据库表中,字段应该用什么类型
先确定使用的具体数据库是什么,因为不同的数据库对JSON的支持可能不一样。比如,MySQL从5.7开始支持JSON类型,PostgreSQL也有JSON和JSONB类型,而像MongoDB这样的NoSQL数据库则是以JSON格式存储文档的。在数据库中存储JSON数据时,字段类型的选择取决于具体数据库的支持和业务需求。
2025-04-23 11:01:19
565
原创 Java8-遍历list取出两个字段重新组成list集合
在Java 8中,可以使用Stream API遍历List并提取两个字段重新组合成新的List。以下是几种常见方法: 使用Stream转换:方法2:使用Map.Entry直接利用存储键值对:方法3:使用数组将字段存入数组:方法4:使用Pair/Tuple(需自定义或第三方库)自定义二元组类:示例说明假设有一个类:提取和到新List:输出:选择合适的方法取决于是否需要保留字段类型信息或是否有现成的类可用。推荐使用自定义类或以确保类
2025-04-20 17:23:37
766
原创 MAC-QueryWrapper中用的exists,是不是用join效果更好
在使用MyBatis-Plus的QueryWrapper中的exists方法时,是否改为使用join效果会更好,以及如何修改。这涉及到SQL优化和MyBatis-Plus的用法。首先,需要理解exists和join在SQL中的区别。exists用于检查子查询是否返回结果,而join则是将两个表连接起来,根据某些条件合并行。通常来说,exists在子查询关联外部表时,可能会逐行检查,而join则可能更高效,尤其是在有合适索引的情况下。
2025-04-20 15:56:06
508
原创 MAC-exists,表字段要不要建索引
在使用EXISTS子查询时,合理建立索引可以显著提升性能,尤其是当两个表的关联字段需要频繁匹配时。以下是针对 。
2025-04-20 15:04:58
115
原创 MAC-如果是分页查询,怎么分批次in;基于多线程的分页查询工具类
如果是分页查询,in怎么分批在处理分页查询时,如果 子句中的参数数量过大(例如超过数据库限制,如 MySQL 的 或性能瓶颈),可以通过 分批查询 和 结果合并 的方式解决。以下是具体实现步骤:将原始 拆分为多个子列表(每批最多 个):步骤 2:分批查询数据库对每个子列表执行查询,合并所有结果:步骤 3:排序和去重(可选)如果要求结果唯一或有序,可以额外处理:步骤 4:计算分页数据根据 和 截取当前页数据:步骤 5:
2025-04-18 16:34:10
576
原创 SQL-exists和in核心区别、 性能对比、适用场景
EXISTS和IN的基本区别。IN用于检查某个值是否在子查询返回的结果集中,而EXISTS用于检查子查询是否至少返回了一行数据。通常来说,EXISTS在子查询结果集较大时表现更好,因为一旦找到匹配项就会停止搜索,而IN则需要遍历整个结果集。在 SQL 中,EXISTS和IN都可以用于子查询,但它们的性能、适用场景和底层逻辑有显著差异。
2025-04-18 11:01:46
684
原创 MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句
在 MyBatis-Plus 中,的exists方法用于拼接 SQL 中的EXISTS子句,通常用于构建子查询条件。
2025-04-17 10:29:11
1554
原创 MAC-基于 Spring 框架的高并发批量任务处理方案
通过以上方案,可在 Spring 框架下高效处理高并发批量任务,兼顾性能与稳定性。、线程池管理、事务控制)实现高并发批量任务处理,涵盖 。 上均有显著提升,可支撑每秒万级订单处理。以下结合 Spring 的特性(如。防止集群环境下重复处理相同数据。,避免不同业务间资源争抢。代码,结合高并发场景的 。
2025-04-16 14:47:53
383
原创 MAC-批量任务并行处理实现
通过这个示例,可以快速实现高并发批量任务处理,后续可根据具体业务需求调整线程池参数、分。 等核心功能,适用于数据清洗、文件处理、批量通知等场景。 的批量任务并行处理示例,包含 。
2025-04-16 10:59:38
297
空空如也
2023年最流行的Java技术是什么?
2023-02-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅