- 博客(41)
- 收藏
- 关注

原创 高并发场景防止库存数量超卖少卖
商品超卖现象,即销售数量超过了实际库存量,通常是由于未能正确判断库存状况而发生的。在常规的库存管理系统中,我们会在扣减库存之前进行库存充足性检验:仅当库存数量大于零时,系统才会执行扣减动作;若库存不足,则即时返回错误提示。然而,在高并发的销售场景下,传统的处理方法往往难以确保库存扣减的准确性。为了解决这一问题,我们可以采用线程加锁机制或利用Redis等内存数据结构来同步库存状态,从而保证即使在大量同时交易的情况下,库存扣减也能保持准确无误。
2024-03-28 07:45:00
4392
2

原创 什么是工厂模式?以及三种工厂模式的区别和特点
想象一下经营一家面馆:简单工厂模式犹如一位大厨,客人点单(如牛肉面或鸡肉面),大厨便统一制作。若新增海鲜面,大厨操作需调整。工厂方法模式下,面馆升级为连锁品牌,总部定规范(抽象方法),各分店按地域特色实践,独立研发新品(如酸辣肥肠面)而不改全局模式。抽象工厂模式中,面馆囊括面条、小菜与饮品系列,设置一套生产流程接口。当推新品冷面套餐时,各店按接口创新组合,体现开闭原则——扩展便捷,修改受限。
2024-03-27 09:00:00
7143
2
原创 一文讲透 MySQL 最左匹配原则,99% 的程序员都踩过坑!
MySQL索引优化关键点:最左匹配原则详解。MySQL联合索引遵循"最左匹配原则",即查询必须从索引最左字段开始连续匹配才能生效。文章通过实例说明:联合索引(age, gender, city)只能从左到右使用,跳过最左字段将导致索引失效。常见误区:字段顺序不一致、中间字段断裂、使用函数运算、范围查询中断匹配。优化建议:将高频查询字段放索引左侧,避免使用函数,使用EXPLAIN验证索引使用情况覆盖索引可以避免回表查询,显著提升性能掌握最左匹配原则是MySQL索引优化的核心,合理设计和使用索引才能发挥最大价值
2025-06-23 11:15:10
297
原创 MySQL回表扫盲指南:少回一次表,性能翻倍!
MySQL回表指通过二级索引找到主键后,再回聚簇索引取完整数据的操作。如同查字典先找索引页再翻正文,产生额外I/O开销!核心痛点是二级索引只存主键和索引列,当查询字段超出索引范围必触发回表,实测性能可暴跌10倍以上。优化三大招:第一用覆盖索引,让索引包含所有查询字段;第二用索引下推,5.6以上版本在存储引擎层提前过滤数据;第三避免SELECT*,只取必要字段并改用主键分页。实战案例:某电商查询优化后,响应时间从2100ms降至62ms。记住:每次回表都是性能的坟墓,覆盖索引就是你的掘墓利器!
2025-06-22 09:19:26
489
原创 MySQL 事务隔离级别深度剖析:从原理到选型,避免并发陷阱(保姆级教程)
MySQL事务隔离级别(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)控制事务间的数据可见性,平衡并发安全与性能。默认的REPEATABLE READ通过MVCC快照和临键锁解决脏读、不可重复读和幻读,是推荐选择。READ COMMITTED允许读取已提交数据,适合实时场景但可能遇到不可重复读。SERIALIZABLE保证强一致性但性能差,慎用。本文解析各级别特性与适用场景。
2025-06-21 10:00:00
722
原创 让Java性能翻倍!免费神器虚拟线程实战,轻松吊打百万并发
Java 21虚拟线程技术带来革命性突破:传统线程池在高并发场景下存在内存爆炸风险(如10万并发需100GB内存),而虚拟线程通过轻量级绿色线程(仅需≈200MB内存)和智能调度机制,实现百万级并发处理。关键技术优势包括:IO阻塞时自动释放CPU资源、与现有Thread API完全兼容、无需修改业务逻辑。性能实测显示,在IO密集型场景下吞吐量提升8-10倍(10万并发从15秒降至3.2秒)。使用SpringBoot 3.2+通过简单配置即可启用,标志着Java高并发处理进入新时代。
2025-06-21 08:00:00
507
原创 为什么不建议在 MySQL 中使用多表 JOIN?——从执行原理到架构实战的深度解析
在 MySQL 中使用多表 JOIN 虽然方便,但在高并发系统中却隐藏着严重的性能与维护隐患。本文深入剖析多表 JOIN 的执行原理、内存与 CPU 消耗,以及代码层聚合带来的内存膨胀风险。同时提供分页查询、缓存聚合、冗余字段、宽表设计等替代方案,帮助开发者构建高性能、易扩展的数据架构。JOIN 是双刃剑,越用越危险,用错就可能毁掉整个系统!
2025-06-20 13:16:39
1256
原创 为什么 80% 的 Spring Boot 项目最终都需要重构?
很多 Spring Boot 项目启动时选择的是“能跑就行”,但随着业务增长、团队扩张、代码复杂度提升,项目逐渐变成维护地狱
2025-06-20 08:00:00
665
原创 线程池的拒绝策略:守护高并发的最后防线,系统崩溃竟因一行配置?
作为Java开发者,线程池是我们应对并发请求的利器。但线程池并非无限容量,当任务提交速度 > 线程处理速度 + 队列缓冲能力时,线程池必须做出抉择:是拒绝任务?还是另辟蹊径?这个关键时刻的决策者,就是线程池的拒绝策略(RejectedExecutionHandler)。
2025-06-19 15:24:01
439
原创 为什么不建议通过 Executors 构建线程池?(附原理剖析 + 实战案例)
Executors工具类虽然提供了快速创建线程池的方法,但存在严重隐患。其默认使用无界队列(LikedBlockingQueue),在任务激增时会导致内存暴涨甚至OOM;同时屏蔽了拒绝策略等关键参数设置,难以监控和调试。阿里巴巴开发手册明确禁止使用Executors,建议通过ThreadPoolExecutor手动配置有界队列、合理的线程数、拒绝策略和线程命名等,才能构建健壮的线程池。文章通过源码分析、风险说明和实战案例,揭示了Executors的潜在问题,并给出了最佳实践方案,强调合理参数配置和线程隔离的
2025-06-19 11:37:37
997
原创 彻底搞懂 Java 中的 ThreadLocal:原理、源码、应用、陷阱全解析!
ThreadLocal是Java实现线程隔离的关键工具,每个线程拥有独立的变量副本,无需加锁即可保证线程安全。其核心用途包括用户登录上下文管理、数据库连接隔离和线程不安全的类封装。使用时必须及时调用remove()避免内存泄漏,尤其是在线程池环境下。主流框架如Spring和MyBatis也广泛使用ThreadLocal进行上下文管理。特别注意InheritableThreadLocal可实现父子线程变量共享,但不适用于线程池场景。
2025-06-18 14:32:49
971
原创 深度解析:Spring定时任务阻塞问题与高负载场景优化方案
《定时任务大数据量处理全流程优化方案》针对周期性任务堆积问题,提出分层解决方案。基础层优化线程池配置,中间层采用动态分片策略,架构层引入消息队列解耦。方案包含动态调参、熔断保护和三级重试机制,配合Prometheus监控和混沌测试验证。根据不同场景需求,推荐线程池优化(吞吐量提升30%-50%)、分片处理(耗时降低60%)或消息队列(任务准时率99.9%)等组合方案,强调监控可见性和弹性设计原则,帮助构建千万级数据处理能力的健壮任务系统。
2025-06-18 08:30:00
258
原创 告别臃肿的if-else!策略模式+工厂模式实现优雅计算器
*** 执行计算操作* @param a 左操作数* @param b 右操作数* @return 计算结果*//*** 获取操作类型标识* @return 类型唯一标识*/通过策略模式+工厂模式的组合拳,我们实现了:✅开闭原则:新增类型无需修改已有代码✅高内聚低耦合:各策略独立发展互不影响✅运行时弹性:支持动态注册和替换策略未来优化方向集成配置中心实现热更新策略结合Spring EL实现动态表达式解析添加策略执行监控和熔断机制🚩架构启示。
2025-04-02 10:26:51
656
原创 Java事务管理:编程式事务 vs 声明式事务
事务管理是确保数据库操作满足ACID(原子性、一致性、隔离性、持久性)特性的核心机制。编程式事务:通过代码显式控制事务边界。声明式事务:通过配置或注解隐式管理事务,由框架自动处理。定义:开发者通过编写代码显式管理事务的开始、提交和回滚。特点高灵活性,可精确控制事务边界。代码侵入性强,事务逻辑与业务逻辑耦合。适用于复杂事务场景(如嵌套事务)。定义:通过注解或XML配置声明事务行为,由框架(如Spring AOP)自动管理事务。特点低侵入性,业务代码与事务逻辑解耦。配置简单,适合标准化事务场景。
2025-04-01 17:41:16
722
原创 深入浅出:Spring Bean 的初始化流程详解
在 Spring 框架中,Bean 是构成应用程序的基石。理解 Bean 的初始化流程,是掌握 Spring 核心机制的关键。本文将通过 「奶茶店制作奶茶」 的比喻,逐步拆解 Spring Bean 的完整生命周期,涵盖从定义到销毁的全过程。
2025-04-01 17:19:51
1260
原创 Spring事务失效的十大陷阱与深度解析
在Spring框架中,事务管理是保证数据一致性的核心功能之一。然而,由于动态代理、异常处理、配置细节等因素,开发者常会遇到事务失效的“坑”。本文将结合源码、场景案例和解决方案,深入分析Spring事务失效的常见原因,并提供系统性的排查思路。
2025-03-31 16:50:19
1108
原创 Spring 事务传播机制详解:7 种类型对比+实际场景(附避坑指南)
Spring 事务传播机制是 Java 面试中的高频考点,也是开发中容易踩坑的核心技术点!本文用 真实场景+代码示例 拆解 7 种传播类型(REQUIRED、REQUIRES_NEW、NESTED 等)
2025-03-31 10:00:00
761
原创 Spring AOP日志记录全攻略:从入门到生产级最佳实践
本文详细讲解如何使用Spring AOP实现生产可用的日志系统,包含自定义注解设计、性能优化方案、敏感信息过滤等实战技巧,提供完整可运行的代码示例。
2025-03-27 16:52:08
531
原创 基于Redis分布锁+事务补偿解决数据不一致性问题
本文介绍一个基于Redis实现的分布式设备库存服务方案,通过分布式锁、重试机制和事务补偿等关键技术,保证在并发场景下库存操作的原子性和一致性。该方案适用于物联网设备管理、分布式资源调度等场景。
2025-03-21 19:18:09
539
原创 实现分布式锁需要考虑哪些问题?
分布式锁是**在分布式系统中控制共享资源访问的机制**,用于解决高并发场景下**数据不一致**、**操作冲突**等问题。核心目标是保证**跨进程 / 跨节点**的互斥性,常见实现方案包括:**数据库锁、Redis 锁、ZooKeeper 锁。**
2025-03-21 14:18:43
377
原创 控制反转(IoC)原理与实践解析
控制反转(Inversion of Control) 是一种通过转移对象控制权来解耦代码的编程思想。其核心是将对象的创建与管理权从应用程序转移到专用容器,实现组件间的松耦合。传统开发痛点fill:#333;color:#333;color:#333;fill:none;类A修改类名所有new类A的位置大规模代码改动潜在BUG风险对象通过new直接实例化类名修改会导致所有调用处都需要改难以管理硬编码导致测试困难并且难以维护IoC优势✨ 解耦组件依赖🔄 统一生命周期管理。
2025-03-20 22:50:10
725
原创 什么是ThreadLocal?实现原理是什么?
ThreadLocal 是一个用于创建线程局部变量的类。每个线程都可以通过 ThreadLocal 存储和访问自己的变量副本,而不会影响其他线程。这在需要为每个线程提供独立的实例或数据时非常有用,比如数据库连接、用户会话等。使用 ThreadLocal 可以避免共享数据引起的并发问题。
2024-10-17 17:59:09
1230
1
原创 为什么SimpleDateFormat是线程不安全的
SimpleDateFormat 是线程不安全的,因为其内部状态会被多个线程共享并修改。解决方案有三种: 每个线程创建独立实例:简单且线程安全,但频繁创建实例会导致性能和内存开销较大,适合低并发场景。 使用 ThreadLocal:每个线程持有一个实例,避免频繁创建,提高性能,但需要注意 ThreadLocal 的生命周期管理,防止内存泄漏,适合高并发环境。 使用 java.time 包:DateTimeFormatter 等类是线程安全的且性能优越,推荐使用.
2024-10-17 13:27:29
1416
原创 ide的使用技巧以及插件推荐
集成开发环境(IDE, Integrated Development Environment)是软件开发者用来编写代码的工具,它通常集成了代码编辑、编译、调试等功能。
2024-10-16 16:38:14
826
原创 Redis和Jedis的区别
总的来说,Redis 是一个服务,而 Jedis 是一个帮助 Java 开发者使用 Redis 的工具在CSDN上,一键三连是对作者辛勤创作的最好鼓励!💖🔝🔄。
2024-10-16 16:30:00
822
原创 如何优雅的通过Spring Boot+Redission对订单实现定时关闭
在电子商务及支付相关平台中,常规流程是首先生成订单或支付请求,用户随后会在规定时间内完成支付。如果用户未能在预设时限内完成支付动作,系统通常会执行相应的过期处理机制,即自动取消未支付的订单。到期自动确认收货:当商品配送预计到达时间过后,若用户未主动确认收货,系统将自动视为用户已收货并触发后续评价或售后环节。超时自动退款:对于某些未及时处理的退款申请,或者因物流异常等原因导致的退款,系统在达到预设等待期限后会自动退还消费者款项。
2024-10-12 14:12:14
1879
1
原创 什么是BlockingDeque
BlockingDeque是Java中一个用于实现阻塞双端队列的接口,主要是用于多线程环境中,可以在队列的两端添加和移除元素。
2024-10-12 10:48:12
369
原创 创建线程的几种方式以及使用
线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(Lightweight Process,LWP),但一般不称呼线程为进程。线程几乎不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
2024-04-03 11:34:34
1324
原创 如何解决接口幂等问题
在一段时间内,对同一接口发起多次相同的请求,无论调用多少次,都应该产生相同的影响或结果,并且不会因为多次请求而改变系统的状态。也就是说,接口幂等性强调的是请求的可重复性和结果的一致性,而不是简单的时间上的“同时间发起”。在商城下单场景中,确实需要实现接口幂等性来防止因网络重试或其他异常情况导致的订单重复创建等问题。若不实现幂等性控制,用户可能会因为同一笔订单提交了多次请求,进而产生多笔订单,这显然是不符合业务需求的。
2024-04-02 11:26:06
473
原创 设计模式-代理模式
在Java中,动态代理主要有JDK动态代理和Cglib动态代理。JDK动态代理原生支持,实现起来简单明了,主要是通过InvocationHandler和Proxy实现。适用于并发不高且代理类必须是接口的情况,它底层主要是通过反射操作。Cglib需要依赖第三方类库,主要是通过MethodInterceptor和Enhancer。适用于并发量高且普通类的情况。它底层主要是通过字节码操作
2024-04-01 16:07:35
1147
原创 设计模式中什么是开闭原则?
开闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,由勃兰特·梅耶(Bertrand Meyer)在他的著作《面向对象软件构造》(Object-Oriented Software Construction)中首次提出。这个原则强调软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。换句话说,当需要改变系统的行为或者添加新功能时,应该尽量避免修改已有的代码,而是通过扩展已有的代码来实现变化。开放性(Open for Extension)
2024-03-25 18:06:48
515
原创 布隆过滤器原理以及实现
Redis布隆过滤器是一种概率型数据结构,对插入和查询操作非常高效。它能够计算“某样东西一定不存在或者可能存在”。其工作原理是,当向布隆过滤器添加元素(key)时,会使用多个hash函数对key进行hash,算出一个整数索引值,然后对位数据长度进行取模运算,得到一个位置为1。每个hash函数都会得到一个位置。判断key是否存在时,也会进行hash取模运算,判断数组这些位置是否都为1,只要有一个位为0,说明这个key不存在。然而,布隆过滤器的缺点是返回的结果可能存在误判。
2024-03-18 22:43:11
857
原创 explain详解与最佳实践
explain是MySQL中的一个关键字,用于获取select语句的执行计划。当你对一个select语句使用explain关键字时,MySQL会返回关于如何执行该查询的详细信息,而不是实际执行查询并返回结果。这对于优化查询性能非常有用,因为它可以帮助你理解MySQL如何处理你的查询,并法吸可能存在的性能瓶颈。tips:本文只会介绍常用的类型,至于其他具体用法可到MySQL官网explain介绍查看mysql5.7默认会对派生表进行合并优化,通过derived_merge来控制,默认为on,表示开启。
2024-03-17 17:22:07
884
原创 探索Drools:史上最全面的使用指南
规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模板编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。需要注意的的规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。drools、VisualRules、iLog等。规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。
2024-03-14 16:47:48
2271
如何优雅的通过Spring Boot+Redission对订单实现定时关闭
2024-10-12
高并发场景防止库存数量超卖少卖
2024-04-01
通过EasyExcel+线程池实现百万级数据从Excel导入到数据库
2024-03-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人