<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[兰亭风雨的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/mmc_maodun</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mmc_maodun]]></copyright><item><title><![CDATA[Android Touch事件传递机制全面解析（从WMS到View树）]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/49848801</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/49848801</guid><author>mmc_maodun</author><pubDate>Mon, 21 Dec 2015 07:43:35 +0800</pubDate><description><![CDATA[转眼间近一年没更新博客了，工作一忙起来，很难有时间来写博客了，由于现在也在从事Android开发相关的工作，因此以后的博文也会更多地专注于这一块。
	这篇文章准备从源码层面为大家带来Touch事件的传递机制，我这里分析的源码时Android4.4的。说到分析源码，光看肯定是不行的，一定要亲自去跟，并且要边跟边思考，所以在下一篇中，会有一个Demo来为大家详细分析源码的走向。]]></description><category></category></item><item><title><![CDATA[2014年终总结：这一年所经历的和正在发生的事情]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/42319613</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/42319613</guid><author>mmc_maodun</author><pubDate>Mon, 05 Jan 2015 00:03:07 +0800</pubDate><description><![CDATA[无声无息间，又到了岁末！这一年是我的本命年，本以为会霉运连连，却没有想到又峰回路转，这一年来所遭遇的失落让我明白了很多道理，而这一年所取得的收获则更加让我坚定了一些信念。
    写博客是这一年来一直在坚持的事情。印象中，是2013年的4月份在优快云上写的第一篇博文，但当时的文章基本都是从新浪博客上搬过来的，而且文章质量并不高，因此访问量很低，发了20多篇文章，一条评论都没有。后来，写了篇“详细讲解二叉树三种遍历方式的递归与非递归实现”的文章，因为讲解比较详细，发出去不到1小时便收到了一些评论，而且被小编]]></description><category></category></item><item><title><![CDATA[2015互联网校招总结—一路走来]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/40408397</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/40408397</guid><author>mmc_maodun</author><pubDate>Wed, 29 Oct 2014 00:03:45 +0800</pubDate><description><![CDATA[结束了在百度的实习，是时候写下校招的总结了，再不写估计很多东西都忘了。在开源社区混迹久了，从别人的学习、求职、工作经历中越发感受到很多的正能量，也本着攒RP的原则，向学弟学妹们，尤其非名校的学弟学妹们传递点正能量，因为博主也是非名校出身，而且在整个求职的过程中能够很明显地感受到名校学生那种得天独厚的优势，同样的实力，名校学生进入BAT等一线互联网企业确实要容易很多，即便技术很水，一样有华为等企业保底，而非名校的可能连简历筛选这关都过不了。博主说这些，并不是为了打击非名校的学生，只是，这些确实是事实，既然无法]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】LinkedHashmap源码剖析]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/37867985</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/37867985</guid><author>mmc_maodun</author><pubDate>Thu, 17 Jul 2014 07:37:18 +0800</pubDate><description><![CDATA[前言：有网友建议分析下LinkedHashMap的源码，于是花了一晚上时间研究了下，分享出此文，希望大家相互学习。LinkedHashMap的源码理解起来也不难（当然，要建立在你对HashMap源码有较好理解的基础上）。
    LinkedHashMap简介

    LinkedHashMap是HashMap的子类，与HashMap有着同样的存储结构，但它加入了一个双向链表的头结点，将所有put到LinkedHashmap的节点一一串成了一个双向循环链表，因此它保留了节点插入的顺序，可以使节点的输出顺序]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】TreeMap源码剖析]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/36421085</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/36421085</guid><author>mmc_maodun</author><pubDate>Mon, 07 Jul 2014 07:47:49 +0800</pubDate><description><![CDATA[前言

    本文不打算延续前几篇的风格（对所有的源码加入注释），因为要理解透TreeMap的所有源码，对博主来说，确实需要耗费大量的时间和经历，目前看来不大可能有这么多时间的投入，故这里意在通过于阅读源码对TreeMap有个宏观上的把握，并就其中一些方法的实现做比较深入的分析。
红黑树简介

    TreeMap是基于红黑树实现的，这里只对红黑树做个简单的介绍，红黑树是一种特殊的二叉排序树，关于二叉排序树，参见：http://blog.youkuaiyun.com/ns_code/article/details/]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】Hashtable源码剖析]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/36191279</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/36191279</guid><author>mmc_maodun</author><pubDate>Sun, 06 Jul 2014 00:53:22 +0800</pubDate><description><![CDATA[Hashtable简介
    Hashtable同样是基于哈希表实现的，同样每个元素是一个key-value对，其内部也是通过单链表解决冲突问题，容量不足（超过了阀值）时，同样会自动增长。
    Hashtable也是JDK1.0引入的类，是线程安全的，能用于多线程环境中。
    Hashtable同样实现了Serializable接口，它支持序列化，实现了Cloneable接口，能被克隆。]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】HashMap源码剖析]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/36034955</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/36034955</guid><author>mmc_maodun</author><pubDate>Fri, 04 Jul 2014 00:16:23 +0800</pubDate><description><![CDATA[HashMap简介

    HashMap是基于哈希表实现的，每一个元素是一个key-value对，其内部通过单链表解决冲突问题，容量不足（超过了阀值）时，同样会自动增长。
    HashMap是非线程安全的，只是用于单线程环境下，多线程环境下可以采用concurrent并发包下的concurrentHashMap。
    HashMap 实现了Serializable接口，因此它支持序列化，实现了Cloneable接口，能被克隆。]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】Vector源码剖析]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/35793865</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/35793865</guid><author>mmc_maodun</author><pubDate>Wed, 02 Jul 2014 00:03:14 +0800</pubDate><description><![CDATA[Vector简介
    Vector也是基于数组实现的，是一个动态数组，其容量能自动增长。
    LinkedList是JDK1.0引入了，它的很多实现方法都加入了同步语句，因此是线程安全的（其实也只是相对安全，有些时候还是要加入同步语句来保证线程的安全），可以用于多线程环境。
    LinkedList没有丝线Serializable接口，因此它不支持序列化，实现了Cloneable接口，能被克隆，实现了RandomAccess接口，支持快速随机访问。

Vector源码剖析
    Vector的]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】LinkedList源码剖析]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/35787253</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/35787253</guid><author>mmc_maodun</author><pubDate>Tue, 01 Jul 2014 08:29:58 +0800</pubDate><description><![CDATA[LinkedList简介

    LinkedList是基于双向循环链表（从源码中可以很容易看出）实现的，除了可以当做链表来操作外，它还可以当做栈、队列来使用。
    LinkedList同样是非线程安全的，只在单线程下适合使用。
    LinkedList实现了Serializable接口，因此它支持序列化，能够通过序列化传输，实现了Cloneable接口，能被克隆。
LinkedList源码剖析

    LinkedList的源码如下（加入了比较详细的注释）：]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】ArrayList源码剖析]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/35568011</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/35568011</guid><author>mmc_maodun</author><pubDate>Mon, 30 Jun 2014 08:02:49 +0800</pubDate><description><![CDATA[ArrayList是基于数组实现的，是一个动态数组，其容量能自动增长，类似于C语言中的动态申请内存，动态增长内存。
    ArrayList不是线程安全的，只能用在单线程环境下，多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类，也可以使用concurrent并发包下的CopyOnWriteArrayList类。
    ArrayList实现了Serializable接口，因此它支持序列化，能够通过序列化传输，实现了R]]></description><category></category></item><item><title><![CDATA[【Java集合源码剖析】Java集合框架]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/35564663</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/35564663</guid><author>mmc_maodun</author><pubDate>Sun, 29 Jun 2014 12:48:55 +0800</pubDate><description><![CDATA[Java集合工具包位于Java.util包下，包含了很多常用的数据结构，如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分：List列表、Set集合、Map映射、迭代器（Iterator、Enumeration）、工具类（Arrays、Collections）。
    从上图中可以看出，集合类主要分为两大类：Collection和Map。
    Collection是List、Set等集合高度抽象出来的接口，它包含了这些集合的基本操作，它主要又分为两大部分：List和]]></description><category></category></item><item><title><![CDATA[【算法拾遗】二分查找递归非递归实现]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/33747953</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/33747953</guid><author>mmc_maodun</author><pubDate>Tue, 24 Jun 2014 12:45:59 +0800</pubDate><description><![CDATA[本篇博文没太多要说的，二分查找很简单，也是常见常考的查找算法，一下是递归非递归的实现。
    非递归实现：]]></description><category></category></item><item><title><![CDATA[【网络协议】TCP的拥塞控制机制]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/32707721</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/32707721</guid><author>mmc_maodun</author><pubDate>Sat, 21 Jun 2014 00:54:02 +0800</pubDate><description><![CDATA[前言

计算机网络中的带宽、交换节点中的缓存和处理机等，都是网络的资源，在某段时间内，若对网络中某一资源的需求超过了该资源所能提供的可用部分，网络的性能就要变坏，这种情况就叫做拥塞。
所谓拥塞控制，就是防止过多的数据注入到网络中，从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别，拥塞控制是一个全局性的过程，涉及到所有的额主机、路由器，以及与降低网
拥塞控制的算法有：慢开始、拥塞避免、快重传、快恢复四种。
 
慢开始和拥塞避免

发送方维持一个拥塞窗口的状态变量，其大小取决于网络的拥塞程度]]></description><category></category></item><item><title><![CDATA[【网络协议】TCP中的四大定时器]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/32343979</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/32343979</guid><author>mmc_maodun</author><pubDate>Fri, 20 Jun 2014 08:30:05 +0800</pubDate><description><![CDATA[前言 

    对于每个TCP连接，TCP一般要管理4个不同的定时器：重传定时器、坚持定时器、保活定时器、2MSL定时器。
    重传定时器 

    很明显重传定时器是用来计算TCP报文段的超时重传时间的（至于超时重传时间的确定，这里涉及到一大堆的算法，书上有说，我这里不细谈了）。每发送一个报文段就会启动重传定时器，如果在定时器时间到后还没收到对该报文段的确认，就重传该报文段，并将重传定时器复位，重新计算；如果在规定时间内收到了对该报文段的确认，则撤销该报文段的重传定时器。
    坚持定时器]]></description><category></category></item><item><title><![CDATA[【网络协议】TCP的流量控制机制]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/32338039</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/32338039</guid><author>mmc_maodun</author><pubDate>Fri, 20 Jun 2014 08:29:34 +0800</pubDate><description><![CDATA[一般来说，我们总是希望数据传输的更快一些，但如果发送方把数据发送的很快，而接收方来不及接收，这就可能造成数据的丢失。流量控制就是让发送方的发送速率不要太快，让接收方来得及接收。
    对于成块数据流，TCP利用滑动窗口机制来实现流量的控制，对于交互数据流，TCP利用捎带ACK和Nagle算法来实现流量的控制。
    后两种就不说了，上篇博文中将已经写得比较清楚了，对于滑动窗口机制，上篇博文中也又说到，只是没有刻意提到用滑动窗口来实现流量的控制。下面就详细说下利用滑动窗口机制来实现流量控制的机制，先看下图]]></description><category></category></item><item><title><![CDATA[【网络协议】TCP的交互数据流和成块数据流]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/32329157</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/32329157</guid><author>mmc_maodun</author><pubDate>Fri, 20 Jun 2014 08:29:27 +0800</pubDate><description><![CDATA[前言

    建立在TCP协议上的应用层协议有很多，如FTP、HTTP、Telnet等，这些协议根据传输数据的多少可以分为两类：交互数据类型和成块数据类型。
    交互数据类型，如：Telnet，这类协议一般只做小流量的数据交换，比如每按下一个键，要回显一些字符。
    成块数据类型，如：FTP，这类协议需要传输的数据比较多，一般传输的数据量比较大。
    针对这两种不同的情况，TCP采用不同的策略进行数据传输。
   交互数据流

    针对交互性要求比较高的应用，比如Rlogin远程登录中，需]]></description><category></category></item><item><title><![CDATA[【网络协议】TCP协议简介]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/31798063</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/31798063</guid><author>mmc_maodun</author><pubDate>Wed, 18 Jun 2014 08:29:50 +0800</pubDate><description><![CDATA[本文只是对TCP协议做个简要的介绍。
    TCP协议，即传输控制协议，与UDP协议同处于传输层，同样使用相同的网络层，但TCP提供了一种可靠的、面向连接的数据传输服务，它会在两个使用TCP的应用之间建立一个TCP连接，在该连接上进行数据的传输。
    TCP通过以下方式提供可靠性：
    1、应用程序被分割成TCP认为最合适发送的数据块。这点与UDP完全不同，应用程序产生的UDP数据报长度将保持不变，加上IP首部后，才会进行IP分片。
    2、当TCP发出一个报文段后，它会启动一个定时器，等待目]]></description><category></category></item><item><title><![CDATA[看世界杯应该看到一种精神]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/31356881</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/31356881</guid><author>mmc_maodun</author><pubDate>Mon, 16 Jun 2014 13:20:45 +0800</pubDate><description><![CDATA[看世界杯应该看到一种精神，一种锲而不舍、四年磨一剑的精神。
    平时很少看足球，但这两届世界杯，阿根廷的比赛是必看的，因为有梅西。
    梅西带给我的更多的是一种精神上的感动。
    现在已经不习惯在QQ空间发表说说了，四年前的一条说说：]]></description><category></category></item><item><title><![CDATA[【网络协议】UDP协议]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/30286955</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/30286955</guid><author>mmc_maodun</author><pubDate>Fri, 13 Jun 2014 00:00:19 +0800</pubDate><description><![CDATA[UDP是一个简单的面向数据报的运输层协议：进程的每个输出操作都会产生一个UDP数据报，并组装成一份待发送的IP数据报，这与面向字符流的协议不同，如TCP，应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系（主要是在传输层就进行分段了，因此不会受IP分片的影响）。
    UDP的首部一共8个字节，很简单，可以参考书上，这里也不再详说。
    UDP的校验和
    至于UDP的校验和，这里注意下区别就好了，UDP对首部和数据部分都进行校验，而IP首部的校验和仅对IP的首部进行校验，顺带提下T]]></description><category></category></item><item><title><![CDATA[【网络协议】TCP分段与IP分片]]></title><link>https://blog.youkuaiyun.com/mmc_maodun/article/details/30109789</link><guid>https://blog.youkuaiyun.com/mmc_maodun/article/details/30109789</guid><author>mmc_maodun</author><pubDate>Thu, 12 Jun 2014 08:20:45 +0800</pubDate><description><![CDATA[我们在学习TCP/IP协议时都知道，TCP报文段如果很长的话，会在发送时发生分段，在接受时进行重组，同样IP数据报在长度超过一定值时也会发生分片，在接收端再将分片重组。
    我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。
    MYU（最大传输单元）
    MTU前面已经说过了，是链路层中的网络对数据帧的一个限制，依然以以太网为例，MTU为1500个字节。一个IP数据报在以太网中 传输，如果它的长度大于该MTU值，就要进行分片传输，使得每片数据报的长度小于MTU。分片传输的IP数据]]></description><category></category></item></channel></rss>