自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

井底之蛙

学而知不足,思而得远虑

  • 博客(17)
  • 资源 (5)
  • 问答 (4)
  • 收藏
  • 关注

原创 单例模式Singleton

单例模式的定义:保证一个类仅有一个实例,并提供一个访问他的全局访问点。单例模式结构图:Singleton:负责创建Singleton类自己的唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。单例模式示例代码:懒汉式:(第一次用的时候实例化)public class Singleton{ private statoc Singleton instance=nu

2016-11-29 22:23:05 930 4

原创 适配器模式(adapter)

适配器模式的定义:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能在一起的那些类可以一起工作。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。适配器模式结构图:Client: 客户端,调用字节需要的领域接口Target。Target:定义客户端需要的跟特定领域相关的接口。Adaptee:已经存在的接口,通常能满足客户端的功能需求,但是接口与客户端

2016-11-29 22:20:13 1458

原创 外观模式(Facade)

定义:为子系统中的一组接口提供一个一致的界面,Facede模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式的结构和说明:Facade:定义子系统的多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系统对象。模块:接受Facade对象的委派,真正实现功能,各个模块之间可能有交互。由于外观模式的结构图过于抽象,因此把它稍微具体点,假设子系统内有三个模块

2016-11-29 22:18:02 1454

原创 【Netty源码学习】DefaultChannelPipeline(三)

上一篇博客中【Netty源码学习】ChannelPipeline(二)我们介绍了接口ChannelPipeline的提供的方法,接下来我们分析一下其实现类DefaultChannelPipeline具体实现了哪些功能。之前我们已经了解过DefaultChannelPipeline其实是一个ChannelHandlerContext的循环链表,对于网络数据的接收处理以及处理发送都在ChannelHa

2016-11-28 19:24:16 1629

转载 【Netty源码分析】Reactor线程模型

1. 背景1.1. Java线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。在Java领域当时比较流行的是单线程编程,对于CPU密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。1.1.2. 多线程随着硬件性能的提升,CPU的核数越来越越多,很多服务器标配已经达到32或64核。通

2016-11-24 09:20:15 5742 4

原创 【Netty源码分析】数据读取过程

首先客户端连接到服务端时服务端会开启一个线程,不断的监听客户端的操作。这个线程的执行操作在NioEventLoop的run方法中,其实操作是在processSelectedKeys中,监听是否进行读操作protected void run() { for (;;) { try { switch (selectStrategy.

2016-11-23 13:51:38 3487

原创 【Netty源码分析】发送数据过程

前面两篇博客【Netty源码分析】Netty服务端bind端口过程和【Netty源码分析】客户端connect服务端过程中我们分别介绍了服务端绑定端口和客户端连接到服务端的过程,接下来我们分析一下数据发送的过程。future.channel().writeAndFlush("Hello Netty Server ,I am a common client"); 调用AbstractChannel

2016-11-23 11:22:07 3652

原创 【Netty源码分析】客户端connect服务端过程

上一篇博客【Netty源码分析】Netty服务端bind端口过程 我们介绍了服务端绑定端口的过程,这一篇博客我们介绍一下客户端连接服务端的过程。ChannelFuture future = boostrap.connect("127.0.0.1", 8080).sync(); 调用BootStrap的connect函数public ChannelFuture connect(String ine

2016-11-23 10:36:42 3373

原创 【Netty源码分析】Netty服务端bind端口过程

这一篇博客我们介绍一下Netty服务端绑定端口的过程,我们通过跟踪代码一直到NIO原生绑定端口的操作。绑定端口操作ChannelFuture future = serverBootstrap.bind(8080).sync();AbstractBootstrap中bind操作public ChannelFuture bind(int inetPort) { return bind(

2016-11-23 10:09:07 7620

原创 Mybatis源码分析之缓存

一、MyBatis缓存介绍  正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。  2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,H

2016-11-17 13:47:29 1651

原创 Mybatis源码分析之存储过程调用

这一篇博客我们学习一下Mybatis调用存储过程的使用和运行流程。首先我们先创建一个简单的存储过程DELIMITER $CREATE PROCEDURE mybatis.ges_user_count(IN age INT, OUT user_count INT)BEGIN SELECT COUNT(*) FROM users WHERE users.age=age INTO user_co

2016-11-17 12:49:21 1481

原创 【Netty源码分析】ChannelPipeline(二)

在上一篇博客【Netty源码学习】ChannelPipeline(一)中我们只是大体介绍了ChannelPipeline相关的知识,其实介绍的并不详细,接下来我们详细介绍一下ChannelPipeline及其实现类。1、ChannelPipeline的结构图:这张ChannelPipeline的结构图我们应该是看到过的,其实在ChannelPipeline接口中只是覆盖了ChannelInboun

2016-11-16 20:32:26 1470

原创 【Netty源码学习】ChannelPipeline(一)

ChannelPipeline类似于一个管道,管道中存放的是一系列对读取数据进行业务操作的ChannelHandler。1、ChannelPipeline的结构图:在之前的博客【Netty源码学习】入门示例我们看到了如下的代码:future.channel().writeAndFlush("Hello Netty Server ,I am a common client"); 其实就是Clien

2016-11-14 21:17:14 1874

原创 【Netty源码学习】ServerBootStrap

上一篇博客【Netty源码学习】BootStrap中我们介绍了客户端使用的启动服务,接下来我们介绍一下服务端使用的启动服务。总体来说ServerBootStrap有两个主要功能:(1)调用父类AbstractBootStrap的initAndregister函数将NioServerSocketChannel注册到Selector中,上一篇博客中我们已经介绍了。(2)调用父类的doBind0函数绑定

2016-11-09 18:41:32 1536

原创 【Netty源码学习】BootStrap

BootStrap是客户端的启动类,其主要功能就是设置必要的参数然后启动客户端。实现如下:Bootstrap b = new Bootstrap(); b.group(group) .channel(NioSocketChannel.class) .option(ChannelOption.TCP_

2016-11-07 21:47:33 1306

原创 【Netty源码解析】NioEventLoop

上一篇博客【Netty源码学习】EventLoopGroup中我们介绍了EventLoopGroup,实际说来EventLoopGroup是EventLoop的一个集合,EventLoop是一个单线程的线程池,其接口和类实现关系如下:接下来我们主要介绍实现类NioEventLoop中实现的操作,通过NioEventLoop的继承关系图我们可以看到,其就是一个单线程的线程池。首先我们看NioEven

2016-11-07 20:27:27 2326

原创 5种IO模型

(1)阻塞I/O模型:最常用的I/O模型就是阻塞I/O模型,缺省情形下,所有文件操作都是阻塞的。我们以套接字接口为例来讲解此模型:在进程空间中调用revcfrom,其系统调用直到数据包到达且被复制到应用进程的缓存区中或者发生错误时才返回,在此期间一直会等待,进程在从调用recvfrom开始到它返回的整段时间内都是被阻塞的,因此被称为阻塞I/O模型,如图:(2)非阻塞I/O模型:recvfrom从应

2016-11-02 23:43:19 3319

空空如也

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

TA关注的人

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