自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 Spring源码-SpringAOP实现原理

SpringAOP实现原理Spring的切面编程,从织入方式上来看,存在三种织入方式:编译期织入、类加载期织入和运行期织入.aspectJ有两种织入方式:CTW(Compile Time Weaving)编译时织入和LTW(Load Time Weaving)加载时织入,Spring Aop是在运行期通过代理技术动态扩展被增强类(JDK动态代理和cglib动态代理)通过动态代理在方法运行过程中动态的添加功能,可以更好的降低模块的耦合度、易扩展,在 Spring IOC 容器中在 getBean 时返回的

2021-02-15 02:40:15 404 1

原创 Spring源码-getBean获取bean实例

实例化Bean单例bean,并且lazy-init为false(默认是false),则 ApplicationContext在刷新的时候就实例化该Bean,并且将实例化的Bean放到缓存中,下次再使用该Bean的时候, 直接从这个缓存中获取;如果单例bean是懒加载的,即lazy-init为true,则在第一次getBean获取该Bean的时候进行实例化,并放入缓存;scope是prototype的多例bean,每次使用获取Bean的时候都会进行实例化<bean id="" class="" sc

2021-02-15 02:13:25 1066

原创 Mybatis原理2 — mapper映射文件的解析

XMLMapperBuilder的parse()方法调用configurationElement()用于解析xml映射文件,和解析mybatis配置文件一样,仅仅只是将配置的数据和初始化数据准备好,都加载在全局配置configuration中private void configurationElement(XNode context) { //root标签就是mapper:<mapper namespace="cn.mytest.mapper.StudentMapper"> Stri

2021-01-10 16:58:32 678

原创 Mybatis原理及应用1 — Configuration

configuration节点可配置properties、typeAliases、plugins、objectFactory、objectWrapperFactory、settings、environments、databaseIdProvider、typeHandlers、mappers子节点节点。其中最常用的节点是properties,environments和mapperssetting对应的就是configuration的set属性properties节点最终的目的是将Properties

2021-01-10 16:49:25 300

原创 SpringMVC原理

SqlSessionFactorySqlSessionFactory是个单个数据库映射关系经过编译后的内存对像,可以通过SqlSessionFactoryBuilder对象从XML配置文件(一个预先定制的Configuration的实例)构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.SqlSessionFactory一旦被创建,应该在应用执行期间都存在从而使用单例模式.SqlSessionFactory是创建Sql

2021-01-10 16:40:30 272 1

原创 探讨线程原理(1)

进程和线程进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,有独立的地址(内存)空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至少有一个线程;一个进程崩溃后,在保护模式下不会对其它进程产生影响多进程在linux系统中效率比多线程开销小,对于落地项目需要关注多进程之间的通讯。进程通俗点就是一个软件,所以linux中多节点部署效率更好。线程:CPU调度的最小单位,是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。线程有自己的堆栈和局部变量,但

2021-01-10 15:53:03 268 1

原创 Spring源码-容器初始化与刷新

Spring容器启动简单理解spring框架,首先就是一个框架,直白点讲就是提高效率的工具,好比工厂干活,以前是人机械式的工作,现在用上了机器,人只用去操作机器就行了。那么spring工具提供了一个大容器,每次工作前把需要的东西全放进去,用的时候去容器拿,不用像之前用的时候还要跑回去拿。框架终究只是一个工具,如果如何使用都不熟练,什么工具都不好上手,所以最重要的是基础。大多数的框架都是一种套路,利用资源加载和反射,不断的加载配置文件,比如factories,handlers等等,value值往往就是对应

2020-12-27 02:41:14 740 1

原创 阻塞队列原理和线程池源码浅析

阻塞队列非阻塞队列是一个先进先出的单向队列(Queue),而BlockingQueue阻塞队列实际是非阻塞队列的一个加强,之所以是阻塞队列最主要的是实现take和put,当阻塞队列满时,put会一直阻塞直到拿到数据,或者响应中断退出;当队列空时,take元素,队列也会阻塞直到队列可用。阻塞的意思就是此条线程会处于等待卡死状态,解锁的条件是队列中有另一条线程存入或取出数据了,就会解锁,就相当于队列是仓库,仓库没有货了就生产,有货就能消费,锁条件是notFull和notEmpty。Throws

2020-12-27 02:20:49 432

原创 了解MySQL一些内部的技术实现

MySQL索引原理磁盘预读原理计算机中计算和处理数据都是靠CPU,也就是中央处理器,在计算机中一般分为数个层次:依次为寄存器:比如64位(16个寄存器),是CPU的工作台,物理存放在CPU内所以不需要IO一级缓存L1 4×64KB二级缓存L2 4×256KB三级缓存L3 8MB内存 4GB磁盘 1TBCPU工作时所用的数据或者地址先从一级缓存里面找,找不到就从二级缓存里面找,依次类推。假如CPU到磁盘才有,那么这个数据就会存入内存,再存入三级缓存、二级缓存、一级缓存,最后存入寄存器,CP

2020-12-27 01:55:33 529 2

原创 深入理解CAS和AQS

CAS(compare and swap)悲观锁和乐观锁悲观锁:悲观的认为每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁,比如synchronized和数据库层面的 for update,加锁和释放锁会导致比较多的上下文切换和调度延时,引起性能问题//保证方法每次只能被一个线程访问public synchronized void test() {}//select 不会主动加锁,for update加锁select * from tb

2020-12-27 01:48:12 1781

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除