自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 收藏
  • 关注

原创 Java 数据清洗 List集合去重

方案,结合。

2025-07-01 10:36:06 452

原创 多线程同步与任务完成等待机制总结

在多线程编程中,合理的同步机制能够有效地协调多个线程之间的执行顺序,确保任务按照预期执行。常见的同步机制包括和Phaser。接下来,我们将通过具体场景加伪代码示例来介绍这些同步工具的应用。在 Java 中,不同的同步工具有不同的适用场景。根据项目的具体需求,选择合适的同步机制能提高并发性能并避免线程安全问题。:用于等待所有线程完成,适合任务依赖的场景。:适用于多线程到达某个同步点后一起继续执行,常用于周期性任务。:适用于处理异步任务,能灵活地组合任务。:适用于确保一组任务完成后执行汇总操作。

2025-01-14 11:28:42 1515

原创 Spring Boot 项目启动后自动加载系统配置的多种实现方式

在 Spring Boot 项目中,可以通过以下几种方式实现。

2025-01-14 11:08:29 1075

原创 扫普通链接二维码打开小程序 动态匹配参数

为了提高活动预约效率,公司希望通过微信小程序,让用户扫描二维码提前预约活动,避免现场排队。具体流程如下:后台管理系统自动生成包含活动ID、活动名称等参数的二维码,用户扫描二维码后,能够跳转到小程序的活动预约页面。【核心点:二维码中 要动态传递多个参数】

2025-01-10 18:02:25 2906

原创 Docker部署开发环境【开篇】

【代码】Docker部署开发环境【开篇】

2024-12-30 10:09:48 297

原创 Spring Cloud Feign Client 中 @Qualifier 使用问题及解决方案

使用全限定类名。显式指定 FeignClient 的contextId。简化配置,通过类型直接注入(适用单实现场景)。这些方法可以有效提升项目代码的健壮性和可维护性,同时避免常见的 Spring Bean 注入问题。

2024-12-29 02:03:41 723

原创 编程术语:BO、VO、PO、DO、DTO全解析

编程术语:BO、VO、PO、DO、DTO全解析便于理解,我这里使用一张图来进行讲解。

2024-12-22 00:54:07 415

原创 前后端数据格式转换:日期字符串到时间戳的最佳实践

/ 定义日期格式 DateTimeFormatter formatter = DateTimeFormatter . ofPattern("yyyy-MM-dd");// 转换为 LocalDate LocalDate localDate = LocalDate . parse(dateStr , formatter);

2024-12-19 17:23:28 598

原创 接口幂等性常见的解决方案【精华版】

接口幂等性常见的解决方案

2024-11-28 17:02:41 1465

原创 IDEA中service启动类是灰色,而且启动类经常自动消失解决方法

原因:IDEA启动大于5个Services的时候就会让新启动的变成灰色,并且重启IDEA之后在Services里找不到相关启动类。通过调整设置增加保留的启动服务数量,解决自动消失的问题。此方法适用于 IDEA 2023.2.1+ 版本。

2024-11-14 10:39:06 2149 1

原创 从乱码到精准:深入理解Java字符串插入的Unicode陷阱与解决方案

核心认知:Java的char索引!= 人类视觉字符索引方案选择insert():性能优先,仅用于确定的ASCII场景:安全优先,国际化应用标准方案终极建议:在任何处理用户输入的系统中,默认使用代码点索引方案,将Unicode安全作为系统设计的基本要求思考题:你的项目中是否有类似字符串处理逻辑?请检查是否在emoji/中文等场景下存在代理对损坏风险。欢迎在评论区分享你的发现和解决方案!完整代码实现作者:Java深度爱好者声明:原创文章,转载请注明出处技术交流。

2025-12-26 14:43:11 528

原创 从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)

数据冗余:间接关联的节点(36和39)被错误存储为直接边,增加了不必要的数据。逻辑异常:冗余的直接边导致删除操作出现非预期结果,影响后续库存上限合并的准确性。性能下降:后续查询所有关联仓库时,需要遍历更多的边,降低查询效率。图的基础:节点、边、无向图、连通图、BFS/DFS是处理关联业务的基础。业务与算法结合:在实现业务代码前,要先明确业务模型(如无向连通图),再选择合适的技术方案。方案选择:边存储适合简单关联,分组模型适合连通图场景,尤其是后续有批量查询需求的业务。

2025-12-18 18:54:56 908

原创 从踩坑到进阶:无向连通图下仓库关联关系的正确维护姿势(小白→中级)

间接关联的节点(36和39)被错误存储为直接边。冗余的直接边导致删除操作出现非预期结果。间接关联不需要存储为直接边。无向连通图场景中,边存储模型容易产生冗余边,而分组模型更适合管理连通分量。图的遍历(BFS/DFS)是处理连通图的基础,需要掌握其核心逻辑(队列/递归+已访问集合)。业务开发中,要先理解业务模型(如无向连通图),再选择技术方案,而非盲目使用直观的实现。

2025-12-18 18:40:56 1024

原创 告别手动替换!MyBatis SQL日志一键解析工具(附完整源码)

在日常开发中,我们经常需要通过 MyBatis 日志排查 SQL 问题,但 MyBatis 输出的日志中,SQL 语句的参数会以 占位符显示,例如:如果要直接在数据库中执行这条 SQL,需要手动将 替换为实际参数,不仅麻烦还容易出错(尤其是参数较多时)。今天给大家分享一个 MyBatis SQL 日志一键解析工具,无需复杂配置,粘贴日志即可生成可直接执行的 SQL,彻底解放双手!从日志文件或控制台中,复制包含 和 的完整日志片段(示例如下):步骤2:粘贴并解析打开工具页面,将复制的日志粘贴到

2025-12-12 14:17:03 945

原创 Java Stream API 深度实战:电商业务场景全方位解析与优化

/ 场景:计算各商品退货率},},stats -> {));// 数据类@Data业务价值:识别高退货率商品,优化商品质量和描述技术深度自定义 Collector 实现复杂业务逻辑聚合线程安全考虑:combiner 函数确保并行流正确性延迟计算:在 finisher 阶段计算最终退货率// 自定义Collector:计算用户复购率},},stats -> {

2025-12-12 10:54:49 1177

原创 Java Stream API 实战:电商业务高频操作全解析

/ 订单金额统计摘要System.out.println("总金额: " + stats.getSum());System.out.println("平均金额: " + stats.getAverage());System.out.println("最大金额: " + stats.getMax());业务场景:财务报表生成、销售数据分析// 计算最高价值订单o1 : o2);业务场景:VIP客户识别、大额交易监控操作选择原则转换用map(),扁平化用flatMap()分组用,分区用匹配用。

2025-12-12 08:36:56 732

原创 Java Stream 实战:订单商品ID过滤技巧(由浅入深)

匹配操作选择anyMatch():存在至少一个满足条件的元素allMatch():所有元素都满足条件:没有元素满足条件性能优化原则优先使用短路操作(anyMatch/allMatch)大数据量考虑并行流避免嵌套多层filter可读性提升技巧// 提取Predicate提升可读性= null;经验分享:在实际项目中,这类过滤操作可封装为独立方法,结合Spring的@Service注解实现复用。例如订单校验服务、库存预检服务等场景均可使用此模式。

2025-12-12 08:36:08 328

原创 【实用工具类】基于 Guava Cache 实现通用 Token 缓存工具类(附完整源码)

这个TokenCache工具类封装了Guava Cache的核心能力,通过泛型和便捷的API设计,解决了Token缓存的通用场景需求。代码简洁、易扩展,可直接集成到项目中,减少重复开发成本。如果你的项目中有Token缓存的需求,不妨试试这个工具类,也欢迎在评论区交流优化建议~Guava Cache官方指南。

2025-12-10 17:37:05 1068

原创 【实用工具类】NullSafeUtils:一站式解决Java空值安全与通用操作(附完整源码)

在Java开发中,空指针异常(NPE)是最常见的运行时异常之一,同时日期处理、字符串操作、数学运算等通用功能的分散实现也会导致代码冗余、维护成本高。今天给大家分享一款一站式的工具类,它以为核心设计思想,覆盖空值判断、字符串/集合处理、数学运算、日期时间操作、IP获取等高频场景,帮你告别重复造轮子,提升开发效率。

2025-12-10 16:46:51 1021

原创 Java Stream 数据处理笔记:从嵌套集合中过滤特定类别的Map

扁平化嵌套结构:使用flatMap将转换为Stream<T>过滤条件放置:在收集前进行过滤,避免处理不必要的数据空值安全:多层空值检查防止NPE性能优化先过滤后映射大数据量使用并行流使用合适的Map实现(如用于并行流)冲突处理:指定合并函数处理键冲突通过以上方法,您可以高效地从复杂嵌套结构中提取并过滤特定类别的数据,构建所需的Map结构。这种模式在实际项目中非常常见,掌握这些技巧能显著提升代码质量和开发效率。

2025-12-09 16:25:48 586

原创 构建高效可靠的JSON处理工具类:从Jackson到JsonUtil的深度解析

JsonUtil通过精心设计,解决了Jackson使用中的常见痛点,提供了一个线程安全、配置完善、易于扩展的JSON处理工具。减少样板代码:统一的配置和方法,避免重复提升可靠性:默认配置覆盖大多数场景,减少配置错误增强可维护性:清晰的API设计和文档,便于团队协作提供扩展能力:安全的自定义机制,适应不同需求未来,JsonUtil增加对JSON Schema验证的支持提供更细粒度的配置选项优化高频场景下的性能在现代Java开发中,一个可靠的JSON工具类是提升开发效率和代码质量的关键。

2025-12-09 10:52:32 989

原创 枚举设计的优雅进阶:函数式接口让枚举拥有“自定义大脑“

/ 新增每月1号执行的任务NEW_TASK(6,"【月度统计任务】",...,// 自定义规则:每月1号+预期数据>5枚举的设计不止于“常量定义”,合理结合函数式接口,能让枚举焕发更强的生命力。在实际开发中,当我们遇到“多个常量需各自实现个性化逻辑”的场景时,不妨尝试这种思路——它能帮助我们写出更简洁、更灵活、更易维护的代码,同时也能让我们对枚举和函数式编程的理解更上一层楼。技术的优雅往往源于“精准解决痛点”,而这种设计正是对这一理念的最佳诠释。

2025-12-04 14:31:50 723

原创 枚举设计巧思:用函数式接口让每个选项“自带逻辑”

函数式接口的核心是“单一抽象方法”,这里我们定义// 输入:当前时间戳、预期数据;输出:是否执行用注解明确接口类型,确保只有一个抽象方法,支持Lambda表达式直接实现。传统枚举的核心价值是“固定选项的规范化”,而“函数式接口+枚举”的设计,让枚举突破了“仅存储数据”的局限,成为“数据+逻辑”的聚合单元。这种设计既保留了枚举的简洁性,又通过Lambda表达式实现了逻辑的灵活定制,完美解决了“每个选项需要个性化逻辑”的开发痛点。

2025-12-04 14:30:01 788

原创 接口字段入参出参分离技巧:从注解到DTO分层实践

在Java后端开发中,“入参需接收、出参需隐藏”是高频需求,例如筛选条件、权限字段、临时验证参数等,若处理不当易导致接口冗余或信息泄露。本文结合数据筛选、权限字段、临时参数三类核心场景,通过订单查询、用户列表、表单提交等具体业务案例,由浅入深分享两种落地方案,兼顾开发效率与代码规范性。核心思路:使用Jackson的注解,仅允许字段“接收参数”,禁止“序列化返回”,改动成本极低,适合简单场景。默认使用注解会同时禁用序列化(返回JSON) 和反序列化(接收参数),导致字段既不能接收也不能返回,无法满足“入参要、

2025-12-04 10:02:05 895

原创 深度解析:SpringBoot 静态类调用 Bean 的底层逻辑与最优实践

静态类的“类级加载”与Spring Bean的“实例级管理”是两条平行的生命周期线,直接交叉必然产生冲突。所有解决方案的核心,都是通过“桥梁”让两条线产生可控的关联,本质是“生命周期对齐”或“上下文共享”。不要直接给静态变量加@Autowired:Spring不支持静态变量注入,必然失败。原型Bean避免使用实例绑定模式:静态变量会持有固定实例,导致多线程环境下的状态混乱。启动阶段禁止调用静态方法:需确保容器初始化完成后再调用,可通过监听。循环依赖处理:构造器注入模式下,若存在循环依赖,需改用。

2025-12-03 15:49:07 1241

原创 笔记:SpringBoot静态类调用Bean的2种方案(小白友好版)

场景描述推荐方案理由静态工具类不想被Spring管理、需保持独立性方案一:SpringContextHolder侵入性低,工具类可脱离Spring使用静态工具类仅在Spring环境中使用、逻辑简单方案二:@PostConstruct无需新增中间类,代码量少,实现简单项目中静态工具类较多、需统一管理方案一:SpringContextHolder中间类可复用,维护成本低不想新增额外类、快速实现需求方案二:@PostConstruct直接改造工具类,几分钟就能搞定。

2025-12-03 15:42:51 548

原创 笔记:SpringBoot中静态工具类调用Bean的终极方案(小白友好版)

静态类不能直接@Autowired:因为加载时机不对,Spring还没初始化Bean;SpringContextHolder是“桥梁”:保存Spring的ApplicationContext,让静态类能拿到Bean;关键限制:必须在Spring启动完毕后使用,否则拿不到Bean。

2025-12-03 15:42:12 737

原创 Spring 事务避坑笔记:从入门到解决自调用陷阱

事务就是一组要么全成功、要么全失败的操作。比如银行转账:从A账户扣钱、给B账户加钱,这两步必须同时成功——如果扣钱后系统崩溃,加钱没执行,A的钱就“凭空消失”了,这时候就需要事务让扣钱操作“回滚”,恢复到之前的状态。事务生效的前提:必须是Spring代理对象调用public方法,才会生效自调用失效的根源this调用绕开了代理,注解没被执行解决方案优先级优先选「拆分Service」(规范、易维护)快速解决选「自注入」或「AopContext」(改动小)复杂场景选「AspectJ」(彻底解决)

2025-12-01 15:33:58 961

原创 DPD Cloud Service setOrder 接口开发文档【对接分享】

setOrder接口是 DPD Cloud Service 的核心接口之一,用于。支持以下场景:德国境内包裹配送德国发往 DPD 国际配送目的地国家/地区的包裹(需选择对应国际配送产品)单个订单或批量订单(最多 30 个订单同时发起)标准配送、退货配送、自提点配送等多种配送类型(注:货到付款COD服务已完全取消)生成标签时必须提供以下信息:所需的发货日期,以及输出格式和打印位置包裹尺寸与重量、包裹内容物,以及寄件地址配送产品 (经典配送、退货配送等)

2025-11-28 21:02:04 314

原创 Lombok @Builder 集合字段初始化“坑“:空指针异常排查指南【精简版】

/ 自定义builder方法操作方式字段初始化流程结果字段默认初始化 → 构造器Builder设置字段 → 全参构造器赋值@Builder通过全参构造器创建对象时,会覆盖字段声明时的默认初始化值,导致集合字段为null。

2025-11-27 13:53:22 364

原创 Lombok @Builder 集合字段初始化“坑”:空指针异常的血泪经验

Builder 与集合的“天生冲突”:只要用@Builder构建对象,未通过 Builder 赋值的集合字段,默认会是 null,无论是否在声明时初始化;优先用 @Builder.Default:Lombok 版本支持的话,这是最简洁的解决方案,一劳永逸;防御性编程习惯:操作集合前务必检查是否为 null,尤其是在使用 Lombok 注解、框架自动注入等场景下,不要轻信“声明时已初始化”;团队规范同步:将此坑纳入团队编码规范,避免新人重复踩坑,提升整体开发效率。

2025-11-27 11:50:03 499

原创 电商大促流量 “爆雷” 记:4M 宣传图 + 多 SKU 轮播图,靠 OSS 优化省 80% 成本

你有没有遇到过这种崩溃场景?平时商品缩略图300kb/张还算可控,但一到节假日、大促活动,4M/张的宣传图+同一SPU下不同SKU的轮播图+页面背景图叠加,OSS流量直接翻倍暴涨——我们曾在一次618大促中,单日OSS流量从日常800GB冲到3200GB,月均成本多花3.5万,更别提4G用户加载页面时的“转圈等待”,直接导致活动页跳出率飙升18%。如果你做的电商平台也有“多SKU轮播图+大促高清宣传图+背景图”的组合场景,这篇文章会提前给你预警隐藏的流量陷阱;

2025-11-12 16:35:06 915

原创 轻量实用的 XML 与 JSON / 对象互转工具类(Jackson 实现)

这个工具类基于Jackson实现,兼顾了轻量性和实用性,移除了日志依赖,适合作为基础组件嵌入各类Java项目。它解决了日常开发中XML与JSON、Java对象转换的核心需求,同时处理了版本兼容、异常封装、输入验证等细节问题,让开发者无需关注底层实现,直接调用静态方法即可完成转换。如果需要扩展功能(如JSON转XML、支持更多输入源),可以基于现有代码轻松扩展。工具类的方法命名规范、注释清晰,上手成本极低,推荐在实际项目中使用。

2025-10-31 13:12:20 952

原创 API请求 之 OkHttp3 常用高频操作

/ 重试拦截器@Overridei++) {// 重试前等待try {try {= null) {// 使用自定义拦截器.build();

2025-10-30 10:22:39 406

原创 MySQL逗号分隔字段-历史遗留原因兼容方案

/ 基础查询// 根据supplier_id查询// 更新操作// 删除操作操作类型推荐方案注意事项查询或LIKE注意性能问题,大数据量需要优化添加先查询再拼接,避免重复处理空值和边界情况移除Java逻辑处理更安全注意逗号边界处理批量在Service层处理逻辑保证事务一致性短期:使用上述方案维持现有功能中期:考虑添加缓存优化查询性能长期:推动表结构重构,使用关联表方案这种逗号分隔的字段设计虽然不符合数据库范式,但在现有系统下通过合理的技术方案可以稳定运行。

2025-10-29 15:57:48 519

原创 第三方平台令牌管理:从数据库设计到保活实践

多平台兼容:通过token_type支持不同授权协议、不同主体的令牌;安全可靠:敏感字段加密、并发控制、状态流转,避免令牌泄露和重复刷新;自动保活:定时任务+异常处理,实现令牌生命周期自动化管理,减少人工干预;可观测性:操作日志+监控告警,故障可追溯、问题可快速定位。在实际落地时,需结合业务场景(如是否需要多租户、是否有高安全需求)调整表结构和逻辑,确保方案适配自身系统。

2025-10-13 11:37:49 604

原创 Java Map使用数字类型(Long/Integer)作为Key的隐藏陷阱与避坑指南

类型一致性优先:存入 Map 时的 Key 类型,必须与取出时的 Key 类型完全一致(如Long存就用Long取,避免intInteger混用)。优先选择类型安全的集合:在无需修改 Map 的场景下,优先使用 Guava或 Java 9+Map.of(),从 API 层面杜绝类型错误。依赖工具辅助检查:集成静态代码分析工具(如 SpotBugs、SonarQube),让工具自动发现“类型不匹配”的潜在问题,减少人工排查成本。Java 中的“类型安全”是编写健壮代码的基础,尤其是在Map。

2025-09-26 11:33:03 1018

原创 OssUpload 组件设计方案与使用说明文档

参数名类型必填默认值说明示例值oss-dirString是OSS存储目录,首字符不能是,末尾建议加Number否5签名URL过期时间(1~15分钟)10Number否100最大文件大小(单位:MB)50api-configObject否见组件默认值接口参数/响应映射配置,用于适配不同后端格式见下文“自定义接口映射”若后端接口参数名不同(如ossDir叫,响应叫uploadUrl<template><script>data() {return {

2025-09-16 15:35:14 920

原创 IT需求提示未读信息查询:深度技术解析与性能优化指南【类似:钉钉已读 功能】

通过以上深度优化,未读信息查询的响应时间可从秒级降至毫秒级,支撑高并发业务场景(如10万用户同时在线查询)。:先查已读ID到内存,再批量查询未读(适合应用层优化))是性能瓶颈的核心,其索引设计直接决定查询效率。确保优化器获取准确的行数估算,避免错误的执行计划。的记录)中排除"用户已读集合"(:已读表索引碎片化严重时(:需从"有效提示集合"(未读信息查询的本质是。

2025-09-04 14:30:32 831 1

原创 Java 中使用 Stream 将 List 转换为 Map 实战笔记(生产级版)

下文示例基于User类,含常见属性及 getter 方法(生产中建议用 Lombok 简化,@Data@Data // Lombok 注解:自动生成 getter/setter/equals/hashCode/toString// 包装类型,可能为 null(需特别处理)// 可能为 null// 基本类型,无 null 问题生产级首选// 自定义复合 Key(必须不可变 + 重写 equals 和 hashCode)

2025-07-11 14:35:07 1112

基于官网最新稳定版 redis 6.2.6 版, Windows x64 平台源码编译

基于官网最新稳定版 redis 6.2.6 版, Windows x64 平台源码编译 bin 目录里为 Windows 版 Redis

2022-03-23

8个常见数据结构排序算法总结API

文档格式是chm文档,方便查看,点击即可快速浏览排序算法,里面的程序可以直接拿来用,实现语言是标准的C程序。

2021-01-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除