- 博客(20)
- 收藏
- 关注
原创 快速学习并使用一个新框架、新技能的通用方法论(以RabbitMQ举例)
当业务完成后,你已经对该框架有了基础的使用了解,尝试写成通用框架(从具体业务抽离出来),在新功能需要时尝试调用它并逐步完善该框架(推荐),其他需要的模块也可以去改造成使用该方法(尽量不要,要保证旧功能的稳定性)。当完善地你认为可用且好用时收入自己的工具库。
2025-10-11 17:19:15
646
原创 【小知识】java的三层架构、扩展四层架构、DDD架构
维度三层架构扩展四层架构DDD 架构核心关注简单 CRUD + 业务逻辑业务编排 vs CRUD 分离领域建模,业务规则封装层级Controller → 业务 Service → 基础 Service → DAOController → 应用层 → 领域层 → 仓储 / 基础设施业务逻辑Service 层处理业务 Service 处理,基础 Service 只 CRUD领域层处理,应用层只编排流程异常处理Service 层抛异常。
2025-09-22 10:39:40
522
原创 Lombok @Builder创建对象时不设置默认值的常见坑解决方案
Builder问题如下:实体类中赋了默认值,但是却还是为null。在需要默认值的属性上增加@Builder.Default。
2025-09-05 16:55:59
97
原创 自建栈(deque)构建树结构模拟递归过程,解决递归系统栈溢出问题,提升逻辑易理解度、维护性
1、DFS(深度优先算法)是一种用于遍历或搜索树或图的算法,沿着树或图的深度方向遍历,尽可能深地访问一个分支的节点,直到走到最深处,再回溯。2、BFS (广度优先算法)是一种用于遍历或搜索树或图的算法,按层次遍历,先访问起始节点,然后访问所有邻居,再访问邻居的邻居,逐层向外扩展。这里使用的是queue,语义更明确,也可使用deque(支持双端操作),需要改为add加入remove删除。(1)十分灵活,通用性强,能够深度优先或是广度优先,亦可变式使用(下面三个举例)
2025-08-08 11:23:19
138
原创 facade解决service层间的循环依赖以及优化service职责不单一问题
facade体现门面模式(属于结构型设计模式)用于解耦不同service层之间的依赖,service层之间不要直接依赖,而是集合到facade中实现,并且配备专门的vo、dto等。| Mapper/DAO| | Mapper/DAO| | Mapper/DAO| ---> 数据库访问层。| Facade | ---> 聚合多个Service,协调业务流程,做事务控制等。|Service1| |Service2| |Service3| ---> 各自负责具体业务逻辑。
2025-08-08 10:47:00
178
原创 MapStruct必备(常见)使用方式
修改target或者source后需要重新编译 ctrl + F9(实在不行就在maven中clean再compile)
2025-08-08 09:27:00
253
原创 【知识点】关于Stream和Lambda的相关知识
为函数式接口(参数是一个接口,且该接口只有一个抽象方法,这种类会使用@FunctionalInterface标记)为什么Stream的方法都能使用Lambda:Stream的方法都为抽象方法,这些方法的参数都为函数式接口。以下示例为Stream的filter方法,它是一个典型的方法的参数为函数式接口的方法。能使用Lambda的情况是:该。
2025-06-18 16:34:13
283
原创 【知识点】关于equals和hashCode关系,以及使用方法(简单易懂!!!)
典型案例:当向一个HashMap中存入一个元素,首先进行hashCode的计算,快速确认是哪个桶(Map的数组),如果该桶有其他元素则进行equals判断,如果为true则确认为同一元素,不加入该Map,若为false则在该桶下创建链路,存入其中。直接使用equals则意味着需要遍历该Map中的所有内容判断,效率会随着该Map的增大越来越差,而如果先使用hashCode计算则仅需要和桶内的元素进行equals判断,效率稳定且有极大提升。3、手写乘法因子方式(性能高)(一般推荐)
2025-06-17 16:10:29
388
原创 fail-fast和fail-safe的区别,以及fail-fast遍历如何合法化修改
遍历时list.remove(s) expectedModCount(集合自身复制modCount的副本,用于判断有没有被多线程同时修改)不会增加,modCount会增加。在执行list.remove(s)时会对比expectedModCount和modCount的大小,但他们不同时抛异常。CopyOnWriteArrayList底层在调用list.remove(s)时不是修改原集合,而是每次修改都新创建一个集合,即最终的结果,list引用的地址不是原来的地址。代码示例:fail-fast。
2025-06-17 12:17:28
333
原创 【工具类】扒取实体类的字段注释,生成数据库文档,使用JavaParser获取实体类内容
【工具类】扒取实体类的字段注释,生成数据库文档,使用JavaParser获取实体类内容
2025-06-11 14:29:10
230
原创 【工具类】扒取数据库,生成数据库文档。拔获取表名、字段名、和相关备注,按给定格式生成。
【工具类】扒取数据库,生成数据库文档。拔获取表名、字段名、和相关备注,按给定格式生成。
2025-06-11 11:45:48
229
原创 【工具类】实现图片合成拼接(实现微信群聊头像效果),根据图片数量自动合成为不同格式的图片(例如6宫格、九宫格)并自动保存在本地(可修改为)。
【工具类】实现图片合成拼接(实现微信群聊头像效果),根据图片数量自动合成为不同格式的图片(例如6宫格、九宫格)并自动保存在本地(可修改为)。
2025-06-11 10:25:20
636
原创 java数字字典,最简洁实现
本文介绍了Java数字字典的实现方案,通过自定义注解实现数据库编码与显示值的转换。核心包括:1)设计字典类型表和数据表;2)创建@Dict注解,用于字段级JSON序列化处理;3)实现DictSerializer序列化类,处理单值/多值分割逻辑,从服务层获取字典标签;4)在实体类字段使用@Dict注解指定字典类型。该方案通过Jackson注解体系实现了数据库编码到可读标签的自动转换,支持异常处理和日志记录,适用于需要将编码值转换为友好显示名的场景。
2025-05-29 10:51:28
968
原创 快递面单OCR——华为云第三方“智美聚数”接口接入(包括快递公司名称)(开箱即用!!!)
4、通过HttpClient发送(AppKey和AppSecret替换在expressageProperties.getAppKey()和expressageProperties.getAppSecret())下面的java-sdk-core需要手动导入包,libs放置在pom同级目录(提供了资源下载)接入华为云第三方“智美聚数”接口,能够识别快递面单内容且能够识别出快递公司名称。1、在后台获取AppKey和AppSecret。3、华为需要对数据进行华为的签名,工具类如下。2、导入华为相关sdk。
2025-05-27 18:11:50
431
原创 最简单!最通俗易懂!加密用于验证内容是否被修改的原理
生成摘要的hash算法是多种、公开的,而且不同原文使用不同的hash算法加密方式可能得出相同的摘要。”生成的摘要相同,就有可能被伪造。④ 对比两个Hash 解密出来的 Hash 和自己算出来的 Hash 比较,如果一样,就是没被篡改,不一样就是被动过手脚。即验证内容是否被修改的核心即是:接收方直接从原文生成的摘要和自己用发送方发来的公钥解密摘要。公钥是有证书保护的,即使用的hash算法是规定好的,签名是公钥和私钥一一对应的关系。③ 对收到的原文重新做Hash 自己本地计算一遍 Hash 摘要。
2025-04-27 14:58:39
172
原创 事件驱动的可扩展处理架构:基于Spring事件监听机制 + 策略模式 + 工厂模式 构建 + redis
以“事件”为核心,;实现;提高系统的。策略模式是什么:策略模式()是一种行为型设计模式,它的,从而使算法可以独立于使用它的客户端变化。🔧 通俗理解把“if-else 分支选择逻辑”交给类去实现,而不是写在主逻辑里。比如你现在项目中做积分处理:评论加分 ➝ 评论处理器答案采纳加分 ➝ 采纳处理器你就可以把这三种“处理策略”交给不同的实现类去负责,主流程只管调用,不关心具体怎么做。结构组成:(1)上下文角色,持有策略接口并通过它调用具体策略实现(2)策略接口,定义统一的算法方法。
2025-04-24 17:53:16
1390
原创 泛型<T>和<?>的区别
不需要在方法上也加上<?>,仅需要在参数上加上即可 <?>不可以在方法内强转为真实调用的类,因为它仅可使用Object,无法查看调用方传入的类型。1、使用<T>应在方法上也加上<T>标识这是个泛型方法才可使用。2、<T>可以在方法内强转为真实调用的类。
2025-04-24 10:59:10
309
1
原创 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接(TLS版本问题)
sqlserver版本过旧,不支持TLS 1.3,而jdk17默认为TLS 1.3,而jdk11默认为TLS1.2.因此切换jdk版本为11即可解决。若必须使用jdk17则需要修改默认TLS版本为1.2。
2025-04-24 10:57:06
275
原创 git合并前的本地暂存备份操作
或 git stash apply stash@{n} # 恢复指定暂存(n 是 stash list 中的编号)git stash push -m "备份说明" # -m 可选,添加备注。所有工作目录和暂存区的修改会被保存到 Git 的栈中,工作目录恢复到。git stash pop # 恢复最近一次暂存并删除记录。git pull origin 分支名。# 或 git merge 其他分支。
2025-04-23 15:25:01
277
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅