自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

k7c9。

人应该真诚的面对自己,坦荡一点。

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

原创 MyBatis源码解析——缓存

MyBatis一级缓存和二级缓存的源码解析。

2021-12-19 23:00:47 1315

原创 MyBatis 源码解析——插件相关

不想被抓取也不知道说啥。

2021-12-15 23:05:00 479

原创 MyBatis 源码解析——SQL解析

不想被抓取,随便写点.....

2021-12-13 20:40:28 1756

原创 Spring IOC 容器源码简单分析(四)——真实创建Bean

前言上篇只是在描创建单例的过程,小打小闹,真本事还得看我们createBeanInstance,走起了。<6-2-1>解析createBeanInstanceprotected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { Class<?> beanClass = resolveBeanClass(mbd, b

2021-03-09 14:11:14 197 1

原创 Dubbo源码解析(二)-自适应拓展

前言前方还是借用官网的解释,我觉得说的还是蛮好的。Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等。有时,然而有些拓展不想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载。Dubbo通过代理模式就可以解决这个问题,这里将具有代理功能的拓展称之为自适应拓展。Dubbo 并未直接通过代理模式实现自适应拓展,而是代理代理模式基础上,封装了另一种实现方式。Dubbo 首先会为拓展接口生成具有代理功能的代码,然后通

2021-03-08 18:59:14 302

原创 Dubbo源码解析(一)-SPI机制

文章目录前言获取扩展对象-解析getExtension创建扩展对象-解析createExtension<1>getExtensionClasses-获取所有的扩展类解析loadResource解析loadClass<2>Dubbo的IOC实现-injectExtension总结前言开始一个新篇章,Dubbo,源码文章会和官网同步走(也不是完全同步),但会加入我自己的理解啥的。同时,由于版本是2.7.10,因此部分细节会有所不一样。而且还是跟以前一样,我们能往下聊的,就<1

2021-03-07 18:59:53 201 1

原创 Spring IOC 容器源码简单分析(三)——创建单例Bean

前言在Spring IOC 容器源码简单分析(二)——获取单例Bean我们说了获取bean相关的一系列方法,就是先去缓存中获取,如果缓存没命中的话, 肯定就需要去创建bean了,那么在哪创建单例呢, 这就是上篇遗留的<5>和<6>的问题了,这个创建的过程很长,这篇文章可能一下写不完,慢慢来吧。话不多说,let’s go。由于接上文,因此还是沿用上次的习惯。<6> 解析createBean由于<5>的时候引用到了<6>,所以先来分析&lt

2021-03-04 17:31:20 184 1

原创 Spring IOC 容器源码简单分析(二)——获取单例Bean

前言第一篇在这里Spring IOC 容器源码简单分析(一)——从xml文件开始那次偷懒没写太多,现在打算好好写一下,就又开始了…let’s go。现在,让我们从BeanFactory的getBean(String name)出发,从头开始阅读IOC容器源码逻辑。在这个文章中,我会使用分支来解析,比如doGetBean下可能有几个方法需要看下,我会用数字注释,如 <1>,如果这个方法下还需要继续深入下,那么就<1-1>这样,其他的 像 1. 2. 只是对 方法的解释。从

2021-03-03 16:00:02 161 1

原创 使用Netty + Zookeeper 简单搭建RPC

目录项目介绍common-通用server-服务端client-客户端项目介绍前段时间看了《netty实战》这本书,简单的入了一个netty的门,然后想着dubbo RPC也是用netty,于是打算敲一个netty + zookeeper的简单的RPC框架。项目目前比较简单,使用kryo做序列化,netty通信,zookeeper做注册中心。后期可能会优化,比如加几种负载均衡策略,使用nacos做注册中心(这个还没入门,所以是后期啦!)下面看一下我这个项目的结构,比较简单,就三个模块,client-客

2021-02-25 22:34:39 715

原创 AbstractQueuedSynchronizer源码解析(上)

文章目录AbstractQueuedSynchronizer源码解析(上)加锁源码解锁实例分析总结AbstractQueuedSynchronizer源码解析(上)AbstractQueuedSynchronizer(以下简称AQS)是很多类的基石,ReentrantLock,CountDownLatch等都是基于它。先来看它的变量,比较简单,就三个。/** * 头部 */private transient volatile Node head;/** * 等待队列尾部 */priv

2020-12-14 09:17:38 169

原创 Spring解决循环依赖源码解析

写在前面的话循环依赖是啥我就不说了,反正就是A依赖B,B又依赖A,然后就

2020-07-23 15:55:17 224 1

原创 Spring IOC 容器源码简单分析(一)——从xml文件开始

写在前面的话:首先,这块代码无疑是难以理解的,之前好几次准备认真看看到一半被绕来绕去绕晕了,然后就放弃了。最近还是决定拾起来看了,但不同以往,这次我是备而来的!看了《Spring 揭密》这本书(虽然没看完,但这不是重点 ),这本书比较老了,但是Spring 核心这么多年也没变化太多,看的是一个这本书给的一个思路。同时特地跟着tiny-spring这个项目走了遍它的逻辑,有了这个基础去理解Spring Ioc这块的源码起码有点底子,非常感谢这个项目的作者。其次,我觉得Spring代码很繁杂,很多方法没必要

2020-07-22 14:08:21 246 1

原创 深入JVM(一):JVM运行时内存结构

记得18年第一次读周志明著的《深入理解Java虚拟机:JVM高级特性与最佳实践》让我有种醐醍灌顶的感觉,后又读了几遍,每次都感觉自己受益匪浅,但还是像之前说的一样,能说出来的才是自己的。因此,这也是为什么虽然网上现在有很多JVM,我却还坚持写的原因。首先,最好永远是官方文档。有关JVM的内存结构的官方文档:Chapter 2. The Structure of the Java Virtual ...

2019-11-16 10:48:16 566

原创 Java线程池源码分析

并发这块相当重要 ,并且初学的时候很难理解是真的,犹记得我在初学并发的时候(当然也不是很久之前),头铁的看了《Java并发编程实战》这本神书。但是由于是刚入门并发这块,所以,读这本书的过程是相当痛苦的,虽然痛苦还是坚持读了下去,虽然一知半解,但总算感觉摸到了门槛。在看这本书的时候,对线程池这块印象确实比较深,所以决定走一波源码,而且线程池这块也是面试的重点之一吧,去读它的源码对理解线程池很有帮助...

2019-07-01 20:28:13 199

原创 HashMap源码分析(基于1.8版本)

终于要开篇写HashMap了,作为集合届的头把交椅,HashMap不可不谓为响当当的,其代码也让很多人望而生畏,但其实仔细琢磨一下,其复杂度并没有特别的让人害怕(起码对比ConcurrentHashMap而言),因此,让我们走近来近距离瞧一瞧这个大名鼎鼎的HashMap吧。鉴于我本地安装的版本是1.8的,因此,分析1.8版本的是HashMap。最后会分析1.7和1.8的有什么区别。首先,Has...

2019-06-11 09:37:31 198

原创 对Collections.synchronizedList的部分思考

重温《Java并发编程实战》中,有地方引起了我的注意,以前估计读的也是一知半解的略过了,但是现在对多线程有着不一样的体悟之后,经过一段苦思冥想之后,终于想通了。这边把代码贴出来。线程不安全的:class ListHelper <E> { public List<E> list = Collections.synchronizedList(new Array...

2019-06-11 09:36:24 387

原创 ConcurrentHashMap源码解析(基于1.8版本)

开…开…开始了,久负盛名的ConcurrentHashMap。之前一直是看别人文章解析它,今天终于轮到我了。就像以前读高中的时候老师说的,写下了,才是自己的。ConcurrentHashMap(以下简称chm)是concurrent包下的用于多线程并发的一个类,由Doug Lea大神编写。它比HashMap更复杂(其实HashMap也没有很复杂 ),由于它是线程安全的同时效率还比HashTab...

2019-05-10 10:41:57 220

原创 ArrayList源码解析

一直以来都是看别人的博客,所以从来都是输入,没有输出。所以决心自己搞一个博客输出一下学习的东西。既然决定要写,就先从集合类开始。集合类最常用到的肯定是list,map,和set等。因此决定先从list的ArrayList写起。注:虽然是源码解析,但是并不是所有的源码都会涉及到,只涉及到经常使用的那些。源码基于1.8。首先看看ArrayList的类关系图,了解一下它的继承关系和实现的接口。...

2019-04-18 17:31:28 171

原创 偏向锁、轻量级锁,重量级锁膨胀过程

在JDK 1.6之前,synchonized同步方式的成本非常高,因为使用了系统调用引起的内核态与用户态切换、线程阻塞造成的线程切换等。但是后面改进了,引进了锁的四个状态,分别是无锁,偏向锁,轻量级锁,重量级锁,而且是只能逐级膨胀的。但是我刚接触的时候一直很纠结膨胀过程,后来搞明白了,现在抽个时间总结记录一下。首先我们要知道,这几个级别适用的情况。偏向锁:适用于只有一个线程进入同步区轻量...

2018-12-27 21:29:11 881

原创 Lucene总结(四):使用Lucene进行中文分词和高亮显示

前面一直说的都是英文的查询,但其实常用的还是中文查询,中文和英文又是不一样的,当然底层的原理都是一样的。所以这一篇讲解中文分词和高亮显示。中文分词首先要准备一个中文的分词器的jar包。&lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-a...

2018-05-07 22:23:37 398

原创 Lucene总结(三):使用Lucene搜索索引

上一篇总结了一下Lucene是如何构建索引的,所以这一篇总结一下Lucene中的搜索功能。主要分为几个部分,对特定项的搜索、查询表达式QueryParser的使用、指定数字范围内搜索;指定字符串开头搜索、多条件查询。在这里构建索引使用的是上一篇的例子,就不赘述了。一般Lucene查询索引的流程是这样的:创建一个 Directory 对象,用于指定索引库存放的位置;创建一个 inde...

2018-05-05 10:19:43 351

原创 Lucene总结(二):使用Lucene创建索引总结

上一篇讲到了Lucene的检索原理以及简单介绍如何创建索引。这一篇从Lucene的添加、删除、更新、文档域加权来对构建索引进行总结。准备所需jar包和数据新建了一个maven工程,pom.xml如下:&lt;dependencies&gt; &lt;!-- lucene核心包 --&gt; &lt;dependency&gt; ...

2018-05-05 08:18:20 296

原创 Lucene总结(一):认识Lucene以及简单入门实战

前段时间在GitHub克隆了一个SSM的博客的项目,上面用到了Lucene。觉得以后用到的地方可能比较多,于是花了点时间大致了解了一下,总结一下了解的。什么是Lucene?Lucene是apache的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)...

2018-05-04 11:28:31 2522

原创 Bean基于注解的配置

下面是一个使用注解定义一个DAO的Bean:import org.springframework.stereotype.Component;@Component("bookDao")public class BookDao {}它相当于:&lt;bean id="bookDao" class="com.dao.bookDao" /&gt;@Component可以被S...

2018-03-24 21:05:19 565

原创 FactoryBean用法举例

先说为什么会使用FactoryBean。一般情况下,Spring通过反射机制利用bean的class属性指定实现类实例化Bean,在某些情况下,实例化Bean的过程比较复杂,按传统方式,则需要在 bean配置中提供大量配置信息。配置方式的灵活性受限的,这时采用编码的方式可能会获得一个简单的方案。Spring提供了一个org.springframework.beans.factory.Facto...

2018-03-24 19:55:40 1105 1

原创 Android调用摄像头和相册

很多应用都会用到摄像头或是相册,故记录一下,以便以后作为参考。随代码附上我的理解。先说如何调用摄像头:public class MainActivity extends AppCompatActivity { public static final int TAKE_PHOTO = 1;//拍照片 private static final int CHOOSE_P...

2018-03-22 18:12:21 567

原创 Spring AOP基础 <一>

AOP概述AOP是Aspect Oriented Programing的简称,即“面向切面编程”。 如何理解这个含义,下面举一个例子。按照软件重构思想的理念,如果多个类中出现相同的代码,那么应该考虑定义一个父类,将这些相同的代码提取到父类中,如所有的动物类都应该有run()和eat()方法,通过引入一个抽象的Animal父类,这些动物类就可以通过继承Animal复用run()和eat()

2018-02-04 14:04:05 235

原创 Spring中Bean的生命周期

根据《Spring实战》上面描述的Bean的生命周期。 1.Spring对Bean进行实例化(相当于new一个对象)2.Spring将值和Bean的引用注入进Bean对应的属性中。3.如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法(实现BeanNameAware主要是为了通过Bean的引用来获得Bean的ID,一般业

2018-01-27 21:20:21 307

原创 深入理解java——反射

此文章为我阅读《java核心技术I》的读书笔记。 穿插个人理解和书上所述。首先还是概念问题。 什么是反射? 能够分析类能力的程序称为反射。反射的机制很强大,反射机制可以用来: 在运行时分析类的能力 在运行时查看对象,比如,编写一个toString方法供所有类使用 实现通用的数组操作代码 利用Method对象Java反射框架主要提供以下功能: 1.在运行时判断任意一个对象所

2018-01-22 16:15:55 333

原创 重写Object中equals方法

此文章为我阅读《java核心技术I》的读书笔记。 穿插个人理解和书上所述。Objecet类是java中所有类的始祖,如果没有明确指出超类,那么Object就被认为是这个类的超类,在java中,每个类都是由Object扩展而来的。在java中,只有基本类型不是对象,如,数值,字符和布尔类型的值都不是对象。1.重写equals方法首先,我们先要清楚equals方法是做什么的?Object类中的equ

2017-12-09 14:15:51 462

原创 深入理解java——多态与动态绑定

此文章为我阅读《java核心技术I》的读书笔记。 穿插个人理解和书上所述。 以及引用了网上的文章。侵权删。1.多态首先,什么是多态?根据定义上来讲,一个对象变量可以指示多种实际类型的现象被称为多态。或者可以这样说,一个引用变量指向哪个类对象在编程时不能确定,要到要等到程序运行时才确认这个变量到底指向哪个类对象,调用的是哪个类的方法,这样可以在不修改代码的情况下,改变运行绑定的具体对象,让程序可以

2017-12-09 12:41:36 1026

空空如也

空空如也

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

TA关注的人

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