自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Spring源码深度解析(AOP功能源码解析)

前言:     有关于Spring,我们最常用的两个功能就是IOC和AOP,前几篇文章从源码级别介绍了Spring容器如何为我们生成bean及bean之间的依赖关系     下面我们接着来看AOP的源码实现。       有关于AOP,我们在面试中也被无数次问到,AOP是什么?AOP有什么...

2018-07-12 11:28:14 17300 12

原创 Spring源码深度解析(XmlBeanFactory源码解析上)

前言:     Spring容器有多种实现方式,一般来说可分为:BeanFactory和ApplicationContext     * BeanFactory提供了容器的基本功能,如getBean()等功能     * ApplicationContext接口继承了BeanFactory,...

2018-07-09 13:55:10 1480 6

原创 非Spring环境下的自定义加载配置文件(分层次加载)

前言: 上一篇文章中,我们讲了如何在Spring环境下自定义加载配置文件。 毕竟现在Spring开发是一种通用方式,项目中不使用Spring的还真是不多见。 但是有一种情况,就是如果我们开发的是一个通用中间件产品,最少依赖原则,希望用户依赖最少,那么基于该需求,笔者就简单介绍...

2020-03-07 13:38:04 36 0

原创 Spring自定义加载配置文件(分层次加载)

前言: Spring会默认加载application.properties文件,我们一般可以将配置写在此处。这基本可以满足我们的常用demo项目使用。 但是在实际项目开发中,我们会将配置文件外置,这样在我们需要修改配置的时候就不用将项目重新打包部署了。 下面我们来看一下实际项目开...

2020-03-07 13:23:18 124 0

原创 线程之UncaughtExceptionHandler的应用

前言: 看源码好处多多,尤其是优秀的框架源码,受益无穷。 日常CRUD的工作实在无聊,把CRUD的代码写一万遍也没法提高个人的层级。 业务的疯狂增长确实能增长个人的技能,因为需要不断思考优化方案,不断去升级(硬件、软件和个人能力)。 但是要想写出好的代码,好的框架还是需要多...

2020-03-01 09:58:51 56 0

原创 序列化与反序列化的那些事

前言: 昨天开始构思要写一篇文章来说明一下序列化与反序列化。 因为看到zookeeper的自定义序列化Jute,而且还自定义了通信协议。 之前感觉这些都我来说都是很牛逼的存在,从来没想过要做这些东西,但是仔细一想,好像也么有很难实现的地方吧,当然这都是后话,我们先一点点分析,先写...

2020-02-24 22:28:27 46 0

原创 分布式调度框架elasticJob对Curator的使用解析

前言: 由于公司使用到elasticJob作为分布式调度框架的基础,所以也多多少少研究了一下这个框架。 任务调度的框架有很多,单机情况下我们可以用Quartz,但是分布式调度的情况下,Quartz就无能为力了,这个时候分布式调度就上线了。 当然这篇博客不是用来介绍elasticjob...

2020-02-22 22:12:27 51 0

原创 Curator的简单封装使用

前言: 闲来无事,想起把zookeeper的相关知识再补充一下。作为中间件部门的成员,与zookeeper打交道的机会还是很多的。目前市面上的很多产品,尤其是分布式相关的,基本都会用上zookeeper。 本文不是一篇介绍zookeeper是什么和怎么使用的文章,而是介绍zookeep...

2020-02-22 12:00:17 45 0

原创 通过Wireshark学习三次握手、四次挥手

前言: TCP的三次握手、四次挥手是大家耳熟能详的。 笔者实际是个网络方面的渣渣。每次在面试前都要狂补一下相关知识点用于应付面试(大家都懂的。。哈哈)。 但是老是这样也不行,每次都是一个模糊的概念,所以这次准备用Wireshark工具来真正验证下三次握手和四次挥手的过程(我的工具...

2020-02-15 21:36:22 1556 0

原创 记一次dump内存快照并分析对象数据的过程

前言: 之前在产线环境有一个问题需要分析下,所以dump了下内存快照,并运用工具分析了下其中的某对象属性信息。由于产线环境不能连接外网,所以无法截屏,也没法将文章整理出来。 所以笔者就选择在本地把整个过程在本地环境再复现下,算是一个记录。 准备工作: 需要提前安装好JDK;...

2020-01-15 19:11:24 279 0

原创 redo log与undo log

前言: 这一对难兄难弟配在一起,面试的时候聊起来不要太嗨。估计面试者直接就死在这了。对MySQL的了解越多,越发现想很清晰的聊明白这两个之间的区别和联系就越难。 本着写博客让自己更清晰的角度,还是要记录一下笔者对他们的理解的。 1.事务的特性实现 什么是事务?估计这个问题每...

2020-01-11 14:29:13 198 1

原创 Sentinel嵌入式集群模式搭建(Nacos)

1.环境准备 1)代码准备 笔者目前是基于Sentinel-release-1.7的源码进行测试的,在原sentinel-demo-cluster的基础上,适配笔者本地的环境进行修改的。源码地址如下:https://github.com/alibaba/Sentinel/tree/...

2020-01-11 12:14:19 500 0

原创 InnoDB多版本控制

概念: 多版本控制:MVCC,也就是一致性非锁定读的具体实现方式。 具体实现方式为:如果读取的行正在执行排他锁类操作(update、delete等),该查询则不会等待锁的释放,而是读取该行的一个快照数据。 问题来了,什么叫做行快照数据呢? 实际就是当前行数据的历史版本数...

2019-12-29 12:07:11 118 0

原创 InnoDB共享锁和排它锁(行锁类型)

前言: 最怕面试官问到一大堆的锁概念了,表锁、页锁、行锁,排它锁、共享锁... 有关于锁的概念实在太多了,而我们在实际使用中使用到的又太少。很少有专门去写特定类型的锁实现,一般都是数据库默认帮我们做了相应的锁动作。 本文就着示例把InnoDB中的行锁的两种标准实现:共享锁和排它锁...

2019-12-29 12:03:57 82 0

原创 MySQL日志文件解析(binlog)

前言: binlog(二进制文件)一直来说都是一个比较难搞懂的点,笔者前后读了几遍,读了当时理解了,但是事后还是很模糊,尤其是跟redo log放在一起的时候,更是蒙的不行。 总结原因:还是没有真正理解binlog的作用。所以才促成了这篇博客,希望通过这篇博客前后梳理一下binlog的...

2019-12-23 11:17:12 51 0

原创 MySQL日志文件解析(查询日志、错误日志、慢查询日志)

前言: MySQL的日志文件详细记录了数据库在运行时的各种活动轨迹。 MySQL通常包含以下日志文件:查询日志;错误日志;慢查询日志;二进制日志。 通过这些日志文件,我们对MySQL的运行时错误进行分析,对慢查询sql进行分析... 下面我们就来看下这些日志的详细记录情况。 ...

2019-12-21 18:01:14 92 0

原创 Sentinel源码-多线程并发N种同步方式

前言: 上文讲了Sentinel在线程池使用方面的经验。 既然有了多线程任务执行,那么就会存在并发问题,当出现并发问题时,解决方案无外乎加锁。 Sentinel中也有很多解决并发问题的方案,跟着笔者来看看吧。 1.synchronized使用 这是比较常用的一种同步方...

2019-12-20 16:46:02 85 0

原创 Sentinel源码-线程池的使用

前言: 有好长一段时间没有写博客了,思来想去,懒是主要的原因,另外一方面笔者在年初换了工作,适应工作还是花了蛮长一段时间的,还有就是,没找到一个合适的主题、系列来写。 之前写的很多对个人的成长还是比较有益的,起码现在在看源码的时候不像前两年那么吃力了,写的代码也会刻意去模仿源码的风格来...

2019-12-12 19:43:22 80 0

原创 ApplicationEvent与ApplicationListener

前言: Spring的世界中有这么一对好基友,两个人总是同时出现,相爱相杀。这就是ApplicationEvent与ApplicationListener。感觉有点像小偷和警察,只要ApplicationEvent一出现,ApplicationListener就会发现TA。 下面我们就...

2019-07-06 11:09:47 733 0

原创 @Resource那点事

前言: 在项目开发中,@Autowired和@Resource之争,一直搞不清楚,反正也不想搞清楚到底什么时候用@Autowired,什么场景下用@Resource,就一直用@Autowired得了。 现在又到了还账的时候了,必须写一篇文章搞懂@Resource那点事 上一篇文章...

2019-05-12 15:40:39 249 0

原创 @Autowired使用全纪录

前言: @Autowired应该是我们在Spring项目中最常用的注解了。 使用起来非常方便,但是一旦出现问题调试起来也是比较麻烦的。 笔者就是这样,平时用来一时爽,出现问题两行泪。 究其原因,还是对@Autowired了解得不够深入,下决心好好玩一次 1.@Autow...

2019-05-12 14:26:36 944 0

原创 FactoryBean和BeanFactory

前言: 这是一个很容易被问到的关于Spring的面试题。 两个特别像,但是功能却千差万别。 有关于BeanFactory,我们都知道,这是Spring容器的基础实现类,它负责生产和管理Bean的一个工厂。当然BeanFactory只是一个接口,它的常用实现有XmlBeanFact...

2019-05-12 10:16:35 1341 0

原创 定制化Bean的利器:BeanPostProcessor、BeanFactoryPostProcessor

前言: Spring的面试中,一般都会问到IOC和AOP,大部分同学都能回答出这些知识点的基本运用,如果再多问一句,AOP的底层实现方式,大部分人都会回答动态代理。那么动态代理是如何被使用到Bean上的呢?到这里可能要刷掉一大部分人,如果没有看过Spring的源码的话,这个是比较难回答的。 ...

2019-05-12 09:16:21 182 0

原创 Spring优雅关闭之:ShutDownHook

前言: 又是一个之前没关注过的课题,发现学习Spring官方文档还是有用的,一个个的知识点不断冒出来。 意外的发现朱小厮https://blog.csdn.net/u013256816/大神也是CSDN重度患者,哈哈,向大神学习,好好写博客,应该有一天也可以出书的吧。 闲话不...

2019-05-04 15:59:17 4899 0

原创 Spring容器生命周期管理:SmartLifecycle

前言: 笔者之前在项目中倒也没有关注过Spring容器的生命周期管理(大家注意下:之前一篇博客介绍的是Spring中Bean的生命周期管理,与目前要介绍的Spring容器的生命周期管理倒还是千差万别的,千万不要混淆了)。 Spring容器,我们常用的就是ApplicationConte...

2019-05-04 15:51:48 478 0

原创 Spring控制Bean生命周期行为的几种方式

前言: Spring中的Bean从创建到销毁经历了一个又一个阶段,在这些阶段中,我们可以通过某些方法来控制Bean的创建、Bean的销毁。 在Spring的官方文档中,有这么一段话 As of Spring 2.5, you have three options for contr...

2019-05-03 18:25:06 497 0

原创 Spring如何引入其他资源:<import>和@Import @ImportResource

前言: 作为一个中型的基于Spring的项目时,我们经常会分模块开发,那么bean定义文件我们如何分配和管理呢?是都放在一个配置文件中嘛? 我们在老项目二次开发的时候,经常会遇到需要使用之前的beans配置文件,集成到当前项目配置中,遇到这种情况如何操作呢? 1.合理使用<...

2019-05-03 18:17:23 3940 0

原创 Spring定义Bean的两种方式:<bean>和@Bean

前言: Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用。 什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean。 今天通过Spring官方文档来了解下,如何生成bean,如何使用呢? 1.通过XML...

2019-05-02 14:28:39 7532 0

原创 Spring官方文档学习:开篇

前言: 入行也算有几年了,Spring也是一直都在用,源码也看了一些,相关博客也写了一些,但是总觉得还是对Spring的理解不够深入。仔细想来,应该是Spring的使用还不够深入,所以导致理解也不够深入。 痛定思痛,决心把Spring从头到尾好好的学一遍,用示例的方式一个个知识点敲过来...

2019-05-02 10:54:11 961 2

原创 JDK源码解析之ThreadPoolExecutor

前言:     线程池的使用在java开发中屡见不鲜,我们一般会这样使用 // 1.创建一个固定线程数的线程池 ExecutorService threadPool = Executors.newFixedThreadPool(5); // 2.提交任务 threadPool.submit(...

2019-01-17 16:25:42 219 0

原创 JDK源码解析之LockSupport

前言:     之前关于AQS和ReentrantLock的介绍中,在获取锁和释放锁的操作中,有一个类被反复使用到,就是LockSupport.java     在AQS.lock()方法中,调用到了LockSupport.park(Object blocker)方法     在AQS.un...

2019-01-16 12:01:01 162 0

原创 JDK源码解析之ReentrantLock

前言:     之前说过,JDK有两种锁的方式,一种是Synchronized,一种就是CAS     基于CAS实现的Unsafe我们无法直接使用,我们一般就是使用ReentrantLock来实现锁的功能     那么本文我们就来看下ReentrantLock是如何实现CAS锁的   ...

2019-01-15 18:06:12 191 0

原创 JDK源码解析之AtomicInteger及CAS

前言:     JDK中的锁大致可以分为两类:Synchronized和CAS。     CAS的使用中,有直接使用的,比如AtomicInteger;有间接使用的比如ReentrantLock。     本文就说一下直接使用CAS的AtomicInteger类,看其是如何直接使用的   ...

2019-01-15 18:00:44 127 0

原创 JDK源码解析之AbstractQueuedSynchronizer

前言:     JDK中的锁大致可以分为两类:Synchronized和CAS。     CAS的使用中,有直接使用的,比如AtomicInteger;有间接使用的比如ReentrantLock。关于AtomicInteger的分析可参考笔者的上一篇博客:     CAS间接实现的典型代表是...

2019-01-15 17:56:58 125 0

原创 JDK源码解析之HashSet

前言:     集合类型三巨头:List、Set、Map     在之前的博客中已经讲了关于List的实现类、Map的实现类,现在还有Set相关的没有介绍过了。     为什么先介绍Map后介绍Set呢?按理说Set应该比Map的实现更简单点啊?          当然,这是笔者的一点小...

2019-01-10 17:32:54 96 0

原创 JDK源码解析之LinkedHashMap

前言:     在上一篇博客中,我们系统的介绍了HashMap,HashMap是非线程安全的类,一般情况下作为局部变量使用是完全可以的。     HashMap的存放是无序的,按照一定的规则映射的,所以,遍历其元素的顺序与添加的顺序是不一致的。     如果我们想按照添加的顺序来遍历元素该如...

2019-01-10 17:28:45 88 0

原创 JDK源码解析之HashMap

前言:     关于HashMap的源码解析网上已经有很多大神级别的文章,看的笔者心生敬佩,真心不敢写了。     但是每次聊到HashMap的时候,总会有知识点是模糊的,应该还是眼高手低的缘故,所以还是决心写一下(很多参考大神的文章)     注意:笔者的JDK是1.8.3版本的,所以包括...

2019-01-10 11:08:28 180 0

原创 JDK源码解析之ArrayBlockingQueue

前言:     之前介绍的关于Queue的实现类,LinkedList、PriorityQueue都是非线程安全的队列,那么有没有线程安全的Queue实现类呢?     当然是有的,在java.util.concurrent中有几个关于Queue的线程安全实现 /** * @see ja...

2019-01-08 16:30:59 111 0

原创 JDK源码解析之Queue与其实现类PriorityQueue

前言:     前文介绍了Stack这种数据结构类型,它符合后进先出(LIFO)的操作顺序。     今天介绍与其相反操作顺序的一种数据结构,Queue(队列),它符合先进先出(FIFO)的操作顺序       从网络上截一个图(如有侵权,请联系作者),简单表示下队列结构     a1是...

2019-01-08 16:24:25 96 0

原创 JDK源码解析之Stack

前言:     Stack一般来说用的比较少点,因为其数据结构特殊性,所以在一些特殊的场景,还是能发挥出巨大作用的。     Stack(栈):参照java.util.Stack的注释来看,它具有后进先出的特性(LIFO)。     从网络上截一个图(如有侵权,请联系作者),简单表示下链表结...

2019-01-08 16:20:37 108 0

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