<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_39701205的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_39701205</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_39701205]]></copyright><item><title><![CDATA[分布式事务处理方案]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/148239037</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/148239037</guid><author>qq_39701205</author><pubDate>Mon, 26 May 2025 23:48:49 +0800</pubDate><description><![CDATA[Saga模式是SEATA提供的长事务解决方案，在Saga模式中，业务流程中每个参与者都提交本地事务，当出现某一个参与者失败则补偿前面已经成功的参与者，一阶段正向服务和二阶段补偿服务都由业务开发实现。RM1：开启本地事务 -> 业务SQL + undo_log -> 获取记录全局锁 -> 提交本地事务 -> 上报给TC执行结果。由于为保证消息的可靠性引入本地消息表，并且定时异步扫描，所以在性能方面要比RocketMQ差，并且代码量会更大，设计更加复杂。接口，提供一个回查的接口。]]></description><category></category></item><item><title><![CDATA[线程池配置经验总结]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/148207185</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/148207185</guid><author>qq_39701205</author><pubDate>Sun, 25 May 2025 15:26:54 +0800</pubDate><description><![CDATA[当最大线程数超过CPU核心线程数后直接表现就是提高CPU的负载，然后就是线程对内存的占用。没有放之四海皆准的完美配置，最佳参数需要通过监控和调优不断调整。当上下文切换次数超过核心数×10000/秒时性能下降。可以获取k8s限制后的CPU数。突发流量频繁的系统可适当延长。资源紧张的系统可缩短时间。通常设置为60秒左右。]]></description><category></category></item><item><title><![CDATA[CPU飚高处理经验总结]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/148185546</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/148185546</guid><author>qq_39701205</author><pubDate>Sat, 24 May 2025 15:15:27 +0800</pubDate><description><![CDATA[来 输出线程ID 44616 的16进制是 ae48，可以确定导致CPU飙高的原因就是 Thread-0 线程导致。CPU负载（CPU Load）和CPU使用率（CPU Utilization）是衡量系统性能的两个关键指标，它们既有区别又有联系，通常需要结合分析才能全面理解CPU的工作状态。：1/5/15分钟的平均负载（参考值：≤ CPU核心数）。：运行中的进程数（CPU繁忙的直接体现）。：I/O等待时间（高则可能磁盘瓶颈）。：僵尸进程数（若不为0需排查）。：用户态CPU时间（：空闲CPU百分比。]]></description><category></category></item><item><title><![CDATA[Redis 缓存使用的BigKey问题]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/148172522</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/148172522</guid><author>qq_39701205</author><pubDate>Fri, 23 May 2025 21:48:40 +0800</pubDate><description><![CDATA[BigKey指在 Redis 中存储的单个 Key 对应的 Value 过大String 类型：Value 长度 > 10KB。：元素数量 > 5,000 或总大小 > 10MB。]]></description><category></category></item><item><title><![CDATA[Redis 缓存使用的热点Key问题]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/148174885</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/148174885</guid><author>qq_39701205</author><pubDate>Fri, 23 May 2025 19:35:50 +0800</pubDate><description><![CDATA[方案适用场景优缺点本地缓存读多写少，允许短暂不一致简单高效，但需控制缓存时间Key 分片可水平拆分的统计类数据分散压力，但增加代码复杂度多级缓存高并发系统（如电商详情页）架构复杂，适合长期优化限流熔断突发流量（秒杀、大促）牺牲部分请求，保系统整体稳定监控发现：通过或 Prometheus 定位热点 Key；减少穿透：用本地缓存 + 永不过期策略；分散压力：分片存储或读写分离；兜底措施：限流熔断避免雪崩。根据业务特点灵活组合方案，才能有效解决热点 Key 问题！]]></description><category></category></item><item><title><![CDATA[MVCC多版本并发控制协议]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/147175030</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/147175030</guid><author>qq_39701205</author><pubDate>Sun, 13 Apr 2025 01:09:21 +0800</pubDate><description><![CDATA[MVCC 指的是一个数据的多个版本，使得读写操作没有冲突，快照读使MySQL为实现MVCC的一个非阻塞功能，提升数据库的并发性能。解决并发事、务访问中出现的脏读、不可重复读、幻读。]]></description><category></category></item><item><title><![CDATA[MySQL索引介绍]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/147166078</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/147166078</guid><author>qq_39701205</author><pubDate>Sat, 12 Apr 2025 20:57:39 +0800</pubDate><description><![CDATA[总结：数据库最大的性能损耗就在磁盘IO上，这也是Redis比MySQL快很多的最大原因。索引是依靠某些数据结构和算法来组织数据，尽最大可能去利用磁盘的的顺序IO，并减少IO的次数来优化数据库的访问速度。]]></description><category></category></item><item><title><![CDATA[SpringBoot 异常处理]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/146468810</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/146468810</guid><author>qq_39701205</author><pubDate>Mon, 24 Mar 2025 16:33:59 +0800</pubDate><description><![CDATA[通过源码解读SpringMVC的异常处理逻辑]]></description><category></category></item><item><title><![CDATA[Docker基础知识介绍]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/146296861</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/146296861</guid><author>qq_39701205</author><pubDate>Sun, 16 Mar 2025 16:34:03 +0800</pubDate><description><![CDATA[基础镜像 centos，Docker 绝大部分的基础镜像都是 scratch ，相当于Java 的 Object#把宿主机当前上下文的hello.txt拷贝到容器/usr/local/路径下#把java与tomcat添加到容器中#安装vim编辑器#设置工作访问时候的WORKDIR路径，登录落脚点#配置java与tomcat环境变量#容器运行时监听的端口#启动时运行tomcat。]]></description><category></category></item><item><title><![CDATA[Docker镜像配置]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/145124375</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/145124375</guid><author>qq_39701205</author><pubDate>Fri, 17 Jan 2025 14:38:47 +0800</pubDate><description><![CDATA[Docker 安装完成后镜像一直获取不成功，网上也有很多方法，貌似都不太管用，这里详细说明一下。]]></description><category></category></item><item><title><![CDATA[Ubuntu把应用程序放到桌面]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/145168123</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/145168123</guid><author>qq_39701205</author><pubDate>Wed, 15 Jan 2025 21:28:07 +0800</pubDate><description><![CDATA[把应用程序放到桌面]]></description><category></category></item><item><title><![CDATA[Linux进程操作]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/145099504</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/145099504</guid><author>qq_39701205</author><pubDate>Sun, 12 Jan 2025 21:27:54 +0800</pubDate><description><![CDATA[我们还要解释一下缓冲（buffer）和缓存（cache）的区别： 缓存（cache）是在读取硬盘中的数据时，把最常用的数据保存在内存的缓存区中，再次读取该数据时，就不去硬盘中读取了，而在缓存中读取。缓冲（buffer）是在向硬盘写入数据时，先把数据放入缓冲区,然后再一起向硬盘写入，把分散的写操作集中进行，减少磁盘碎片和硬盘的反复寻道，从而提高系统性能。简单来说，缓存（cache）是用来加速数据从硬盘中"读取"的，而缓冲（buffer）是用来加速数据"写入"硬盘的。-n 次数：指定 top 命令执行的次数。]]></description><category></category></item><item><title><![CDATA[CentOS下安装Docker]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/145097544</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/145097544</guid><author>qq_39701205</author><pubDate>Sun, 12 Jan 2025 19:12:46 +0800</pubDate><description><![CDATA[CentOS 下Docker的使用]]></description><category></category></item><item><title><![CDATA[JVM 垃圾回收算法]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/140494007</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/140494007</guid><author>qq_39701205</author><pubDate>Wed, 17 Jul 2024 17:37:54 +0800</pubDate><description><![CDATA[通过一系列称为“GC Roots”的根对象作为起始节点，根据引用关系向下搜索，搜索过程所走过的路径称为“引用链”(Reference Chain)，如果某个对象到GC Roots间没有任何引用链相连，或者用图论的话来说就是从GC Roots到这个对象不可达时，则证明此对象是不可能再被使用的。收集器将Java堆划分出不同的区域，然后将回收对象依据其年龄（年龄即对象熬过垃圾收集过程的次数）分配到不同的区域之中存储，针对不同的区域安排与里面存储对象存亡特征相匹配的垃圾收集算法。]]></description><category></category></item><item><title><![CDATA[JVM内存划分]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/140485044</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/140485044</guid><author>qq_39701205</author><pubDate>Wed, 17 Jul 2024 14:15:10 +0800</pubDate><description><![CDATA[直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分，在JDK 1.4中新加入了NIO(New Input/Output)类，引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式，它可以使用Native函数库直接分配堆外内存，然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。ava堆既可以被实现成固定大小的，也可以是可扩展的，不过当前主流的Java虚拟机都是按照可扩展来实现的（通过参数-Xmx和-Xms设定）。]]></description><category></category></item><item><title><![CDATA[类的加载机制详解]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/140469585</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/140469585</guid><author>qq_39701205</author><pubDate>Tue, 16 Jul 2024 17:44:19 +0800</pubDate><description><![CDATA[一个类型从被加载到虚拟机内存中开始，到卸载出内存为止，它的整个生命周期将会经历以下几个阶段准备(Preparation)：准备阶段是正式为类中定义的变量（即静态变量，被static修饰的变量）分配内存并设置类变量初始值的阶段，这时候进行内存分配的仅包括类变量，而不包括实例变量，实例变量将会在对象实例化时随着对象一起分配在Java堆中。这个时候的初始值指的是数据类型的默认值，不是我们编码定义的那个值。解析(Resolution)：解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程。]]></description><category></category></item><item><title><![CDATA[volatile关键字详解]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/140461349</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/140461349</guid><author>qq_39701205</author><pubDate>Tue, 16 Jul 2024 15:49:08 +0800</pubDate><description><![CDATA[volatile 关键字在并发三特性中只有可见性和有序性，所以并不能保证并发的安全，并发安全还是得使用synchronized 关键字来保证。]]></description><category></category></item><item><title><![CDATA[万字长文带你认识DDD领域驱动]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/138322588</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/138322588</guid><author>qq_39701205</author><pubDate>Thu, 11 Jul 2024 16:23:13 +0800</pubDate><description><![CDATA[关于DDD领域驱动介绍的书内容大多都是概念，落地的架构代码实现派系众多，很多初学者不得其道，其实我们只要抓住以下最核心的问题在工作设计中去深入体会即可：DDD 第一个重要部分就是战略设计，战略设计就是业务分析、创建领域模型，通常有事件风暴、四色建模法等，这里文章提及比较少，自己可以学习相关方法，提升自己的业务分析建模能力DDD第二个重要部分就是战术设计，战术设计就是合理的代码分层、分包、利用战略设计的建模来创建聚合、实体，使业务代码稳定健壮。]]></description><category></category></item><item><title><![CDATA[线程池的使用]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/140351838</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/140351838</guid><author>qq_39701205</author><pubDate>Thu, 11 Jul 2024 15:27:04 +0800</pubDate><description><![CDATA[以下是线程池的构造方法源码，我们依次解释如果当前任务队列待执行任务数量小于核心线程池数量，执行器总是优先创建一个任务线程如果当前任务队列待执行任务数量大于核心线程池数量，执行器总是优先从线程池中取一个空闲线程如果当前任务队列待执行任务数量大于核心线程池数量，且线程池中无空闲任务线程，将会创建一个任务线程，直到超出maximumPoolSize，如果超时maximumPoolSize，则任务将会被拒绝。]]></description><category></category></item><item><title><![CDATA[JUC包中的各种同步器]]></title><link>https://blog.youkuaiyun.com/qq_39701205/article/details/139094689</link><guid>https://blog.youkuaiyun.com/qq_39701205/article/details/139094689</guid><author>qq_39701205</author><pubDate>Wed, 10 Jul 2024 18:24:20 +0800</pubDate><description><![CDATA[park()： 阻塞当前线程，直到unpark方法被调用或当前线程被中断，park方法才会返回。parkNanos(long nanos)： 同park方法，nanos表示最长阻塞超时时间，超时后park方法将自动返回。单位是纳秒 ，1秒 = 100010001000 纳秒parkUntil(long deadline)： 同park()方法，deadline参数表示最长阻塞到某一个时间点，当到达这个时间点，park方法将自动返回。（该时间为从1970年到现在某一个时间点的毫秒数）]]></description><category></category></item></channel></rss>