自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 资源 (8)
  • 收藏
  • 关注

原创 Spring源码分析之模块介绍

Spring框架的功能大约由20个模块组成,我们将Spring源码拉取下来之后,可以看到Spring项目有众多子模块,如下图所示:各模块介绍如下:模块描述spring-aopSpringAOP切面处理,如动态代理,AOP字节码提升spring-aspects同样是面向切面的一个重要的组成部分,提供对AspectJ框架的整合spring-beansSpringBean相关,如依赖注入,依赖查找spring-context事件驱动、注解驱动、模块驱动等s

2020-10-12 22:00:21 236 1

原创 Spring源码本地环境搭建

拉取源码首先我们到GitHub上找到Spring项目:将版本切换到5.0.x,然后复制分支链接:https://github.com/spring-projects/spring-framework.git直接通过idea拉取项目或者使用命令拉取:项目导入由于Spring 5之后都是采用Gradle构建的,所以导入项目前本地需要有Gradle环境。Gradle下载地址:http...

2020-04-01 22:15:29 1856

原创 VMware中安装CentOS7

镜像下载由于网络原因,使用国外站点的话,下载会很慢,所以推荐在国内的镜像仓库上下载。我这里是在阿里云镜像仓库上下载的:http://mirrors.aliyun.com/centos/7/isos/x86_64/镜像版本说明:版本描述CentOS-7-x86_64-DVD-1708.iso标准安装版(推荐使用)CentOS-7-x86_64-Everythin...

2020-03-29 22:23:55 243

原创 ActiveMQ消息持久化

前言在前面我我们讲JMS规范的时候有简单的说过activeMQ的消息持久化,演示了如何来设置使消息能够持久化存储。本次呢,我们将来深入了解activeMQ的消息持久化,看看底层的实现机制。是什么?官方文档:http://activemq.apache.org/persistence此页介绍了activeMQ各个版本的持久化特性。消息持久化就是为了避免意外宕机以后丢失信息,需要做到重启...

2020-03-28 16:43:19 462

原创 ActiveMQ之整合SpringBoot

基础设施搭建新建生产者和消费者模块:修改pom文件,增加依赖jar包:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</art...

2020-03-25 21:55:37 229

原创 ActiveMQ之整合Spring

前言前面我们讲的都比较基础,实现生产者和消费者的时候,代码比较繁杂,下面我们将来介绍如何整合spring来简化开发;整合配置pom增加依赖: <!-- activemq连接池 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId&gt...

2020-03-24 22:34:47 170

原创 ActiveMQ之Broker

什么是Broker?相当于一个ActiveMQ服务器实例,说白了,Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java代码中,以便随时用随时启动,在用的时候再去启动这样能节省了资源,也保证了可用性;示例修改pom.xml增加broker依赖:<dependency> <groupId>com.fasterxml.jackson.co...

2020-03-23 22:04:48 371

原创 ActiveMQ之JMS规范

什么是JMS?JMS即Java消息服务(Java Message Service)应用程序接口,指的是两个应用程序之间进行异步通信的API,它为标准协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持Java应用程序开发。在JavaEE中,当两个应用程序使用JMS进行通信时,它们之间不是直接相连的,而是通过一个共同的消息收发服务组件关联起来以达到解耦/异步削峰的效果。JMS...

2020-03-23 21:33:12 252

原创 ActiveMQ入门案例

工程建立我们来新建一个工程,然后导入相关依赖修改pom.xml导入activeMQ依赖:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-...

2020-03-22 18:20:35 329 1

原创 ActiveMQ安装和控制台

ActiveMQ下载ActiveMQ官网:http://activemq.apache.org/滚动页面,找到Download Latest按钮点击Download Latest按钮后就会调转到下载页面:根据自己的环境选择下载相应的安装包,此处演示是在linux环境下,所以下载apache-activemq-5.15.12-bin.tar.gz。ActiveMQ安装前面我们下载好A...

2020-03-22 18:20:15 1048 1

原创 MQ入门概述

什么是MQ?MQ全称为Message Queue,即消息队列面向消息的中间件。生产者往消息队列中写消息,消费可以读取队列中的消息。是指利用高效可靠的消息传递机制与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储、流量削峰,异步通信,数据同步等功能。大致的过程是这样的:发送者把消息发送给消息服务器,消息服务器...

2020-03-22 18:19:42 265

原创 JVM之类的主动使用和被动使用

Java程序对类的使用方式分为主动使用和被动使用。主动使用:创建类的实例访问某个类或接口的静态变量,或者对该静态变量赋值调用类的静态方法使用反射,例如:Class.forName(“java.lang.String”)初始化一个类的子类Java虚拟机启动时被标明为启动类的类被动使用:除上述几种情况外,其它使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化...

2020-03-12 21:42:12 167

原创 JVM之双亲委派模型

什么是双亲委派模型?Java虚拟机对class文件采用的按需加载的方式,也就是说当需要使用该类的时候才会将它的class文件加载到内存当中,将加载此class文件时,它首先把这个任务委托给他的上级类加载器,如果上级的类加载器没有加载,自己才会去加载这个类,这也属于一种任务委派模式。工作原理当一个类加载器收到了类加载请求的时候,它并不会自己先去加载,而是把这个请求逐层向上委托,询问此类是否已...

2020-03-12 21:28:14 158

原创 JVM之类加载子系统

什么是类加载子系统?类加载子系统是是负责从本地文件系统或者网络当中加载class文件,加载的信息存放于一块称为方法区的内存空间。除了类的信息之外,方法区中还会存放运行时的常量信息,可能包括字符串字面量和数字常量。Java的类加载分为三个阶段,分别是加载(Load)、链接(Link)、初始化(Init),如下图所示:类的加载过程Loading通过一个类的全限定名获取定义此类的二进制字节...

2020-03-11 22:23:52 385

原创 JVM介绍

什么是虚拟机?所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列的虚拟计算机指令。大体上虚拟机可以分为系统虚拟机和程序虚拟机:大名鼎鼎的Virtual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了可以完整运行操作系统的软件平台。程序虚拟机的典型代表就是Java虚拟机,它专门为了执行单个计算机程序而设计的,在Java...

2020-03-10 22:44:51 215

原创 Netty剖析之心跳检测机制

什么是心跳检测机制?心跳检测机制就是服务端会定时向客户端发送一个心跳检测包,或者客户端向服务端发送,以确保连接的有效性机制。Netty提供了IdleStateHandler来进行心跳检测IdleStateHandlerIdleStateHandler是Netty提供的空闲状态处理器参数说明:readerIdleTime:读的空闲时间,超出此时间就会发送一个心跳检测包,检测是否连接w...

2020-02-04 12:27:54 371

原创 Netty剖析之Netty群聊系统

前言在前面我们讲解了Netty的基本使用,本次我们将使用Netty来完成一个群聊系统,实现服务器端和客户端之间的数据简单通讯;群聊系统基本要求:服务器端可监测客户端上线、离线、并转发客户端消息;客户端可群发消息给其它用户,也可接收其它客户发送的消息;代码示例服务端:public class GroupChatServer { private String host; ...

2020-02-04 12:27:05 481

原创 Netty剖析之Netty核心组件介绍

Bootstrap、ServerBootstrapBootstrap意为引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。常用方法:方法名描述public ServerBootstrap group(...

2020-02-04 12:26:09 259

原创 Netty剖析之Http服务案例

前言前面我们讲了Netty的线程模型,还有一些Netty的特性,以及使用Netty编写过一个Tcp服务案例,本次呢,我们将结合前面所学的知识,来编写一个Http服务案例Http服务案例需求:使用Netty编写一个Http服务端,可以让浏览器正常访问,并且服务端可以返回信息给浏览器。服务端代码基本与前面的TCP服务一致,只是在pipeline管道里额外加入了处理http的编码、解码器(Htt...

2020-02-03 12:20:50 173

原创 Netty剖析之Netty异步模型

异步模型基本介绍异步的概念和同步相对,当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知、回调来通知调用者。Netty中IO操作是异步的,包括Bind,write,connect等操作会简单的返回一个channelFuture调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作...

2020-02-03 12:20:00 266

原创 Netty剖析之Netty任务队列

前言在前面我们有讲到,在使用Netty的时候,我们的业务处理都是放到我们自定义的handler里面,那么如果handler里面有一些执行比较耗时的操作的话,依旧会出现线程阻塞的情况,那么怎么来处理呢?我们可以回过头去看看Netty的模型图,里面有一块是TaskQueue,这个呢就是Netty提供给我们的任务队列,可以用来异步处理任务,它是和channel一一绑定的。自定义普通任务通过Chan...

2020-02-02 22:24:16 2491 2

原创 Netty剖析之Netty线程模型

线程模型基本介绍不同的线程模式,对程序的性能有很大影响,为了搞清Netty线程模式,下面我们来系统的讲解下各个线程模式。目前存在的线程模型有:传统阻塞IO服务模型Reactor 模式,根据 Reactor 的数量和处理资源池线程的数量不同,有3种典型的实现:2.1 单Reactor单线程2.2 单Reactor多线程2.3 主从Reactor多线程Netty线程模式(Netty主...

2020-02-02 21:55:19 325

原创 Netty剖析之零拷贝

什么是零拷贝?零拷贝是网络编程的关键,很多性能优化都离不开;零拷贝,是从操作系统的角度来说的。因为内核缓冲区之间,没有数据是重复的(只有 kernel buffer 有一份数据);零拷贝不仅仅带来更少的数据复制,还能带来其他的性能优势,例如更少的上下文切换,更少的CPU缓存伪共享以及无CPU校验和计算;在Java程序中,常用的零拷贝有 mmap(内存映射)和sendFile。那么,他们在...

2020-02-01 20:27:45 220

原创 Netty剖析之NIO群聊系统

前言在前面我们详细讲解了BIO、NIO,本次我们将使用NIO来完成一个群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞);群聊系统基本要求:服务器端可监测客户端上线、离线、并转发客户端消息;客户端可群发消息给其它用户,也可接收其它客户发送的消息;代码示例服务端:public class GroupChatServer { private Selector sel...

2020-02-01 20:24:42 236

原创 Netty剖析之NIO

什么是NIO?NIO(non blocking IO),是JDK提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞IO;NIO相关类都被放在 java.nio包及子包下,并且对原java.io包中的很多类进行改写;NIO 有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器...

2020-01-31 23:04:04 159

原创 Netty剖析之NIO-Selector

什么是Selector?NIO之所以可以达到同步非阻塞的效果,使用一个线程就可以处理多个客户端的连接,Selector(选择器)功不可没;Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求,如下...

2020-01-31 23:02:07 321

原创 Netty剖析之NIO-Channel

什么是Channel?Channel即通道的意思,NIO的通道类似于流,但有如下区别:通道可以同时进行读写操作,而流同一时刻只能读或者写通道可以实现异步读写数据,而流只可同步操作通道可以从缓冲区读数据,也可以写数据到缓冲区BIO中的流是单向的,例如FileInputStream对象只能进行读取数据的操作,而NIO中的通道(Channel)是双向的,既可以读也可以写;Channel在...

2020-01-31 21:07:03 186

原创 Netty剖析之NIO-Buffer

什么是Buffer?Buffer即缓冲区的意思,缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象,该对象提供了一组方法,可以轻松的使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况;Buffer类及子类Buffer为缓冲区的父类,以下是常用子类:类名描述ByteBuffer存储字节数据CharBuffer存储字符数据...

2020-01-31 21:05:55 191

原创 Netty剖析之BIO

什么是BIO?BIO(blocking I/O),同步阻塞IO,服务器实现模式为一个线程处理一个连接,即每当有一个客户端连接时,就会启动一个独立的线程来进行处理,如果这个连接不做任何事情,就会阻塞到那里,从而引起不必要的线程开销;BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序简单易理解;BIO工作原理服务器...

2020-01-30 17:13:13 266

原创 Netty剖析之IO

什么是IO?所谓IO即input和output的缩写,是对数据流入和流出的抽象概念IO简单的理解就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能;Java总共支持三种网络编程IO模型:BIO(同步阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)BIO介绍BIO(blocking I/O),同步阻塞IO,服务器实现模式为一个线程处理一个连接,即每当有一个客户端连...

2020-01-30 17:11:40 176

原创 Netty剖析之Netty介绍

什么是Netty?Netty是由Jboss提供的一个Java开源框架,现为GitHub上的独立项目;Netty是一个异步的、基于事件驱动的网路应用框架,用以快速开发高性能、高可靠性的网路IO程序;Netty主要针对TCP/IP协议下,面向client端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用;Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场...

2020-01-30 17:07:10 115

原创 面向对象原则之迪米特法则

迪米特法则基本介绍迪米特法则(Law of Demeter, LoD),意为一个软件实体应当尽可能少地与其他实体发生相互作用。如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。迪米特法则还有几种定义形...

2019-12-22 21:37:11 238

原创 面向对象原则之合成复用原则

合成复用原则基本介绍合成复用原则(Composite Reuse Principle, CRP),意为尽量使用对象组合,而不是继承来达到复用的目的。合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。在面向对象设计...

2019-12-22 21:15:33 277

原创 面向对象原则之接口隔离原则

接口隔离原则基本介绍客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的的接口上如下图所示:类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。按照接口隔离原则,应该将接口Interface1拆分成独立的几个接口,类A和类C分别与他们需要的...

2019-12-21 22:12:19 131

原创 面向对象原则之里氏代换原则

里氏代换原则基本介绍里氏代换原则(Liskov Substitution Principle, LSP),所有引用父类的地方必须能透明地使用其子类的对象。里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是...

2019-12-21 20:29:39 224

原创 面向对象原则之开闭原则

开闭原则基本介绍开闭原则(Open-Closed Principle, OCP),是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则,是由Bertrand Meyer于1988年提出,意为一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。任何软件系统都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需...

2019-12-17 22:12:02 462

原创 面向对象原则之单一职责原则

单一职责原则基本介绍单一职责原则,顾名思义,即专业的人做专业的事,一个类只负责一项职责。例如有一个类A负责两个不同的职责:职责1和职责2,当职责1需求变更需要修改类A时,可能会影响到职责2的业务,所以需要将类A的两个职责分解为A1和A2,这样就互不影响了。代码示例就拿我们生活中常用的交通工具来说,看如下示例:版本一:/** * 单一职责原则版本一 * 1、问题:不同的交通工具有不同...

2019-12-15 20:41:05 132

原创 Redis之消息订阅

消息订阅介绍进程间的消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息,如下图所示:命令演示publish发布消息:127.0.0.1:6379> publish c1 hello(integer) 0127.0.0.1:6379> publish c1 hi(integer) 1subscribe订阅消息,订阅后,发送端不断发送,订阅端就会不断接收:...

2019-12-08 22:35:10 115

原创 Redis之事务

官方介绍简而言之就是可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其它命令插入,不允许加塞;Redis事务的作用一个队列中,一次性,顺序性、排他性的执行一系列命令;常用命令multi标记一个事务的开始,执行完此命令后,后续的操作,都会放入到队列中统一执行:127.0.0.1:6379> multiOK127.0.0.1:...

2019-12-08 22:26:32 73

原创 Redis之RDB和AOF如何选择?

官方建议两者分析RDB持久化方式能够在指定的时间间隔对内存中的数据进行快照存储;AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾;Redis还能够对AOF文件进行后台重写,使aof文件体积不至于过大;如果你只是用作缓存,只希望数据在程序运行的时候存在,那么就可以不使用任何持久化方式;...

2019-12-08 20:30:54 1525

java 反编译工具

java 反编译工具

2017-07-26

深入理解Java虚拟机(第二版)PDF

深入理解Java虚拟机(第二版)PDF非扫描版

2017-07-21

json编辑器

很好用的桌面json编辑器

2017-07-19

EditThisCookie-chrome

cookie编辑器

2017-07-19

AxureRP_for_chorme_0_6_2

Axure RP Pro可谓是非常方便、好用的一款软件,因为它不仅能绘制出详细的产品构思,也能生成浏览器格式的产品原型。但是如果想把原型拿给客户查看,千万记得给浏览器安装Axure扩展程序哦。

2017-07-19

firstobject XML Editor

一款很不错的XML编辑器

2017-07-19

阿里巴巴Java开发手册v1.2.0

这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大降低代码维护成本

2017-07-19

后台管理系统模板gebo_admin_v1.6

很漂亮的后台管理系统

2017-07-19

空空如也

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

TA关注的人

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