<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Daoxifu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Daoxifu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Daoxifu]]></copyright><item><title><![CDATA[Elasticsearch 写入全链路：从单机到集群]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/150558953</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/150558953</guid><author>Daoxifu</author><pubDate>Wed, 20 Aug 2025 17:51:37 +0800</pubDate><description><![CDATA[写 → buffer + translog →（1s）refresh（可查但未持久化）→（周期/阈值）flush（持久化并清空 translog）→（后台）merge（优化查询）。（磁盘上的操作日志文件，但默认先进 OS page cache，有个参数控制什么时候真正落盘，1.3会提到，其实默认就是直接刷盘）。：写 → buffer + translog → refresh（可搜） → flush（持久化） → merge（优化）。：用不可变 segment + 异步合并，换取简单、稳定、可伸缩。]]></description><category></category></item><item><title><![CDATA[消息队列中的推模式与拉模式]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/150495988</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/150495988</guid><author>Daoxifu</author><pubDate>Mon, 18 Aug 2025 16:54:11 +0800</pubDate><description><![CDATA[推模式（Push）Broker 主动把消息推送给消费者，消费者只需要处理并返回 ACK。拉模式（Pull）消费者主动从 Broker 拉取消息，决定什么时候拉、一次拉多少。特性推模式（RabbitMQ）拉模式（Kafka/RocketMQ）定位低延迟、复杂路由、中小规模通信高吞吐、日志流、大数据场景延迟极低长轮询优化后 ≈ 推模式流控需要额外机制（prefetch）天然支持，消费者自控吞吐量单条为主，批量弱批量拉取，高吞吐存储模型队列（需要 ACK 管理状态）]]></description><category></category></item><item><title><![CDATA[死信队列，从死信到死信的死信]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/149708516</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/149708516</guid><author>Daoxifu</author><pubDate>Mon, 28 Jul 2025 10:03:17 +0800</pubDate><description><![CDATA[在消息系统中，消息消费失败（重试多次，超时收不到ack）是一种必然存在的异常。例如：消费者业务逻辑抛出异常，无法处理消息；消息格式不符合预期，字段缺失；某些系统服务下线、数据库不可用，导致消息积压；队列满了、新消息无法入队；在这些情况下，默认行为是将消息丢弃或者反复尝试消费（根据配置），这显然不够健壮。为了提升系统的稳定性，需要一个机制把这些失败的消息收集起来进行后续处理或报警，这就是死信队列的价值所在。]]></description><category></category></item><item><title><![CDATA[CSRF 攻击原理与实验测试（附可运行测试案例）]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/149098561</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/149098561</guid><author>Daoxifu</author><pubDate>Tue, 15 Jul 2025 17:29:17 +0800</pubDate><description><![CDATA[CSRF就是跨站请求伪造，英文名 Cross-Site Request Forgery，是一种利用浏览器自动携带 Cookie的特性进行的攻击。攻击者诱导用户访问一个恶意页面，这个页面在用户不知情的情况下，向另一个已登录站点发起请求，执行敏感操作（如转账、发帖等）。关键点：依赖于 浏览器自动附带 Cookie用户必须 已登录目标站点攻击页面发起的是 合法路径的 HTTP 请求就比如，1、你在浏览器登录了某 xx 平台的账号。]]></description><category></category></item><item><title><![CDATA[指令重排序带来的多线程问题与volatile解决方案]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/149226683</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/149226683</guid><author>Daoxifu</author><pubDate>Fri, 11 Jul 2025 11:11:42 +0800</pubDate><description><![CDATA[指令重排序是编译器、JVM 和 CPU 优化性能的常见手段。
为了提高执行效率，编译器、JVM、CPU可能会在不影响单线程语义的前提下，改变代码执行的顺序。
但它可能会导致并发程序出现不可预测或错误的行为。举个例子：
你以为执行顺序是A → B，但编译器可能会调换它们的顺序，或者 CPU 同时执行它们。不管是并行执行还是真的改变顺序，都是指令重排序。不过 C总得最后执行。因为 C有对 A B 的依赖关系。系统的多级优化可能会带来三种重排序：
1、编译器优化重排序
Java 编译器会在生成字节码或机器码时重排]]></description><category></category></item><item><title><![CDATA[底层解剖ThreadLocal及其引发的内存泄漏问题]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/149232700</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/149232700</guid><author>Daoxifu</author><pubDate>Thu, 10 Jul 2025 10:31:28 +0800</pubDate><description><![CDATA[内存泄漏，并不是顾名思义的说这个线程想独有的内存给别的线程偷偷抢走了，而是，内存不能被回收，就是内存泄露。]]></description><category></category></item><item><title><![CDATA[应用层解决TCP粘包与拆包问题]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/149089955</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/149089955</guid><author>Daoxifu</author><pubDate>Thu, 03 Jul 2025 18:27:22 +0800</pubDate><description><![CDATA[有些地方说http是靠特殊字符解决粘包拆包问题的，这个说法不对]]></description><category></category></item><item><title><![CDATA[算法题—最长和谐子序列]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/149017294</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/149017294</guid><author>Daoxifu</author><pubDate>Mon, 30 Jun 2025 10:17:00 +0800</pubDate><description><![CDATA[和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1。给你一个整数数组 nums ，请你在所有可能的 子序列 中找到最长的和谐子序列的长度。数组的 子序列 是一个由数组派生出来的序列，它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。示例：输入：nums = [1,3,2,2,5,2,3,7]输出：5解释：最长和谐子序列是 [3,2,2,2,3]。]]></description><category></category></item><item><title><![CDATA[不可重复读 vs 幻读]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148893376</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148893376</guid><author>Daoxifu</author><pubDate>Wed, 25 Jun 2025 10:32:46 +0800</pubDate><description><![CDATA[在一个事务中，前后两次读取同一行记录，但第二次读取的值和第一次不同，原因是另一个事务在中间修改或删除了该行数据并提交了。在一个事务中，前后两次对某个范围（WHERE 条件）进行查询时，第二次读出的行数比第一次多或少了，原因是另一个事务插入或删除了满足条件的新记录。项目不可重复读幻读关注点同一条记录查询范围内的数据行原因其他事务修改或删除了已存在的记录其他事务插入或删除了新记录表现同一行数据两次读取不一致或消失相同条件下读取结果行数变多或变少解决方式。]]></description><category></category></item><item><title><![CDATA[IN子查询与JOIN的区别理解]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148866945</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148866945</guid><author>Daoxifu</author><pubDate>Tue, 24 Jun 2025 11:20:13 +0800</pubDate><description><![CDATA[深入对比IN子查询和JOIN的本质区别、适用场景、性能表现、以及可能隐藏的坑。]]></description><category></category></item><item><title><![CDATA[git stash的使用场景与方法]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148734151</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148734151</guid><author>Daoxifu</author><pubDate>Wed, 18 Jun 2025 11:00:26 +0800</pubDate><description><![CDATA[git stash是Git中用于临时保存当前工作目录和暂存区的修改的命令，最常用于这个场景：⚠️ 当你正在开发某个功能，但突然需要切换到其他分支去修复一个 bug，但当前的代码还没写完，不能提交。这时就可以用 git stash 暂存当前进度。然后切换分支改bug，改完回来还能恢复刚才的进度。]]></description><category></category></item><item><title><![CDATA[关于Spring中用到的设计模式]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148651234</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148651234</guid><author>Daoxifu</author><pubDate>Mon, 16 Jun 2025 08:58:52 +0800</pubDate><description><![CDATA[Spring 是基础框架，Spring Boot 则是对 Spring 的自动配置和工程整合。所以这些设计模式大多数 Spring 和 Spring Boot 都会用到，只是 Spring Boot 更倾向于简化配置和增强自动化能力。]]></description><category></category></item><item><title><![CDATA[算法题（力扣每日一题）—改变一个整数能得到的最大差值]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148666657</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148666657</guid><author>Daoxifu</author><pubDate>Sun, 15 Jun 2025 10:13:20 +0800</pubDate><description><![CDATA[给你一个整数 num。你可以对它进行以下步骤共计 两次：选择一个数字 x (0 <= x <= 9).选择另一个数字 y (0 <= y <= 9)。数字 y 可以等于 x。将 num中所有出现 x 的数位都用 y 替换。令两次对 num 的操作得到的结果分别为 a 和 b。请你返回 a 和 b 的 最大差值。注意，新的整数（a 或 b）必须不能 含有前导 0，并且 非 0。]]></description><category></category></item><item><title><![CDATA[算法题—每种字符至少取 K 个]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148651170</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148651170</guid><author>Daoxifu</author><pubDate>Sat, 14 Jun 2025 12:50:33 +0800</pubDate><description><![CDATA[给你一个由字符 ‘a’、‘b’、‘c’ 组成的字符串 s 和一个非负整数 k。每分钟，你可以选择取走 s 最左侧 / 最右侧的那个字符。你必须取走每种字符 至少 k 个，返回需要的 最少 分钟数；如果无法取到，则返回 -1。示例 1：输入：s = “aabaaaacaabc”, k = 2输出：8解释： 从 s 的左侧取三个字符，现在共取到两个字符 ‘a’、一个字符 ‘b’。从 s 的右侧取五个字符，现在共取到四个字符 ‘a’ 、两个字符 ‘b’ 和两个字符 ‘c’。]]></description><category></category></item><item><title><![CDATA[无痛实现数据库扩容——水平扩展方案]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148593475</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148593475</guid><author>Daoxifu</author><pubDate>Fri, 13 Jun 2025 15:03:33 +0800</pubDate><description><![CDATA[主从复制、数据库分片、集群]]></description><category></category></item><item><title><![CDATA[关于数据库主从复制与主从同步的方法及一些问题]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148609346</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148609346</guid><author>Daoxifu</author><pubDate>Thu, 12 Jun 2025 14:31:17 +0800</pubDate><description><![CDATA[因为binlog记录的是连接内的全部数据库，而我们需要主从同步的往往只有其中的某一个数据库，那么binlog是怎么确定的?——有过滤的。因为binlog的每条记录里面会存。]]></description><category></category></item><item><title><![CDATA[关于逻辑删除字段命名及其索引问题]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148433754</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148433754</guid><author>Daoxifu</author><pubDate>Tue, 10 Jun 2025 14:24:56 +0800</pubDate><description><![CDATA[因为Java Bean规范和框架对getter方法名与属性名映射的规则，自动化框架是根据getter方法名来推断属性名的，在使用isDeleted()去反射属性名的时候，会认为你的属性名是isDeleted()去掉 is 改小写也就是deleted，而不是你的isDeleted，这样就出错了。，因为同一时间，表里始终只需要一个delete=0的记录，即正在使用的，其他的都是被逻辑删掉的即可，所以我们可以让被逻辑删掉的这些记录的delete=其中，(device，version)还是一组唯一索引，给。]]></description><category></category></item><item><title><![CDATA[算法题—删掉一个元素以后全为 1 的最长子数组]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148536063</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148536063</guid><author>Daoxifu</author><pubDate>Mon, 09 Jun 2025 15:34:51 +0800</pubDate><description><![CDATA[给你一个二进制数组 nums ，你需要从中删掉一个元素。请你在删掉元素的结果数组中，返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组，请返回 0。示例 1：输入：nums = [1,1,0,1]输出：3解释：删掉位置 2 的数后，[1,1,1] 包含 3 个 1。示例 2：输入：nums = [0,1,1,1,0,1,1,0,1]输出：5解释：删掉位置 4 的数字后，[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1]。]]></description><category></category></item><item><title><![CDATA[算法题—整数反转——时间100%空间99.73%]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148535956</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148535956</guid><author>Daoxifu</author><pubDate>Mon, 09 Jun 2025 15:31:29 +0800</pubDate><description><![CDATA[给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。假设环境不允许存储 64 位整数（有符号或无符号）。]]></description><category></category></item><item><title><![CDATA[关于ElasticSearch以及ES和数据库同步问题]]></title><link>https://blog.youkuaiyun.com/Daoxifu/article/details/148477568</link><guid>https://blog.youkuaiyun.com/Daoxifu/article/details/148477568</guid><author>Daoxifu</author><pubDate>Fri, 06 Jun 2025 16:44:49 +0800</pubDate><description><![CDATA[ElasticSearch是一个基于Lucene的分布式、高性能全文搜索和分析引擎，常被用于处理大规模结构化和非结构化数据。它具备强大的搜索、分析、聚合能力，广泛应用于日志分析、监控系统、商品搜索引擎等场景。]]></description><category></category></item></channel></rss>