自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr孔先森

人生路莫慌张

  • 博客(35)
  • 资源 (12)
  • 收藏
  • 关注

原创 Hessian源码分析之设计模式篇(八)

Hessian源码已经分析完了,在Hessian中主要使用到了两个设计模式,一个是策略模式,一个是模板方法模式,还有在Hessian中使用到了递归我们先来看看策略模式在Hessian中向流中写数据都是通过Serializer接口的writeObject方法来实现的,而根据写出的对象的不同对应着很多的具体的实现类,类图如下(只画出了部分实现类)因为对于

2017-07-30 14:27:55 661

原创 Hessian源码剖析(七)

本篇博客我们来看一下Hessian的server端是如何实现的,首先来看一下Server端Hessian的配置        下面是web.xml中的一段配置(web.xml文件是web应用特有的文件,Hessian的server端需要集成在web应用下,如果想在非web应用中使用Hessian的server端需要在Hessian的基础上进行二次开发),servlet和servlet-mapp

2017-07-30 13:35:59 615

原创 Hessian序列化对象之CollectionSerializer(六)

在Hessian中所有的集合类型都是通过CollectionSerializer对象来进行的序列化,为什么是所有的集合类型呢,让我们看一下具体的代码段,该代码段是SerializerFactory类的loadSerializer方法中的一段代码,该方法的具体功能在前面的博客中有详细说明,loadSerializer()方法负责根据调用远程方法的参数的类型选取对应的序列化对象我们知道Collection是所有集合类型的超接口,所以在Hessian中所有的集合类型对应的序列化对象都是CollectionSer

2017-07-27 00:47:22 1295

原创 Hessian序列化对象之BasicSerializer(五)

在静态初始化块中调用静态方法addBasic()来初始化对应关系,addBasic代码如下,类的基本名称和序列化对象的关系被放到了_staticSerializerMap中(注意调用int的getName方法的返回值为int,而调用Integer方法的返回值为java.lang.Integer,这两者是不一样的),而_staticDeserializerMap和_staticClassNameMap是反序列化相关的,后面博客讲到反序列化时再详细说明

2017-07-26 01:20:30 1120

原创 Hessian源码解析(四)

上篇博客我们说了call()方法,这次我们来展开讨论,call()方法是AbstractHessianOutput中的方法,该方法使用了模板方法设计模式,什么是模板方法设计模式?举个例子:我们将使用电脑分为3步。打开电脑,使用,关闭电脑我们看看在这三步里那几步具有共性,那几步在不同的人身上有不同的体现第一步:打开电脑,毫无疑问所有人在使用电脑前都要打开电脑第二步:使用,不同的人

2017-07-26 00:01:36 514

原创 Hessian源码剖析(三)

上篇博文我们分析了一个远程调用的过程,但是没有分析具体的细节,这篇文章我们来分析一下远程调用请求的过程protected HessianConnection sendRequest(String methodName, Object []args) throws IOException { HessianConnection conn = null; conn =

2017-07-25 00:46:17 329

原创 Hessian源码剖析(二)

创建远程代理对象 通过将远程的将要调用的方法的class对象和该对象所在的远程的路径create()方法会创建一个代理对象,一旦获得了代理对象后我们就可以像调用一个本地方法那样去调用一个远程的方法。java动态代理相关的内容不在本系列博客的讨论范围之内(不懂java动态代理不会影响我们分析Hessian源码),理解了代理对象是如何将本地方法调用传输到了server端对我们理解Hessian框架是至关重要的。下面我们来看看HessianProxyFactory是如何帮助我们创建代理对象的。

2017-07-22 23:01:21 442

原创 Hessian源码剖析(一)

在剖析Hessian源码之前我们首先来梳理一下Hessian解决了什么问题,能在哪些场景中使用,解决的问题中有哪些是难点,哪些是我们应该重点关注的一、Hessian解决了什么问题     Hessian是一个rpc框架,它实现了远程调用的功能,Hessian替我们封装了远程调用的复杂性,使我们可以使用接近于调用本地方法的方式来调用远程对象二、Hessian在哪些场景使用

2017-07-19 00:24:49 411

原创 (五)Mina源码解析之编解码器

Mina中的编解码器通过过滤器ProtocolCodecFilter构造,这个过滤器有3个构造器,其中可以分为两类,一类需要一个ProtoCodecFactory,这个接口有两个方法,分别是getDecoder()和getEncoder(),我们需要实现这两个方法,实现这两个方法就需要一个自定义的Decoder和一个自定义的Encoderpublic class CmccSipcCodecFa

2016-04-23 00:00:00 1494

原创 (四)Mina源码解析之IoSession

本篇文章主要剖析IoSession的在mina中的作用还有粘包的问题在Mina中所有的连接都被封装成了IoSession(关于Mina是如何将连接封装成IoSession的,请参见Mina源码解析之IoService),

2016-04-11 00:42:02 5773

原创 (三)Mina源码解析之IoFilter

本篇文章主要剖析Mina中的过滤器是如何实现的首先还是引入一个简单的完整的server端的例子,代码如下public class Server { public static void main(String[] args) { IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getSessionConfig().s

2016-04-09 01:20:50 6525

原创 (二)Mina源码解析之IoService

在mina中,IoService提供基础的I/O服务、管理IoSession,它是Mina框架中最重要的一部分,大部分基础的I/O操作都是在IoService的实现类中被处理的IoService有如下几个功能:1、管理sessions:创建和删除session,空闲检测2、管理过滤器链:管理过滤器链3、调用Handler:当有新消息到来时调用Handler4、统计管理:

2016-04-05 23:12:25 3645

原创 (一)Mina源码解析之整体架构

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。        Min

2016-04-05 23:11:16 1170

转载 Java的LockSupport.park()实现分析

LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数:[java] view plain copy public native void unpark(Thread jthread);  public native voi

2016-12-16 17:02:01 487

转载 Maven POM标签详解

pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or

2016-09-25 11:51:41 467 1

转载 ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 原文链接:http://shift-alt-ctrl.iteye.com/blog/2020182一. ActiveMQ消息传送机制    Producer客户端使用来发送消息的, Consumer客户端

2016-07-10 18:59:53 1139

原创 java中for和foreach的区别

普通for循环 for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); list.remove(i); }普通for循环在遍历集合时使用下标来定位集合中的元素,java在jdk1.5中开始支持foreach循环,foreach在一定程度上简化了对集合的遍历,但是foreach不能完全代替for循

2016-07-01 12:41:42 41529 15

原创 ThreadPoolExecutor原理与使用

ThreadPoolExecutor是java.util.concurrent包提供的基础线程池,使用非常广泛让我们来看一下线程池的使用和内部实现原理下面是ThreadPoolExecutor的一个构造方法,最终所有其他构造方法都要调用这个构造方法,来看一下构造方法中的参数的作用corePoolSize:核心线程池的大小,当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其

2016-06-29 00:41:34 1825

原创 svn切分支与分支合并

SVN的标准目录结构:trunk、branch、tags目录在SVN中并没有特别的意义,这三个目录反映了软件开发的通常模式trunk:主干,是日常开发进行的地方branches:分支,一些阶段性的release版本,这些版本是可以继续进行开发和维护的tags:阶段性的发布版本,存放到这里现在来看一下日常开发的流程:假说现在有一个游戏项目,项目经理说今天项目要上线了,

2016-06-28 18:32:11 7560

原创 加密解密原理

本篇博文会从一个对话中解释加密和解密的原理首先看一下加密的过程和解密过程(图片摘自《深入java虚拟机》)加密过程:解密过程:假如A授权B的一段代码dmk可以访问A的系统,一个坏蛋C也想要访问A的系统做一些坏事,但是C没有的到A的授权,那么A怎么知道dmk就是dmk呢,是这样做的B通过dmk生成一个散列值,然后将这个散列值追加到代码尾部传送给A,A拿到这个信息后

2016-06-25 17:41:04 3807 1

翻译 NIO与IO的区别

JAVA NIO vs IO当我们学习了Java NIO和IO后,我们很快就会思考一个问题:什么时候应该使用IO,什么时候我应该使用NIO在下文中我会尝试用例子阐述java NIO 和IO的区别,以及它们对你的设计会有什么影响Java NIO和IO的主要区别IONIO面向Stream面向Buffer阻塞IO非阻塞IO

2016-06-24 20:35:51 28348 5

原创 (四)MyBatis源码解析之SqlSession

上篇博文将完了MyBatis的配置文件解析的过程,从这篇博文开始分析MyBatis的执行流程解析完配置文件之后,配置文件中的所有信息就存储到了Configuration对象中了,在创建SqlSessionFactory对象时将Configuration做为SqlSessionFactory对象的一个属性,通过调用SqlSessionFactory的openSession()

2016-06-02 17:00:37 1898

原创 (三)MyBatis源码解析之配置文件

这篇文章我们来看看最重要的mappers标签是怎样解析的,Mybatis在mappers标签中引入所有的***Mapper.xml Mybatis支持通过包和具体的xml文件来引入Mapper,如果是向上面那样通过xml文件来引入Mapper的话,Mybatis还可以分别支持resource、url、classs三种方式,我们一般都是通过resource="..."的形

2016-05-31 20:05:50 959

原创 (二)MyBatis源码解析之配置文件

上篇文章我们讲述了

2016-05-31 20:05:30 702

原创 (一)MyBatis源码解析之配置文件

使用mybatis进行数据库查询的代码如下:public class MessageDaoDemo { @Test public void queryMessageList() throws IOException{ SqlSession sqlSession=getSessionFactory().openSession(); MessageMapperDao message

2016-05-31 20:05:05 1355

原创 secureCRT,永久设置,保护眼睛,配色方案

配色后效果图如下:下面开始配色1、选项(Options)==》会话选项(Sessions options)==》终端(Terminal)==》仿真(Emulation)按图中标注进行勾选,勾选完毕点击确认2、选项(Options)==》全局选项(Global options)==》终端(Terminal)==》外观(Apperance)==》ANSI颜色(ANSI

2016-04-12 10:54:50 90754 4

转载 数据库锁 sql 数据库大并发操作 数据库原子操作

1 前言 数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server(2005)为例。2 锁的种类共享锁(Shared lock)。例1:---------

2016-04-08 18:19:09 614

原创 protobuf的使用和原理

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式,说白了其实就是用来传输数据的,本文介绍用Java实现的protocolBuffer是如何传输数据的在网站 http://code.google.com/p/protobuf

2016-03-20 10:50:03 5483 1

原创 log4j,配置,详解

因为我们配置了net.kong.log4j包下的所有类的输出级别为error,所以HelloLog4j只输出了ERROR级别的日志,但是为什么输出了两遍呢,答案很简单,因为rootLogger的输出级别为debug,产生了叠加的效果,加上下面这行代码就可以屏蔽rootLogger对我们定义的包的日志输出级别的影响,在实际的项目中,对于我们自己定义的包一定要加上这句该dependency引入了3个jar包,如果不是maven项目直接下载这3个jar包就可以使用log4j了在src/main/resou

2016-03-15 23:46:45 703

原创 为什么在单例类中不能使用双重检查锁来初始化对象

在网上看到过好多篇文章在说明双重检查锁在多个线程初始化一个单例类时到底为什么不行,今天我们就来看一下问题到底出在了那里下面我们直接进入主题,为什么使用双重检查锁,原因是因为在多线程初始化一个单例类时我们要确保得到一个对象,又想再确保一个对象时得到更高的效率,所以就有了双重检查锁,使用双重检查锁初始化对象的代码如下public class DoubleCheckedLocking {

2015-09-18 10:02:30 2085 6

原创 通俗易懂讲解happens-before原则

在接下来的叙述里我首先会说明happens-before规则是干什么用的,然后用一个简单的小程序说明happens-before规则一、happens-before规则我们编写的程序都要经过优化后(编译器和处理器会对我们的程序进行优化以提高运行效率)才会被运行,优化分为很多种,其中有一种优化叫做重排序,重排序需要遵守happens-before规则,不能说你想怎么排就怎么排,如果那样岂不是

2015-09-01 11:50:34 19599 10

原创 spring集成mina简明教程

mina服务端代码如下:ServerHandler的代码如下:在spring中集成mina无非是将创建对象和给对象设置属性的过程以配置文件的形式实现spring中的属性编辑器可以帮我们解决这个问题需要注意的InetSocketAddressEditor是mina-integration-beans.jar包下的一个类,我们需要在pom.xml中加入这个依赖Failure to find org.apache.mina:mina-core:bundle:2.0.7

2015-08-20 15:36:39 2728

转载 最牛B的编码套路

最牛B的编码套路分类: Coding Horror 2013-12-02 08:38 39961人阅读 评论(151)收藏 举报编码套路Code KataCode Dojo最近,我大量阅读了Steve Yegge的文章。其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已:与你所相信的恰恰相

2015-08-13 12:57:46 587

转载 struts2中constants参数配置

序号方法说明1指定web应用默认编码集,相当调用HttpServletRequest的setCharacterEncoding方法2指定需要struts2处理请求后缀,该属性默认值是action,即所有请求*.action由struts2处理。如用户需要指定多个后缀,则后缀之间用英文逗号

2015-06-16 16:17:10 1290

转载 AtomicBoolean

Java代码  private static class BarWorker implements Runnable {     private static boolean exists = false;     private String name;     public BarWorker(String name) {    this.name 

2014-12-08 15:26:57 542

JAVA解惑(布洛赫)

Java解惑(布洛赫)

2017-07-26

mina编解码器Demo

该压缩包中有两个文件夹mina_server和minaclient,先启动mina_server,然后启动minaclient即可运行

2016-04-23

Tomcat权威指南

tomcat权威指南,深入了解tomcat原理

2016-03-17

protobuf编译器+运行时jar

资源包含32位Linux/64位Linux/32位Windows/64位Windows的编译器,和运行时的jar包protobuf-java-2.6.1.jar

2016-03-17

淘宝性能测试白皮书

淘宝性能测试标准,你懂得

2016-03-16

Java内存模型

为什么使用synchronization就是线程安全的,为什么Atomic***是原子的?是谁向我们保证了这些,答案是java的内存模型,读完这本迷你书你就知道了

2016-03-16

MyBatis权威指南

如果你还没有到精通mybatis的源码的程度,这本书就非常适合你,讲解的通俗易懂,适合从入门到想系统学习MyBatis的人,也是一本很不错的工具书

2016-03-16

疯狂JAVA讲义

国内不多见的关于java的好书。可以让想深入了解java的人少走很多弯路

2014-08-26

mina官方中文参考手册

本书非常详细的阐述了mina框架的工作原理,对想初步了解mina框架的人有很大的帮助

2014-08-26

深入Java虚拟机

本书讲述了Java虚拟机——运行所以Java程序的抽象计算机,还讲解了几种与虚拟机密切相关的核心Java API

2014-01-10

Java与模式

本书是一本讲解设计原则以及最为常见的设计模式的实用教材。

2014-01-10

全国大学生电子设计竞赛系统设计+黄智伟编....pdf

权威电赛指导,想要参加电赛的人可以看看啊,很实用的

2013-07-29

空空如也

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

TA关注的人

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