自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

北巷以南猫

北巷以南猫

  • 博客(30)
  • 收藏
  • 关注

原创 redis设计与实现(二):订阅与事务

1. 发布与订阅功能  频道订阅与发布            订阅频道                Redis创建了订阅字典结构来保存频道和订阅客户端之间的关系。字典的键则是被订阅的频道,值则是一个链表结构,存储订阅该频道的客户端。               **订阅的两个类别**:                      1.当订阅字典中有这个频道时,则直接将订阅客户端添...

2019-02-17 22:33:28 168

原创 redis设计与实现(一)

一:redis的数据库  服务器中的数据库      1.int dbnum:决定了服务器数据库的数量,这个数量在初始化服务器的时候决定。默认情况这个值为16。  切换数据库      1.redis的客户端都有自己的目标数据库,每当客户端执行数据库的命令时,目标数据库便是这个命令的操作对象,默认情况下客户端目标数据库是0号数据库。但是可以通过 select db 来切换数据库。 ...

2019-02-15 10:09:52 922

原创 假装读源码Mybatis(一):缓存原理

     Mybatis作为一个强大的ORM框架,也提供了数据的缓存功能,缓存的架构分为两层:一级缓存和二级缓存。     一级缓存是会话级别的缓存,当SqlSessionFactory创建一个SqlSession对象时,就表示开启了一个数据库会话,同时也开启了这个会话的一级缓存。那么为什么要需要会话级别的缓存呢。在一个sqlSession中会存在多次的查询。相同的sql查询在应用一级缓存中有...

2019-01-07 22:26:55 234 1

原创 Springmvc假装读源码:DispatcherServlet类解析

    DispatcherServlet的类图        DispatcherServlet的父类和实现的类还是比较复杂的。其中主要的类有HttpServlet、HttpServletBean类。这些类的作用就不过多的讲解了。        DispatcherServlet类是springmvc最核心的一个类,整个处理过程的的顶层设计都在这里面实现的。而这个类的入口是doS...

2018-12-25 20:53:54 164

原创 Springmvc假装读源码:创建容器

    一:创建业务容器    ContextLoaderListener配置在web.xml中,主要是为了创建springmvc中的容器。在springmvc项目启动时需要启动创建一个容器,加载各种组件。那么ContextLoaderListener的contextInitialized就是这个容器开始的地方  web.xml的配置<listener> <...

2018-12-24 22:44:17 147

原创 Spring源码解析之循环依赖处理(5)

什么是循环依赖?    循环依赖其实就是两个或者两个以上的bean,互相引用对方,形成闭环,如A--->B,B--->C,C--->A。这样的依赖就是循环依赖。而循环依赖在正常的情况下就是一个死循环,A的初始化为引起B的初始化,B的初始化会触发C的初始化,而C的初始化会触发A的初始化,死循环了。   Spring的循环依赖有两种:构造器的循环依赖 属性的循环依赖  ...

2018-12-17 22:07:45 365

原创 Spring源码解析之分析各 scope的bean创建(4)

在 Spring 中存在着不同的 scope,默认是 singleton,还有prototype等。下面便分析各个scope。1.singleton。if (mbd.isSingleton()) { sharedInstance = getSingleton(beanName, () -> { try { return createB...

2018-12-14 13:38:41 243

原创 Spring源码解析之从处理依赖depends-on(3)

这篇文章分析的代码:if (isPrototypeCurrentlyInCreation(beanName)) { throw new BeanCurrentlyInCreationException(beanName); } // Check if bean definition exists in this...

2018-12-13 21:56:24 2624 2

原创 Spring源码解析之从单例缓存中获取单例bean(2)

代码分析入口: Object sharedInstance = getSingleton(beanName); if (sharedInstance != null && args == null) { if (logger.isDebugEnabled()) { if (isSingletonCurrentlyInCreation(beanN...

2018-12-12 22:54:20 217

原创 Spring源码解析之加载bean实例(1)

    Spring的整个流程主要分为两个阶段:容器初始化阶段和加载bean阶段。    容器初始化阶段:首先通过加载Configuration,然后容器会对加载的Configuration进行解析和分析,并将分析的信息组装成BeanDefinition对象,并将其保存注册到相应的BeanDefinitionRegistry中。至此是SpringIOC的初始化过程。    加载bean的阶...

2018-12-12 21:24:39 653

原创 Spring源码解析之加载bean

一、初始化阶段ClassPathResource res = new ClassPathResource("spring/spring.xml");//获取创建bean的beanFactoryDefaultListableBeanFactory factory = new DefaultListableBeanFactory();//创建Reader对象,用来解析resXmlBean...

2018-12-11 17:22:08 879

原创 AOP源码分析(一)挑选bean的合适的通知器

 一、AOP的入口:     AnnotationAwareAspectJAutoProxyCreator类是AOP的核心类。首先可以看看实现的接口和继承的父类。

2018-12-08 14:59:50 106

原创 JVM 垃圾回收GC

一、如何判断对象是垃圾对象     1.引用计数法            在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值+1,失效则-1。但是两个相互引用的对象有可能无法回收。private Object instance;Demo demo1 = new Demo();Demo demo2 = new Demo();demo1.instance = d...

2018-10-31 22:42:49 86

原创 Google Guava库

Google guava通了强大的工具类来简化代码。列举常用的集中类:原文:https://ifeve.com/google-guava/ //不可变集合 ImmutableList<Integer> list = ImmutableList.of(1, 2, 3, 4); ImmutableMap<String, Stri...

2018-10-30 15:44:07 298

原创 Java内存模型概述

一、概述    1.TPS(Transacitions Per Sencond):代表每秒内服务器平均能响应的请求总量。TPS值与并发能力有非常密切的关系    2.QPS(Query Per Sencond) :服务器每秒处理的平均请求总量。二、Java内存模型   1.主内存和工作内存       Java内存模型规定所有的变量都存储在主内存中。每个线程还有自己的工作内存,...

2018-10-28 22:24:44 118

原创 ReentrantReadWriteLock源码分析

一、简介       如果在系统中存在多个线程对对象或者缓存进行多或写的操作,但是读操作要远远的多于写操作的。那么就要保证写操作的结果对所有读操作是可见的。     由此可见在多个线程执行写操作时,多线程不能同时执行,必须获取写的锁才能只能写操作。要保证写操作的结果对所有读操作是可见的,就必须在读操作的时候写操作不能获取锁。在写操作时候也不能进行读操作。在多个线程执行读操作,多线程可以并发...

2018-09-05 22:58:24 341

原创 双亲委派模型

一、双亲委派模式 首先先了解类加载器,类加载器通过类的全限定名称加载到JVM中

2018-08-30 19:39:33 765 1

原创 索引优化和使用

一、索引 索引:用于提升数据库查询效率。索引的原理是用于B+树的数据结构,可查看https://zh.wikipedia.org/wiki/B%2B%E6%A0%91。二、建立索引的原则1.最左匹配原则:mysql会根据索引向右匹配字段,直到匹配无效。范围查询(>,<,like)等会使得索引停止匹配。 但是在sql查询中字段的顺序是不影响索引的匹配顺序的。mysql会根...

2018-08-30 12:01:30 301

原创 线程和虚拟机栈的关系

本文重点讲解线程与虚拟机栈的关系。      虚拟机栈:与程序计数器、本地方法栈都是属于线程私有的JVM内存区域。虚拟机栈的生命周期是和线程相同的,是在JVM运行时创建的,在线程中,方法在执行的过程中会创建一个栈帧。主要用于存放局部变量表、操作栈、动态链接、方法出口等信息。一般将栈帧内存的大小称为宽度,而栈帧的数量被称为虚拟机栈的深度。虚拟机栈的大小可以通过参数-xss配置。因此在同等大小的虚...

2018-08-05 14:44:51 3601 2

原创 设计模式-模板模式

11

2018-07-15 14:46:27 84

原创 Java/MySql代码优化(长期更新)

说明: 记录平时需要注意的代码优化细节1.尽可能的使用重用的对象:String/StringBuffer/StringBuilder

2018-05-11 11:50:13 312

原创 JUC-LinkedBlockingDeque

一、简介 1.LinkedBlockingDeque是基于双向链表实现的并发阻塞队列。支持FIFO和FILO两种操作方式。 2.LinkedBlockingDeque继承了AbstractQueue,实现BlockingDeque接口。也就是支持多线程并发。二、 属性    //链表的头结点 transient Node<E> first;    //链表的尾节点 t...

2018-04-21 12:34:28 119

原创 JUC-ArrayBlockingQueue

一 、简介1.继承AbstractQueue父类,实现了BlockingQueue,SerialIzable接口2.基于数组实现的线程安全的阻塞队列。 3.ArrayBlockingQueue通过Object[]数组来保存数据。初始容量的大小就是创建数组的大小4.ReentranLock锁,ArrayBlockingQueue包含一个ReentranLock锁,为了保持在多线程中实现多线程对数组数...

2018-04-18 21:38:02 127

原创 JUC-CopyOnWriteArrayList

CopyOnWriteArrayList    一、简介:    1.相当于线程安全的ArrayList。    2.对于可变的操作add,set,remove操作,需要复制整个基础数组,开销很大。因此适合读操作频率大于写操作    3.迭代器支持hasNext(),next()操作,不支持remove操作    4.实现List,RandomAccess,Cloneable,Serializab...

2018-04-16 22:35:35 175

原创 Java的CAS原理

Java的CAS原理 一、CAS原理    CAS是compare and swap,意思是比较并交换      java.util.concurrent包中借助CAS实现。   CAS操作包含三个操作数——内存位置V、预期原值A、新值B。如果内存位置和预期原值相同,那么处理器会自动的将该位置的值更新为新值,否则处理器不做生命和操作。无论那种情况,都会在CAS指令之前返回该位置的值。   悲观锁:...

2018-03-21 06:45:28 273

原创 java集合Iterator

 1)Iterator是迭代器类。其中包含的方法有hasNext(),next(),remove()方法。都是依赖当前位置。如果这些集合直接实现Iterator则需要包裹当前迭代元素的位置的指针。当集合在方法间进行传递的时候,由于当前位置不可知,所以next之后的值也不可知。 2)Collection接口实现了Iteratle接口。Iteratle也实现了iterator类。所以Collectio...

2018-03-20 21:45:13 112

原创 Java集合Set-HashSet

Java集合Set-HashSet  1.简介      HashSet是一个不可重复的,线程不安全非同步的,可以插入null值的集合。      继承了AbstraccSet父类,并且实现了Set,Cloneable,Serializable接口。      由HashMap实现的。相当于只有一个Key的HashMap,因此元素是不能重复。      在多线程中可以使用:Set s = Coll...

2018-03-18 21:12:38 111

原创 Java集合Map-HashTable

Java集合Map-HashTable一、简介   1)基于哈希表实现的,是线程安全的map集合,可以用于多线程环境,但是效率比较低下。Value不能为空。   2)HashTable实现了Serializable接口,支持序列化,实现了Cloneable,Map接口。同时也继承了Dictionary父类。   3)当table的实际数量count超过分配容量的0.75时,新建一个Entry[]是...

2018-03-18 17:48:31 95

原创 Java集合Map-HashMap

一、HashMap 1.概述  HashMap是一个包含key-value键值对的数据集合。  HashMap继承了Map,Clonable和Serializable接口。  HashMap是线程不安全的集合,只能适用于单线程,key和value都可以为null。  HashMap的示例有两个参数影响性能:“初始容量”和“加载因子” 2.HashMap数据结构 1)HashMap继承AbStrac...

2018-03-15 14:05:41 113

原创 Java集合类ArrayList和LinkedList

一、ArrayList概述   1.特点:有序的、可重复的集合   2.ArrayList继承了Serializable,可以实现序列化传输。继承了Cloneable,可以被克隆。继承RandomAccess,可以通过下标标记快速访问。  3.ArrayList是单线程安全的集合,多线程使用Collections.synchronizedList(new ArrayList<>()) ...

2018-03-02 09:43:28 203

空空如也

空空如也

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

TA关注的人

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