<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[光与热的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/JavaMoo</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; JavaMoo]]></copyright><item><title><![CDATA[负载均衡之一致性哈希算法]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79646095</link><guid>https://blog.csdn.net/JavaMoo/article/details/79646095</guid><author>JavaMoo</author><pubDate>Wed, 21 Mar 2018 21:12:05 +0800</pubDate><description><![CDATA[说到负载均衡的hash算法,自然会联想起如下这样的算法



hash(object)%nodeTotal

而在集群中,机器的动态上下线是常见的情况,如果集群是无状态的,那么上述的算法没有问题.但是如果是缓存之类的集群,节点的动态上下线会导致几乎所有的key的重新映射,这样造成的影响是数据错乱,相同备份的数据同时存在于集群中的多个节点,造成内存空间的浪费

为了解决上述的问题,一致性哈希算法就被...]]></description><category></category></item><item><title><![CDATA[负载均衡之轮询策略]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79617840</link><guid>https://blog.csdn.net/JavaMoo/article/details/79617840</guid><author>JavaMoo</author><pubDate>Mon, 19 Mar 2018 21:26:14 +0800</pubDate><description><![CDATA[轮询算法是最简单的一种负载均衡算法,它的原理是将用户的请求轮流分配给内部的服务器,并且轮询算法并不需要记录当前所有连接的状态,所以它是一种无状态的调度.



简单轮询策略

下面是简单轮询算法的实现



public class RouteRound implements LoadBalance {
    private int count = 0;

    @Override
    p...]]></description><category></category></item><item><title><![CDATA[WeakHashMap]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79494098</link><guid>https://blog.csdn.net/JavaMoo/article/details/79494098</guid><author>JavaMoo</author><pubDate>Fri, 09 Mar 2018 10:34:24 +0800</pubDate><description><![CDATA[
                    
            



WeakHashMap，此种Map的特点是，当除了自身有对key的引用外，此key没有其他引用那么此map会自动丢弃此值，

见实例：此例子中声明了两个Map对象，一个是HashMap，一个是WeakHashMap，同时向两个map中放入a、b两个对象，当HashMap&amp;nbsp; remove掉a 并且将a、b都指向nu...]]></description><category></category></item><item><title><![CDATA[Reactor与Proactor模型]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79460867</link><guid>https://blog.csdn.net/JavaMoo/article/details/79460867</guid><author>JavaMoo</author><pubDate>Tue, 06 Mar 2018 17:05:19 +0800</pubDate><description><![CDATA[
                            

I/O模型


在文章《unix网络编程》（12）五种I/O模型中提到了五种I/O模型，其中前四种：阻塞模型、非阻塞模型、信号驱动模型、I/O复用模型都是同步模型；还有一种是异步模型。




Reactor模型


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Reactor模式是处理并发I/O...]]></description><category></category></item><item><title><![CDATA[IdentityHashMap]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79433032</link><guid>https://blog.csdn.net/JavaMoo/article/details/79433032</guid><author>JavaMoo</author><pubDate>Sat, 03 Mar 2018 21:18:31 +0800</pubDate><description><![CDATA[在HashMap中,对于两个键值对key1-value1,key2-value2,在key相同(key1.equals(key2)==true)的情况下value1与value2不能共存,有没有一种数据结构使value1与value2共存呢?有,那就是IdentityHashMap.IdentityHashMap在比较键时候不是使用equals方法而是比较两个对象的引用,如果对象引用不同即使对象e...]]></description><category></category></item><item><title><![CDATA[netty参数配置]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79372532</link><guid>https://blog.csdn.net/JavaMoo/article/details/79372532</guid><author>JavaMoo</author><pubDate>Sun, 25 Feb 2018 23:26:11 +0800</pubDate><description><![CDATA[通用参数说明




  netty参数
  说明



  CONNECT_TIMEOUT_MILLIS
  连接超时毫秒数，默认值30000毫秒即30秒。


  MAX_MESSAGES_PER_READ
  一次Loop读取的最大消息数，对于ServerChannel或者NioByteChannel，默认值为16，其他Channel默认值为1。默认值这样设置，是因为：ServerChann...]]></description><category></category></item><item><title><![CDATA[Maven常用配置]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79319283</link><guid>https://blog.csdn.net/JavaMoo/article/details/79319283</guid><author>JavaMoo</author><pubDate>Mon, 12 Feb 2018 22:43:45 +0800</pubDate><description><![CDATA[1.统一项目字符集



&amp;lt;properties&amp;gt;  
    &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt; 
&amp;lt;/properties&amp;gt;



2.dependency scope配置


compile，缺省值，适用于所有阶段，会随着项目一起发布。 
prov...]]></description><category></category></item><item><title><![CDATA[GC - 四种引用]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79313362</link><guid>https://blog.csdn.net/JavaMoo/article/details/79313362</guid><author>JavaMoo</author><pubDate>Sun, 11 Feb 2018 21:28:15 +0800</pubDate><description><![CDATA[Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference 
这 4 种类型的引用与 GC 有着密切的关系,  让我们逐一来看它们的定义和使用场景 :



1.Strong Reference

StrongReference 是 Java 的默认引用实现,  它会尽可能长时间的存活...]]></description><category></category></item><item><title><![CDATA[guava - EventBus源码解析]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79307545</link><guid>https://blog.csdn.net/JavaMoo/article/details/79307545</guid><author>JavaMoo</author><pubDate>Sat, 10 Feb 2018 23:03:26 +0800</pubDate><description><![CDATA[订阅发布这种设计模式是一种最常见不过的设计模式.而EventBus是对Publisher和Subscriber的一种实现

下面是EventBus的一个Demo



public class Event {
    /**
     * 事件总线使用该方法向监听者发送事件
     *
     * @param message
     */
    @Subscribe
    public...]]></description><category></category></item><item><title><![CDATA[观察者模式]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79302462</link><guid>https://blog.csdn.net/JavaMoo/article/details/79302462</guid><author>JavaMoo</author><pubDate>Fri, 09 Feb 2018 23:11:31 +0800</pubDate><description><![CDATA[观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象,如果这个主题在状态上发生了变化,会通知所有的观察者对象,让他们自动更新自己

观察者模式有如下四个角色 
1. 被观察接口 
2. 具体的被观察者 
3. 观察者接口 
4. 具体的观察者接口

类图关系如下 


原生观察者模式

通过程序实例理解观察者模式

被观察者接口包括注册观察者,移除观察者,通知观察者



p...]]></description><category></category></item><item><title><![CDATA[Runtime]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79294334</link><guid>https://blog.csdn.net/JavaMoo/article/details/79294334</guid><author>JavaMoo</author><pubDate>Thu, 08 Feb 2018 23:06:38 +0800</pubDate><description><![CDATA[java的runtime类是一个封装了JVM进程的类,每一个java程序实际上都是启动了一个JVM进程.每一个程序都对应一个Runtime实例,实例是由JVM初始化的,我们可以利用java的Runtime类获取进程的相关信息,启动其它进程,关闭当前进程等操作



实例化runtime类

Runtime类在整个jvm中只存在一个Runtime对象,通过Runtime类的静态方法进行实例化操作而不...]]></description><category></category></item><item><title><![CDATA[避免NPE]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79275282</link><guid>https://blog.csdn.net/JavaMoo/article/details/79275282</guid><author>JavaMoo</author><pubDate>Tue, 06 Feb 2018 22:35:22 +0800</pubDate><description><![CDATA[在java开发中中NPE异常是常见异常,在阿里java开发手册中就明确强调防止NPE是调用者的责任是程序员基本修养,本篇博客讲解利用一些小技巧避免NPE



1.1equals方法



public void equals() {
    //代表未知的对象,可能会是NULL也可能不是NULL
    Object unKnowObject = null;
    //这样某些情况下可能会抛出]]></description><category></category></item><item><title><![CDATA[EnumMap]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79265720</link><guid>https://blog.csdn.net/JavaMoo/article/details/79265720</guid><author>JavaMoo</author><pubDate>Mon, 05 Feb 2018 22:40:46 +0800</pubDate><description><![CDATA[EnumMap是Map接口的一种实现,专门用于枚举类型的键,所有枚举的键必须来自同一个枚举

EnumMap不允许键为空,允许值为空

EnumMap成员变量



    private final Class keyType;

    private transient K[] keyUniverse;

    private transient Object[] vals;

    p]]></description><category></category></item><item><title><![CDATA[java transient关键字]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79255478</link><guid>https://blog.csdn.net/JavaMoo/article/details/79255478</guid><author>JavaMoo</author><pubDate>Sun, 04 Feb 2018 22:23:50 +0800</pubDate><description><![CDATA[java对象在实现了Serilizable接口后这个对象就可以被序列化,但是java的这种序列化机制会将这个类的所有属性和方法都序列化.有时候我们的一些敏感信息比如密码并不想序列化传输给对方,这个时候transient关键字就派上用场了,如果一个类的变量加上了transient关键字那么这个字段就不会被序列化

下面这个例子我们利用transient避免User序列化过程中密码字段的序列化]]></description><category></category></item><item><title><![CDATA[Builder内部类]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79089269</link><guid>https://blog.csdn.net/JavaMoo/article/details/79089269</guid><author>JavaMoo</author><pubDate>Wed, 17 Jan 2018 19:53:50 +0800</pubDate><description><![CDATA[今天在看当当网的开源项目分布式任务调度框架源码的时候,感到很奇怪，代码如下



@AllArgsConstructor(access = AccessLevel.PRIVATE)
public final class LiteJobConfiguration implements JobRootConfiguration {

    private final JobTypeConfigura]]></description><category></category></item><item><title><![CDATA[idea 链式调用模板]]></title><link>https://blog.csdn.net/JavaMoo/article/details/79088775</link><guid>https://blog.csdn.net/JavaMoo/article/details/79088775</guid><author>JavaMoo</author><pubDate>Wed, 17 Jan 2018 18:52:42 +0800</pubDate><description><![CDATA[#set($paramName = $helper.getParamName($field, $project))  
#if($field.modifierStatic)  
static ##  
#end  
$class.name set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifi]]></description><category></category></item><item><title><![CDATA[Java ClassLoader机制]]></title><link>https://blog.csdn.net/JavaMoo/article/details/78996296</link><guid>https://blog.csdn.net/JavaMoo/article/details/78996296</guid><author>JavaMoo</author><pubDate>Sun, 07 Jan 2018 18:22:58 +0800</pubDate><description><![CDATA[一、什么是ClassLoader?
         大家都知道，当我们写好一个Java程序之后，不是管是CS还是BS应用，都是由若干个.class文件组织而成的一个完整的Java应用程序，当程序在运行时，即会调用该程序的一个入口函数来调用系统的相关功能，而这些功能都被封装在不同的class文件当中，所以经常要从这个class文件中要调用另外一个class文件中的方法，如果另外一个文件不存在的，则]]></description><category></category></item><item><title><![CDATA[Fork Join框架]]></title><link>https://blog.csdn.net/JavaMoo/article/details/78991449</link><guid>https://blog.csdn.net/JavaMoo/article/details/78991449</guid><author>JavaMoo</author><pubDate>Sat, 06 Jan 2018 20:44:33 +0800</pubDate><description><![CDATA[1.1 核心思想Fork/Join框架是Java7提供了的一个用于并行执行任务的框架， 是一个把大任务分割成若干个小任务，最终汇总每个小任务结果后得到大任务结果的框架，其实现思想与MapReduce有异曲同工之妙。Fork就是把一个大任务切分为若干子任务并行的执行，Join就是合并这些子任务的执行结果，最后得到这个大任务的结果。比如计算1+2+…＋10000，可以分割成10个子任务，每个子任务分别]]></description><category></category></item><item><title><![CDATA[IOC - 方法注入]]></title><link>https://blog.csdn.net/JavaMoo/article/details/78988974</link><guid>https://blog.csdn.net/JavaMoo/article/details/78988974</guid><author>JavaMoo</author><pubDate>Sat, 06 Jan 2018 15:12:38 +0800</pubDate><description><![CDATA[当有两个bean A,B.其中A的内部会调用B,A是单例的,而A每次调用到B的时候都需要重新实例化B，为了解决这个需求难道我们得放弃Spring容器?并不用,Spring可以通过方法注入来实现动态改变A内的B

Spring的方法注入依赖于CGLIB,需要用到方法注入的方法必须满足以下声明规范



public|protected> [abstract] return-type> theMeth]]></description><category></category></item><item><title><![CDATA[责任链模式]]></title><link>https://blog.csdn.net/JavaMoo/article/details/78988486</link><guid>https://blog.csdn.net/JavaMoo/article/details/78988486</guid><author>JavaMoo</author><pubDate>Sat, 06 Jan 2018 14:14:27 +0800</pubDate><description><![CDATA[在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链（Chain of Responsibility）模式的：
　　责任链模式是一种对象的行为模式。在责任链模式里，很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求，这使得系统可以在不影响客户端的情况下动态地重新组织和分配责]]></description><category></category></item></channel></rss>