<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[akfly的专栏]]></title><description><![CDATA[与其山脚仰望，不如登顶畅饮]]></description><link>https://blog.youkuaiyun.com/akfly</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; akfly]]></copyright><item><title><![CDATA[大飞哥讲<spark学习笔记>]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/78211524</link><guid>https://blog.youkuaiyun.com/akfly/article/details/78211524</guid><author>akfly</author><pubDate>Thu, 12 Oct 2017 10:10:48 +0800</pubDate><description><![CDATA[最近朋友问我spark是啥，其实我也不知道，但是既然开源了，想必看看文档，看看示例，自己也能清楚个7788.。


废话不多，先从github 上下载代码   git clone https://github.com/apache/spark.git


下载完毕之后，到spark 执行 build/mvn -DskipTests clean package


build su]]></description><category></category></item><item><title><![CDATA[微信红包算法遐想]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/55504593</link><guid>https://blog.youkuaiyun.com/akfly/article/details/55504593</guid><author>akfly</author><pubDate>Fri, 17 Feb 2017 10:51:04 +0800</pubDate><description><![CDATA[private final AtomicLong seed;

    private static final long multiplier = 0x5DEECE66DL;
    private static final long addend = 0xBL;
    private static final long mask = (1L << 48) - 1;

    /**
    ]]></description><category></category></item><item><title><![CDATA[java设计模式之行为模型模式]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54693892</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54693892</guid><author>akfly</author><pubDate>Mon, 23 Jan 2017 18:33:26 +0800</pubDate><description><![CDATA[前面学习了创造模式系列和结构模式系列，本文来学习下行为模式系列


这一章打算找一些开源项目中的代码例子来写。






父类与子类
策略模式
针对接口的一个方法有不同的实现，让客户来选择
模板方法
父类一般是抽象类，实现接口方法,定义一个抽象方法让子类去实现


通过dubbo代码中，如何实现客户端负载均衡算法,来理解下这几个模式]]></description><category></category></item><item><title><![CDATA[java设计模式之结构模型模式]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54692112</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54692112</guid><author>akfly</author><pubDate>Mon, 23 Jan 2017 18:31:46 +0800</pubDate><description><![CDATA[这章开始，我将讲下7种结构型模式：适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。其中对象的适配器模式是各种模式的起源，我们看下面的图




建议大家跟着画画uml图，方便大家理解



适配器模式

适配器模式将某个类的接口转换成客户端期望的另一个接口表示，目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类：类的适配器模式、对象的适配器模]]></description><category></category></item><item><title><![CDATA[java设计模式之创建模型模式]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54667347</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54667347</guid><author>akfly</author><pubDate>Mon, 23 Jan 2017 18:30:29 +0800</pubDate><description><![CDATA[今天来学习 设计模式之创建型模式
顺便画了张uml 图，方便大家来理解下。


下面是各个模式的代码+简介


工厂方法模式
一般用于需要大量产品创建的时候，比如spring的 BeanFactory  创建了大量的bean实例
public class Factory {
	public Sender product(String name){
		if("SMS".equal]]></description><category></category></item><item><title><![CDATA[java 23种设计模式]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54667220</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54667220</guid><author>akfly</author><pubDate>Mon, 23 Jan 2017 18:30:10 +0800</pubDate><description><![CDATA[一、设计模式的分类

总体来说设计模式分为三大类：

创建型模式，共五种：工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式，共七种：适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式，共十一种：策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式]]></description><category></category></item><item><title><![CDATA[netty源码分析 之十三 线程模型]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54646464</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54646464</guid><author>akfly</author><pubDate>Sat, 21 Jan 2017 19:12:36 +0800</pubDate><description><![CDATA[通过代码来看，netty server有两个线程池来组成  而 netty client端有一个线程池来
代码解读
下面有两个线程池 bossGroup workerGroup
        // Configure the server.
        EventLoopGroup bossGroup = new NioEventLoopGroup(1);
        EventL]]></description><category></category></item><item><title><![CDATA[netty源码分析 之十二 类图]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54646253</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54646253</guid><author>akfly</author><pubDate>Sat, 21 Jan 2017 16:08:01 +0800</pubDate><description><![CDATA[闲来无事，把之前总结的类，画个图表示下，其实还是清晰的


对netty的核心类库，有个详细的了解，其实就是一些适配+模板的组合]]></description><category></category></item><item><title><![CDATA[netty源码分析 之十一 ByteBuf]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54313471</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54313471</guid><author>akfly</author><pubDate>Tue, 10 Jan 2017 17:57:57 +0800</pubDate><description><![CDATA[终于到最后的ByteBuf了，其实和jdk nio的ByteBuffer  含义大致相同
都是对byte数组的操作，不同的是ByteBuf定义了两个下标 读下标和写下标







然后再看看其的实现类





WrappedByteBuf
对byteBuf的包装类



EmptyByteBuf
byteBuf的空实现，里面的接口空实现直接返回
]]></description><category></category></item><item><title><![CDATA[netty源码分析 之十 codec]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54311166</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54311166</guid><author>akfly</author><pubDate>Tue, 10 Jan 2017 11:33:17 +0800</pubDate><description><![CDATA[前面学习了别的handler，都是直接继承ChannelHandlerAdapter  或者间接继承来实现的。


codec也很简单,顾名思义 解遍码器


核心类有以下几个


ByteToMessageCodec
ByteBuf 与Object 之间的转换



重写了ChannelHandlerAdapter   的两个方法 channelRead writer]]></description><category></category></item><item><title><![CDATA[netty源码分析 之九 handler]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54293380</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54293380</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 22:43:05 +0800</pubDate><description><![CDATA[学习完前面的channel，回头来学习handler 会感觉到很简单的.


handler 这个包里面的类实现  ChannelHandlerAdapter 






codec我们最后来看，先看其他


logging

LoggingHandler 为log的输出类， 定义模板，具体实现为 InternalLogger这个接口，log4j logback之类]]></description><category></category></item><item><title><![CDATA[netty源码分析 之八 transport(总结)]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54287473</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54287473</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:47:03 +0800</pubDate><description><![CDATA[前面学习了channel和bootstarp。
本文分为两部分，一是补充下channel  二是整体来看下channel和bootstarp


channel其他包






embedded  


epoll unix实现 epoll选择socket


local 就是本地通讯，不需要跨ip


group  channelGroup 包含了cha]]></description><category></category></item><item><title><![CDATA[netty源码分析 之七 transport(Unsafe)]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54236468</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54236468</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:46:37 +0800</pubDate><description><![CDATA[来看下unsafe的接口定义


同样看你实现类，
AbstractUnsafe
接着看起实现，统一的模板类，由子类来实现方法






接着看register 方法，其中有pipeline.fireChannelRegistered方法
       private void register0(ChannelPromise promise) {]]></description><category></category></item><item><title><![CDATA[netty源码分析 之六 transport(EventLoop)]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54236052</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54236052</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:46:05 +0800</pubDate><description><![CDATA[前面分析到DefaultChannelHandlerInvoker
其被SingleThreadEventLoop 引用，并创建DefaultChannelHandleInvoker


先来分析下Eventloop 以及 EventLoopGroup
EventLoop
定义了 asInoker 返回前面的 DefaultChannelHandlerInvoker]]></description><category></category></item><item><title><![CDATA[netty源码分析 之五 transport(ChannelHandler)]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54235277</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54235277</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:45:46 +0800</pubDate><description><![CDATA[上文说到了，channelHandler, 顾名思义 handler 处理者
从channelPipeline的定义中看出，channelPipeline是channelHandler的集合
public interface ChannelPipeline extends Iterable>
查看其接口定义和源码可以看出
接口方法
分为三类  
Handler life cycle m]]></description><category></category></item><item><title><![CDATA[netty源码分析 之四 transport(ChannelPipeline)]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54233682</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54233682</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:44:17 +0800</pubDate><description><![CDATA[前面看了channel定义，以及接口定义，可知道实现类。
 *                                                 I/O Request
 *                                            via {@link Channel} or
 *]]></description><category></category></item><item><title><![CDATA[netty源码分析 之三 transport(channel)]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54232757</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54232757</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:43:55 +0800</pubDate><description><![CDATA[在开始学习channel之前，先看下channel如何生成的？


channel如何生成？

AbstractBootstrap 通过channel方法来设置 channelFactory  
    public B channel(Class channelClass) {
        if (channelClass == null) {
            throw]]></description><category></category></item><item><title><![CDATA[netty源码分析 之二 transport(bootstrap)]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54137010</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54137010</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:42:57 +0800</pubDate><description><![CDATA[transport 分为两部分  bootstrap channel 
由于channel东西比较多，所以分开两篇来写
AbstractBootstrap
顾名思义，引导累   抽象父类, 定义模板方法


成员变量


private volatile EventLoopGroup group;
    @SuppressWarnings("deprecation")]]></description><category></category></item><item><title><![CDATA[netty源码分析 之一 build]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/54135249</link><guid>https://blog.youkuaiyun.com/akfly/article/details/54135249</guid><author>akfly</author><pubDate>Mon, 09 Jan 2017 16:42:35 +0800</pubDate><description><![CDATA[下载源码


git地址   https://github.com/netty/netty.git


之后build   mvn clean install  -Dmaven.test.skip=true -Dcheckstyle.sk
ip=true

有两个模块build 不过去， 找到 根目录下的pom.xml  注释掉他
  
    common
    buffer]]></description><category></category></item><item><title><![CDATA[motan学习笔记 六  opentracing Brave+zipkin实现]]></title><link>https://blog.youkuaiyun.com/akfly/article/details/53976303</link><guid>https://blog.youkuaiyun.com/akfly/article/details/53976303</guid><author>akfly</author><pubDate>Tue, 03 Jan 2017 11:32:14 +0800</pubDate><description><![CDATA[前面我们学习了，opentracing的接口定义
本文来学习motan用filter 来拦截请求，并用brace来实现，上报数据到zipkin]]></description><category></category></item></channel></rss>