![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码解析
红烧咸鱼丶
一个没有梦想的废物咸鱼
展开
-
微服务开发(17)--Hystrix的原理&&Zuul的原理图
Hystrix的基本运行流程创建Command对象我们会判断熔断器是否开启当熔断器开启的时候,我们不会执行自己真正的逻辑,而是直接执行器降级方法,执行FallBack方法若FallBack方法执行成功,则返回Fallback方法的执行结果若Fallback方法执行失败,则抛出异常当熔断器关闭的时候,表示需要执行正常的逻辑当熔断器关闭走向正常的逻辑的时候,会先判断当前的...原创 2019-11-27 18:04:55 · 553 阅读 · 0 评论 -
微服务开发(16)--SpringBoot源码分析外部tomcat启动war包的原理
前面我们已经介绍了SpringBoot的内置Tomcat的启动过程原理那么,SpringBoot打包成war包的时候,又是怎么运行的?在此之前先记结论SpringBoot程序是jar的方式,是通过IOC容器启动的方式,带动了Tomcat的启动;若SpringBoot程序是war包的方式,则是Tomcat启动带动了IOC容器的启动如何写一个war类型的SpringBoot程序首先打包...原创 2019-11-26 16:45:37 · 524 阅读 · 0 评论 -
源码分析(10)---纯手写JDK1.7版本的HashMap集合框架
JDK1.7版本的hashMap集合是由数组+单链表组成的,注意这里是单链表。HashMap底层实现原理(JDK1.7)HashMap只允许一个为null的keyHashMap的扩容是当前table数组的两倍HashMap实际存储的元素个数:数组长度大小*负载因子,只要大于这个数目就进行扩容HashMap在扩容的时候,会重新计算hash值,并且对hash的位置进行重新排序,因此,为...原创 2019-09-17 14:47:47 · 186 阅读 · 0 评论 -
源码分析(9)---纯手写基于ArrayList、LinkedList实现HashMap
HashMap的相关原理介绍在JDK1.7中HashMap是由数组加链表实现的,此时的链表不同于LinkedList,LinkedList而在1.7之后,则由数组加红黑树实现官方测试JDK1.8的HashMap的性能比JDK1.7的HashMap性能提高了15%-根据上图可以看到:(1)紫色表示的是数组,hash数组(桶),数组元素是每个链表的头结点。(2)绿色的代表的是链表,...原创 2019-09-15 14:29:47 · 206 阅读 · 0 评论 -
源码分析(8)---纯手写基于链表的方式实现LinkedList集合
LinkedList和ArrayList相比较,LinkedList适合做增删,而ArrayList适合做查询。因为ArrayList的底层是数组实现的,添加和删除操作会利用拷贝技术实现,LinkedList的底层是用链表为底层实现的。ArrayList会考虑数组的扩容问题,但是LinkedList不需要考虑,因为底层是链表实现的。ArrayList是数组实现,所以是连续的内存;但是Link...原创 2019-09-15 14:28:26 · 200 阅读 · 0 评论 -
源码分析(7)---纯手写JDK不同版本下的List接口(ArrayList和Vector集合)
集合框架介绍集合框架图对于上面的结构图的说明:(1)所有的集合类都是在java.util包的下面。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或者实现类。(2)集合接口:6个接口(短虚线表示),表示不同的集合类型,是集合框架的基础。(3)抽象类:5个抽象类(长虚线表示),对集...原创 2019-09-13 11:15:17 · 175 阅读 · 0 评论 -
源码分析(6)---纯手写MyBatis注解版本框架
MyBatis相关理论介绍接口层和数据库交互的方式:Mybatis和数据库交互的方式有两种:(1)使用传统的MyBatis提供的API(2)使用Mapper接口使用Mapper接口实现访问数据库:MyBatis将配置文件中的每一个< mapper>节点抽象为一个Mapper接口:这个接口中声明的方法和< mapper>节点中的< select|...原创 2019-09-11 01:03:47 · 445 阅读 · 1 评论 -
源码分析(5)---纯手写数据库连接池
数据库连接池简介数据库连接池基本原理在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。如外部使用者可以通过getConnection方法获取数据库连接,使用完毕之后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,为下一次使用做好准备数据库连接池的作用(1)资源重用由于数据库连接得到了重...原创 2019-09-09 11:38:14 · 246 阅读 · 0 评论 -
源码分析(4)---手写SpringMVC框架之手写@RequestMapping和@Controller
SpringMVC介绍SpringMVC基于Servlet去实现的。Servlet是单例的,所以也是存在线程安全问题的。线程不安全。SpringMVC基于Servlet实现,所以也是线程不安全的。判断是单例还是多例就看其构造函数执行几次,创建多个对象,构造函数调用了一次就是单例什么是ServletJava Servlet是运行在web服务器或应用服务器上的程序,他是作为来自web...原创 2019-09-09 00:14:33 · 328 阅读 · 0 评论 -
源码分析(3)---手写SpringIOC容器框架手写IOC(XML和注解方式)
SpringIOC的xml方式注入对象原理分析IOC的作用就是把每个bean之间的关系交给第三方容器进行管理,bean的初始化等交给容器处理,即控制反转所有配置文件只要是配置了全路径,我们就可以理解为其是反射得到的(如:spring.xml中配置的bean中的class属性)SpringIOC的XML版本采用的是dom4j+反射技术实现的反射的构造对象,肯定会走无参构造函数的。(无论构造...原创 2019-09-08 02:10:39 · 625 阅读 · 0 评论 -
源码分析(2)---手写Spring事务框架
事务课程回顾声明事务都是基于编程事务声明事务分为:(1)xml方式(2)注解版本(@Transactional)声明式事务的原理其实就是AOP,在正常方法之前之后,做环绕通知(@Around)进行开启事务,提交事务;若出现异常利用异常通知,进行回滚。注意:我们不能自己try-catch,因为自己try-catch不会被异常通知捕获。我们如果一定要try-catch的话,将回滚操作放到c...原创 2019-09-06 11:17:27 · 179 阅读 · 0 评论 -
源码分析(1)---手写Spring事务框架
AOP技术概述Spring事务就是基于AOP的环绕通知和异常通知进行实现的Spring的事务分为两种(1)编程式事务:手动提交回滚事务等(2)声明式事务:有注解版本,有扫包版本Spring事务底层使用编程式事务进行包装的Spring的核心技术:AOP和IOCAOP就是面向切面编程,能够解决代码的复用问题AOP编程的核心点:在方法之前或者之后处理事情AOP底层的实现原理:代理设计...原创 2019-09-05 00:26:12 · 150 阅读 · 0 评论 -
微服务开发(11)--Ribbon&Feign源码解析
Ribbon源码解析Ribbon的使用流程图从上图我们可以看到我们首先创建了一个Eureka集群,端口号分别为8001和8002User1服务和User2服务作为服务的提供方将自己的服务信息注册到Eureka中此时Order服务作为服务的消费者,我们会首先从Eureka中拉取服务注册列表,放到本地,做为缓存ribbon拉取的服务注册列表则是Order本都服务的注册列表,而不是自己从E...原创 2019-11-18 21:17:53 · 484 阅读 · 0 评论 -
微服务开发(8)--Eureka源码深入分析(客户端)
Eureka客户端解析下图是我们Eureka客户端的主要流程分析:根据上图分析源码1. 查看我们的pom文件,发现我们导入了maven依赖 <!--Eureka的客户端依赖--> <dependency> <groupId>org.springframework.cloud</groupId&...原创 2019-11-13 00:39:55 · 522 阅读 · 0 评论 -
微服务开发(7)--Eureka源码深入分析(Server服务端)
看源码的方法:先使用: 先看官方文档快速掌握框架的基本使用抓主线: 找一个demo入手,顺腾摸瓜快速静态看一遍框架的主线源码(抓大放小),记得画出源码的主流程图,一定不要一开始就陷入源码的细枝末节,否则会把自己绕晕画图做笔记: 总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码走向图,并对关键源码的理解做笔记,把源码里的闪光点都记录下来,后来可以借鉴到工作项目中,理解能力...原创 2019-11-13 00:10:38 · 307 阅读 · 0 评论 -
微服务开发(5)--SpringBoot的内置Tomcat启动过程
内容讲解本章节我们主要讲解:(1)以redis的自动装配为例,如何修改RedisTemplate的序列化器(2)Bean的后置处理器的作用以及工作的时机(3)BeanPostProcess,InitializingBean以及自定义@Init的执行时机(4)tomcat的启动流程(==重点 ==)(5)如何扫描自己的组件,以及如何调用到@Import的注解如何修改RedisTem...原创 2019-11-07 23:39:22 · 1651 阅读 · 0 评论 -
微服务开发(3)-- SpringBoot自动装配原理详解
SpringBoot自动装配原理详解这里我们以redis的集成为例,先体会下有自动装配和没有自动装配功能的代码的配置不使用自动装配功能(1)加入配置<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</art...原创 2019-11-06 21:23:33 · 813 阅读 · 0 评论