Spring源码解析
Spring源码解析ioc容器注入流程ioc容器注入流程可以大致分为这几个步骤
概述
在spring中我们的配置文件可能有很多种类型,例如:xml、properties、yml、注解;这些类型的配置文件解析出来的东西肯定是不一样的,所以我们应该让他们通过一个抽象层BeanDefinitionReader,使其最终返回的结果都是BeanDefinition类型。对于不同的类型我们可以通过抽象层的不同的子类来对其进行解析
解析完成之后返回一个BeanDefinition对象,用于存储bean的定义信息。而这些BeanDefinition对象则存储在Map集合当中。之后通过BeanFactory实例化具体的对象
BeanFactorybean工厂,用于访问一个 Spring bean 容器,相当于一个入口,也可以等同于容器
PostProcessor称为后置处理器,也称为增强器。个人认为称为增强器更适合。PostProcessor有两个扩展分支,分别是BeanFactoryPostProcessor和BeanPostProcessor,其主要的作用就是定制化我们的spring,使其具 ...
RabbitMQ
RabbitMQ什么是MQ
MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后。消息发送上游只需要依赖MQ,不用依赖其他服务。
RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑RabbitMQ是一个快递站,一个快递员帮你传递快件。RabbitMQ与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。
为什么要用MQ
流量消峰
举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可 ...
Mysql深入
MysqlSQL的分类
多表查询多表查询也称为关联查询
前提条件:这些表之间是有关系的(一对一,一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键
为什么需要多表查询呢,因为如果合成为一张表的话,粒度太大了,当一个线程操作数据库时,可能导致其他线程不能操作;且合成为一张表时可能会造成空间的浪费
实现
例如:
练习:
1234#查询员工id为...的人在哪个部门工作select employee_id , department_namefrom emp,dep #连接两张表操作where emp.departemt_id = dep.department_id
注意:如果查询语句中出现多个表中都存在的字段,则必须指明此字段所在的表;从sql优化的角度来看,建议多表查询时,每个查询字段都指明其所在表
1234#查询员工的employee_id,department_name,cityselect employee_id,department_name,cityfrom emp e ,dep d ,location l #连接三张表where e.dep ...
JUC
Java并发编程
JavaScript
JavaScript复习笔记,持续更新中
JVM概述
JVM概述JVM是Java平台无关的保障,虚拟机上是平台无关的,虚拟机下是平台相关的
各种虚拟机
虚拟机始祖:Sun Classic
1996年,Sun发布JDK 1.0, Java语言首次拥有了商用的正式运行环境, 这个JDK中所带的虚拟机就是Classic VM。这款虚拟机只能使用纯解释器方式来执行Java代码。
Exact VM
JDK1.2时, 在Solaris平台上发布Exact VM的虚拟机, 它的编译执行系统已经具备现代高性能虚拟机雏形。(外挂编译器)
使用最广泛的JVM:HotSpot VM
JDK1.3成为默认虚拟机, JDK6、JDK8等均为默认虚拟机。HotSpot虚拟机的热点代码探测,通过执行计数器找出最有编译价值的代码, 再通知即时编译器以方法为单位进行编译
Open-JDK
2006年, JDK的各个部分在GPLv2协议下开放了源码, 形成了Open-JDK项目, 其中当然也包括HotSpot虚拟机
BEA JRockit
专门为服务器硬件和服务端应用场景高度优化的虚拟机。2008年BEA被Oracle收购,JDK8在HotSpot的基础上植入了 ...
SpringCloud学习笔记
SpringCloudAlibaba学习笔记,已完结
GCRoots
面试题引子一面:GC Roots如何确定?哪些对象可以作为GC Roots?
什么是垃圾简单说就是内存中已经不再被使用到的空间就是垃圾
判断对象是否可以被回收之引用计数法Java中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,给对象中添加一个引用计数器,每当有一个地方引用它,计数器值加1,每当有一个引用失效时,计数器值减1。
任何时刻计数器值为零的对象就是不可能再被使用的,那么这个对象就是可回收对象。
那为什么主流的Java虚拟机里面都没有选用这种算法呢?其中最主要的原因是它很难解决对象之间相互循环引用的问题。
判断对象是否可以被回收之枚举根节点可达性分析为了解决引用计数法的循环引用问题,Java使用了可达性分析的方法。所谓”GCroots,或者说tracingGC的“根集合”就是一组必须活跃的引用。
基本思路就是通过一系列名为”GCRoots”的对象作为起始点,从这个被称为GC Roots的对象开始向下搜索,如果一个对象到GCRoots没有任何引用链相连时,则说明此对象不可用。也即给定一个集合的引 ...