- 博客(28)
- 收藏
- 关注
原创 秒杀超卖难题:悲观锁与乐观锁终极对决
本文深入解析高并发场景下的超卖问题,通过复现库存扣减冲突,对比悲观锁(FOR UPDATE)与乐观锁(版本号、CAS、时间戳)的原理与实现。悲观锁强一致但性能差,适合写多场景;乐观锁无锁高并发,适用于读多写少如秒杀。结合分布式锁、Redis预扣库存等方案,全面解决集群下超卖问题。核心:原子操作+冲突检测,选型依业务并发与一致性需求而定。
2026-11-02 20:22:35
210
原创 缓存击穿破解:互斥锁与逻辑过期实战
本文详解Redis缓存击穿问题:热点Key过期时高并发请求导致大量穿透数据库。解决方案一为互斥锁,保证单线程重建缓存,强一致但有阻塞风险;方案二为逻辑过期,不设TTL,通过异步线程重建缓存,提升可用性与性能。两者均需注意锁防死锁、双重检查及释放时机,推荐结合预热使用,有效应对高并发场景。
2026-10-29 16:35:41
142
原创 缓存雪崩终极解决方案揭秘
本文详解缓存雪崩问题:因大量缓存键集中过期或Redis宕机,导致请求瞬间冲击数据库。提出五种解决方案:TTL加随机值(打散过期时间)、缓存永不过期+异步更新、多级缓存(本地+分布式)、Redis高可用集群、服务降级与限流熔断。推荐组合使用TTL随机+高可用集群为标配,核心数据叠加多级缓存兜底,保障系统稳定性。
2026-10-28 01:30:00
305
原创 Redis缓存穿透终极解决方案揭秘
本文深入解析Redis缓存穿透问题,涵盖其成因与四大解决方案:缓存空值(最常用)、布隆过滤器(防恶意攻击)、接口校验+限流、互斥锁(兜底)。结合代码示例与选型建议,强调合理设置空值过期时间及组合使用方案以提升系统稳定性。
2026-10-27 20:55:04
129
原创 MyBatis-Plus指南:从入门到面试
MyBatis-Plus是MyBatis的增强工具,旨在简化单表CRUD开发。它通过BaseMapper实现零SQL操作,用Wrapper(推荐Lambda版)链式构造动态条件,支持分页、逻辑删除、自动填充、乐观锁等企业级功能,且与原生MyBatis完全兼容。适用于后台管理系统等单表场景,复杂查询仍可结合手写XML。核心优势:提升开发效率,降低出错率,是MyBatis的“自动挡升级版”。
2026-09-22 11:23:29
147
原创 苍穹外卖实战:WebSocket如何实现实时通知
本文详解WebSocket在苍穹外卖项目中的应用,从轮询痛点引出需求,对比HTTP与WebSocket核心差异(全双工、长连接、低开销),解析握手升级、数据帧传输与心跳机制。结合实战,演示后端通过@ServerEndpoint管理会话并广播订单提醒,前端实现自动连接与消息处理,完成实时通知功能。重点总结面试高频考点:协议区别、生命周期注解、断线重连及与SSE/轮询的选型逻辑。
2026-09-12 20:30:00
92
原创 Spring Task定时任务全解析:从入门到实战
本文介绍了SpringTask定时任务的使用,涵盖核心注解、三种配置方式(固定延迟、固定速率、Cron表达式),重点解析Cron表达式语法及常见用法,并结合苍穹外卖项目展示实际应用场景。通过完整代码示例与注意事项说明,帮助开发者快速上手。最后提供多线程优化方案,适用于高并发场景。适合初学者系统学习定时任务开发。
2026-09-12 16:05:56
289
原创 ThreadLocal内存泄漏原因及解决方案
ThreadLocal内存泄漏问题解析与正确使用指南 摘要:ThreadLocal通过线程私有Map实现线程隔离,但存在内存泄漏风险。核心问题在于:key是弱引用会被回收,而value是强引用,当线程池复用线程时,未清理的value会持续占用内存。解决方案:1) 使用static final修饰ThreadLocal;2) 必须用try-finally包裹并在finally中remove();3) 避免存储大对象。JDK虽提供清理机制(set/get/remove时清理过期条目),但无法覆盖所有场景。正确使
2026-08-20 21:48:21
334
原创 Nginx反向代理:接口对不上为何能通?
本文探讨了Nginx反向代理在前后端分离项目中的关键作用。当前端请求地址与后端接口路径不一致时,Nginx通过重写URL实现请求转发,使通信得以正常进行。文章详细解析了Nginx反向代理的三大优势:隐藏后端服务提升安全性、统一入口解决跨域问题、实现负载均衡提高系统性能。重点介绍了轮询和权重两种负载均衡策略及其适用场景。通过Nginx的中间协调,不仅简化了开发调试过程,更为系统架构提供了安全防护和性能优化方案,使其成为现代Web开发中不可或缺的基础组件。
2026-08-19 14:50:35
297
原创 Vue3+ElementPlus前后端分离项目实战
本文以Tlias智能学习辅助系统为例,详细讲解了Vue3+ElementPlus前后端分离项目的开发流程。文章首先介绍了项目结构,重点分析了Vite代理配置、API请求层和Vue组件三层的协作关系。通过部门管理模块的增删改查功能,展示了从用户操作到数据存储的完整调用链路,包括代理转发、RESTful API设计和组件交互逻辑。最后总结了开发中的常见问题及最佳实践,强调分层架构中各司其职的重要性,帮助开发者理解前后端分离项目的运行机制。文章内容详实,对初学者具有很好的指导意义。
2026-08-01 16:30:55
302
原创 解决MyBatis查询结果映射null问题
本文分享了开发Tlias智能学习辅助系统时遇到的一个典型问题:学员管理分页查询中班级名称无法显示。通过排查发现,SQL查询结果字段名为"className",而Java对象属性名为"clazzName",导致MyBatis无法正确映射而返回null值。作者最终意识到SQL中的as别名是给数据库结果集使用的,MyBatis会严格按结果集列名匹配Java对象属性。解决方案是保持SQL查询结果字段名与Java对象属性名一致。文章提醒开发者注意数据库字段与Java属性的命名一
2026-07-03 00:04:45
150
原创 编程异常处理全攻略
本文介绍了编程中的异常处理机制。首先定义了异常是程序运行时错误的表示形式,包含错误类型和位置等信息。然后通过学生年龄设置的代码示例展示了异常的实际应用。重点讲解了异常处理的两种方式:JVM默认处理和开发者捕获处理(try-catch),并详细说明了捕获异常的注意事项和使用细节。最后介绍了如何自定义异常类,包括命名规范、继承关系和构造方法设置,目的是使错误信息更清晰易懂。全文系统性地讲解了异常处理的基础知识和实践技巧。
2026-05-10 18:42:19
377
原创 Java IO流核心知识点全解析
本文介绍了Java IO流的核心知识点,包括字节流、字符流、缓冲流等关键内容。主要涵盖:1)字节输入/输出流的基本操作与文件拷贝;2)字符流的读写操作与缓冲区原理;3)缓冲流的高效处理方式;4)转换流、序列化流等特殊流的使用场景;5)文件压缩/解压缩操作;6)第三方工具类Commons-io和Hutool的应用。文章通过具体代码示例演示了各种IO操作,特别强调了流使用后必须关闭的重要细节,并提供了文件排序等实用案例。这些IO流技术是Java开发中处理文件和数据传输的基础模块,需要重点掌握。
2026-04-22 00:24:52
505
原创 Java方法引用:Stream流编程利器
本文介绍了Java中方法引用的基本规则和使用方法。方法引用必须满足四个条件:必须是函数式接口、被引用方法已存在、形参返回值一致、功能满足需求。文章详细展示了五种方法引用类型:1)静态方法引用(如Integer::parseInt);2)成员方法引用(包括本类和其他类);3)构造方法引用(如Student::new);4)类名引用成员方法(如String::toUpperCase);5)数组构造方法引用(如Integer[]::new)。通过对比传统写法和方法引用写法,展示了方法引用如何简化Stream流操作
2026-04-01 01:00:14
187
原创 Java Stream流操作全解析
本文介绍了Java中Stream流的使用方法,主要包括:1. Stream流的获取方式(单列/双列集合、数组、零散数据);2. 中间操作方法(map、distinct等)的特点和使用注意事项;3. 终结方法(toArray、collect)的具体应用,包括收集到List、Set、Map等集合的操作。文章通过代码示例详细演示了各种Stream操作,并提供了Lambda表达式的简化写法。最后强调了Stream流的一次性使用特性及中间操作不会影响原始数据的特点。
2026-03-26 00:32:10
393
原创 Java Map集合:键值对操作全解析
本文介绍了Java中Map集合的基本概念和使用方法。Map是一种双列集合,以键值对形式存储数据,具有键不可重复、值可重复的特点。文章详细讲解了Map的三种遍历方式(键找值、键值对、Lambda表达式)以及三种实现类(HashMap、LinkedHashMap、TreeMap)的特性。其中HashMap无序,LinkedHashMap有序,TreeMap可排序。最后通过统计字符串字符出现次数的案例,演示了TreeMap的实际应用,并指出排序时需要注意获取集合值的技巧。文章内容实用,适合Java初学者学习Map
2026-03-20 16:44:24
392
原创 Java集合Set全解析:从HashSet到TreeSet
本文介绍了Java中Set集合的三种实现:HashSet、LinkedHashSet和TreeSet。HashSet基于哈希表实现,具有无序、不重复特性,JDK8后引入红黑树优化性能;LinkedHashSet在HashSet基础上通过双向链表维护元素插入顺序;TreeSet基于红黑树实现,支持自然排序和自定义排序(通过Comparable或Comparator接口)。文章还对比了不同数据类型的默认排序规则,并详细说明了自定义对象的两种排序方式实现。最后预告了下期将讲解栈、队列、链表等数据结构知识。
2026-03-12 00:03:26
495
原创 Java List集合详解:ArrayList && LinkedList
本期视频介绍了Java中List集合的使用方法,重点讲解了ArrayList和LinkedList两种实现。主要内容包括:1)List集合的索引操作方法,通过示例演示了remove方法的两种使用方式;2)新增的列表迭代器遍历方式,可在遍历过程中添加元素;3)LinkedList集合的双链表特性及其首尾操作优势。视频内容简明易懂,为后续学习Set集合和数据结构打下基础。
2026-03-11 23:43:42
465
原创 Java集合入门:从零掌握三大遍历技巧
本文介绍了Java集合框架的基础知识。主要内容包括:1)集合与数组的区别(长度可变、数据类型等);2)集合创建方式(一维/二维ArrayList);3)集合体系结构(单列Collection和双列Map);4)Collection常用方法(add/remove等);5)三种集合遍历方式:迭代器(不依赖索引)、增强for循环(底层迭代器)和Lambda表达式;6)各种遍历方式的特点和使用注意事项。文章为后续学习List集合奠定了基础,适合Java初学者了解集合框架的基本概念和操作方法。
2026-03-11 22:43:23
609
原创 Java泛型入门:从基础到实战
本文介绍了Java中泛型的基础知识与应用。首先说明了没有泛型时集合存储数据的问题:默认Object类型导致无法使用特有行为。泛型的优势在于统一数据类型,将运行时问题提前到编译期。文章详细讲解了泛型类、方法和接口的使用方式,以及泛型不具备继承性但数据具备继承性的特点。重点介绍了泛型通配符(? extends E和? super E)的使用场景,可以限定类型范围。最后总结了泛型在定义不确定数据类型时的应用价值,建议在已知继承体系的情况下使用通配符。全文通过代码示例生动展示了泛型的各种用法和注意事项。
2026-03-10 00:15:00
392
原创 Java常见API快速入门指南
本文介绍了Java中几个常用API的使用方法。主要内容包括:1)Math类用于数学计算;2)System类提供系统相关方法;3)Runtime类管理虚拟机运行环境;4)Object和Objects类的区别,重点讲解了toString()、equals()和clone()方法的使用;5)BigInteger和BigDecimal类处理大整数和高精度小数计算。文章强调这些API不需要死记硬背,使用时查阅文档即可,建议读者理解基本概念,在需要时能快速查找使用方法。内容较为基础但实用,适合Java初学者参考。
2026-03-04 14:52:51
662
原创 Java零散知识点全解析
本文介绍了Java中几个关键知识点:1.static修饰符的特点及使用方法,包括静态变量和静态方法的调用方式;2.包的概念及使用规则;3.final关键字的三种用法(修饰方法、类、变量);4.抽象类和抽象方法的定义、特点及注意事项。文章通过代码示例展示了static方法和非static方法的调用区别,并详细说明了抽象类的继承实现方式。这些零散的Java基础知识对编程学习非常重要,需要多加理解和练习。
2026-03-03 22:41:18
770
原创 Java内部类:突破单继承的封装利器
本文系统介绍了Java中的四种内部类及其应用场景。主要内容包括:1)成员内部类的定义与使用方式,强调其封装特性;2)静态内部类的访问限制和调用方法;3)局部内部类的局部变量访问能力;4)匿名内部类的简化语法和典型应用。文章着重分析了内部类的三大核心价值:突破单继承限制、实现极致封装、简化回调机制。通过具体代码示例,展示了各种内部类的语法规则和使用技巧,帮助开发者理解如何用更紧凑的代码实现高内聚和强封装。最后总结了内部类在多重继承、实现隐藏和事件处理方面的优势。
2026-03-02 21:34:42
871
原创 Java接口:解锁多态与代码复用的秘密
本文介绍了Java接口的概念与使用方法。接口作为行为规范,可以定义不同类需要实现的方法,解决代码复用问题。主要内容包括:1.接口定义(interface关键字)与实现(implements关键字);2.接口的两大作用:定义行为规范和支持多态;3.JDK7/8/9中接口特性的演进(默认方法、静态方法等);4.适配器设计模式的应用场景及实现方式。通过动物接口的代码示例,展示了如何用接口统一不同实现类的行为。文章最后总结了接口的使用要点和各版本特性差异,帮助读者掌握接口的核心概念和应用场景。
2026-03-01 23:11:50
1404
原创 【Java—面向对象】:多态原理与实战解析
本文介绍了面向对象编程中的多态特性。多态是在继承基础上实现的,允许父类引用指向子类对象,并通过方法重写实现不同行为。文章通过生活例子形象解释多态概念,比较了传统写法与多态写法的区别,指出多态能提高代码可读性和扩展性。重点讲解了多态的调用特点:变量调用"编译看左边,运行也看左边";方法调用"编译看左边,运行看右边"。最后分析了多态的优势(灵活性)和弊端(不能直接调用子类特有方法),并介绍了使用instanceof进行类型判断和强制转换的解决方案。全文通过代码示例和生活类
2026-02-19 17:30:54
1123
原创 【Java—面向对象】:代码复用的秘密武器
本文介绍了面向对象编程中的继承特性。继承允许子类自动获取父类的属性和方法,通过extends关键字建立关系,实现代码复用和逻辑扩展。文章详细讲解了继承的特点:Java只支持单继承但可多层继承;子类不能访问父类私有成员;构造方法需用super()显式调用。通过动物类继承的实例演示了继承的作用:抽取共性代码提高复用性,并介绍了方法重写的概念。继承的主要优势在于减少代码冗余、降低维护成本和构建更清晰的程序结构。
2026-02-12 22:56:10
1374
原创 【Java—面向对象】:封装的艺术
本文介绍了面向对象编程中的封装概念。首先解释了类的定义和作用,通过学生类示例展示了标准JavaBean的写法,包括私有化成员变量、构造方法以及get/set方法。重点讲解了private关键字的作用,以及this关键字解决变量名冲突的用法。文章详细分析了封装的优势:保护数据安全(防止非法修改)、集中验证逻辑、提高代码可维护性和扩展性。最后总结了封装的关键要点:使用private修饰成员变量、构造方法初始化对象、set/get方法安全访问数据,并强调要保证类的功能单一性和数据一致性。
2026-02-11 13:59:19
1049
原创 大一软件生Yize的优快云技术成长日记
软件工程专业大一新生Yize加入优快云平台,将不定期分享Java学习路线、算法解题思路及个人成长记录,旨在记录学习历程并与技术爱好者交流。
2026-02-10 11:11:47
100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅