<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Crayon26的博客]]></title><description><![CDATA[让代码跑一会]]></description><link>https://blog.csdn.net/Crayon26</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Crayon26]]></copyright><item><title><![CDATA[深入浅出 Spring Event：原理剖析与实战指南]]></title><link>https://blog.csdn.net/Crayon26/article/details/156397959</link><guid>https://blog.csdn.net/Crayon26/article/details/156397959</guid><author>Crayon26</author><pubDate>Mon, 29 Dec 2025 21:43:32 +0800</pubDate><description><![CDATA[本文深入解析Spring Event事件机制，基于观察者模式实现组件解耦。文章从技术原理、核心组件（ApplicationEvent、ApplicationEventPublisher等）和传播流程入手，详细讲解其解耦性、灵活性等关键特性。通过Spring Boot实例演示基础使用方法：定义事件（普通POJO或继承ApplicationEvent）、发布事件（ApplicationEventPublisher）和监听处理（@EventListener注解）。该机制广泛应用于业务解耦、异步通知等场景]]></description><category></category></item><item><title><![CDATA[如何选择两种缓存更新策略（写缓存+异步写库；写数据库+异步更新缓存）]]></title><link>https://blog.csdn.net/Crayon26/article/details/154537256</link><guid>https://blog.csdn.net/Crayon26/article/details/154537256</guid><author>Crayon26</author><pubDate>Fri, 07 Nov 2025 17:28:51 +0800</pubDate><description><![CDATA[文章对比了两种Redis缓存更新策略。方案一先更新缓存再异步写数据库，具有高读取性能但存在数据丢失风险，适用于可以容忍数据不一致的场景。方案二先写数据库再更新缓存，数据可靠性高但读取延迟较大，适合数据一致性要求严格的业务。建议无论采用哪种方案，都应设置缓存过期时间、实现缓存删除而非更新、添加监控机制，并考虑引入本地缓存以减轻Redis压力。]]></description><category></category></item><item><title><![CDATA[【JUC】继承Thread类与实现Runnable接口的两种创建线程方式有什么区别?]]></title><link>https://blog.csdn.net/Crayon26/article/details/153945804</link><guid>https://blog.csdn.net/Crayon26/article/details/153945804</guid><author>Crayon26</author><pubDate>Mon, 27 Oct 2025 01:25:16 +0800</pubDate><description><![CDATA[本文比较了Java中创建线程的两种方式：继承Thread类和实现Runnable接口。通过代码示例和对比表格，分析了二者在继承关系、资源共享和代码复用等方面的差异。文章指出，实现Runnable接口更具优势：不占用继承位置，支持资源共享，符合面向对象设计原则，且与现代API兼容。最后给出了现代开发的最佳实践，推荐优先使用Runnable接口配合Lambda表达式和线程池。总结强调，除非需要重写Thread方法，否则应优先选择实现Runnable接口的方式创建线程。]]></description><category></category></item><item><title><![CDATA[【数据结构】二叉树-图解广度优先搜索]]></title><link>https://blog.csdn.net/Crayon26/article/details/153137361</link><guid>https://blog.csdn.net/Crayon26/article/details/153137361</guid><author>Crayon26</author><pubDate>Sun, 12 Oct 2025 21:36:22 +0800</pubDate><description><![CDATA[广度优先搜索（BFS）通过队列实现二叉树的层序遍历，形成二维数组结果。其核心是利用队列保存当前层节点，并通过size变量控制每层节点数量。算法流程为：根节点入队，循环处理队列节点，将子节点加入队列，直到队列为空。代码实现包括初始化队列、处理每层节点并存储结果等步骤。该方法能有效按层遍历二叉树结构。]]></description><category></category></item><item><title><![CDATA[【JUC】线程池有哪些拒绝策略?该如何选择使用?]]></title><link>https://blog.csdn.net/Crayon26/article/details/153129547</link><guid>https://blog.csdn.net/Crayon26/article/details/153129547</guid><author>Crayon26</author><pubDate>Sun, 12 Oct 2025 18:35:02 +0800</pubDate><description><![CDATA[本文详细解析了线程池在工作队列和线程数均达上限时，所采用的四种内置拒绝策略：默认的AbortPolicy（中止并抛异常）、CallerRunsPolicy（由调用者线程执行）、DiscardPolicy（静默丢弃）以及DiscardOldestPolicy（丢弃队列中最老的任务）。文章不仅阐述了每种策略的行为、优缺点和典型应用场景，还指导开发者如何根据业务的关键程度和容错能力进行选择，并提供了自定义拒绝策略的实现方式。最后强调，拒绝策略是系统过载时的最后一道防线，合理配置线程池参数才是从根本上避免任务被拒绝]]></description><category></category></item><item><title><![CDATA[【JUC】为什么每个线程对象只能调用一次 start() 方法?]]></title><link>https://blog.csdn.net/Crayon26/article/details/153121753</link><guid>https://blog.csdn.net/Crayon26/article/details/153121753</guid><author>Crayon26</author><pubDate>Sun, 12 Oct 2025 16:03:09 +0800</pubDate><description><![CDATA[线程对象只能调用一次start()方法，这是由线程生命周期的不可逆性决定的。start()会将线程从NEW状态转为RUNNABLE状态，JVM为其分配独立资源。一旦线程终止，无法重新回到初始状态。重复调用会导致资源冲突、并发安全问题，并可能引发内存错误或数据不一致。这种设计确保了线程执行的确定性和安全性。]]></description><category></category></item><item><title><![CDATA[【Redis】RedLock算法讲解]]></title><link>https://blog.csdn.net/Crayon26/article/details/152555557</link><guid>https://blog.csdn.net/Crayon26/article/details/152555557</guid><author>Crayon26</author><pubDate>Sun, 05 Oct 2025 17:46:05 +0800</pubDate><description><![CDATA[本文详解Redis分布式锁的RedLock算法，阐述其解决主从架构锁失效问题的核心价值。解析五大流程步骤，并深入讨论关于安全性与活性的著名争议（如Martin Kleppmann的质疑与Antirez的反驳）。帮助开发者在分布式系统中安全、高效地使用RedLock。]]></description><category></category></item><item><title><![CDATA[【数据结构】二叉树-图解深度优先搜索(递归法、迭代法)]]></title><link>https://blog.csdn.net/Crayon26/article/details/152231598</link><guid>https://blog.csdn.net/Crayon26/article/details/152231598</guid><author>Crayon26</author><pubDate>Sun, 28 Sep 2025 22:23:24 +0800</pubDate><description><![CDATA[本文通过图示详解深度优先遍历（DFS）的两种实现策略：递归法的隐式栈调用与迭代法的显式栈操作。剖析二叉树与图的DFS应用差异，对比两种方法在空间复杂度、栈溢出风险及代码可读性上的优劣，并提供Java代码实现与遍历序列分析。帮助开发者掌握DFS核心思想，灵活运用于算法面试与工程实践。]]></description><category></category></item><item><title><![CDATA[一文详细：synchronized关键字的底层原理 及 锁升级]]></title><link>https://blog.csdn.net/Crayon26/article/details/149677191</link><guid>https://blog.csdn.net/Crayon26/article/details/149677191</guid><author>Crayon26</author><pubDate>Sun, 27 Jul 2025 02:36:34 +0800</pubDate><description><![CDATA[本文深度剖析Java synchronized关键字底层原理，从对象头结构、Monitor机制切入，详解无锁→偏向锁→轻量级锁→重量级锁的全流程锁升级策略。结合JVM源码与内存布局图，揭秘锁膨胀条件、自旋优化及锁撤销机制，助你掌握高并发场景下的锁优化本质，从容应对并发面试与性能调优挑战。]]></description><category></category></item><item><title><![CDATA[Redis数据库-消息队列]]></title><link>https://blog.csdn.net/Crayon26/article/details/148116207</link><guid>https://blog.csdn.net/Crayon26/article/details/148116207</guid><author>Crayon26</author><pubDate>Wed, 21 May 2025 15:01:59 +0800</pubDate><description><![CDATA[本文分析消息队列的三种实现方案：①基于List结构的基础队列实现 ②PubSub模式的发布订阅机制 ③Stream数据类型（含单消费/消费者组模式）。通过异步秒杀案例演示Stream队列的应用，包括Lua脚本编写与Java业务改造，对比了各方案的优缺点，重点说明Stream队列的持久化特性及适用场景。]]></description><category></category></item><item><title><![CDATA[SpringCloud微服务八股文-五大组件、注册中心（Eureka与Nacos）]]></title><link>https://blog.csdn.net/Crayon26/article/details/147515834</link><guid>https://blog.csdn.net/Crayon26/article/details/147515834</guid><author>Crayon26</author><pubDate>Tue, 20 May 2025 09:27:55 +0800</pubDate><description><![CDATA[本文系统解析SpringCloud微服务五大核心组件（注册中心、配置中心、网关、熔断器、负载均衡），深度对比Eureka与Nacos注册中心的设计差异，剖析CAP理论下的AP/CP模型选择策略。结合源码解析与高频面试题，详解服务发现、心跳机制及Nacos动态配置优势，助力开发者构建高可用微服务架构并轻松应对面试挑战。]]></description><category></category></item><item><title><![CDATA[Redis实现优惠卷异步秒杀优化]]></title><link>https://blog.csdn.net/Crayon26/article/details/148077616</link><guid>https://blog.csdn.net/Crayon26/article/details/148077616</guid><author>Crayon26</author><pubDate>Tue, 20 May 2025 01:17:45 +0800</pubDate><description><![CDATA[本文深度解析Redis异步秒杀优化全链路方案，基于Lua脚本实现原子性库存扣减杜绝超卖，结合阻塞队列削峰填谷缓解高并发压力，通过异步下单分离业务逻辑提升响应速度。详解线程池任务编排、订单状态同步及异常回滚机制，破解系统崩溃与用户体验卡顿难题，]]></description><category></category></item><item><title><![CDATA[Redisson分布式锁-锁的可重入、可重试、WatchDog超时续约、multLock联锁(一文全讲透，超详细!!!)]]></title><link>https://blog.csdn.net/Crayon26/article/details/147999097</link><guid>https://blog.csdn.net/Crayon26/article/details/147999097</guid><author>Crayon26</author><pubDate>Fri, 16 May 2025 09:53:17 +0800</pubDate><description><![CDATA[本文深入剖析Redisson分布式锁四大核心机制—可重入设计保障线程安全递归调用、非阻塞重试优化锁竞争效率、WatchDog自动续期破解业务长耗时锁失效难题，以及MultiLock联锁强化分布式场景容错性。通过源码解析与实战演示，详解高并发场景下分布式锁的正确落地姿势，助力开发者构建健壮的分布式系统。]]></description><category></category></item><item><title><![CDATA[Redis实现-优惠卷秒杀(基础版本)]]></title><link>https://blog.csdn.net/Crayon26/article/details/147948529</link><guid>https://blog.csdn.net/Crayon26/article/details/147948529</guid><author>Crayon26</author><pubDate>Wed, 14 May 2025 10:47:55 +0800</pubDate><description><![CDATA[本文实战讲解基于Redis实现高并发优惠券秒杀系统。从全局唯一ID生成策略切入，剖析Redis原子操作解决超卖问题，详解乐观锁与原生分布式锁实现并发控制，通过用户ID绑定锁机制破解“一人一单”难题。手把手演示纯Redis命令构建安全高效的秒杀架构，助力开发者掌握高并发场景下的核心解决方案。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机-JVM调优、内存泄漏排查、CPU飙高排查]]></title><link>https://blog.csdn.net/Crayon26/article/details/147455860</link><guid>https://blog.csdn.net/Crayon26/article/details/147455860</guid><author>Crayon26</author><pubDate>Wed, 23 Apr 2025 15:57:51 +0800</pubDate><description><![CDATA[本文系统解析JVM性能调优与故障排查，涵盖GC参数配置、内存泄漏检测及CPU飙高定位方法（线程快照与热点代码分析）。详解堆内存溢出根因（大对象分配）。助开发者掌握调优策略与异常排查链路，提升高并发场景下Java应用的稳定性与性能表现。]]></description><category></category></item><item><title><![CDATA[集合常见数据结构-二叉树、红黑树、散列表]]></title><link>https://blog.csdn.net/Crayon26/article/details/147442770</link><guid>https://blog.csdn.net/Crayon26/article/details/147442770</guid><author>Crayon26</author><pubDate>Wed, 23 Apr 2025 10:31:15 +0800</pubDate><description><![CDATA[本文详解Java集合中二叉树、红黑树及散列表的核心实现，剖析二叉树遍历逻辑、红黑树自平衡机制与散列表哈希冲突解决方案。详解红黑树优化查询效率的原理、链表转树的阈值及负载因子对散列表性能的影响，探讨数据结构设计在集合类中的实际应用场景与性能取舍，助力开发者深入理解底层机制，优化高并发与大数据量下的代码实践。]]></description><category></category></item><item><title><![CDATA[如何衡量算法好坏-事前分析法]]></title><link>https://blog.csdn.net/Crayon26/article/details/145879425</link><guid>https://blog.csdn.net/Crayon26/article/details/145879425</guid><author>Crayon26</author><pubDate>Wed, 23 Apr 2025 09:52:03 +0800</pubDate><description><![CDATA[事前分析法通过理论模型预判算法性能，聚焦设计阶段的理论极限；事后分析法则基于运行实测数据，揭示代码在真实环境中的实际表现。二者互为补充，理论结合实践，精准定位性能瓶颈，优化效率事半功倍。本文详解双视角方法论，助你从原理到实战全面提升代码质量！]]></description><category></category></item><item><title><![CDATA[JVM虚拟机-垃圾回收(垃圾回收器、垃圾回收算法、分代回收、四大引用)]]></title><link>https://blog.csdn.net/Crayon26/article/details/147434223</link><guid>https://blog.csdn.net/Crayon26/article/details/147434223</guid><author>Crayon26</author><pubDate>Wed, 23 Apr 2025 00:28:52 +0800</pubDate><description><![CDATA[本文系统解析JVM垃圾回收机制，详解分代回收模型（新生代/老年代）、标记-清除/复制/整理算法原理，对比Serial、CMS、G1等回收器核心差异。结合强引用、软引用、弱引用、虚引用的应用场景与内存管理策略，探讨GC调优参数配置及内存泄漏排查思路，助力开发者理解回收逻辑，优化Java应用性能与稳定性。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机-类加载器、双亲委派模型、类装载的执行过程]]></title><link>https://blog.csdn.net/Crayon26/article/details/147434099</link><guid>https://blog.csdn.net/Crayon26/article/details/147434099</guid><author>Crayon26</author><pubDate>Wed, 23 Apr 2025 00:07:56 +0800</pubDate><description><![CDATA[本文系统解析JVM类加载机制，详解类加载器分类（启动类、扩展类、应用类加载器）、双亲委派模型工作原理，结合类装载流程（加载→链接→初始化）剖析字节码加载与静态资源分配逻辑。助力开发者深入理解类动态加载原理，提升自定义类加载器设计与内存泄漏排查能力。]]></description><category></category></item><item><title><![CDATA[JVM虚拟机--JVM的组成]]></title><link>https://blog.csdn.net/Crayon26/article/details/147320179</link><guid>https://blog.csdn.net/Crayon26/article/details/147320179</guid><author>Crayon26</author><pubDate>Sat, 19 Apr 2025 16:10:24 +0800</pubDate><description><![CDATA[本文系统解析JVM核心组成与内存模型，详解程序计数器、堆（分代结构与GC机制）、方法区（元空间）、直接内存及虚拟机栈（栈帧与线程私有性）。针对高频问题，探讨栈内存与垃圾回收的关系、局部变量线程安全性、栈溢出触发条件，并对比堆栈的核心差异。结合实例剖析内存分配策略与性能隐患，助开发者深入理解JVM运行机制，提升内存调优与异常排查能力。]]></description><category></category></item></channel></rss>