<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[GiantCrocodile的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/GiantCrocodile</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; GiantCrocodile]]></copyright><item><title><![CDATA[互联网金融基础知识--数字货币]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/126823468</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/126823468</guid><author>GiantCrocodile</author><pubDate>Mon, 12 Sep 2022 22:22:05 +0800</pubDate><description><![CDATA[认知创造价值。]]></description><category></category></item><item><title><![CDATA[kafka消费者源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/125121510</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/125121510</guid><author>GiantCrocodile</author><pubDate>Sat, 04 Jun 2022 15:27:11 +0800</pubDate><description><![CDATA[kafka-consumer]]></description><category></category></item><item><title><![CDATA[kafka-producer初始化流程图及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/125120916</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/125120916</guid><author>GiantCrocodile</author><pubDate>Sat, 04 Jun 2022 14:27:09 +0800</pubDate><description><![CDATA[kafka源码和运行流程图]]></description><category></category></item><item><title><![CDATA[SpringClouHystrix运行流程及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124898653</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124898653</guid><author>GiantCrocodile</author><pubDate>Sat, 21 May 2022 16:31:10 +0800</pubDate><description><![CDATA[断路器作用：熔断、隔离和降级
熔断：本质是对原子Boolean的判断和properties中的一堆阈值判断
隔离：通过线程池和信号量实现目标为服务调用之间的互不干扰，map
降级：目标服务器嘎嘣儿了或网络IO超时了，从定义的fallback静态缓存中获取返回数据，就是出错了，别整那么难看，保证后端服务不要大面积受到影响而瘫痪

源码按照三部分来分析：配置、执行、关闭
第一部分源码：断路器的自动装配
自动装配是springboot中的基础知识，我之前的文章中有想学习的执行流程
@Configuration(p]]></description><category></category></item><item><title><![CDATA[SpringCloudFeign的注册流程和源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124881212</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124881212</guid><author>GiantCrocodile</author><pubDate>Fri, 20 May 2022 14:19:10 +0800</pubDate><description><![CDATA[微服务的访问可使用restTemplate，也可以使用feign远程调用，feign默认使用ribbon实现负载均衡
声明式的伪Http客户端，整合了feign和Hystrix,big和eureka结合，可实现负载均衡和断路器等功能
自动装配FeignAutoConfiguration的时候，会创建Targeter 配置Bean，默认使用 HystrixTargeter实现断路器

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@]]></description><category></category></item><item><title><![CDATA[SpringCloudRibbon运行原理和源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124869715</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124869715</guid><author>GiantCrocodile</author><pubDate>Thu, 19 May 2022 19:29:56 +0800</pubDate><description><![CDATA[ribbon的源码比较简单，打个debug走一遍基本就明白了.
ribbon是客户端负载均衡器，即自己在最终调用前，自己通过一些规则来确定调用某一个实例。
ribbon维护了服务器实例信息列表，并定期刷新本地ServerList，而后通过某些逻辑Role来实现负载均衡调用
















...]]></description><category></category></item><item><title><![CDATA[SpringCloudEureka服务下线和剔除流程及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124843872</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124843872</guid><author>GiantCrocodile</author><pubDate>Wed, 18 May 2022 16:27:54 +0800</pubDate><description><![CDATA[服务下线


```java
/**
     * @Description: 服务下线
     * @Author: PABLO
     * @Date: 2022/5/18 15:27
     * @Params: [appName, id, isReplication]
     * @Return: boolean
     **/
    protected boolean internalCancel(String appName, String id, boolean isReplica]]></description><category></category></item><item><title><![CDATA[SpringCloudEureka服务续约流程及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124843273</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124843273</guid><author>GiantCrocodile</author><pubDate>Wed, 18 May 2022 15:20:32 +0800</pubDate><description><![CDATA[源码
@PUT
public Response renewLease(
        @HeaderParam(PeerEurekaNode.HEADER_REPLICATION) String isReplication,
        @QueryParam("overriddenstatus") String overriddenStatus,
        @QueryParam("status") String status,
        @QueryParam("lastDir...]]></description><category></category></item><item><title><![CDATA[SpringCloudEureka服务注册流程图及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124842867</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124842867</guid><author>GiantCrocodile</author><pubDate>Wed, 18 May 2022 15:16:47 +0800</pubDate><description><![CDATA[@EnableEurekaServer是个开关


实现原理：
eureka的实现原理是基于Jersey框架过滤器拦截，节点间的通信采用HTTP，服务器接受请求后，拦截request，获取对应的执行操作调用不同的处理逻辑。

核心源码
  @POST
    @Consumes({"application/json", "application/xml"})
    public Response addInstance(InstanceInfo info,
                        ]]></description><category></category></item><item><title><![CDATA[Springboot内置Tomcat运行流程图及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124810871</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124810871</guid><author>GiantCrocodile</author><pubDate>Mon, 16 May 2022 23:55:40 +0800</pubDate><description><![CDATA[调用流程

refresh，这里其实是spring的核心代码

这里

这是模板方法，看子类实现




AutoConfiguration有一个ServletWebServerFactoryAutoConfiguration会被加载进来（细节在我的SpringBoot自动装配中有）



所以才会获得tomcat对应的工厂。
进入getWebServer()，有多种实现



细节的创建




  private void createWebServer() {
        //首次进来空的
  .]]></description><category></category></item><item><title><![CDATA[Springboot自动装配流程图及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124799016</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124799016</guid><author>GiantCrocodile</author><pubDate>Mon, 16 May 2022 14:40:59 +0800</pubDate><description><![CDATA[流程总结两大部分：prepareContext + refreshContext
1.prepareContext
1.1 load方法，将启动类封装为beanDefinition注册到bedefinitionMap
2.refreshContext
2.1 invokeBeanFactoryPostProcessor
2.1.1 parse方法，递归扫描启动类上注解，确定basePackage，加载构件注解修饰的类
2.1.2 扫描解析@Import 将需要自动装配的class信息加载，最终注册到bea.]]></description><category></category></item><item><title><![CDATA[SpringBoot启动流程及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124781262</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124781262</guid><author>GiantCrocodile</author><pubDate>Sun, 15 May 2022 13:30:31 +0800</pubDate><description><![CDATA[SpringBoot的启动流程可以分为几大部分：
1.创建SpringApplication，加载监听器
2.启动监听器
3.创建创建环境
4.创建容器
5.将环境放入容器中
6.refresh容器
7.启动所有监听器
第一部分：
创建SpringApplication




构建好SpringApplication执行run（）

这里是启动的伪代码
   public ConfigurableApplicationContext run(String... args) {
        //记录开.]]></description><category></category></item><item><title><![CDATA[Spring循环依赖流程图及源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124743713</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124743713</guid><author>GiantCrocodile</author><pubDate>Fri, 13 May 2022 00:55:53 +0800</pubDate><description><![CDATA[缓存没有现成的，所以createBean









此时会再走一遍getBean
接下来看我画的流程图就可以了

]]></description><category></category></item><item><title><![CDATA[手写4不润v2源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124688918</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124688918</guid><author>GiantCrocodile</author><pubDate>Tue, 10 May 2022 15:22:31 +0800</pubDate><description><![CDATA[类图（手写版类图是原版迷你版）

手写版Spring启动流程图

手写版调用流程图

项目结构图

代码：
	&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM]]></description><category></category></item><item><title><![CDATA[手写简易版Springv1源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124639908</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124639908</guid><author>GiantCrocodile</author><pubDate>Sat, 07 May 2022 22:28:19 +0800</pubDate><description><![CDATA[v1版本
目录结构

类图

注解
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PABLO_Autowired {
	String value() default "";
}

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ]]></description><category></category></item><item><title><![CDATA[手写简易版spring-mvc源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124575720</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124575720</guid><author>GiantCrocodile</author><pubDate>Wed, 04 May 2022 19:26:54 +0800</pubDate><description><![CDATA[1.0手写版，后续会继续更新

web.xml
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
	xmlns:web="http://java.sun.com]]></description><category></category></item><item><title><![CDATA[分库分表Sharding-Sphere]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124520147</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124520147</guid><author>GiantCrocodile</author><pubDate>Sat, 30 Apr 2022 23:16:48 +0800</pubDate><description><![CDATA[宝子们，之前工作弄过分库分表，正巧最近有点时间，就简单回顾整理一下，版本更新虽然快，但本质不变，简单整理下Sharding-sphere。
分库分表主要解决数据量大带来的性能问题，分为垂直/水平两维度，每个都可运用在分库分表上。
1.垂直，结构不同
1. 垂直分表
如以表字段拆分，本质还是两个独立的表，只是在业务中是一类，如商品，可分为商品基本表+详情两表

场景很多，如电商商品表可分为若干表，首页是商品名称等基本信息，此时只需查询基本信息表即可满足用户浏览，如点击详情后，在继续查询详情信息，本质都是商品相]]></description><category></category></item><item><title><![CDATA[手写超简易版mybatis源码]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124439797</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/124439797</guid><author>GiantCrocodile</author><pubDate>Tue, 26 Apr 2022 23:16:14 +0800</pubDate><description><![CDATA[mybatis手写简易版]]></description><category></category></item><item><title><![CDATA[加密和解密]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/118696480</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/118696480</guid><author>GiantCrocodile</author><pubDate>Tue, 13 Jul 2021 18:41:30 +0800</pubDate><description><![CDATA[通信安全问题：
窃听，假冒，篡改，抵赖
窃听：加密解决（但无法根本解决中间人攻击）
假冒：数字证书或消息认证码
篡改：数字证书或消息认证码
抵赖：数字证书


对称加密速度快，存在密钥分配问题
非对称加密加密速度较慢，存在窃听问题，
相对安全混合加密：（对称+非对称）
要点：大量传输使用对称加密，速度快非对称密钥 加密 对称加密的密钥仍存在中间人攻击

如何解决呢？信息认证码或数字证书
什么是哈希值？可以将哈希想象成搅拌机，出来的都是16位无规律的信息摘要
哈希函数特点：
哈希值长度固定，和传入数据长度无关]]></description><category></category></item><item><title><![CDATA[IO模型和epoll原理]]></title><link>https://blog.youkuaiyun.com/GiantCrocodile/article/details/117364619</link><guid>https://blog.youkuaiyun.com/GiantCrocodile/article/details/117364619</guid><author>GiantCrocodile</author><pubDate>Fri, 28 May 2021 16:03:34 +0800</pubDate><description><![CDATA[传统BIO为阻塞IO，来张图：

BIO 一个线程处理一个连接，如果建立连接不发送数据，就会一直阻塞，即使是多个线程处理多个服务也是阻塞的，两个阻塞点：等待链接。等待输入。
线程Thread是操作系统的轻量级进程，BIO每个连接进来都创建线程与之对应，是如何操作的呢？
每连接一个操作系统会调用内核的clone方法将连接好的线程copy一份，该线程会有对应的线程ID号，建立监听。有对应的日志，新开辟的线程可以recv（读取客户端信息），然后主线程继续等待连接，以此类推。主线程循环继续阻塞等待连接，随着客户端连]]></description><category></category></item></channel></rss>