自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高并发场景防止库存数量超卖少卖

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

2024-03-28 07:45:00 4318 2

原创 通过EasyExcel+线程池实现百万级数据从Excel导入到数据库

通过EasyExcel+线程池实现百万级数据从Excel导入到数据库

2024-03-21 21:35:00 4634 6

原创 告别臃肿的if-else!策略模式+工厂模式实现优雅计算器

*** 执行计算操作* @param a 左操作数* @param b 右操作数* @return 计算结果*//*** 获取操作类型标识* @return 类型唯一标识*/通过策略模式+工厂模式的组合拳,我们实现了:✅开闭原则:新增类型无需修改已有代码✅高内聚低耦合:各策略独立发展互不影响✅运行时弹性:支持动态注册和替换策略未来优化方向集成配置中心实现热更新策略结合Spring EL实现动态表达式解析添加策略执行监控和熔断机制🚩架构启示。

2025-04-02 10:26:51 620

原创 Java事务管理:编程式事务 vs 声明式事务

事务管理是确保数据库操作满足ACID(原子性、一致性、隔离性、持久性)特性的核心机制。编程式事务:通过代码显式控制事务边界。声明式事务:通过配置或注解隐式管理事务,由框架自动处理。定义:开发者通过编写代码显式管理事务的开始、提交和回滚。特点高灵活性,可精确控制事务边界。代码侵入性强,事务逻辑与业务逻辑耦合。适用于复杂事务场景(如嵌套事务)。定义:通过注解或XML配置声明事务行为,由框架(如Spring AOP)自动管理事务。特点低侵入性,业务代码与事务逻辑解耦。配置简单,适合标准化事务场景。

2025-04-01 17:41:16 642

原创 深入浅出:Spring Bean 的初始化流程详解

在 Spring 框架中,Bean 是构成应用程序的基石。理解 Bean 的初始化流程,是掌握 Spring 核心机制的关键。本文将通过 「奶茶店制作奶茶」 的比喻,逐步拆解 Spring Bean 的完整生命周期,涵盖从定义到销毁的全过程。

2025-04-01 17:19:51 1059

原创 Spring事务失效的十大陷阱与深度解析

在Spring框架中,事务管理是保证数据一致性的核心功能之一。然而,由于动态代理、异常处理、配置细节等因素,开发者常会遇到事务失效的“坑”。本文将结合源码、场景案例和解决方案,深入分析Spring事务失效的常见原因,并提供系统性的排查思路。

2025-03-31 16:50:19 1076

原创 Spring 事务传播机制详解:7 种类型对比+实际场景(附避坑指南)

Spring 事务传播机制是 Java 面试中的高频考点,也是开发中容易踩坑的核心技术点!本文用 真实场景+代码示例 拆解 7 种传播类型(REQUIRED、REQUIRES_NEW、NESTED 等)

2025-03-31 10:00:00 569

原创 Spring AOP日志记录全攻略:从入门到生产级最佳实践

本文详细讲解如何使用Spring AOP实现生产可用的日志系统,包含自定义注解设计、性能优化方案、敏感信息过滤等实战技巧,提供完整可运行的代码示例。

2025-03-27 16:52:08 434

原创 基于Redis分布锁+事务补偿解决数据不一致性问题

本文介绍一个基于Redis实现的分布式设备库存服务方案,通过分布式锁、重试机制和事务补偿等关键技术,保证在并发场景下库存操作的原子性和一致性。该方案适用于物联网设备管理、分布式资源调度等场景。

2025-03-21 19:18:09 517

原创 实现分布式锁需要考虑哪些问题?

分布式锁是**在分布式系统中控制共享资源访问的机制**,用于解决高并发场景下**数据不一致**、**操作冲突**等问题。核心目标是保证**跨进程 / 跨节点**的互斥性,常见实现方案包括:**数据库锁、Redis 锁、ZooKeeper 锁。**

2025-03-21 14:18:43 336

原创 控制反转(IoC)原理与实践解析

控制反转(Inversion of Control) 是一种通过转移对象控制权来解耦代码的编程思想。其核心是将对象的创建与管理权从应用程序转移到专用容器,实现组件间的松耦合。传统开发痛点fill:#333;color:#333;color:#333;fill:none;类A修改类名所有new类A的位置大规模代码改动潜在BUG风险对象通过new直接实例化类名修改会导致所有调用处都需要改难以管理硬编码导致测试困难并且难以维护IoC优势✨ 解耦组件依赖🔄 统一生命周期管理。

2025-03-20 22:50:10 691

原创 什么是ThreadLocal?实现原理是什么?

ThreadLocal 是一个用于创建线程局部变量的类。每个线程都可以通过 ThreadLocal 存储和访问自己的变量副本,而不会影响其他线程。这在需要为每个线程提供独立的实例或数据时非常有用,比如数据库连接、用户会话等。使用 ThreadLocal 可以避免共享数据引起的并发问题。

2024-10-17 17:59:09 1175 1

原创 为什么SimpleDateFormat是线程不安全的

SimpleDateFormat 是线程不安全的,因为其内部状态会被多个线程共享并修改。解决方案有三种: 每个线程创建独立实例:简单且线程安全,但频繁创建实例会导致性能和内存开销较大,适合低并发场景。 使用 ThreadLocal:每个线程持有一个实例,避免频繁创建,提高性能,但需要注意 ThreadLocal 的生命周期管理,防止内存泄漏,适合高并发环境。 使用 java.time 包:DateTimeFormatter 等类是线程安全的且性能优越,推荐使用.

2024-10-17 13:27:29 1362

原创 ide的使用技巧以及插件推荐

集成开发环境(IDE, Integrated Development Environment)是软件开发者用来编写代码的工具,它通常集成了代码编辑、编译、调试等功能。

2024-10-16 16:38:14 798

原创 Redis和Jedis的区别

总的来说,Redis 是一个服务,而 Jedis 是一个帮助 Java 开发者使用 Redis 的工具在优快云上,一键三连是对作者辛勤创作的最好鼓励!💖🔝🔄。

2024-10-16 16:30:00 761

原创 如何优雅的通过Spring Boot+Redission对订单实现定时关闭

在电子商务及支付相关平台中,常规流程是首先生成订单或支付请求,用户随后会在规定时间内完成支付。如果用户未能在预设时限内完成支付动作,系统通常会执行相应的过期处理机制,即自动取消未支付的订单。到期自动确认收货:当商品配送预计到达时间过后,若用户未主动确认收货,系统将自动视为用户已收货并触发后续评价或售后环节。超时自动退款:对于某些未及时处理的退款申请,或者因物流异常等原因导致的退款,系统在达到预设等待期限后会自动退还消费者款项。

2024-10-12 14:12:14 1616 1

原创 什么是BlockingDeque

BlockingDeque是Java中一个用于实现阻塞双端队列的接口,主要是用于多线程环境中,可以在队列的两端添加和移除元素。

2024-10-12 10:48:12 350

原创 创建线程的几种方式以及使用

线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(Lightweight Process,LWP),但一般不称呼线程为进程。线程几乎不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

2024-04-03 11:34:34 1309

原创 如何解决接口幂等问题

在一段时间内,对同一接口发起多次相同的请求,无论调用多少次,都应该产生相同的影响或结果,并且不会因为多次请求而改变系统的状态。也就是说,接口幂等性强调的是请求的可重复性和结果的一致性,而不是简单的时间上的“同时间发起”。在商城下单场景中,确实需要实现接口幂等性来防止因网络重试或其他异常情况导致的订单重复创建等问题。若不实现幂等性控制,用户可能会因为同一笔订单提交了多次请求,进而产生多笔订单,这显然是不符合业务需求的。

2024-04-02 11:26:06 455

原创 设计模式-代理模式

在Java中,动态代理主要有JDK动态代理和Cglib动态代理。JDK动态代理原生支持,实现起来简单明了,主要是通过InvocationHandler和Proxy实现。适用于并发不高且代理类必须是接口的情况,它底层主要是通过反射操作。Cglib需要依赖第三方类库,主要是通过MethodInterceptor和Enhancer。适用于并发量高且普通类的情况。它底层主要是通过字节码操作

2024-04-01 16:07:35 1139

原创 Java中文乱码浅析及解决方案

Java中文乱码浅析及解决方案

2024-03-29 10:59:39 471

原创 什么是工厂模式?以及三种工厂模式的区别和特点

想象一下经营一家面馆:简单工厂模式犹如一位大厨,客人点单(如牛肉面或鸡肉面),大厨便统一制作。若新增海鲜面,大厨操作需调整。工厂方法模式下,面馆升级为连锁品牌,总部定规范(抽象方法),各分店按地域特色实践,独立研发新品(如酸辣肥肠面)而不改全局模式。抽象工厂模式中,面馆囊括面条、小菜与饮品系列,设置一套生产流程接口。当推新品冷面套餐时,各店按接口创新组合,体现开闭原则——扩展便捷,修改受限。

2024-03-27 09:00:00 6410 1

原创 全球首位AI程序员诞生,将会对程序员的影响有多大?

自动化与效率提升:工作角色转型:技能要求变化:职业市场动态:伦理与安全挑战:

2024-03-26 15:37:53 228

原创 设计模式中的策略模式和if-else的区别

设计模式中的策略模式和if-else的区别

2024-03-26 09:34:42 1581

原创 设计模式中什么是开闭原则?

开闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,由勃兰特·梅耶(Bertrand Meyer)在他的著作《面向对象软件构造》(Object-Oriented Software Construction)中首次提出。这个原则强调软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。换句话说,当需要改变系统的行为或者添加新功能时,应该尽量避免修改已有的代码,而是通过扩展已有的代码来实现变化。开放性(Open for Extension)

2024-03-25 18:06:48 498

原创 Spring Boot集成Mybatis和MySQL对数据库进行操作

Spring Boot集成Mybatis和MySQL对数据库进行操作

2024-03-21 14:12:48 383

原创 布隆过滤器原理以及实现

Redis布隆过滤器是一种概率型数据结构,对插入和查询操作非常高效。它能够计算“某样东西一定不存在或者可能存在”。其工作原理是,当向布隆过滤器添加元素(key)时,会使用多个hash函数对key进行hash,算出一个整数索引值,然后对位数据长度进行取模运算,得到一个位置为1。每个hash函数都会得到一个位置。判断key是否存在时,也会进行hash取模运算,判断数组这些位置是否都为1,只要有一个位为0,说明这个key不存在。然而,布隆过滤器的缺点是返回的结果可能存在误判。

2024-03-18 22:43:11 831

原创 explain详解与最佳实践

explain是MySQL中的一个关键字,用于获取select语句的执行计划。当你对一个select语句使用explain关键字时,MySQL会返回关于如何执行该查询的详细信息,而不是实际执行查询并返回结果。这对于优化查询性能非常有用,因为它可以帮助你理解MySQL如何处理你的查询,并法吸可能存在的性能瓶颈。tips:本文只会介绍常用的类型,至于其他具体用法可到MySQL官网explain介绍查看mysql5.7默认会对派生表进行合并优化,通过derived_merge来控制,默认为on,表示开启。

2024-03-17 17:22:07 877

原创 探索Drools:史上最全面的使用指南

规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模板编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。需要注意的的规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。drools、VisualRules、iLog等。规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。

2024-03-14 16:47:48 2090

原创 通过DFA算法实现大文本敏感词过滤

通过DFA算法实现大文本敏感词过滤

2024-03-13 17:52:25 737

原创 使用SXSSFWorkbook实现高效百万数据导入Excel的方法

在当今数据驱动的世界中,处理大规模数据并将其可视化是许多企业和组织面临的重要挑战之一。导出数据到Excel是常见的需求,但是当数据量很大时,常规的Excel库可能会遇到内存不足的问题。为了解决这个问题,Apache POI库提供了SXSSFWorkbook,这是一个针对大型数据集的高效处理工具。本文将介绍如何使用SXSSFWorkbook实现高效地将大规模数据导入Excel的方法。

2024-03-13 10:23:31 6374 1

如何优雅的通过Spring Boot+Redission对订单实现定时关闭

在电子商务及支付相关平台中,常规流程是首先生成订单或支付请求,用户随后会在规定时间内完成支付。如果用户未能在预设时限内完成支付动作,系统通常会执行相应的过期处理机制,即自动取消未支付的订单。 此外,这类系统还设置了多种自动化业务规则来处理其他时效性较强的场景,例如: 到期自动确认收货:当商品配送预计到达时间过后,若用户未主动确认收货,系统将自动视为用户已收货并触发后续评价或售后环节。 超时自动退款:对于某些未及时处理的退款申请,或者因物流异常等原因导致的退款,系统在达到预设等待期限后会自动退还消费者款项。 下单后自动通知:一旦用户下单成功,系统会自动触发短信或邮件通知服务,向用户发送订单确认信息或其他相关信息。 以上这些功能都是为了提高系统的自动化水平和用户体验,减少人工干预的需求,并确保交易过程顺畅高效。

2024-10-12

高并发场景防止库存数量超卖少卖

在高并发电商场景下,商品超卖(即销售量超出库存)是常见问题,主要由并发扣减库存导致。常规做法是在扣减库存前检查库存充足性,但面对大量并发请求时,这种方法可能失效。为此,可采用以下几种策略: 悲观锁:在数据库层面,对库存记录进行锁定,确保同一时刻只有一个事务能扣减库存,但可能导致锁竞争激烈,影响性能。 乐观锁:通过在库存记录中增加版本号字段,更新时验证版本号是否改变,若改变则表示库存已被其他事务修改,避免了长时间锁等待,但需合理设计重试策略。 Redis:利用Redis的高速与原子操作特性,将库存存入Redis中,通过DECR等命令原子地扣减库存,有效防止超卖。同时,Redis支持lua脚本,实现复杂逻辑的原子执行。 实际应用中,可根据业务需求和技术栈选择合适方案,如结合Redis作为库存中间件,辅以分布式锁策略防止集群环境下超卖。此外,还可借助消息队列进行削峰填谷,确保系统稳定可靠。总的来说,解决商品超卖问题需要综合运用多种技术和策略,以适应复杂的高并发场景。

2024-04-01

通过EasyExcel+线程池实现百万级数据从Excel导入到数据库

在处理大量数据导入数据库的场景中,使用阿里巴巴开源的EasyExcel库结合线程池技术可以有效地实现从Excel文件导入到数据库的过程。先定义sheet的数量和固定大小的线程池数量,每个sheet页做为单独的任务交给线程池处理。定义了DataReadListener,这个类是ReadListener的实现类。当EasyExcel每读取一行数据都会调用invoke方法,在invoke()中可以做我们自己的逻辑处理。通过自定义的DataReadListener,我们就可以在读取Excel的时候做处理。 每读取到一行数据会先做数据校验,如果校验通过后就会放到缓存集合中,List数量积累到1000时就会通过Mybatis的批量操作进行数据插入。doAfterAllAnalysed方法会在读取Excel完成后进行调用。 通过以上步骤,可以利用EasyExcel和线程池实现百万级数据从Excel导入到数据库的功能。这种方式可以提高数据处理的效率,减少内存占用,并且能够更好地利用多核CPU的优势。

2024-03-26

空空如也

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

TA关注的人

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