<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hnhroot的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hnhroot</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hnhroot]]></copyright><item><title><![CDATA[ThreadPoolExctor线程池源码]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/142141661</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/142141661</guid><author>hnhroot</author><pubDate>Wed, 11 Sep 2024 15:36:13 +0800</pubDate><description><![CDATA[主流程：主要是进行判断核心线程数以及是否要创建线程。核心方法就是创建线程调用addWork方法







addWork方法创建线程，判断当前线程池状态、根据核心非核心线程是否超过对应的最大线程数来创建Work对象存放任务Runnable，并且Work类实现了Runnable重写了run







runWork()方法和getTask()方法。在addWork中调用了work的start方法，因为work实现runnable接口重写了run方法所以在run方法中调用了runWork方法

ru]]></description><category></category></item><item><title><![CDATA[AQS的ReentrantLock源码]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/140939569</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/140939569</guid><author>hnhroot</author><pubDate>Mon, 05 Aug 2024 23:29:36 +0800</pubDate><description><![CDATA[代表：重入锁、独占锁/共享锁、公平锁/非公平锁是JUC包中线程阻塞、阻塞队列、唤醒、尝试获取锁的一个框架AbstractQueuedSynchronizer是全称，是一个模板模式，一些线程同步公共的抽象类，里面有同步线程的类公共行为，比如：阻塞队列、加锁AQS主要思想尝试获取锁，如果获取失败就加入阻塞队列，如果有条件就先加入条件队列（如：ReentrantLock的创建多个newCondition()），条件队列中线程达到某个条件就会加入到阻塞队列，阻塞队列中的线程一直尝试获取锁。]]></description><category></category></item><item><title><![CDATA[JVM内存模型]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/140747911</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/140747911</guid><author>hnhroot</author><pubDate>Sun, 28 Jul 2024 10:54:34 +0800</pubDate><description><![CDATA[比如在代码运行过程中 我们 new Student() 对象。]]></description><category></category></item><item><title><![CDATA[innodb底层原理和MySQL日志机制]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/135797755</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/135797755</guid><author>hnhroot</author><pubDate>Tue, 23 Jan 2024 23:34:05 +0800</pubDate><description><![CDATA[MySQL8版本是没有查询缓存的，因为存入缓存其实是很耗费性能的，比如一张表，当查询语句查询完成以后那么就会将对应的数据和sql放到查询缓存中，但是如果有其他操作需要更新这个表，就会将查询缓存删除掉，重新等待其他查询查完以后再放到缓存中，等到更新又删除，但是表如果不是那种字典表不经常修改数据的话，其他表就要频繁删除缓存，基本就相当于用不上查询缓存。redolog有好几个，其实他们是循环写的，当一个文件写满了设置的最大存储量，就会换另外一个，形成一个闭环，当都写满了就会前边清理之前数据，后面写着新数据。]]></description><category></category></item><item><title><![CDATA[MySQL锁机制与优化实践]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/135724706</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/135724706</guid><author>hnhroot</author><pubDate>Sun, 21 Jan 2024 01:18:08 +0800</pubDate><description><![CDATA[例如上图：事务100、200、300、select1同时开启事务，事务100 和 事务200分别test表中 id = 1、id = 6的age赋值，这时候事务300开始修改account中id=1的balance加500，并且事务100、200都没提交，300提交了事务。而上边修改事务没提交，其他事务来新增 数据 其中name就是lilei，按照道理来说可以成功，但是这个 新增操作却 需要锁等待，因为当前锁是锁的name=lilei 只要是操作name = lilei的数据的人都会锁等待。]]></description><category></category></item><item><title><![CDATA[MySQL事务原理与优化最佳实践]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/135611443</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/135611443</guid><author>hnhroot</author><pubDate>Mon, 15 Jan 2024 21:23:32 +0800</pubDate><description><![CDATA[时还没提交，事务B再次查询id = 1 的数据，那么和第一次读取到的数据是一样的，即使第一次读取完以后，事务A修改了id = 1 的数据但是没有提交，事务B第二次读取数据依然是第一次读取的而不是修改过的数据，但是如果事务A提交了，那么事务B第二次查询就会导致和第一次不一致，这也就是不可重复读。事务A还没提交事务再次查询，这时候会和第一次查询一样，不管其他事务如何修改该数据并且提交，当前事务查询到的数据和第一次都是一致的。三条数据，事务A查询A表中数据，是三条数据，这时候事务A不提交。]]></description><category></category></item><item><title><![CDATA[MySQL索引优化实战]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/135559189</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/135559189</guid><author>hnhroot</author><pubDate>Fri, 12 Jan 2024 17:59:01 +0800</pubDate><description><![CDATA[对于这种varchar(255)的大字段可能会比较占用磁盘空间，可以稍微优化下，比如针对这个字段的前20个 字符建立索引，就是说，对这个字段里的每个值的前20个字符放在索引树里，类似于 KEY index(name(20),age,position)。此时你在where条件里搜索的时候，如果是根据name字段来搜索，那么此时就会先到索引树里根据name 字段的前20个字符去搜索，定位到之后前20个字符的前缀匹配的部分数据之后，再回到聚簇索引提取出来 完整的name字段值进行比对。]]></description><category></category></item><item><title><![CDATA[Explain详解与索引最佳实践]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/135434637</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/135434637</guid><author>hnhroot</author><pubDate>Sun, 07 Jan 2024 01:14:03 +0800</pubDate><description><![CDATA[like KK%相当于=常量，%KK和%KK% 相当于范围自学笔记。]]></description><category></category></item><item><title><![CDATA[深入理解MySQL索引底层数据结构]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/135330069</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/135330069</guid><author>hnhroot</author><pubDate>Mon, 01 Jan 2024 22:30:14 +0800</pubDate><description><![CDATA[深入理解MySQL索引底层数据结构]]></description><category></category></item><item><title><![CDATA[minio启动时候设置分享地址为外网]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/134356788</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/134356788</guid><author>hnhroot</author><pubDate>Sun, 12 Nov 2023 04:47:51 +0800</pubDate><description><![CDATA[docker run -p 19000:9000 -p 19090:9090 --name minio-test -d --restart=always -e "MINIO_ACCESS_KEY=账号" -e "MINIO_SECRET_KEY=密码" -e "MINIO_SERVER_URL=http://外网ip:19000" -v /virtual/minio/test/data:/data -v /virtual/minio/test/config:/root/.minio minio/minio ]]></description><category></category></item><item><title><![CDATA[IDEA画UML类图]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/128336245</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/128336245</guid><author>hnhroot</author><pubDate>Sat, 17 Dec 2022 16:54:50 +0800</pubDate><description><![CDATA[PlantUML Integration 插件可以支持画图。]]></description><category></category></item><item><title><![CDATA[设计模式七大原则]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/128309264</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/128309264</guid><author>hnhroot</author><pubDate>Tue, 13 Dec 2022 23:37:31 +0800</pubDate><description><![CDATA[概述：每个类只负责一件事情好处：降低了一个类的代码复杂度。提高了维护性，一个功能发生变化不影响其他代码实际开发中，最能体现单一原则的其实是在方法中，一个方法基本都是具体实现一个功能。]]></description><category></category></item><item><title><![CDATA[docker中持久化nacos到mysql]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/127944693</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/127944693</guid><author>hnhroot</author><pubDate>Sun, 20 Nov 2022 02:44:33 +0800</pubDate><description><![CDATA[使用的mysql为5.7      nacos为2.0.2网上查的说MySQL8   在nacos中需要改配置所以就用的MySQL5.7。]]></description><category></category></item><item><title><![CDATA[SpringCache]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/126297184</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/126297184</guid><author>hnhroot</author><pubDate>Fri, 12 Aug 2022 15:26:18 +0800</pubDate><description><![CDATA[Spring Cache就是一个这个框架。它利用了AOP，实现了基于注解的缓存功能，并且进行了合理的抽象，业务代码不用关心底层是使用了什么缓存框架，只需要简单地加一个注解，就能实现缓存功能了。......]]></description><category></category></item><item><title><![CDATA[redission]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/126296921</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/126296921</guid><author>hnhroot</author><pubDate>Fri, 12 Aug 2022 09:01:26 +0800</pubDate><description><![CDATA[Redisson的分布式的==RMapCache==象在基于RMap的前提下实现了==针对单个元素的淘汰机制==。以下是YAML格式的配置文件样本。AnyObject anyObjectA=AnyObject.builder().id("1").name("嬴政").age(22).address("秦朝").build();AnyObject anyObjectA=AnyObject.builder().id("1").name("嬴政").age(22).address("秦朝").build();..]]></description><category></category></item><item><title><![CDATA[MybatisPlus常用API]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/126174428</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/126174428</guid><author>hnhroot</author><pubDate>Fri, 05 Aug 2022 11:32:25 +0800</pubDate><description><![CDATA[SaveOrUpdate




Remove




Update




Get




List




Page




Count




query




update




Delete




Select]]></description><category></category></item><item><title><![CDATA[dubbo]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/126173952</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/126173952</guid><author>hnhroot</author><pubDate>Fri, 05 Aug 2022 11:26:28 +0800</pubDate><description><![CDATA[Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案Dubbo的协议是==长连接、单一链接==服务容器负责启动，加载，运行服务提供者。服务提供者在启动时，向添加中心添加自己提供的服务。服务消费者在启动时，向添加中心订阅自己所需的服务。添加中心返回服务提供者地址列表给消费者，如果有变更，添加中心将基于长连接推送变更数据给消费者。服务消费者，从提供者地址列表中，基于软负载均衡算法，选一台提供者进行调用，如果调用失败，再选另一台调用。...]]></description><category></category></item><item><title><![CDATA[微信支付接口]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/126021162</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/126021162</guid><author>hnhroot</author><pubDate>Wed, 27 Jul 2022 18:50:11 +0800</pubDate><description><![CDATA[微信支付。]]></description><category></category></item><item><title><![CDATA[OAuth2认证]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/126019763</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/126019763</guid><author>hnhroot</author><pubDate>Wed, 27 Jul 2022 17:53:46 +0800</pubDate><description><![CDATA[OAuth2是基于Token的认证协议，可以访问第三方的用户资源数据，而不需要密码例如B站使用微信登录，登录的时候区微信获取用户数据，是不需要用户在B站中输入用户的微信账号密码。]]></description><category></category></item><item><title><![CDATA[RabbitMQ高级]]></title><link>https://blog.youkuaiyun.com/hnhroot/article/details/125921527</link><guid>https://blog.youkuaiyun.com/hnhroot/article/details/125921527</guid><author>hnhroot</author><pubDate>Thu, 21 Jul 2022 22:41:22 +0800</pubDate><description><![CDATA[消费者方一共有三种失败策略第一种当接收到信息就会默认成功第二种当接收到以后如果失败会重复，如果超出最大次数还没有成功那么mq默认为已经成功第三种接收到以后如果超过最大次数就会将消息发送到指定的一个专门接收错误信息的队列。消息堆积问题生产者发送消息的速度超过了消费者处理消息的速度，并且队列中存储消息达到上限，之后发送的消息就会成为死信，可能会被丢弃，这就是消息堆积问题。什么样的消息会变为死信消费者声明消费失败的消息过期消息队列满了之后还投递的消息。............]]></description><category></category></item></channel></rss>