<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[H_Rhui的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/H_Rhui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; H_Rhui]]></copyright><item><title><![CDATA[设定一百亿人，按照高矮顺序排队怎么计算]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/155461030</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/155461030</guid><author>H_Rhui</author><pubDate>Mon, 01 Dec 2025 20:03:18 +0800</pubDate><description><![CDATA[题目说的是把人按高矮排序。咱们今天不聊那些虚头巴脑的时间复杂度公式，也不整那些花里胡哨的PPT架构图，就实打实地聊聊，如果明天老板真把这活儿扔给你，这100亿条数据拍在你脸上，你该怎么把它们给捋顺了。从最上层的算法思想（分治、桶排序），到中间的工程架构（分布式、Shuffle、负载均衡），再到底层的硬件特性（顺序读写vs随机读写、内存缓存），你需要打通这所有的关卡。一旦数据量到了100亿这个级别，到了海量并发这个级别，任何一点算法上的复杂度劣势，任何一点IO上的浪费，都会被放大无数倍，最后变成生产事故。]]></description><category></category></item><item><title><![CDATA[技术文章推荐]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/131170626</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/131170626</guid><author>H_Rhui</author><pubDate>Mon, 01 Dec 2025 19:59:03 +0800</pubDate><description><![CDATA[腾讯工程师，万字长文说 Code ReviewChatGPT插件开发教程（二）：开发一个掘金的Chatgpt插件 - 掘金


https://github.com/jerryjiao/Express-ChatGpt-plugin-Starter
 一、嗨！JavaAgent | bugstack 虫洞栈GitHub - itwanger/paicoding: ⭐️一款好用又强大的开源社区，基于 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、Mongo]]></description><category></category></item><item><title><![CDATA[“全双工“是什么]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/137406768</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/137406768</guid><author>H_Rhui</author><pubDate>Fri, 05 Apr 2024 19:10:38 +0800</pubDate><description><![CDATA[全双工是通讯传输的一个术语。通信允许数据在两个方向上同时传输，它在能力上相当于两个单工通信方式的结合。全双工指可以同时（瞬时）进行信号的双向传输（A→B且B→A）。指A→B的同时B→A，是瞬时同步的。Channel 是全双工的。在 UNIX 网络编程模型中，底层操作系统的通道都是全双工的，同时支持读写操作。单工的话，一个时间点只能A->B 或者 B->A。现在打电话就是全双工的，多方可以同时喊话聊天。“全双工”这个词语，我第一次看到的时候，感觉不明觉厉；我是在"NIO"这里接触到的“全双工”]]></description><category></category></item><item><title><![CDATA[使用ArrayList sort 导致的并发问题]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/137406433</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/137406433</guid><author>H_Rhui</author><pubDate>Fri, 05 Apr 2024 19:00:57 +0800</pubDate><description><![CDATA[近期调整一个作业流程，内容大致如下：在主流程获取依赖数据结束之后，将依赖数据做一个备份，另起一个线程，和主流程做类似的后续流程。如果依赖的数据没有做深拷贝，这个过程中不可避免会遇到多线程问题。依赖的数据中有一些基础数据是List 的形式，基础数据的基准原理就是不改动，加上基础数据量大，考虑性能问题没有进行深拷贝。此时，在大量请求进来时，发现出现零星的报错：ConcurrentModificationException。]]></description><category></category></item><item><title><![CDATA[Spring boot 自动装配原理]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/131178249</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/131178249</guid><author>H_Rhui</author><pubDate>Tue, 13 Jun 2023 07:33:55 +0800</pubDate><description><![CDATA[上一篇。这一篇我们看一下Spring boot 自动装配的原理。]]></description><category></category></item><item><title><![CDATA[Spring Boot 回顾]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/131159592</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/131159592</guid><author>H_Rhui</author><pubDate>Sun, 11 Jun 2023 23:30:40 +0800</pubDate><description><![CDATA[Spring Boot 的发展是很快的，也使用了很多年。但是在工作中，还是发现了很多公司还没有怎么使用 Spring Boot，依旧是在使用 Spring MVC。于是决定复习总结一下。框架的进步和飞跃很重要，但是也不能一味追求新鲜事物，历史的很多东西都是要持续维护的。]]></description><category></category></item><item><title><![CDATA[国内如果失去Spring框架会怎么样]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/129403775</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/129403775</guid><author>H_Rhui</author><pubDate>Wed, 08 Mar 2023 15:09:30 +0800</pubDate><description><![CDATA[国内如果失去Spring框架会怎么样]]></description><category></category></item><item><title><![CDATA[IDEA使用Terminal时，Esc无法退出insert mode]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/127666557</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/127666557</guid><author>H_Rhui</author><pubDate>Thu, 03 Nov 2022 11:14:47 +0800</pubDate><description><![CDATA[IDEA使用Terminal时，Esc无法退出insert mode]]></description><category></category></item><item><title><![CDATA[序列化进阶2-常见序列化框架]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/125514125</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/125514125</guid><author>H_Rhui</author><pubDate>Wed, 29 Jun 2022 09:30:01 +0800</pubDate><description><![CDATA[上一篇 序列化进阶1-Java序列化注意事项。Java 序列化还可以实现 深克隆哦。在 Java 中存在一个 Cloneable 接口，通过实现这个接口的类都会具备clone 的能力，同时 clone 是在内存中进行，在性能方面会比我们直接通过 new 生成对象要高一些，特别是一些大的对象的生成，性能提升相对比较明显。深克隆和浅克隆在这就不谈了。Java 序列化实现深克隆的原理是把对象序列化输出到一个流中，然后再把对象从序列化流中读取出来，这个对象就不是原来的对象了。序列化框架开源工具优势劣势JavaJAV]]></description><category></category></item><item><title><![CDATA[序列化进阶1-Java序列化注意事项]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/125309634</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/125309634</guid><author>H_Rhui</author><pubDate>Thu, 16 Jun 2022 09:27:54 +0800</pubDate><description><![CDATA[上一篇小作文，我们介绍了什么是序列化 认识序列化。下面我们谈一谈，Java 序列化的注意事项。静态变量不能被序列化。序列化保存的是对象状态，静态变量保存的是类状态，因此序列化并不保存静态变量。transient 关键字的作用是阻止变量的序列化，变量声明时加上该关键字，变量将不再是对象持久化的一部分，该变量内容在序列化后无法被访问，即反序列化后，transient变量的值被设为初始值，如 int 类型的是 0，对象类型的是 nulltransient关键字只能修饰变量，而不能修饰方法和类。本地变量是不能被tr]]></description><category></category></item><item><title><![CDATA[认识序列化]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/125269222</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/125269222</guid><author>H_Rhui</author><pubDate>Mon, 13 Jun 2022 22:54:25 +0800</pubDate><description><![CDATA[什么是序列化？我理解的序列化就是将数据按照某种规则转换一种方式存储，实现对数据的压缩和跨平台使用。应用到 Java 对象序列化就可以理解为：对象脱离JVM 的限制进行持久化传输和使用。Java 平台允许我们在内存中创建可复用的 Java 对象，但一般情况下，只有当 JVM 处于运行时，这些对象才可能存在，即，这些对象的生命周期不会比 JVM 生命周期更长。但在现实应用中，就可能要求在 JVM停止运行之后能够保存(持久化)指定的对象，并在将来重新读取被保存的对象。Java 对象序列化就能够帮助我们实现该功能简]]></description><category></category></item><item><title><![CDATA[分布式系统中的CAP理论]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/124911507</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/124911507</guid><author>H_Rhui</author><pubDate>Sun, 22 May 2022 15:41:25 +0800</pubDate><description><![CDATA[CAP理论指的是一个分布式系统最多只能同时满足一致性（Consistency）、可用性（Availability）和分区容错性（Partition tolerance）这三项中的两项。
先说结论:
一般是 CP、AP 两种情况。P 可以算是分布式的基础。当然也可以选择 CA，即不允许分区。
分析：
通过一个案例来分析一下

现在网络中某个服务两个节点S1和S2，他们之间网络可以连通，S1中有一个应用程序APP1，和一个数据库DB1，S2也有一个应用程序APP2和一个数据库DB2。现在，APP1和APP2是分]]></description><category></category></item><item><title><![CDATA[Jar 版本规范]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/124808163</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/124808163</guid><author>H_Rhui</author><pubDate>Mon, 16 May 2022 21:05:30 +0800</pubDate><description><![CDATA[注意：
此处只针对 release 版本。版本正常情况下只升不降
快照版本可以拥有更多的选择。 比如同时多个需求并行开发，会出现1.1.x-SNAPSHAOT，1.2.x-SNAPSHAOT，1.3.x-SNAPSHAOT 甚至2.0.x-SNAPSHAOT等版本
1.版本标注
【主版本】.【次版本】.【增量版本】
参考：1.1.0
说明：
主版本(X)： 有重大架构变更，做了不兼容API修改，不能完全向下兼容；
次版本(Y)： 功能性新增，向下兼容；
修正版本(Z)：细小变动、BUG修复，向下兼容。
2.]]></description><category></category></item><item><title><![CDATA[Java8 Stream分组并排序]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/124724520</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/124724520</guid><author>H_Rhui</author><pubDate>Thu, 12 May 2022 09:40:26 +0800</pubDate><description><![CDATA[@Data
@AllArgsConstructor
@NoArgsConstructor
public class Customer {

    private String name;
    private TypeEnum type;
    private int age;
}

@Getter
public enum TypeEnum {

    /**
     * 第一
     */
    First("甲类", 2),
    Second("乙类", 12),
    Three(]]></description><category></category></item><item><title><![CDATA[lombok使用注意，不要写重载属性get\set方法]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/124697878</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/124697878</guid><author>H_Rhui</author><pubDate>Tue, 10 May 2022 21:23:21 +0800</pubDate><description><![CDATA[背景
最近在写UT测试的过程中，有些接口的响应内容比较多。不想也不应该手动去敲代码拼接响应内容。于是对响应内容做反序列化，转成直接使用的对象。到这一步还没有问题，关键是下一步，我要将响应内容在项目中业务中转对象的序列化内容转成 业务中转对象。业务中转对象使用了 lombok @Data 注解。
问题
反序列化的时候出现问题，报错如下：
Cannot deserialize instance of java.util.ArrayList＜java.lang.Object＞ out of VALUE_STRIN]]></description><category></category></item><item><title><![CDATA[Jackson Calendar日期类反序列化问题]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/124697560</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/124697560</guid><author>H_Rhui</author><pubDate>Tue, 10 May 2022 21:09:43 +0800</pubDate><description><![CDATA[背景：
开发过程中，需要写测试用例。测试用例需要用到 某些接口的响应内容。本次呢，是有个接口的响应体里定义了很多 Calendar 类型的字段。Jackson 序列化的时候，Calendar 类型默认输出样式为 “yyyy-MM-dd HH:mm:ss.SSS”。反序列化的时候就会报错。
报错内容类似如下：
com.ctrip.soa.caravan.common.serializer.SerializationException: com.fasterxml.jackson.databind.exc.In]]></description><category></category></item><item><title><![CDATA[SOA架构-微服务架构]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/124595512</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/124595512</guid><author>H_Rhui</author><pubDate>Thu, 05 May 2022 21:21:12 +0800</pubDate><description><![CDATA[SOA全称（Service Oriented Architecture）—— 面向服务的架构。
面向服务架构（SOA）是一个组件模型，它将应用程序的不同功能单元（称为服务）进行拆分，并通过在这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的，它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
跟 SOA 相提并论的还有一个 ESB（企业服务总线），简单来说 ESB 就是一根管道，用来连接各个服务节点。为了集成不同系]]></description><category></category></item><item><title><![CDATA[设计模式-Spring中常用的设计模式]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/117587580</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/117587580</guid><author>H_Rhui</author><pubDate>Wed, 27 Apr 2022 09:54:27 +0800</pubDate><description><![CDATA[设计模式是一种思想，是一种更快更好更优雅的解决问题的一种思想。这种思想在很多优秀的框架中都有落地。比如 Spring 框架。




设计模式名称
举例




工厂模式
BeanFactory


装饰器模式
BeanWrapper


代理模式
AopProxy


委派模式
Dispatchservlet


策略模式
HandlerMapping


适配器模式
HandlerAdapter


模板模式
JdbcTemplate


观察者模式
ContextLoaderListener


设计]]></description><category></category></item><item><title><![CDATA[MapStruct 使用注意]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/124414973</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/124414973</guid><author>H_Rhui</author><pubDate>Mon, 25 Apr 2022 21:33:29 +0800</pubDate><description><![CDATA[MapStruct 应该很多人都使用过，或者正在使用。不得不说，作为一个Java Bean 转换的工具，他表现的很出色：1. 功能强大 2. 编译时插件，不会导致代码运行时额外的耗时开销 3.很容易上手。但是呢，如果使用的过程中不注意细节也是经常会出现问题的。记录一下今天使用的过程中遇到的一个由细节导致的问题。（千里之堤毁于蚁穴……）
场景：
项目内部有两个类 A、B如下：
public Class A {
	private B b；
  private String name;
  ……
}

publi]]></description><category></category></item><item><title><![CDATA[Springboot controller 响应内容格式调整]]></title><link>https://blog.youkuaiyun.com/H_Rhui/article/details/123797179</link><guid>https://blog.youkuaiyun.com/H_Rhui/article/details/123797179</guid><author>H_Rhui</author><pubDate>Tue, 29 Mar 2022 09:04:24 +0800</pubDate><description><![CDATA[背景
最近在做 流量回放对比的过程中，soa 使用的 protobuf 协议响应内容去除了 值为空的属性节点（减小报文大小），controller 接口的响应内容中还是会有值为空的属性节点，导致流量回放对比的脚本需要判断哪些属性节点值为空没有问题，确定是否可以排除。增加了一些 额外的工作量，所以想了想，将 controller 接口的响应内容做一下调整，去除 值为空的属性节点。
代码如下
@Configuration
public class XxxConfig {
	    @Bean
	    @Pri]]></description><category></category></item></channel></rss>