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