自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 问答 (1)
  • 收藏
  • 关注

原创 Dubbo源码解析 三、Provider的启动过程

上一节中讲到了dubbo中consumer的启动过程,链接为Dubbo源码解析 二、Consumer的启动过程,这一节我们将一些provider的启动过程,看一下dubbo是如何将provider提供的服务暴露出来。 同样的,下面以provider中DemoServiceImpl 为例:public class DemoServiceImpl implements DemoS...

2019-08-11 17:54:48 345

原创 Dubbo源码解析 二、Consumer的启动过程

上一篇讲到了Dubbo中不得不说的SPI机制,链接为Dubbo源码解析 一、Dubbo的SPI机制,这一节将会讲到Dubbo中Consumer的启动过程。 下面以xxxxConsumer启动的过程为例。 我认为Consumer的启动主要分为两个方面: 1、如何根据要实现的接口注入到Spring服务中 2、如何根据实现的consumer接口、调用的方法、调用的参...

2019-07-24 23:18:47 289

原创 Dubbo源码解析 一、Dubbo的SPI机制

SPI机制,即Service Provider Interface,服务提供接口。此机制的作用是更加方便、灵活的获取到接口实现方,而不是硬编码到代码中。比如在dubbo中通过Protocol的refer接口获取到最终执行的invoker,但是Protocol有多种实现,有DubboProtocol,也有RegistryProtocol,那么我该使用哪一种呢?这时候Dubbo的SPI机制要解决的...

2019-07-17 22:18:48 275

原创 Spring MVC源码剖析 一、DispatcherServlet初始化源码剖析

使用Spring MVC的时候,每次都要在web.xml中初始化一个DispatcherServlet,这是为什么呢?因为我们需要DispatcherServlet来将Spring容器启动起来,启动完成后,由DispatcherServlet来接收请求并分发。首先。DispatcherServlet 继承 FrameworkServlet,FrameworkServlet 继承 Htt...

2019-05-23 22:14:41 306

原创 Spring 源码剖析 四、主要逻辑代码赏析之BeanFactoryPostProcessor对BeanFactory的拦截处理

在web开发中,我们经常会用到一些拦截器,比如Java Web中的filter,已经Spring MVC中的Interceptor,其能对一个请求进行前置与后置的处理。而在Spring中,可以使用BeanFactoryPostProcessor对BeanFactory进行拦截处理。 今天就来分析一下BeanFactoryPostProcessor对BeanFactory进行拦截处理的源码...

2019-05-17 08:24:12 274

原创 Spring 源码剖析 三、主要逻辑代码赏析之根据bean的定义来生成bean

上一节中将了如何通过xml文件中读取到bean的定义,链接为Spring 二、主要逻辑代码赏析之获取bean的定义,这一节中,我们将会讲述读取出xml文件后,如何根据bean的定义来最终生成bean。首先还是来看一下ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("appl...

2019-02-17 21:43:08 239

原创 Spring 源码剖析 二、主要逻辑代码赏析之获取bean的定义

  上一节中,我们讲了Spring主要类的实现逻辑与继承关系,这一节中我们来看一下Spring如何通过解析xml文件来获取到bean的定义。  首先根据一个例子来说明,下面是Spring配置文件中的一个 <bean> 节点定义,那么Spring如何解析这个节点,然后生成对应的beanDefinition呢?      <bean id="dependC" class="c...

2019-02-12 22:20:43 295

原创 Spring 源码剖析 一、Spring 主要类实现逻辑与继承关系

  作为Java Web工程师,我们一般会在项目中使用Spring来作为项目的基础框架,那么接下来,我将带领大家从源代码的角度来剖析Spring的运行过程以及运行原理。  这一节我们先讲一下Spring 主要类实现逻辑与继承关系,下面先看一下我们典型的使用Spring的方式: ClassPathXmlApplicationContext context = new ClassPat...

2019-02-09 22:21:33 1004

原创 Java并发编程之ThreadPoolExecutor线程池源码剖析

  我们开始从 ThreadPoolExecutor 可以做什么来说起,然后进行源码剖析。  ThreadPoolExecutor 的初始化方法为:    public ThreadPoolExecutorLocal(int corePoolSize,                              int maximumPoolSize,                  ...

2019-02-09 18:53:03 309

原创 Java 并发编程之ReentrantLock源码解析

  上一篇中,我们在源码的角度讲了AbstractQueuedSynchronizer的原理,链接为 Java 并发编程之AbstractQueuedSynchronizer源码解析 ,这一篇中,我们从源码的角度讲一下 ReentrantLock 的原理。  我们知道,ReentrantLock是我们在jdk中经常使用的可重入锁的实现类,内部分为公平的可重入锁以及不公平的可重入锁,那么这些机制...

2019-02-09 17:56:43 602

原创 Java 并发编程之AbstractQueuedSynchronizer源码解析

  上一篇中,我们讲了 AbstractQueuedSynchronizer 的使用,链接为 Java 并发编程之AbstractQueuedSynchronizer解析 ,这一节中,我们将会从源码的角度解读: 一、双向链表:  AbstractQueuedSynchronizer中使用了双向链表来作为同步器的队列,来保证FIFO。  双向链表,首先会有一个header与tail...

2019-02-03 21:48:10 509

原创 小白的web优化之路 四、使用Callable与Future来实现异步请求

  在上一篇 小白的web优化之路 三、使用MQ来实现事务异步处理 中,我们使用MQ来将任务异步话,使接口速度得到的极大的提高,这一节中,我们就要考虑一个需要同步返回多次请求的问题。  在完成了产品经理的那个发送短信通知的‘古怪’需求之后,小白觉得自己终于可以继续开发CURD的任务了,心里不免有点小激动。突然,小白收到了产品经理的一个消息,小白心里一震,打开消息,屏幕上写着“小白我这有一个获取信息...

2018-06-24 13:00:35 1208

原创 小白的web优化之路 三、使用MQ来实现事务异步处理

在上一篇 小白的web优化之路 二、实战使用redis来缓存列表信息 中,我们讲了使用redis来缓存列表信息,极大的提供了用户访问列表的速度,也减轻了数据库的压力,下面,我们在以一个例子来讲解MQ来实现事务的异步处理。  在使用了redis解决了列表查询问题之后,小白又遇到了一个问题,刚刚产品经理找他,要他实现一个功能,功能如下:  当用户完成某一任务时,提高用户的积分,并给此用户的

2017-06-18 17:36:24 2731 2

原创 小白的web优化之路 二、实战使用redis来缓存列表信息

在上一节中,我们提到使用redis来缓存列表信息,但是,上一节中只是简单的获取一页的数据,在实际中,我们可能有成千上百页的数据,那么该如何使用redis来加快列表的访问速度呢?  方法就是:1、判断有无缓存,若无缓存,从数据库中直接获取一千条数据,然后缓存到redis中。2、根据请求从redis中的列表中获取每页的数据。  流程图为:

2017-05-21 12:29:32 1488

原创 小白的web优化之路 一、使用redis来缓存信息

作为一个web开发者,根据产品经理的需求来完成一个应用显然不是我们的唯一目标,很多时候,我们考虑的不仅仅是需求,而是超越需求,认识到项目上线后的性能瓶颈。很多web应用在上线后,都可能会碰到响应慢的问题,而从今天开始,我将以浅显的例子带领大家一步一步的优化web应用。  先举个栗子:  小白在做一个web列表页时,需求很简单,当用户访问第一个页的时候,服务器返回1-10条的文章简介数据,访

2017-05-07 11:31:29 7596 6

原创 SQL索引详解

SQL中的索引分为两种,一种为聚集索引和非聚集索引,下面介绍两者的异同。一、聚集索引与非聚集索引:  1、聚集索引:  聚集索引的意思可以理解为顺序排列,比如一个主键自增的表即为聚集索引,即id为1的存在于第一条,id为2的存在于第二条...假使数据库中是使用数组来存放的这张表中的数据,那么如果我需要查找第100条,那么直接第一条数据的地址加上100即为第一百条的地址,一次就能查询

2016-11-12 22:05:45 50597 9

原创 Java ArrayList与LinkedList源码分析与比较

众所周知,ArrayList与LinkedList都实现了List接口,那么其分别是如何实现其中的 add(E object),get(int location),remove(int location),clear()方法呢?一、ArrayList源码分析1、如何初始化?2、如何add一个对象?3、ArrayList如何得到一个数4、如何remove一个对象?5、如何进行

2016-07-29 08:01:18 858

原创 使用RabbitMQ实现高可用延迟任务框架之基础:RabbitMQ基础概念

今天,我们将一步一步的讲解如何使用rabbitMQ实现高可用的延迟任务框架,先说一下为什么要使用MQ来实现延迟任务框架,而不是使用其它的组件?一、组件选型: 在其他的博客中,经常讲到使用java内部的ScheduledThreadPoolExecutor,之前我也做过其源码剖析,博客地址为 Java并发编程之ScheduledThreadPoolExecutor源码剖析,但是这样...

2019-10-09 21:17:43 282

原创 Java并发编程之ScheduledThreadPoolExecutor源码剖析

之前我们剖析过Java中线程池ThreadPoolExecutor的源码,链接为https://blog.csdn.net/HappyHeng/article/details/86827324,这一节从源码层次讲一下ScheduledThreadPoolExecutor这个定时线程池是如何执行任务的。一、ScheduledFutureTask : 在ThreadPoolExecut...

2019-09-27 23:23:16 382

原创 HttpComponent 完全解析之获取HttpClient

在Java Web中,我们一般使用HttpComponent发起网络请求。HttpComponent获取分为两步: 1、获取到HttpClient 2、发起请求 今天来看一下如何配置HttpClient来达到我们想要的效果一、连接池与设置HttpClient连接池数 HTTPComponent中有连接池的概念,比如我们有一个连接 连接了www.baidu.c...

2019-06-07 10:52:05 1231

原创 ZooKeeper完全解析(十一) 权限管理与Curator增加权限验证

在ZooKeeper中,可以为节点设置权限,这样只有用户对应权限的客户端才能访问到指定的节点。 ZooKeeper中的权限认证可以分为 scheme、id、permission。其中scheme为验证的种类,id为对应类型中的登录id,permission为登录id的权限。一、scheme:其中scheme分为四种: world:默认方式,即所有人都可以访问。 auth:...

2019-04-14 22:22:25 2674

原创 数据库隔离级别详解

之前,我们有讲过数据库的索引,链接为数据库索引详解今天,我们将讲解数据库的隔离级别。一、隔离级别的种类与分别可以解决的问题: 事务的隔离级别分为4个,即 读未提交(read uncommitted)、读已提交(read committed)、可重复读(Repeatable read)、可串行化(Serializable)oracle默认的隔离级别为 读已提交。mysql的默...

2019-03-18 23:28:40 5125

原创 Java 并发编程之AbstractQueuedSynchronizer解析

一、队列同步器的使用:  队列同步器AbstractQueuedSynchronizer,它是一个用来构建锁或者其它同步组件的基础框架,其中内部使用一个int值来代表同步状态,使用的是FIFO的形式,所以被称为队列同步器,此同步器作者希望它能实现大部分的同步需求。  使用此同步器的方法一般是继承此同步器,然后实现内部的抽象方法,其中几个方法比较重要:  1、getState() : 获取...

2019-02-03 21:17:28 373

原创 Java 多线程解密之wait等待

  在Java中,可以调用wait()方法使当前线程进入object的等待队列,这样当有新的任务需要执行的时候,调用object的notify()或者notifyAll()方法就可以唤起线程,wait(),notify()在线程池、数据库连接池有有广泛的应用。  其流程为:  首先我们知道,在获取对象的锁,也就是获取到其监视器,获取锁成功之后,则线程进入 RUNNABLE状态,即运行状态...

2019-01-20 15:59:51 732

原创 Java 并发编程完全解析(一)、Java线程中的状态

  从今天开始,我将带领大家走进Java并发编程的大门,第一步,就是了解Java线程中的状态。  众所周知,我们在初始化并执行一个线程的时候: new Thread(new Runnable() { @Override public void run() { xxx }...

2018-12-13 22:18:04 258

原创 ZooKeeper完全解析(十) 使用Curator来简化ZooKeeper操作之群首选举

  上一篇我们讲解如何使用Curator来完成分布式锁的相关操作,这一节中我们使用Curator来实现群首选举。  Curator中有两种类都可以实现群首选举,一个是  LeaderLatch, 一个是 LeaderSelector 。第一种会告诉你是否成为leader,当你close的时候才会交出leader权限,第二种可以在你成为leader之后,更方便的决定是否要交出leader权限,相...

2018-11-18 16:41:20 563

原创 ZooKeeper完全解析(九) 使用Curator来简化ZooKeeper操作之分布式锁的使用

  在上一篇中,我们讲解了如何使用Curator来进行增删改查的操作,链接为 ZooKeeper完全解析(八) 使用Curator来简化ZooKeeper操作之基本使用 ,之前我们使用过ZooKeeper库来实现过分布式锁,链接为 ZooKeeper完全解析(六) 使用ZooKeeper实现分布式锁之实现原理 、 ZooKeeper完全解析(七) 使用ZooKeeper实现分布式锁之Java实现,...

2018-11-18 15:47:25 424

原创 ZooKeeper完全解析(八) 使用Curator来简化ZooKeeper操作之基本使用

  在前几篇中,我们讲解了如何使用 Java ZooKeeper 库来操作ZooKeeper,但是 Java ZooKeeper 库只实现了ZooKeeper的一些基本操作,其余分布式锁,群首选举等等,都没有给出解决方法,那么有没有这么一个库来实现这些方案呢???答案是肯定的,就是我们今天要讲的Curator。一、引入Curator:  curator有很多模块,核心的模块为    cu...

2018-11-16 09:09:45 395

原创 ZooKeeper完全解析(七) 使用ZooKeeper实现分布式锁之Java实现

  在上一节中,我们讲了使用ZooKeeper来实现分布式锁的原理,链接为  ZooKeeper完全解析(六) 使用ZooKeeper实现分布式锁之实现原理 ,这一节我们来讲一下如何使用Java来实现分布式锁:  在实现原理中,我们把使用ZooKeeper实现分布式锁分成了3步,在Java实现中,我们将第1步写成一个方法,第2、3步写成一个方法:  第一步: public vo...

2018-11-15 09:28:48 427

原创 ZooKeeper完全解析(六) 使用ZooKeeper实现分布式锁之实现原理

  在上一篇中,我们讲了使用ZooKeeper来实现分布式作业调度系统的原理与实现,链接为 ZooKeeper完全解析(四) 使用ZooKeeper实现分布式作业调度系统之实现原理  ZooKeeper完全解析(五) 使用ZooKeeper实现分布式作业调度系统之Java实现  这一节我们讲一下ZooKeeper实现分布式锁的原理。一、使用Redis实现分布式锁的原理以及对应缺陷:  在讲...

2018-11-14 09:26:09 450

原创 ZooKeeper完全解析(五) 使用ZooKeeper实现分布式作业调度系统之Java实现

  在上一篇中,我们讲了使用ZooKeeper来实现分布式作业调度系统的原理,链接为:ZooKeeper完全解析(四) 使用ZooKeeper实现分布式作业调度系统之实现原理 ,这一篇中,我们将会讲使用Java实现的一些细节:  需要注意的是,这个实现还是一个基础实现,还有一些细节需要完善。一、成为主节点:  在实现的时候,我把 slave 节点与 master 节点都抽象成 ZooN...

2018-11-03 23:27:01 2142

原创 ZooKeeper完全解析(四) 使用ZooKeeper实现分布式作业调度系统之实现原理

  在上一篇中,我们讲解了如何使用Java来操作ZooKeeper,链接为 ZooKeeper完全解析(三) 使用Java操作ZooKeeper,这一篇中,我们将会讲解使用ZooKeeper来实现一个分布式的作业调度系统的原理。  众所周知,ZooKeeper可以看成一个分布式的文件系统,所以可以根据这个文件系统来完成一些角色的分配与任务的分配,比如分布式的作业调度系统。  试想一下,一个...

2018-10-29 09:17:49 3276 1

原创 ZooKeeper完全解析(三) 使用Java操作ZooKeeper

  在上一篇中,我们讲解了ZooKeeper的相关操作命令,链接为 ZooKeeper完全解析(二) zooKeeper命令详解,这一篇中,我们将会详细的讲解如何使用Java操作ZooKeeper。一、引入依赖与建立连接:  注意ZooKeeper连接池的版本最好与使用的ZooKeeper版本一致,比如使用的ZooKeeper版本为 3.4.13,那么引入的连接池依赖即为:<d...

2018-10-16 21:53:33 3861

原创 ZooKeeper完全解析(二) zooKeeper命令详解

  上一篇中我们简单的讲解了zooKeeper的作用与安装,链接为 ZooKeeper完全解析(一) zooKeeper的介绍与安装,这次我们详细的讲一下zooKeeper中的命令。  首先需要启动zooKeeper,并开启命令行工具,想要查看zooKeeper的命令,可以使用help命令来查看zooKeeper支持的命令,我们这次主要讲 create、get、ls、ls2、stat、set、...

2018-09-08 17:42:41 844

原创 分布式锁的原理与实现 二、分布式锁的基础实现

  这一节中,我们将会使用上一节中分布式锁的原理:分布式锁的原理与实现 一、分布式锁的原理 。来一步一步的实现分布式锁。一、实现的接口定义:  其中,我们先定义一个给外部使用的接口:public interface DistributedLockService { boolean tryLock(Runnable runnable, String key); boolean t...

2018-04-07 10:38:29 503

原创 分布式锁的原理与实现 一、分布式锁的原理

一、分布式锁的使用场景  在web开发中,我们经常会用到单机无法支撑业务的情况,比如,当在访问量比较大的情况下,单机的速度可能会很慢,因为同一时间单机的处理速度是有限的,这时我们就可以使用分布式来解决上述问题,由nginx来做一个负载均衡,把负载均匀的分布在多台单机上。  当我们使用了分布式的架构后,问题也就随之而来了。比如一个业务我们需要串行化实现(通俗的说,也就是同一时间只能处理一个请求),那...

2018-02-04 19:12:37 993

原创 Java集合详解四:HashMap源码详解

在上一节中,我们讲了HashMap、LinkedHashMap、TreeMap、Hashtable的区别与使用,链接为 Java集合详解三:HashMap、LinkedHashMap、TreeMap、Hashtable的区别与使用 这一节,我们将会从源码角度讲一下HashMap的实现。  下面以jdk1.6中的HashMap讲解其源码:一、存储原理   首先,HashMap

2018-01-02 22:15:07 378

原创 Java集合详解三:HashMap、LinkedHashMap、TreeMap、Hashtable的区别与使用

我们在Java中经常使用的即为HashMap,基于哈希表进行实现,其内部是无序的,非线程安全,所以速度较快。  LinkedHashMap基于哈希表+链表进行实现,其顺序是put的顺序来排序,即先入排在最前面,非线程安全  TreeMap基于红黑树进行实现,其内部是有序的,排序规则是安全其中key实现的compareable接口来进行排序,非线程安全  Hashtable与HashMa

2017-11-12 15:50:52 581

原创 Java 多线程基础

在Java开发中,我们经常会用到多线程来解决一些异步的问题,多线程属于Java的重点与难点,下面我们就一步一步的讲解Java中的多线程。

2017-10-05 17:29:55 604

原创 Java 加解密中的对称加密详解

在后台开发过程中,尤其是在做支付相关的开发时,需要用到加密相关的知识,今天我们就来讲一下加密中的对称加密与Java中的对称加密的应用。  对称加密,顾名思义,即在加密的过程是对称的,具体的加解密流程图如下: 可以看到,加密的时候,使用密钥将明文加密成明文,解密的时候,使用同一密钥将密文解密成明文,也就是说,双方在加解密的时候使用同一密钥即可。  在对称加密中,比较出名与常用的是

2017-09-09 14:32:50 1406

空空如也

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

TA关注的人

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