<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Yolyn‘s blog]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_34088913</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_34088913]]></copyright><item><title><![CDATA[2. SOFABolt源码分析-协议及消息编解码篇]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/109637598</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/109637598</guid><author>qq_34088913</author><pubDate>Thu, 12 Nov 2020 16:02:47 +0800</pubDate><description><![CDATA[SOFABolt源码分析-协议及消息编解码篇1. 前言1.1 粘包拆包：1.2 请求类型1.3 版本控制2. 协议-Protocol2.1 RpcProtocolV23. 消息载体-RpcCommand4. 消息编解码器-CommandDecoder/CommandEncoder5. 总结5.1 RpcCodec5.2  ProtocolCodeBasedEncoder
1. 前言
在上篇文章中大致介绍了SOFABolt服务端怎么用自定义的UserProcessor去处理客户端的消息，能大致了解SOFABo]]></description><category></category></item><item><title><![CDATA[3.1 ZK客户端创建节点源码解析上(基于NIO)]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/109402213</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/109402213</guid><author>qq_34088913</author><pubDate>Tue, 10 Nov 2020 14:34:06 +0800</pubDate><description><![CDATA[ZK客户端创建节点源码解析前言1. 为什么能用来做注册中心2. 创建节点2.1 ZooKeeper#create()方法2.2 ClientCnxn#queuePacket()方法
前言
众所周知！
Zookeeper是一个分布式协调工具，我们能利用它特性来做特定的事情，如，利用创建节点的唯一性和有序性可以用来实现分布式锁、leader选举、分布式队列（消息），利用临时节点及其事件监听可以用来做缓存、分布式配置中心、注册中心等，其实目前最常见的就是拿它用来做注册中心。那我们今天来看看为什么能利用他来做注册中]]></description><category></category></item><item><title><![CDATA[2. ZK客户端与服务端建立连接的过程（基于NIO）]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/109079596</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/109079596</guid><author>qq_34088913</author><pubDate>Wed, 28 Oct 2020 17:04:17 +0800</pubDate><description><![CDATA[Zk客户端（ClientCnxn）中的EventThread和SendThread1. 例子1. SendThread
在上一篇《客户端启动源码分析》文章中讲到了客户端会使用两个线程去协调处理客户端与服务端的通信和watchers事件的回调，在这篇文章中我们会分析这两个线程是怎么相互纠缠的。
1. 例子
首先还是由第一篇文章来作为例子
public class ZooKeeperTestClient extends ZKTestCase implements Watcher {
    protected ]]></description><category></category></item><item><title><![CDATA[1. ZooKeeper启动源码分析]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/109075666</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/109075666</guid><author>qq_34088913</author><pubDate>Wed, 14 Oct 2020 17:22:06 +0800</pubDate><description><![CDATA[ZooKeeper启动与Watcher机制源码分析1. 客户端启动1. getClientCnxnSocket()2. 创建ClientCnxn实例2.1. SendThread2.2. EventThread3. 启动服务
从github上拉下来的zk源码会附带很多单元测试，咱们就源码中的ZooKeeperTestClient#create_get_stat_test()方法来分析  ：
public class ZooKeeperTestClient extends ZKTestCase impleme]]></description><category></category></item><item><title><![CDATA[1. SOFABolt源码分析-服务启动到消息处理]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/108469517</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/108469517</guid><author>qq_34088913</author><pubDate>Sat, 12 Sep 2020 12:19:51 +0800</pubDate><description><![CDATA[SofaBolt源码分析-UserProcessor1. Demo2. UserProcessor细节3.  注册UserProcessor
本篇文章分析一下SofaBolt中的UserProcessor时怎么起作用的，接下来先看一个例子
1. Demo
这里直接把官网的源码拉下来，自带Demo示例
代码清单1：RpcServerDemoByMain.class
public class RpcServerDemoByMain {
    static Logger             logger  ]]></description><category></category></item><item><title><![CDATA[NIO和BIO的比较]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/107872106</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/107872106</guid><author>qq_34088913</author><pubDate>Fri, 07 Aug 2020 22:58:14 +0800</pubDate><description><![CDATA[NIO和BIO的比较1. NIO和BIO的比较2. NIO中三大组件关系2.1 Buffer2.2 Channel（通道）2.3 Buffer和Channel的注意事项和细节。2.4 Selector（选择器）
1. NIO和BIO的比较

BIO以流的方式处理数据，而NIO以块的方式处理数据，块I/O的效率比流I/O高很多。
BIO是阻塞的，NIO是非阻塞的
BIO基于字节流和字符流进行操作，而NIO是基于Channel（通道）和Buffer（缓冲区）进行操作，数据总是从通道读取到缓冲区中，或者从缓冲区写]]></description><category></category></item><item><title><![CDATA[SpringMVC异常处理三种方式]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106315427</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106315427</guid><author>qq_34088913</author><pubDate>Sun, 24 May 2020 15:20:37 +0800</pubDate><description><![CDATA[SpringMVC异常处理三种方式1. 自定义HandlerExceptionResolver2. 使用SpringMVC自带的异常处理器处理异常2.1 @ExceptionHandler的用法3. 写一个异常类用ControllerAdvice作为全局异常处理类4. 优先级
SpringMVC对异常的处理有三大类

自定义HandlerExceptionResolver
在controller类用@ExceptionHandler 写一个异常处理方法
写一个异常处理类用@ControllerAdvice作]]></description><category></category></item><item><title><![CDATA[分页查询的优化]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106313043</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106313043</guid><author>qq_34088913</author><pubDate>Sun, 24 May 2020 15:05:04 +0800</pubDate><description><![CDATA[笔记摘自：https://www.cnblogs.com/geningchao/p/6649907.html
分页查询的优化分页SQL1. 直接使用数据库提供的SQL语句2. 建立主键或唯一索引, 利用索引(假设每页10条)3. 基于索引再排序4. 基于索引使用prepare5.  利用MySQL支持ORDER操作可以利用索引快速定位部分元组,避免全表扫描6. 利用"子查询/连接+索引"快速定位元组的位置,然后再读取元组优化示例1. 直接用limit start, count分页语句2. 对limit分页问]]></description><category></category></item><item><title><![CDATA[Redis Cluster集群和哨兵]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106300795</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106300795</guid><author>qq_34088913</author><pubDate>Sat, 23 May 2020 15:22:45 +0800</pubDate><description><![CDATA[1. 哨兵sentinel：http://www.redis.cn/topics/sentinel.html

2. Redis集群：http://www.redis.cn/topics/cluster-spec.html
]]></description><category></category></item><item><title><![CDATA[1. MySQL的技术框架]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106239269</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106239269</guid><author>qq_34088913</author><pubDate>Wed, 20 May 2020 16:47:40 +0800</pubDate><description><![CDATA[这里写目录标题1. 框架概述2. 查询流程
参考文章1：https://www.cnblogs.com/wangjiming/p/10410904.html

1. 框架概述
简单介绍下：

Connectors：MySQL向外提供的交互接口（Connectors）


Connectors组件是MySQL向外提供的交互组件，如Java、.net、php等语言可以通过改组件来操作SQL语言，实现与SQL的交互。


Management Service &amp; Utilities：管理服务组件和工具组件]]></description><category></category></item><item><title><![CDATA[DispatcherServlet源码分析上]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106162360</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106162360</guid><author>qq_34088913</author><pubDate>Mon, 18 May 2020 18:24:19 +0800</pubDate><description><![CDATA[一、总体大流程
代码1
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
   HttpServletRequest processedRequest = request;
   HandlerExecutionChain mappedHandler = null;
   boolean multipartRequestParsed = false;

]]></description><category></category></item><item><title><![CDATA[Redis之RDB&AOF]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106173333</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106173333</guid><author>qq_34088913</author><pubDate>Sun, 17 May 2020 13:36:41 +0800</pubDate><description><![CDATA[Redis之RDB&amp;AOF1. RDB快照文件存储位置：快照触发条件1. 客户端执行命令save和bgsave会生成快照2. 根据配置文件save m n规则进行自动快照3. 主从复制时，从库全量复制同步主库数据，此时主库会执行bgsave命令进行快照4. 客户端执行数据库清空命令flushall时，触发快照5. 客户端执行shutdown关闭redis时，触发快照故障恢复配置详解2. AOF持久化配置参数2.1 开启AOF2.2 AOF持久化过程为什么重写？2.3 重写过程Redis 协议3. R]]></description><category></category></item><item><title><![CDATA[三种Redis集群方案]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106173293</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106173293</guid><author>qq_34088913</author><pubDate>Sun, 17 May 2020 13:30:36 +0800</pubDate><description><![CDATA[三种Redis集群方案1. twemproxy1.1 何为twemproxy1.2 应用于Redis1.3 twemproxy存在的问题2 codis2.1 何为Codis2.2 组成部分2.3 Codis之slot（槽点）3 Redis Cluster
1. twemproxy
1.1 何为twemproxy
Twemproxy是一种代理分片机制，由Twitter开源。Twemproxy作为代理，可接受来自多个程序的访问，按照路由规则，转发给后台的各个Redis或memcached服务器，再原路返回，一般]]></description><category></category></item><item><title><![CDATA[用DiscoveryClient手写负载均衡]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106170299</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106170299</guid><author>qq_34088913</author><pubDate>Sun, 17 May 2020 10:45:33 +0800</pubDate><description><![CDATA[用DiscoveryClient实现简单路由1. 原理2. 实操2.1 写pom2.2 写启动类2.3 application.yaml2.4 定义LoadBalancer接口2.5 实现接口2.6 调用3. 小总结
前戏
在分布式微服务调用的时候我们会想到一个工具叫Ribbon，关于这个Ribbon的具体实现负载均衡的原理可以参考本人这篇文章《Ribbon原理-RestTemplate使用@LoadBalanced负载均衡源码详解》， 本篇内容主要讲自己如何写一个简单的负载均衡逻辑，话不多说，直接开干！
]]></description><category></category></item><item><title><![CDATA[SpringBoot之AutoConfiguration自动配置原理]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106162067</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106162067</guid><author>qq_34088913</author><pubDate>Sat, 16 May 2020 17:18:45 +0800</pubDate><description><![CDATA[SpringBoot自动配置原理1. 原理2. 细节
1. 原理
我们在写启动类的时候会用到SpringBootApplication注解，SpringBoot启动的时候加载主配置类，这个注解里面开启了自动配置功能 @EnableAutoConfiguration
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoCo]]></description><category></category></item><item><title><![CDATA[MyBatis源码-配置篇（一）]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/106161743</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/106161743</guid><author>qq_34088913</author><pubDate>Sat, 16 May 2020 17:12:49 +0800</pubDate><description><![CDATA[MyBatis源码-配置篇（一）

先看个简单的配置：
mybatis-config.xml

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd"&gt;
&lt;configuration&gt;
    &lt;pr]]></description><category></category></item><item><title><![CDATA[Ribbon原理-RestTemplate使用@LoadBalanced负载均衡源码详解]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/105929732</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/105929732</guid><author>qq_34088913</author><pubDate>Tue, 05 May 2020 14:57:45 +0800</pubDate><description><![CDATA[RestTemplate使用@LoadBalanced负载均衡源码详解
示例代码概述：
使用Eureka作为注册中心
服务提供者
服务消费者（使用Ribbon实现负载均衡）

前戏：在使用RPC框架实现远程调用的时候都会用到RestTemplate，如果想实现负载均衡还会添加一个@LoadBalanced注解，看下面这个例子：
@Configuration
@ComponentScan(base...]]></description><category></category></item><item><title><![CDATA[将博客搬至优快云]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/105946758</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/105946758</guid><author>qq_34088913</author><pubDate>Sat, 02 May 2020 10:19:10 +0800</pubDate><description><![CDATA[将简书博客部分内容同步至优快云
]]></description><category></category></item><item><title><![CDATA[插件化开发之坑位的理解（Hook）]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/105946757</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/105946757</guid><author>qq_34088913</author><pubDate>Wed, 06 Mar 2019 11:19:33 +0800</pubDate><description><![CDATA[参考1：https://www.jianshu.com/p/f2e5b7b7f72b       
参考2（Android动态加载Activity原理）：https://blog.youkuaiyun.com/cauchyweierstrass/article/details/51087198   
参考3：（Android类加载之PathClassLoader和DexClassLoader）https://...]]></description><category></category></item><item><title><![CDATA[Gradle之Gradle Wrapper（四）]]></title><link>https://blog.youkuaiyun.com/qq_34088913/article/details/105946770</link><guid>https://blog.youkuaiyun.com/qq_34088913/article/details/105946770</guid><author>qq_34088913</author><pubDate>Thu, 28 Feb 2019 18:11:49 +0800</pubDate><description><![CDATA[笔记来源于以下文章：
http://liuwangshu.cn/application/gradle/4-wrapper.html  
了解Gradle Wrapper可以更好的理解Gradle，Gradle Wrapper在日常开发中看似“不起眼”，实则超级重要。
1. 为什么需要Gradle Wrapper
Gradle Wrapper称为Gradle包装器，是对Gradle的一层包装。为什么...]]></description><category></category></item></channel></rss>