<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Mr孔先森]]></title><description><![CDATA[人生路莫慌张]]></description><link>https://blog.youkuaiyun.com/u010031673</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u010031673]]></copyright><item><title><![CDATA[Hessian源码分析之设计模式篇（八）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/76378996</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/76378996</guid><author>u010031673</author><pubDate>Sun, 30 Jul 2017 14:27:55 +0800</pubDate><description><![CDATA[Hessian源码已经分析完了，在Hessian中主要使用到了两个设计模式，一个是策略模式，一个是模板方法模式，还有在Hessian中使用到了递归
我们先来看看策略模式
在Hessian中向流中写数据都是通过Serializer接口的writeObject方法来实现的，而根据写出的对象的不同对应着很多的具体的实现类，类图如下（只画出了部分实现类）


因为对于]]></description><category></category></item><item><title><![CDATA[Hessian源码剖析（七）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/76376955</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/76376955</guid><author>u010031673</author><pubDate>Sun, 30 Jul 2017 13:35:59 +0800</pubDate><description><![CDATA[本篇博客我们来看一下Hessian的server端是如何实现的，首先来看一下Server端Hessian的配置
        下面是web.xml中的一段配置（web.xml文件是web应用特有的文件，Hessian的server端需要集成在web应用下，如果想在非web应用中使用Hessian的server端需要在Hessian的基础上进行二次开发），servlet和servlet-mapp]]></description><category></category></item><item><title><![CDATA[Hessian序列化对象之CollectionSerializer（六）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/76100695</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/76100695</guid><author>u010031673</author><pubDate>Thu, 27 Jul 2017 00:47:22 +0800</pubDate><description><![CDATA[在Hessian中所有的集合类型都是通过CollectionSerializer对象来进行的序列化，为什么是所有的集合类型呢，让我们看一下具体的代码段，该代码段是SerializerFactory类的loadSerializer方法中的一段代码，该方法的具体功能在前面的博客中有详细说明，loadSerializer（）方法负责根据调用远程方法的参数的类型选取对应的序列化对象
我们知道Collection是所有集合类型的超接口，所以在Hessian中所有的集合类型对应的序列化对象都是CollectionSer]]></description><category></category></item><item><title><![CDATA[Hessian序列化对象之BasicSerializer（五）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/76100576</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/76100576</guid><author>u010031673</author><pubDate>Wed, 26 Jul 2017 01:20:30 +0800</pubDate><description><![CDATA[在静态初始化块中调用静态方法addBasic（）来初始化对应关系，addBasic代码如下，类的基本名称和序列化对象的关系被放到了_staticSerializerMap中（注意调用int的getName方法的返回值为int，而调用Integer方法的返回值为java.lang.Integer，这两者是不一样的），而_staticDeserializerMap和_staticClassNameMap是反序列化相关的，

后面博客讲到反序列化时再详细说明]]></description><category></category></item><item><title><![CDATA[Hessian源码解析（四）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/76039834</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/76039834</guid><author>u010031673</author><pubDate>Wed, 26 Jul 2017 00:01:36 +0800</pubDate><description><![CDATA[上篇博客我们说了call()方法，这次我们来展开讨论，call()方法是AbstractHessianOutput中的方法，该方法使用了模板方法设计模式，什么是模板方法设计模式？
举个例子：
我们将使用电脑分为3步。打开电脑，使用，关闭电脑
我们看看在这三步里那几步具有共性，那几步在不同的人身上有不同的体现
第一步：打开电脑，毫无疑问所有人在使用电脑前都要打开电脑
第二步：使用，不同的人]]></description><category></category></item><item><title><![CDATA[Hessian源码剖析（三）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/75808158</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/75808158</guid><author>u010031673</author><pubDate>Tue, 25 Jul 2017 00:46:17 +0800</pubDate><description><![CDATA[上篇博文我们分析了一个远程调用的过程，但是没有分析具体的细节，这篇文章我们来分析一下远程调用请求的过程
protected HessianConnection sendRequest(String methodName, Object []args)
    throws IOException
  {
    HessianConnection conn = null;

    conn =]]></description><category></category></item><item><title><![CDATA[Hessian源码剖析（二）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/75332253</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/75332253</guid><author>u010031673</author><pubDate>Sat, 22 Jul 2017 23:01:21 +0800</pubDate><description><![CDATA[创建远程代理对象

        通过将远程的将要调用的方法的class对象和该对象所在的远程的路径create()方法会创建一个代理对象，一旦获得了代理对象后我们就可以像调用一个本地方法那样去调用一个远程的方法。java动态代理相关的内容不在本系列博客的讨论范围之内（不懂java动态代理不会影响我们分析Hessian源码），理解了代理对象是如何将本地方法调用传输到了server端对我们理解Hessian框架是至关重要的。下面我们来看看HessianProxyFactory是如何帮助我们创建代理对象的。]]></description><category></category></item><item><title><![CDATA[Hessian源码剖析（一）]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/75331954</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/75331954</guid><author>u010031673</author><pubDate>Wed, 19 Jul 2017 00:24:49 +0800</pubDate><description><![CDATA[在剖析Hessian源码之前我们首先来梳理一下Hessian解决了什么问题，能在哪些场景中使用，解决的问题中有哪些是难点，哪些是我们应该重点关注的

一、Hessian解决了什么问题
     Hessian是一个rpc框架，它实现了远程调用的功能，Hessian替我们封装了远程调用的复杂性，使我们可以使用接近于调用本地方法的方式来调用远程对象
二、Hessian在哪些场景使用]]></description><category></category></item><item><title><![CDATA[Java的LockSupport.park()实现分析]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/53695391</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/53695391</guid><author>u010031673</author><pubDate>Fri, 16 Dec 2016 17:02:01 +0800</pubDate><description><![CDATA[LockSupport类是Java6(JSR166-JUC)引入的一个类，提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数，归结到Unsafe里，只有两个函数：



[java] 
view plain 
copy 


public native void unpark(Thread jthread);  public native voi]]></description><category></category></item><item><title><![CDATA[Maven POM标签详解]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/52659721</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/52659721</guid><author>u010031673</author><pubDate>Sun, 25 Sep 2016 11:51:41 +0800</pubDate><description><![CDATA[pom作为项目对象模型。通过xml表示maven项目，使用pom.xml来实现。主要描述了项目：包括配置文件；开发者需要遵循的规则，缺陷管理系统，组织和licenses，项目的url，项目的依赖性，以及其他所有的项目相关因素。<project xmlns="http://maven.apache.org/POM/4.0.0"     
    xmlns:xsi="http://www.w3.or]]></description><category></category></item><item><title><![CDATA[ActiveMQ消息传送机制以及ACK机制详解]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51872774</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51872774</guid><author>u010031673</author><pubDate>Sun, 10 Jul 2016 18:59:53 +0800</pubDate><description><![CDATA[AcitveMQ是作为一种消息存储和分发组件，涉及到client与broker端数据交互的方方面面，它不仅要担保消息的存储安全性，还要提供额外的手段来确保消息的分发是可靠的。
 
原文链接：http://shift-alt-ctrl.iteye.com/blog/2020182

一. ActiveMQ消息传送机制
    Producer客户端使用来发送消息的， Consumer客户端]]></description><category></category></item><item><title><![CDATA[java中for和foreach的区别]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51800339</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51800339</guid><author>u010031673</author><pubDate>Fri, 01 Jul 2016 12:41:42 +0800</pubDate><description><![CDATA[普通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循]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor原理与使用]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51779125</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51779125</guid><author>u010031673</author><pubDate>Wed, 29 Jun 2016 00:41:34 +0800</pubDate><description><![CDATA[ThreadPoolExecutor是java.util.concurrent包提供的基础线程池，使用非常广泛
让我们来看一下线程池的使用和内部实现原理
下面是ThreadPoolExecutor的一个构造方法，最终所有其他构造方法都要调用这个构造方法，来看一下构造方法中的参数的作用
corePoolSize：核心线程池的大小，当提交一个任务到线程池时，线程池会创建一个线程来执行任务，即使其]]></description><category></category></item><item><title><![CDATA[svn切分支与分支合并]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51777300</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51777300</guid><author>u010031673</author><pubDate>Tue, 28 Jun 2016 18:32:11 +0800</pubDate><description><![CDATA[SVN的标准目录结构：trunk、branch、tags
目录在SVN中并没有特别的意义，这三个目录反映了软件开发的通常模式
trunk：主干，是日常开发进行的地方
branches：分支，一些阶段性的release版本，这些版本是可以继续进行开发和维护的
tags：阶段性的发布版本，存放到这里


现在来看一下日常开发的流程：
假说现在有一个游戏项目，项目经理说今天项目要上线了，]]></description><category></category></item><item><title><![CDATA[加密解密原理]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51759261</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51759261</guid><author>u010031673</author><pubDate>Sat, 25 Jun 2016 17:41:04 +0800</pubDate><description><![CDATA[本篇博文会从一个对话中解释加密和解密的原理
首先看一下加密的过程和解密过程（图片摘自《深入java虚拟机》）
加密过程：



解密过程：


假如A授权B的一段代码dmk可以访问A的系统，一个坏蛋C也想要访问A的系统做一些坏事，但是C没有的到A的授权，那么A怎么知道dmk就是dmk呢，是这样做的B通过dmk生成一个散列值，然后将这个散列值追加到代码尾部传送给A，A拿到这个信息后]]></description><category></category></item><item><title><![CDATA[NIO与IO的区别]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51755075</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51755075</guid><author>u010031673</author><pubDate>Fri, 24 Jun 2016 20:35:51 +0800</pubDate><description><![CDATA[JAVA NIO vs IO
当我们学习了Java NIO和IO后，我们很快就会思考一个问题：
什么时候应该使用IO，什么时候我应该使用NIO
在下文中我会尝试用例子阐述java NIO 和IO的区别，以及它们对你的设计会有什么影响
Java NIO和IO的主要区别




IO
NIO


面向Stream
面向Buffer


阻塞IO
非阻塞IO

]]></description><category></category></item><item><title><![CDATA[（四）MyBatis源码解析之SqlSession]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51557467</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51557467</guid><author>u010031673</author><pubDate>Thu, 02 Jun 2016 17:00:37 +0800</pubDate><description><![CDATA[上篇博文将完了MyBatis的配置文件解析的过程，从这篇博文开始分析MyBatis的执行流程
解析完配置文件之后，配置文件中的所有信息就存储到了Configuration对象中了，在创建SqlSessionFactory对象时将Configuration做为SqlSessionFactory对象的一个属性，通过调用SqlSessionFactory的openSession()]]></description><category></category></item><item><title><![CDATA[（三）MyBatis源码解析之配置文件]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51539078</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51539078</guid><author>u010031673</author><pubDate>Tue, 31 May 2016 20:05:50 +0800</pubDate><description><![CDATA[这篇文章我们来看看最重要的mappers标签是怎样解析的，Mybatis在mappers标签中引入所有的***Mapper.xml

	
		
	


Mybatis支持通过包和具体的xml文件来引入Mapper，如果是向上面那样通过xml文件来引入Mapper的话，Mybatis还可以分别支持resource、url、classs三种方式，我们一般都是通过resource="..."的形]]></description><category></category></item><item><title><![CDATA[（二）MyBatis源码解析之配置文件]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51536935</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51536935</guid><author>u010031673</author><pubDate>Tue, 31 May 2016 20:05:30 +0800</pubDate><description><![CDATA[上篇文章我们讲述了]]></description><category></category></item><item><title><![CDATA[（一）MyBatis源码解析之配置文件]]></title><link>https://blog.youkuaiyun.com/u010031673/article/details/51509322</link><guid>https://blog.youkuaiyun.com/u010031673/article/details/51509322</guid><author>u010031673</author><pubDate>Tue, 31 May 2016 20:05:05 +0800</pubDate><description><![CDATA[使用mybatis进行数据库查询的代码如下：

public class MessageDaoDemo {
	@Test
	public void queryMessageList() throws IOException{
		SqlSession sqlSession=getSessionFactory().openSession();
		MessageMapperDao message]]></description><category></category></item></channel></rss>