<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Face3的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Face3</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Face3]]></copyright><item><title><![CDATA[数据库索引学习总结]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/52278221</link><guid>https://blog.youkuaiyun.com/Face3/article/details/52278221</guid><author>Face3</author><pubDate>Mon, 22 Aug 2016 17:20:34 +0800</pubDate><description><![CDATA[任何数据结构都是满足特定的需求而出现的。数据库表的数据在存储时，可能是无序的，分散的，这样的好处是灵活，利用率高。然后却不利于查询，为了在查询的时候，为了大大的提高查询效率，就需要有一个特定的数据结构满足查找的特点，这种数据结构就是数据库索引。这个学习笔记不描述聚簇，唯一等索引的概念，主要关注数据结构。但也不记录严格的数据结构的形状、定理等，主要还是从理解角度进行总结。1.二叉树 
二叉树不直接作为]]></description><category></category></item><item><title><![CDATA[分布式基础之二-分布式桥梁zookeeper]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/52040393</link><guid>https://blog.youkuaiyun.com/Face3/article/details/52040393</guid><author>Face3</author><pubDate>Tue, 26 Jul 2016 22:46:17 +0800</pubDate><description><![CDATA[想一想在自己单位开发的系统，属于比较传统的系统，是不是没有用到分布式呢？其实不然，系统之间的调用已经非常多了，比如ILOG的调用，征信系统的查询，信贷管理系统，账务系统的调用，都是系统间的调用，做一个项目、一个应用，涉及到这么多系统，把这些接口都看做服务的话，这肯定是属于分布式的。 只是，从感觉上，这“很不分布式”。为什么？因为：1.我们的视角，是按“系统”这个层面去划分，而不是按“服务”这个层面去]]></description><category></category></item><item><title><![CDATA[分布式-基础之一-分布式系统调用]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/51306068</link><guid>https://blog.youkuaiyun.com/Face3/article/details/51306068</guid><author>Face3</author><pubDate>Fri, 13 May 2016 09:58:39 +0800</pubDate><description><![CDATA[在独立环境中，系统的功能调用，就是自然的直接调用，一个模块调用另一个模块，这个我们都能理解。但如果是在分布式环境下，涉及到系统之间的调用，那么问题就来了。 
这个是我目前学习时接触到的概念又多，又混乱，又重叠的一个基础知识，网上的释义和帖子大多也不完整，有些简直的引人入坑….. 整整耗费了自己两个星期的时间，查阅比对资料，阅读程序，最终总结出来的成果如下，虽然可能也不完全正确，但是我相信至少在整体方]]></description><category></category></item><item><title><![CDATA[设计模式（12）--State状态模式&Strategy策略模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50738875</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50738875</guid><author>Face3</author><pubDate>Thu, 25 Feb 2016 16:44:28 +0800</pubDate><description><![CDATA[一个对象根据不同的状态，执行不同的行为。我们如何去编写执行行为的方法呢？用逻辑判断语句判断状态不同而执行不同的代码？显然不会选择这种耦合的复杂的逻辑。解耦是显而易见的，即把不同状态下的执行代码分离开来。从而便有了状态模式。 
 
状态模式的要点： 
1.把不同状态的行为处理抽象为Handle方法，并在抽象出的状态类中设置这个方法。 
2.对象必须持有这个状态类，并设置一个初始的具体状态类，例如Con]]></description><category></category></item><item><title><![CDATA[设计模式（11）--Mediator中介者模式&Observer观察者模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50732296</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50732296</guid><author>Face3</author><pubDate>Wed, 24 Feb 2016 17:17:36 +0800</pubDate><description><![CDATA[一、中介者模式理解起来很简单，即多个对象之间需要交互，那么这些对象间的交互就会形成网状结构。引入中介者，各对象根本不知道其它对象的存在，他们只需要把信息发送给中介者，由中介者来控制吧信息传递给哪些对象。所以，就变成了一个星形的结构。 
中介者模式的目的很明显，就是为了解耦，但是缺点，也是比较明显，那就是中介者类本身会变得复杂，牵扯过多。所以，如果网状结构不是非常复杂，那么就不一定要考虑中介者。一旦使]]></description><category></category></item><item><title><![CDATA[设计模式（10）--Command命令模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50699098</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50699098</guid><author>Face3</author><pubDate>Fri, 19 Feb 2016 16:46:37 +0800</pubDate><description><![CDATA[从本篇开始进入到行为类型的设计模式。 
行为类型的模式有一些先简略带过。比如很复杂的解释器模式，这个在实际应用中出现的较少。 
另外一个是职责链模式，模式本身是很容易理解的，一系列的处理类遵循一样的接口，都有者其后继处理类successor和自己的处理方法。对于客户端调用，由职责链的第一个类开始执行处理方法，判断自己是否能够执行或者传给下一个successor.客户端和链上的任何一个类只需要知道把请]]></description><category></category></item><item><title><![CDATA[设计模式（9）--Proxy代理模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50675253</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50675253</guid><author>Face3</author><pubDate>Tue, 16 Feb 2016 17:27:08 +0800</pubDate><description><![CDATA[代理模式是一个很重要的模式，因为大名鼎鼎的AOP，以及Webservice等都与代理模式有关系。代理模式的实质，是通过代理类来隐藏实际类（或者叫委托类），从而控制实际对象的访问。代理模式的用处，可以用来封装webservice形式的远程地址调用；可以用来预置对象的外观，避免直接加载大对象的耗时（有兴趣可以仔细研究浏览器代理）；可以用于权限安全控制；再就是AOP切面增强。
  PS：WebServic]]></description><category></category></item><item><title><![CDATA[设计模式(8)--flyweight 享元模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50669407</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50669407</guid><author>Face3</author><pubDate>Mon, 15 Feb 2016 17:17:03 +0800</pubDate><description><![CDATA[flyweight意为轻量，但是用在设计模式的翻译中变成了享元。这个单词名字确实不好取。这两个意思，其实都能表达该模式的意义。 
flyweight模式，实际上的目的就是控制对象的数目。我们已经见识过很多控制对象数目的方法，例如池化，单例，缓存，常量表等等。 
 
flyweight主要是通过将共性的行为和状态共享，来达到控制对象的目的，现在即可以明白轻量和享元这两个词的意思了。 
flyweigh]]></description><category></category></item><item><title><![CDATA[设计模式（7）--Decorator 装饰模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50624922</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50624922</guid><author>Face3</author><pubDate>Tue, 02 Feb 2016 17:15:39 +0800</pubDate><description><![CDATA[装饰模式也是一种日常编码中经常会不自觉采用的设计模式。其核心理念是：一个类有自己的核心功能和职责，且这个类的代码相对已经固定，不希望改动维护。现在要为这个类加入一谢额外的功能，这些功能不是一定必须的，而且可能是动态添加的，根据实际要求加入某一种或几种。但是不管加入什么额外功能，客户眼中始终还是在操作这个核心功能类。这个时候，我们的处理方式就是，为每种动态的功能，单独的提供一个类，来完成对核心类的“装]]></description><category></category></item><item><title><![CDATA[设计模式（6）--Bridge 桥接模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50618778</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50618778</guid><author>Face3</author><pubDate>Mon, 01 Feb 2016 15:16:54 +0800</pubDate><description><![CDATA[这个模式在实际开发中应该是使用非常多的，不知不觉中我们就使用了桥接模式。我们拿电脑举例（Apple）除外。如果让你动手攒一个台式机，你可以上京东，在电脑产品体系里选择各种配件，组装出一台电脑。那么这个各种配件和电脑之间，是什么关系呢？显然是has-a而不是is-a的关系。这个道理即是如果能使用合成则优先考虑合成而非继承，除非确实是is-a的关系。 假如你用继承is-a的关系来表示整个电脑的产品体系，]]></description><category></category></item><item><title><![CDATA[设计模式（5）--Adapter 适配器]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50608194</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50608194</guid><author>Face3</author><pubDate>Fri, 29 Jan 2016 16:40:18 +0800</pubDate><description><![CDATA[前面4种模式都是与创建对象相关，适配器开始，是与程序结构相关的模式，即以合理的结构组织程序达到设计模式准则。 
 
从前，Adaptee实现的是OldTarget接口，实现了SpecialRequest()方法，Adaptee工作的很好。突然，改变来了，新的软件版本发布，集合的遍历器变成了新的iterator。接口也变成了Target，Target接口里给出的是request方法。 
从新软件版本使]]></description><category></category></item><item><title><![CDATA[设计模式（4）--Builder 建造者（构建器）]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50601816</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50601816</guid><author>Face3</author><pubDate>Thu, 28 Jan 2016 16:51:31 +0800</pubDate><description><![CDATA[Builder和工厂模式一样，都是创建对象类型的模式。同样是创建类型的模式，其区别在于：Builder是应用于更为复杂的对象创建过程。举例说明：生产一辆玩具车，一个工厂一个方法就搞定了。而要生产一辆汽车，那部件太多了，部件不能少，且把所有这些部件组装在一起，也要有一套非常繁琐的流程和顺序。这个时候，工厂模式中的工厂接口，就不是只写一个创建产品的抽象方法就够了。你必须考虑到使这个接口里具备一系列必不可]]></description><category></category></item><item><title><![CDATA[设计模式（3）--Prototype 原型模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50581832</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50581832</guid><author>Face3</author><pubDate>Mon, 25 Jan 2016 17:05:11 +0800</pubDate><description><![CDATA[受spring配置文件bean的属性非单例即prototype的影响，老是不自觉的认为两种模式是对立的。。。事实上，单例的对象确实和原型模式冲突，但是原型模式的重点绝不是单例模式的对立面。原型模式的重点在于：指定一个类型作为原型，并使用Clone()方法去创建这个类型的对象实例。和工厂模式一样，也是一种创建对象的方式。在实际应用中，原型模式经常是结合工厂等模式出现，比如在factory的实现中使用c]]></description><category></category></item><item><title><![CDATA[设计模式（2）--工厂模式]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50556590</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50556590</guid><author>Face3</author><pubDate>Thu, 21 Jan 2016 17:22:22 +0800</pubDate><description><![CDATA[工厂指的是创建对象的工厂，工厂模式是一种创建对象的模式，使用factory.createXXX你就能获得想要的对象。那么为什么要使用工厂模式呢？有很多足够重要的理由：
实际开发中很多情况并不能只用一句new就能得到想要的对象。熟悉的比如spring中各种bean之间的相互依赖，你要得到一个service，不光只new service，还需要new 业务逻辑对象，new dao对象。所以spring使]]></description><category></category></item><item><title><![CDATA[Java 注解 Annotation]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50477223</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50477223</guid><author>Face3</author><pubDate>Thu, 07 Jan 2016 16:24:07 +0800</pubDate><description><![CDATA[注解和类，接口一样，也是一种java元素。只是注解比较特殊，其并不会改变程序的语义逻辑，只是当做一种注解，来提供一些支持辅助的作用。那么注解到底有什么用？最常用的功能有两个：1.规范代码写法，结合IDE工具等可以预防一些错误。2.结合反射实现一些代码控制目的。还有一个功能：3.使用注解对代码进行文档化（不能说不重要，但是在实际工作中往往会忽略）。我们先来看最常用的一个注解@override，这个注解]]></description><category></category></item><item><title><![CDATA[Java 泛型]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50298791</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50298791</guid><author>Face3</author><pubDate>Mon, 14 Dec 2015 18:12:34 +0800</pubDate><description><![CDATA[泛型即为类、方法、变量等提供“类型参数”，都是使用<>包括起来。意思是告诉系统我需要定义一些类型参数了，接下来我会使用这些类型参数。基础知识不再详细列出，仅列出一些值得注意和较难理解的问题。
为什么要使用泛型？ 
Java中，使用泛型最主要的原因是增加类型的安全性，以及简化代码避免显式的强制类型转换。 从性能上说Java泛型并没有加快，这里涉及到运行时擦除概念和编译器默认加入的类型转换。 所以说Ja]]></description><category></category></item><item><title><![CDATA[设计模式（1）--单例模式（singleton）]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50132953</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50132953</guid><author>Face3</author><pubDate>Tue, 01 Dec 2015 18:07:31 +0800</pubDate><description><![CDATA[单例模式是面试中问到的最多的模式问题之一。什么是单例，为什么要用单例，单例模式的不合理的实现方法问题，这里就不讨论了。下面将深入学习单例模式的一些理解记录下来（详细的解释我觉得这篇文章写的很好深入浅出单例模式）：1.有一个问题在写单例代码的时候一定要记住，那就是不管什么写法，必须写私有的构造函数，否则你无法真正阻止类被意外的实例化。私有构造函数也防止了继承的存在。2.synchronized，vol]]></description><category></category></item><item><title><![CDATA[JVM（3）--垃圾收集]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50057891</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50057891</guid><author>Face3</author><pubDate>Thu, 26 Nov 2015 16:38:44 +0800</pubDate><description><![CDATA[垃圾收集设计到算法和源码，这里只在概念上进行总结： 
根据上一篇文章的内容，我们知道方法区和堆是垃圾收集的对象。这其中，方法区是类信息，堆是对象数据。对堆的收集更为频繁和有效，而方法区中的垃圾收集条件严格，收集的成功率也不高。但是方法区中的类信息，由于现在的J2EE大量使用反射，自定义ClassLoader等，使得方法区的信息频繁的加载，所以卸载也是必须的！



垃圾收集的思路


老的思路是计]]></description><category></category></item><item><title><![CDATA[JVM（1）--JVM的概念明确以及JVM生命周期]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50036493</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50036493</guid><author>Face3</author><pubDate>Wed, 25 Nov 2015 14:24:03 +0800</pubDate><description><![CDATA[在深入了解JVM之前，必须先把一些概念搞清楚以免在学习理解时出现偏差和困扰。 
*JVM有自己的规范，设计者抽象出JVM的体系结构并加以规范的定义，而实现者必须遵从这些规范来完成JVM的具体实现。有很多种JVM的实现，这里不展开了。 
*我们常说的JVM是指一种具体的JVM实现，比如自己的一台机器安装了一个JVM环境，就是一个具体的实现。 
*Java虚拟机实例。一定要明白这个概念，在运行时，JVM]]></description><category></category></item><item><title><![CDATA[JVM （2）-- JVM内存模型]]></title><link>https://blog.youkuaiyun.com/Face3/article/details/50017547</link><guid>https://blog.youkuaiyun.com/Face3/article/details/50017547</guid><author>Face3</author><pubDate>Tue, 24 Nov 2015 19:42:22 +0800</pubDate><description><![CDATA[本内容由学习《深入JAVA虚拟机》一书和众多博文归纳而成，引用《深入JAVA虚拟机》中的图例，JAVA虚拟机可以描述成如下的体系结构 
 
class文件由ClassLoader（系统实现或自定义）装载进行JVM。根据初始化各个步骤在方法区，堆，Java栈，PC寄存器（又叫程序计数器）放置相应的数据。随后通过执行引擎来执行Java程序。在执行过程中如果要使用native方法，那么jvm就去连接并直接]]></description><category></category></item></channel></rss>