- 博客(66)
- 收藏
- 关注
原创 为什么异常捕获事务还是被回滚?
Spring事务管理中try-catch捕获异常后仍可能回滚的三大原因:1)事务传播机制导致嵌套事务内层异常标记事务为rollback-only;2)捕获了RuntimeException等默认回滚异常类型;3)手动设置了回滚标记。常见场景包括嵌套事务异常穿透和显式回滚调用,解决方案需结合具体传播行为(如REQUIRES_NEW隔离事务)。最终是否回滚取决于异常类型、传播机制和事务状态标记的综合作用。
2025-06-01 12:33:03
403
原创 springboot整合websocket最佳实践
.Spring Boot整合WebSocket实现实时通信的实践摘要:本文介绍了Spring Boot整合WebSocket的基础概念、优势及实现步骤。WebSocket协议支持全双工通信,具有实时性强、减少网络开销等优势。实践内容包括添加依赖、配置WebSocket服务端、实现连接管理及消息推送功能。核心代码展示了如何通过@ServerEndpoint注解创建WebSocket端点,并实现消息收发、连接状态管理等功能。该方案适用于在线聊天、实时通知等需要即时通信的场景,为开发者提供了一种高效的双向通信解决
2025-05-23 23:17:58
337
原创 Spring Boot 实现防盗链
基于请求头 Referer 的防盗链:实现简单,但 Referer 字段容易被伪造。基于令牌(Token)的防盗链:安全性较高,但实现相对复杂,需要处理令牌的生成和验证逻辑。
2025-04-16 14:44:12
670
原创 内存泄露和内存溢出案例解析
在应用程序开发过程中,开发者应使用合理的数据结构,并及时释放无用对象以减少内存泄露的发生,同时针对可能出现的大内存需求,合理分配和管理应用的内存使用,确保不会因请求过多内存而导致溢出。内存溢出指的是程序尝试使用比可利用回忆更多的进程空间,通常发生在尝试创建大量对象或数组亦或分配大块堆内存时,当可用内存不足以满足请求,尝试分配内存失败,虚拟机抛出。内存泄露(Memory Leak)和内存溢出(OutOfMemoryError)在Java中是两个不同的问题,但都会导致性能问题和程序崩溃。
2024-10-09 22:19:53
280
原创 Java 实现将List按照字符串(特定规则)排序
日常开发中我们通常会遇到将一个List按照特定的规则排序,例如我们需要将一个List按照。的顺序排序,我们可以使用下述方式实现。
2024-06-28 16:55:03
1318
原创 在浏览器中输入URL之后发生了什么
服务器处理完毕后,会构建一个HTTP响应包,包括响应状态码(如200表示成功, 404表示未找到资源等)、响应头(包括内容类型和长度等),以及响应体,即请求的文件或错误信息。请注意,这是一个高度抽象化的过程,实际上在web架构中可能还涉及到更多的细节和组件,例如缓存服务器、CDN(内容分发网络)、负载均衡器等等,这些都会影响页面的加载过程。DNS服务器作为互联网上的“电话簿”,将域名如。服务器收到请求后,会根据请求行中的资源,如整个网页或网页上的资源(图片、视频等)的路由来处理请求和获取响应数据。
2024-05-04 14:03:35
485
原创 QPS(Queries Per Second)和TPS(Transactions Per Second)的介绍和区别
QPS(Queries Per Second)和TPS(Transactions Per Second)是衡量计算系统性能的两个指标,它们分别代表了系统每秒可以处理的查询数和事务数。虽然这两个术语在某些情况下可以互换使用,但它们在技术上有所区别。
2024-05-04 00:06:15
1377
原创 Spring Boot可以同时处理多少请求?
Spring Boot本身对并发请求的处理能力没有明确的限制。具体而言,如果是开发阶段或小规模部署,一个Spring Boot实例可能会使用少数几个到数百个线程处理请求(结合嵌入式Tomcat的默认配置和硬件限制)。在高性能、经过针对性调优,并部署在合适硬件上的生产环境中,一个Spring Boot实例可以并发处理的请求可以达到更高的水平,比如数千甚至上万个并发连接。对于大型系统,通常还会结合负载均衡器等现代化的基础设施组件。
2024-05-02 14:46:42
758
原创 本地消息表模式保障分布式系统最终一致性
系统架构说明状态转换说明订单表消息表process_queue库存系统return_queue说明成功失败///订单库回滚成功成功失败//订单系统重发消息成功成功成功失败/Broker自动重试,注意接口幂等成功成功成功库存不足退回/Broker通知回掉,订单/消息作废成功成功成功成功失败订单系统重发消息,注意接口幂等成功成功成功成功成功数据最终一致成功成功失败 (长时间宕机)
2024-04-20 23:20:56
390
原创 Java使用工厂方法实现聚合支付详细例子
工厂方法(Factory Method)是一种创建型设计模式,目的是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。基本原理是在一个抽象类中定义一个创建对象的抽象方法,由这个抽象方法的具体实现延伸至具体的工厂子类去实现。这样的设计让子类可以更改具体实例化哪个类而不影响调用者代码。
2024-03-25 14:32:30
464
原创 Java使用工厂方法实现聚合调用不同第三方接口进行实名验证
工厂方法(Factory Method)是一种创建型设计模式,目的是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
2024-03-22 18:06:47
500
原创 布隆过滤器详解
布隆过滤器是一种空间效率很高的概率型数据结构,用于判断一个元素是否在一个集合中。它可能会有误判(false positives),即判断元素在集合中,但实际上不在;但不会有漏判(false negatives),即如果判断元素不在集合中,则它一定不在集合中。
2024-03-22 10:33:18
657
原创 为什么不推荐使用keySet()遍历HashMap
综上所述,虽然keySet()提供了一种遍历HashMap的方式,但由于其性能较低,且存在效率上的不足,特别是在需要同时访问键和值的情况下,推荐使用entrySet()或其他更高效的遍历方式。此外,随着Java语言的发展,新的API如Map.forEach ()提供了更好的遍历体验和性能。迭代次数加倍:上述的遍历方法导致了每个键值对被处理两次:一次是遍历键的集合,另一次是通过键获取值。包含了键和值,因此你可以同一时间访问键和对应的值,从而避免了为了获取每个值而重新搜索键的开销。方法来获取对应的值。
2024-03-21 18:17:51
341
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人