<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[积]]></title><description><![CDATA[积土成山，风雨兴焉；积水成渊，蛟龙生焉！]]></description><link>https://blog.youkuaiyun.com/yue_hu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yue_hu]]></copyright><item><title><![CDATA[【JAVA核心知识】分布式事务框架Seata]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/135263642</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/135263642</guid><author>yue_hu</author><pubDate>Thu, 28 Dec 2023 10:50:17 +0800</pubDate><description><![CDATA[最新版本： v1.6.1 Dec 22, 2022。]]></description><category></category></item><item><title><![CDATA[【小笔记】MyBaits的Cursor]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/134269969</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/134269969</guid><author>yue_hu</author><pubDate>Tue, 07 Nov 2023 16:16:06 +0800</pubDate><description><![CDATA[流式查询 指的是查询成功后不是返回一个集合而是返回一个迭代器，应用可以通过迭代器每次取一条查询结果。流式查询的好处是能够降低内存使用。例如我们想要从数据库取 1000 万条记录而又没有足够的内存时，就不得不分页查询。而分页查询就需要我们按照顺序查询并设置一个参数来记录当前进度并在下次查询时将进度作为参数传入（比如按id升序查询，记录每次查询结果的最大id, 下次查询将这个最大id传入只查询大于这个id的），否则就会出现深度分页的情况。]]></description><category></category></item><item><title><![CDATA[【JAVA核心知识】深度了解MySql的InnoDB引擎]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/134015316</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/134015316</guid><author>yue_hu</author><pubDate>Tue, 24 Oct 2023 16:24:27 +0800</pubDate><description><![CDATA[了解了页分裂，页合并也就更好理解的，当删除一行数据时，实际上记录并没有被物理删除，而是仅仅打上一个标记声明可以被其他记录使用，当页中剩余的记录不足MERGE_THRESHOLD（默认为页体积的50%）时，InnoDB会探查这个页前面或者后面的页是否有足够的空间，如果有，就会把这个页的数据迁移过去，完成页合并，这个动作同样相当耗费资源。构建共分为三个阶段。一条数据执行时，如果是读操作，要查找的数据所在的数据页在内存中时，则将结果返回，否则会先将其所在的数据页加载到内存中，然后再返回结果。数据页默认16KB。]]></description><category></category></item><item><title><![CDATA[【Java核心知识】spring boot整合Mybatis plus + Phoenix 访问Hbase与使用注意]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/129082216</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/129082216</guid><author>yue_hu</author><pubDate>Fri, 03 Mar 2023 09:35:41 +0800</pubDate><description><![CDATA[为了Phoenix能让开发者通过SQL访问Hbase而不必使用原生的方式？引用Phoenix官网上的一句话：SQL is just a way of expressingnot.  即SQL不是一种数据操作技术，而是一种特殊的表达方式。只是表示你需要什么而不是你如何获得。]]></description><category></category></item><item><title><![CDATA[【小笔记】webhook是什么]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/129055319</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/129055319</guid><author>yue_hu</author><pubDate>Thu, 16 Feb 2023 09:58:03 +0800</pubDate><description><![CDATA[webhook不是一项技术，他只是一个概念。]]></description><category></category></item><item><title><![CDATA[【小笔记】一种@Reference 注入为null的情况与排查过程]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/129031910</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/129031910</guid><author>yue_hu</author><pubDate>Tue, 14 Feb 2023 18:50:28 +0800</pubDate><description><![CDATA[这里要注意，如果你依赖的服务Service里面存在ClassNotFound，而你在本项目中又没有用到这个Class,那在启动过程中，并不会报错，应用也会正常部署。Dubbo对于这种情况也仅仅是打印一个Warning级别的日志而不会影响部署进程。这个日志很可能会淹没在大量的启动日志里面。因此对于这类问题，可以考虑调整一下日志级别，然后查询关键日志条目的上下内容，也许能帮助我们发现蛛丝马迹。我这里排查的是应用部署成功，同一个包下面其它服务都能正确初始化，唯独一个服务TESTXXX无法初始化。]]></description><category></category></item><item><title><![CDATA[【杂记】rocketmq-spring-boot:2.0.3的无法部署与参数解析错误bug]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/129013355</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/129013355</guid><author>yue_hu</author><pubDate>Mon, 13 Feb 2023 17:21:24 +0800</pubDate><description><![CDATA[因为rocketmq-spring-boot在初始化时会用DefaultRocketMQListenerContainer.getMessageType方法通过反射获取RocketMQListener接口以获取泛型参数（就是onMessage的入参类型）。如果继承了接口，但是不包含RocketMQListener接口，则会导致参数类型解析错误。因此如果使用的rocketmq-spring-boot:2.0.3使用的时间要注意。否则会导致死循环或者参数类型解析错误。当然更好的方法是做组件升级。]]></description><category></category></item><item><title><![CDATA[【JAVA核心知识】46：什么是零拷贝Zero-copy]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/128619579</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/128619579</guid><author>yue_hu</author><pubDate>Mon, 30 Jan 2023 18:58:34 +0800</pubDate><description><![CDATA[零拷贝相较于传统的IO流程拥有更高的数据发送效率，无论是RocketMq,Kafka还是Netty等都用到了零拷贝技术，那究竟什么是零拷贝呢，零拷贝又是通过什么方式提升数据发送效率呢？首先我们要明白，一次数据发送过程就是将磁盘中的目标数据交给网卡传输出去的流程。磁盘以及网卡都属于硬件层。而应用程序是不能直接操作硬件的。如果要操作硬件，需要进行上下文切换从用户态切换到内核态由操作系统来完成硬件交互。关于用户态，内核态，上下文切换这些这里不再赘述。]]></description><category></category></item><item><title><![CDATA[@PostConstruct,InitializingBean,Init-method,BeanPostProcessor 在Spring Bean初始化之后执行指定方法]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/127450052</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/127450052</guid><author>yue_hu</author><pubDate>Sun, 27 Nov 2022 22:44:23 +0800</pubDate><description><![CDATA[在Spring及其扩展框架中，可以利用@Resource或者@Autowired来进行自动装配，但是有时需要在实例化完成后执行一些初始化操作，而这些操作依赖于装配的对象。而由于控制反转的原则，又不能直接写在构造方法里面new一个对象。此时就需要其他途径完成初始化的动作。]]></description><category></category></item><item><title><![CDATA[raft协议原理 ---【JAVA核心知识】]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/127314622</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/127314622</guid><author>yue_hu</author><pubDate>Mon, 17 Oct 2022 15:52:15 +0800</pubDate><description><![CDATA[Raft协议是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。目前 etcd,consul都是基于Raft协议进行数据同步。Raft协议和Zookeeper的一样脱胎于Paxos协议。以此可以看出来Paxos协议在分布式协议学术理论届方面的地位。为什么是说是学术理论届呢？这是因为Paxos协议的出了名的难懂，这使得他的应用受到限制。不同于Paxos协议的难以理解。Raft协议的主要特点就是易于理解。]]></description><category></category></item><item><title><![CDATA[简简单单一段话描述设计模式]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/127126548</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/127126548</guid><author>yue_hu</author><pubDate>Fri, 30 Sep 2022 17:07:48 +0800</pubDate><description><![CDATA[设计模式的概念由著名建筑师Alexander提出：每个模式都描述了一个在我们周围不断发生的问题，然后描述了该问题的解决方案的核心，通过这种方式，我们可以无数次的重用那些已有的解决方案而不必再做重复性的工作。这一概念同样适用于软件开发领域。设计模式并不是一种技术，而是特定场景下解决问题的一种方案。在软件开发领域，设计模式（Design Pattern）是一套被反复使用，多数人知晓的，经过分类编目的，代码设计经验的总结。使用设计模式是为了可重用代码（重用性），让代码更易理解（可读性），保证代码的可靠性。]]></description><category></category></item><item><title><![CDATA[【小笔记】基于SpringBoot使用WebSocket进行前后端通信]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/126181498</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/126181498</guid><author>yue_hu</author><pubDate>Fri, 05 Aug 2022 17:09:59 +0800</pubDate><description><![CDATA[前端向后端发送消息请求相应的接口就可以了。但是有些场景：比如聊天室互相发送消息或者进度条跟踪。如果仅靠前端主动发起通信获得消息的话就需要不断的轮询后端获得最新数据。这种方式会造成带宽等资源的浪费（因为请求http请求可能包含较长的请求头，而真正有用的可能只是其中的一小部分），而且还会增加后端的压力。如果后端能主动向前端推送消息就能很简单的解决这个问题。一种比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信，但依然需要反复发出请求。而且在Comet中，普遍采用的长链接，也会消耗服务器资源。...]]></description><category></category></item><item><title><![CDATA[石杉的架构笔记-阅读记录【持续更新...】]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/125709781</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/125709781</guid><author>yue_hu</author><pubDate>Sun, 10 Jul 2022 19:37:01 +0800</pubDate><description><![CDATA[最近发现一个宝藏博主：[石杉的架构笔记]。博文质量很高，打算通篇阅读一下。这里针对每篇博文大致做一下内容简介以便后面快速检索以及查漏补缺。]]></description><category></category></item><item><title><![CDATA[DB2错误码表格]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/125582666</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/125582666</guid><author>yue_hu</author><pubDate>Sun, 03 Jul 2022 11:40:30 +0800</pubDate><description><![CDATA[DB2错误码速查]]></description><category></category></item><item><title><![CDATA[Java生成随机数的几种方式：Random，ThreadLocalRandom，SecureRandom与Math.random()]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/125470702</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/125470702</guid><author>yue_hu</author><pubDate>Sun, 26 Jun 2022 16:05:20 +0800</pubDate><description><![CDATA[Java生成随机数的几种方式：Random，ThreadLocalRandom，SecureRandom与Math.random()]]></description><category></category></item><item><title><![CDATA[Spring读取properties文件]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/124635701</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/124635701</guid><author>yue_hu</author><pubDate>Mon, 09 May 2022 15:04:04 +0800</pubDate><description><![CDATA[假设此时有properties文件：mytest.properties
testKey=testValue

1 利用PropertyPlaceholderConfigurer
1.1 注解
&lt;bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;
    &lt;property name="location" value="classpath:mytest.properties"]]></description><category></category></item><item><title><![CDATA[Spring用代码来读取properties文件]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/124398273</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/124398273</guid><author>yue_hu</author><pubDate>Mon, 25 Apr 2022 10:04:25 +0800</pubDate><description><![CDATA[我们都知道，Spring可以@Value的方式读取properties中的值，只需要在配置文件中配置org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
&lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;
    &lt;property na]]></description><category></category></item><item><title><![CDATA[44：LFU算法集：LFUDA，Window-LFU与Window TinyLFU]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/124251837</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/124251837</guid><author>yue_hu</author><pubDate>Tue, 19 Apr 2022 17:36:47 +0800</pubDate><description><![CDATA[LFU(Least Frequently Used)即最少访问算法。通过访问频率作为数据淘汰的依据。核心思想是：如果一个数据在过去的一段时间访问的次数较少，那么未来他被访问的概率也较低。与之相应的还有LRU(Least Recently Used),即最近最少使用算法，通过最后一次访问时间来作为数据淘汰的依据，核心思想是如果一个数据已经有较长的时间没有收到访问，那么未来他被访问的概率也较低。

]]></description><category></category></item><item><title><![CDATA[字符串拼接为什么要使用StringBuilder而不是直接运算]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/124019125</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/124019125</guid><author>yue_hu</author><pubDate>Thu, 07 Apr 2022 16:44:29 +0800</pubDate><description><![CDATA[能从很多地方看字符串多次拼接拼接要注意不要直接运算，而是通过StringBuilder（StringBuffer）完成。可以通过反编译看看直接使用‘+’运算是怎么运行的来体现为什么要这样做。
写一个简单的String字符串拼接代码：
public class Test {
    public static void main(String[] args) {
        String str1 = "123";
        String str2 = "456";
        String s]]></description><category></category></item><item><title><![CDATA[javap命令获取字节码，看看JVM到底是怎么执行你的代码]]></title><link>https://blog.youkuaiyun.com/yue_hu/article/details/123995391</link><guid>https://blog.youkuaiyun.com/yue_hu/article/details/123995391</guid><author>yue_hu</author><pubDate>Thu, 07 Apr 2022 14:54:36 +0800</pubDate><description><![CDATA[javap命令前置知识javap的使用JVM指令集小实战

javap是 Java class文件分解器，可以反编译，也可以查看java编译器生成的字节码。用于分解class文件。- 百度百科

通过javap命令，就可以获取到编译器生成的字节码，从而看JVM会如何执行一段代码。
前置知识
需要注意，了解JVM内存区域是了解这个命令以及看懂字节码的基础。
javap的使用
javap &lt;options&gt; &lt;classes&gt; ：其中options为可选的参数，classes则是需要解析]]></description><category></category></item></channel></rss>