<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[成长的记忆]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ericming200409</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ericming200409]]></copyright><item><title><![CDATA[dalvik启动过程]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/45581331</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/45581331</guid><author>ericming200409</author><pubDate>Fri, 08 May 2015 15:57:41 +0800</pubDate><description><![CDATA[从Zygote进程启动过程分析过程中，我们知道，dalvik虚拟机的启动过程是从AndroidRuntime::startVm(JavaVM**
 pJavaVM, JNIEnv** pEnv)函数开始的,详细时序图如下：

下面我们来逐步详细地分析一下每个步骤。

1.startVm（AndroidRuntime.cpp）
/*
 * Start the Dalvik Virtual]]></description><category></category></item><item><title><![CDATA[dalvik核心数据结构]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/45577993</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/45577993</guid><author>ericming200409</author><pubDate>Fri, 08 May 2015 12:03:00 +0800</pubDate><description><![CDATA[JavaVM, JNIEnv
typedef const struct JNINativeInterface* JNIEnv;
typedef const struct JNIInvokeInterface* JavaVM;


JNINativeInterface
struct JNINativeInterface {
    void*       reserved0;
    voi]]></description><category></category></item><item><title><![CDATA[Android Zygote进程启动过程]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/45566153</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/45566153</guid><author>ericming200409</author><pubDate>Thu, 07 May 2015 20:32:39 +0800</pubDate><description><![CDATA[Zygote, 意为“受精卵”，Android系统中几乎所有的应用进程都是由Zygote进程孵化出来的，Java环境也是由Zygote创建起来的，它建立了我们app运行所需要的环境，是app的祖先，因此，分析它的启动以及内部逻辑显得非常有必要。


Android系统是基于Linux内核的，而在Linux系统中，所有的进程都是init进程的子孙进程，也就是说，所有的进程都是直接或者间接地由i]]></description><category></category></item><item><title><![CDATA[Android中px、sp、dip的区别]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/19686195</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/19686195</guid><author>ericming200409</author><pubDate>Sat, 22 Feb 2014 16:01:11 +0800</pubDate><description><![CDATA[从android源码分析dp、sp、px的区别]]></description><category></category></item><item><title><![CDATA[Object-C基础—属性的介绍与使用]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/7444390</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/7444390</guid><author>ericming200409</author><pubDate>Tue, 10 Apr 2012 10:55:23 +0800</pubDate><description><![CDATA[Object-c 2.0引入了属性的概念，使得我们可以通过点方法来访问对象的成员变量。假设有一个类为A， 该类有一个成员对象为mTest，mTest是一个类型为B的对象，现在已经有了一个A类的实例对象为a，为了能够用a.mTest 这样的方式，我们需要做到以下两点：
        一、在头文件中用以下方式将mTest声明为属性
               声明属性的语法：@property]]></description><category></category></item><item><title><![CDATA[Linux命令行下编辑常用的快捷键]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6670477</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6670477</guid><author>ericming200409</author><pubDate>Mon, 08 Aug 2011 20:22:08 +0800</pubDate><description><![CDATA[Linux认证考试：Linux命令行下编辑常用的快捷键
本文讲述了Linux命令行编辑快捷键的方法，希望对您有所帮助。
Linux命令行编辑快捷键：
history 显示命令历史列表
↑（Ctrl+p） 显示上一条命令
↓（Ctrl+n） 显示下一条命令
！num 执]]></description><category></category></item><item><title><![CDATA[设计模式之C++实现（三）---装饰者模式（Decorator）]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6446077</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6446077</guid><author>ericming200409</author><pubDate>Wed, 25 May 2011 22:14:00 +0800</pubDate><description><![CDATA[思想本质：动态地给一个对象添加一些额外的职责。就增加功能来说，Decorator模式相比生成子类更为灵活。  设计要点：  1． 装饰者和被装饰对象有相同的超类型。  2． 可以用一个或多个装饰者包装一个对象。  3． 装饰者可以在所委托被装饰者的行为之前或之后，加上自己的行为，以达到特定的目的。  4． 对象可以在任何时候被装饰，所以可以在运行时动态的，不限量的用你喜欢的装饰者来装饰对象。  5． 装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配，而不是获得其行为。  模式类结构图:    下]]></description><category></category></item><item><title><![CDATA[设计模式之C++实现（二）---策略模式（Strategy）]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6443690</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6443690</guid><author>ericming200409</author><pubDate>Tue, 24 May 2011 23:22:00 +0800</pubDate><description><![CDATA[   思想本质：策略模式将具体的策略与用户隔离，用户不知道使用的具体策略，这样我们就可以根据需要灵活地替换我们的策略。    策略模式的类图如下：        Strategy是策略抽象类，有很多的具体策略类继承它，Context负责与用户的交互，同时可以使用不同的具体策略来配置Context。下面我们以对数组的排序    来实现并说明策略模式。                   1: /* abstract strategy class******************************/
]]></description><category></category></item><item><title><![CDATA[设计模式之C++实现（一）---简单工厂模式（Simple Factory）]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6441180</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6441180</guid><author>ericming200409</author><pubDate>Mon, 23 May 2011 23:53:00 +0800</pubDate><description><![CDATA[   简单工厂模式又称静态工厂方法模式（Static Factory Method），它不是23种模式之一，但是却是我们常用的设计模式之一。代码先行：                                  1: // abstract base class


         2: class Operation


         3: {


         4: public:


         5:     int m_nFirst;


    ]]></description><category></category></item><item><title><![CDATA[TCP/IP之十：TCP连接的建立与终止]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6395059</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6395059</guid><author>ericming200409</author><pubDate>Wed, 04 May 2011 20:56:00 +0800</pubDate><description><![CDATA[TCP是传输层的重量级成员，也是整个TCP/IP协议栈的重要组成部分，也正因为这点，协议栈的名字里面才有TCP这样的字样。TCP是端到端的通信协议，它向上层应用提供了可靠的，面向连接的服务，为了实现这样的服务，TCP采用了许多其它协议不曾用到的机制，比如序列号、滑动窗口、超时重传、慢启动等等，同步、流量控制等议题在TCP中体现得淋漓尽致。  为了分析TCP的运行机制，我们先来看看TCP的首部结构：    （1）前面四个字节和UDP类似仍然是源端口号和目的端口号；Sequence Number:序列号，用于通]]></description><category></category></item><item><title><![CDATA[TCP/IP之九：UDP用户数据包协议]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6381730</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6381730</guid><author>ericming200409</author><pubDate>Sun, 01 May 2011 13:51:00 +0800</pubDate><description><![CDATA[至此，我们已经基本讨论完网络接口层和网络层的主要协议，终于来到传输层的领地，传输层从内容复杂性上来讲基本上是TCP一雄称霸，另外还有UDP这个小国，本文我们先讨论一下UDP。  UDP数据报格式如下：    （1）Source Port为源端口号；Destination Port为目的端口号；Length为UDP长度，包含头部与数据部分；checksum为校验和。   （2）Checksum的计算：这个校验和是16位反码求和，在进行校验和计算之前，先给UDP数据包加一个伪首部，并在尾部加适当字节的填充，填充]]></description><category></category></item><item><title><![CDATA[TCP/IP之八：广播、多播与IGMP]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6381671</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6381671</guid><author>ericming200409</author><pubDate>Sun, 01 May 2011 12:51:00 +0800</pubDate><description><![CDATA[广播作为一种给所有主机发数据包的方式，在计算机网络中是必需的，因为很多情况下都需要这样的通信方式，因而广播也很自然地成为了TCP/IP协议栈的一部分。广播是通过将目的端置为特殊的IP地址来实现的，比如以255.255.255.255，会被本地网络中所有主机处理。  TCP/IP协议栈对数据包的过滤处理过程如下图：    每一层都对数据包进行判定，看是接受数据包还是丢弃，如果是目的端为广播地址的数据包，而本机又没有对应的应用程序来处理这样的数据包，则数据包会经过网络接口层->IP层->传输层，最后在传输层被丢]]></description><category></category></item><item><title><![CDATA[TCP/IP之七：IP结构与IP分片]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6370909</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6370909</guid><author>ericming200409</author><pubDate>Fri, 29 Apr 2011 00:12:00 +0800</pubDate><description><![CDATA[IP协议是TCP/IP的核心协议之一，正因为它的重要性，整个协议栈才叫做TCP/IP协议栈。它工作在网络层，起着重要的承上启下的作用。它的主要工作是完成IP分组的路由，并在必要时进行IP分片。  IP分组头部格式如下：    （1）Version:版本号，说明是IPV4还是IPV6等等；IHL即internet header length, IP分组头部长度，占4bit，以4字节为单位，因为这个字段只占4bit，最大值为15，导致IP首部最长只能为    15*4（即60）字节；Type of Servic]]></description><category></category></item><item><title><![CDATA[TCP/IP之六：路由表与IP选路]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6347670</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6347670</guid><author>ericming200409</author><pubDate>Sun, 24 Apr 2011 00:32:00 +0800</pubDate><description><![CDATA[路由表：  为了说明路由表的组成，先看下我的主机路由表：             1: 内核 IP 路由表


       2: Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface


       3: 10.0.2.0        *               255.255.255.0   U         0 0          0 eth0


       4: ]]></description><category></category></item><item><title><![CDATA[TCP/IP之五：traceroute程序]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6347582</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6347582</guid><author>ericming200409</author><pubDate>Sat, 23 Apr 2011 23:25:00 +0800</pubDate><description><![CDATA[traceroute程序实现原理：该程序给特定主机发送UDP报文，UDP需要封装在IP分组中进行传输，程序通过依次将IP分组中的TTL设为1,2,3…n，发送不同的UDP报文，这样就会收到中途路由器的ICMP超时报文，从而可以获得路由器的IP地址；同时目的主机UDP端口号被设置为目的主机不可能使用的端口号，这样目的主机收到该UDP报文会返回一个端口不可达的ICMP报文，从而可以判断UDP是否已经到达目的主机。  在我的主机上运行traceroute，输出全是*,也就是说没有受到任何ICMP超时报文，用tcp]]></description><category></category></item><item><title><![CDATA[TCP/IP之四：ping程序]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6337184</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6337184</guid><author>ericming200409</author><pubDate>Wed, 20 Apr 2011 22:22:00 +0800</pubDate><description><![CDATA[ping程序利用ICMP协议来判断主机是否可以到达，发送回显请求（类型=8，代码=0），接受回显应答（类型=0，代码=0）。    和所有的其他ICMP查询报文一样，ping程序的ICMP报文必须有标识符字段和序号字段，其格式如下所示：    为了说明ping程序，最好的方式是使用它，先给出我的主机信息，我的主机路由表如下：             1: 内核 IP 路由表


       2: Destination     Gateway         Genmask         Flag]]></description><category></category></item><item><title><![CDATA[TCP/IP之三：ICMP]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6334781</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6334781</guid><author>ericming200409</author><pubDate>Tue, 19 Apr 2011 23:10:00 +0800</pubDate><description><![CDATA[ICMP，即控制报文协议，是TCP,UDP,IP等主要协议的辅助协议，主要用于传递各种网络信息。  ICMP包格式：              8位类型        8位代码        16位校验和        数据部分（不同类型的ICMP有不同的内容）          （1）类型字段和代码字段共同决定ICMP的类型；校验和覆盖整个ICMP报文，因为IP只有对头部的校验，ICMP需要自己去校验收到的ICMP报文是否有错；    （2）类型字段和代码字段对应的ICMP描述如下图所示：    （3）注]]></description><category></category></item><item><title><![CDATA[yum命令常用参数详解]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6329790</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6329790</guid><author>ericming200409</author><pubDate>Sun, 17 Apr 2011 21:08:00 +0800</pubDate><description><![CDATA[转自：http://3laoxiao.blog.163.com/blog/static/73588589201092103913867/   yum是一个用于管理rpm包的后台程序，用python写成，可以非常方便的解决rpm的依赖关系。在建立好yum服务器后，yum客户端可以通过http、ftp方式获得软件包，并使用方便的命令直接管理、更新所有的rpm包，甚至包括kernel的更新。现在把常用的yum命令参数整理如下：  一、列举包文件  列出资源库中所有可以安装或更新的rpm包    # yum lis]]></description><category></category></item><item><title><![CDATA[TCP/IP之二：ARP与RARP]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6324557</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6324557</guid><author>ericming200409</author><pubDate>Thu, 14 Apr 2011 23:53:00 +0800</pubDate><description><![CDATA[ARP协议实现IP地址到物理地址的映射；RARP实现物理地址到IP地址的映射。  ARP/RARP的帧格式如下（图中的数字表示各个域所占的字节数）：              以太网目的地址6        以太网源地址6        协议类型2        硬件类型2        协议类型2        硬件地址长度1        协议地址长度1        op2        发送端以太网地址6        发送端IP地址4        目的以太网地址6        目的IP地址4 ]]></description><category></category></item><item><title><![CDATA[Linux下抓包工具tcpdump应用详解]]></title><link>https://blog.youkuaiyun.com/ericming200409/article/details/6324446</link><guid>https://blog.youkuaiyun.com/ericming200409/article/details/6324446</guid><author>ericming200409</author><pubDate>Thu, 14 Apr 2011 22:53:00 +0800</pubDate><description><![CDATA[TCPDUMP简介（文章出处：http://www.examda.com/linux/fudao/20100316/092501345.html）   在传统的网络分析和测试技术中，嗅探器(sniffer)是最常见，也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。对于网络管理人员来说，使用嗅探器可以随时掌握网络的实际情况，在网络性能急剧下降的时候，可以通过sniffer工具来分析原因，找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。 ]]></description><category></category></item></channel></rss>