自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (4)
  • 收藏
  • 关注

原创 Android中px、sp、dip的区别

从android源码分析dp、sp、px的区别

2014-02-22 16:01:11 9375 3

原创 dalvik启动过程

从Zygote进程启动过程分析过程中,我们知道,dalvik虚拟机的启动过程是从AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)函数开始的,详细时序图如下:下面我们来逐步详细地分析一下每个步骤。1.startVm(AndroidRuntime.cpp)/* * Start the Dalvik Virtual

2015-05-08 15:57:41 3598

原创 dalvik核心数据结构

JavaVM, JNIEnvtypedef const struct JNINativeInterface* JNIEnv;typedef const struct JNIInvokeInterface* JavaVM;JNINativeInterfacestruct JNINativeInterface { void* reserved0; voi

2015-05-08 12:03:00 3214

原创 Android Zygote进程启动过程

Zygote, 意为“受精卵”,Android系统中几乎所有的应用进程都是由Zygote进程孵化出来的,Java环境也是由Zygote创建起来的,它建立了我们app运行所需要的环境,是app的祖先,因此,分析它的启动以及内部逻辑显得非常有必要。Android系统是基于Linux内核的,而在Linux系统中,所有的进程都是init进程的子孙进程,也就是说,所有的进程都是直接或者间接地由i

2015-05-07 20:32:39 5727

原创 Object-C基础—属性的介绍与使用

Object-c 2.0引入了属性的概念,使得我们可以通过点方法来访问对象的成员变量。假设有一个类为A, 该类有一个成员对象为mTest,mTest是一个类型为B的对象,现在已经有了一个A类的实例对象为a,为了能够用a.mTest 这样的方式,我们需要做到以下两点:        一、在头文件中用以下方式将mTest声明为属性               声明属性的语法:@property

2012-04-10 10:55:23 6785

转载 Linux命令行下编辑常用的快捷键

Linux认证考试:Linux命令行下编辑常用的快捷键本文讲述了Linux命令行编辑快捷键的方法,希望对您有所帮助。Linux命令行编辑快捷键:history 显示命令历史列表↑(Ctrl+p) 显示上一条命令↓(Ctrl+n) 显示下一条命令!num 执

2011-08-08 20:22:08 2366

原创 设计模式之C++实现(三)---装饰者模式(Decorator)

思想本质:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 设计要点: 1. 装饰者和被装饰对象有相同的超类型。 2. 可以用一个或多个装饰者包装一个对象。 3. 装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的。 4. 对象可以在任何时候被装饰,所以可以在运行时动态的,不限量的用你喜欢的装饰者来装饰对象。 5. 装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配,而不是获得其行为。 模式类结构图: 下

2011-05-25 22:14:00 2551

原创 设计模式之C++实现(二)---策略模式(Strategy)

思想本质:策略模式将具体的策略与用户隔离,用户不知道使用的具体策略,这样我们就可以根据需要灵活地替换我们的策略。 策略模式的类图如下: Strategy是策略抽象类,有很多的具体策略类继承它,Context负责与用户的交互,同时可以使用不同的具体策略来配置Context。下面我们以对数组的排序 来实现并说明策略模式。 1: /* abstract strategy class******************************/

2011-05-24 23:22:00 2589

原创 设计模式之C++实现(一)---简单工厂模式(Simple Factory)

简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是23种模式之一,但是却是我们常用的设计模式之一。代码先行: 1: // abstract base class 2: class Operation 3: { 4: public: 5: int m_nFirst;

2011-05-23 23:53:00 2386

原创 TCP/IP之十:TCP连接的建立与终止

TCP是传输层的重量级成员,也是整个TCP/IP协议栈的重要组成部分,也正因为这点,协议栈的名字里面才有TCP这样的字样。TCP是端到端的通信协议,它向上层应用提供了可靠的,面向连接的服务,为了实现这样的服务,TCP采用了许多其它协议不曾用到的机制,比如序列号、滑动窗口、超时重传、慢启动等等,同步、流量控制等议题在TCP中体现得淋漓尽致。 为了分析TCP的运行机制,我们先来看看TCP的首部结构: (1)前面四个字节和UDP类似仍然是源端口号和目的端口号;Sequence Number:序列号,用于通

2011-05-04 20:56:00 3125

原创 TCP/IP之九:UDP用户数据包协议

至此,我们已经基本讨论完网络接口层和网络层的主要协议,终于来到传输层的领地,传输层从内容复杂性上来讲基本上是TCP一雄称霸,另外还有UDP这个小国,本文我们先讨论一下UDP。 UDP数据报格式如下: (1)Source Port为源端口号;Destination Port为目的端口号;Length为UDP长度,包含头部与数据部分;checksum为校验和。 (2)Checksum的计算:这个校验和是16位反码求和,在进行校验和计算之前,先给UDP数据包加一个伪首部,并在尾部加适当字节的填充,填充

2011-05-01 13:51:00 3048

原创 TCP/IP之八:广播、多播与IGMP

广播作为一种给所有主机发数据包的方式,在计算机网络中是必需的,因为很多情况下都需要这样的通信方式,因而广播也很自然地成为了TCP/IP协议栈的一部分。广播是通过将目的端置为特殊的IP地址来实现的,比如以255.255.255.255,会被本地网络中所有主机处理。 TCP/IP协议栈对数据包的过滤处理过程如下图: 每一层都对数据包进行判定,看是接受数据包还是丢弃,如果是目的端为广播地址的数据包,而本机又没有对应的应用程序来处理这样的数据包,则数据包会经过网络接口层->IP层->传输层,最后在传输层被丢

2011-05-01 12:51:00 3131

原创 TCP/IP之七:IP结构与IP分片

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

2011-04-29 00:12:00 4073 1

原创 TCP/IP之六:路由表与IP选路

路由表: 为了说明路由表的组成,先看下我的主机路由表: 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:

2011-04-24 00:32:00 7943

原创 TCP/IP之五:traceroute程序

traceroute程序实现原理:该程序给特定主机发送UDP报文,UDP需要封装在IP分组中进行传输,程序通过依次将IP分组中的TTL设为1,2,3…n,发送不同的UDP报文,这样就会收到中途路由器的ICMP超时报文,从而可以获得路由器的IP地址;同时目的主机UDP端口号被设置为目的主机不可能使用的端口号,这样目的主机收到该UDP报文会返回一个端口不可达的ICMP报文,从而可以判断UDP是否已经到达目的主机。 在我的主机上运行traceroute,输出全是*,也就是说没有受到任何ICMP超时报文,用tcp

2011-04-23 23:25:00 2921

原创 TCP/IP之四:ping程序

ping程序利用ICMP协议来判断主机是否可以到达,发送回显请求(类型=8,代码=0),接受回显应答(类型=0,代码=0)。 和所有的其他ICMP查询报文一样,ping程序的ICMP报文必须有标识符字段和序号字段,其格式如下所示: 为了说明ping程序,最好的方式是使用它,先给出我的主机信息,我的主机路由表如下: 1: 内核 IP 路由表 2: Destination Gateway Genmask Flag

2011-04-20 22:22:00 3671

原创 TCP/IP之三:ICMP

ICMP,即控制报文协议,是TCP,UDP,IP等主要协议的辅助协议,主要用于传递各种网络信息。 ICMP包格式: 8位类型 8位代码 16位校验和 数据部分(不同类型的ICMP有不同的内容) (1)类型字段和代码字段共同决定ICMP的类型;校验和覆盖整个ICMP报文,因为IP只有对头部的校验,ICMP需要自己去校验收到的ICMP报文是否有错; (2)类型字段和代码字段对应的ICMP描述如下图所示: (3)注

2011-04-19 23:10:00 2879

原创 yum命令常用参数详解

转自:http://3laoxiao.blog.163.com/blog/static/73588589201092103913867/  yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系。在建立好yum服务器后,yum客户端可以通过http、ftp方式获得软件包,并使用方便的命令直接管理、更新所有的rpm包,甚至包括kernel的更新。现在把常用的yum命令参数整理如下: 一、列举包文件 列出资源库中所有可以安装或更新的rpm包 # yum lis

2011-04-17 21:08:00 3752

原创 TCP/IP之二:ARP与RARP

ARP协议实现IP地址到物理地址的映射;RARP实现物理地址到IP地址的映射。 ARP/RARP的帧格式如下(图中的数字表示各个域所占的字节数): 以太网目的地址6 以太网源地址6 协议类型2 硬件类型2 协议类型2 硬件地址长度1 协议地址长度1 op2 发送端以太网地址6 发送端IP地址4 目的以太网地址6 目的IP地址4

2011-04-14 23:53:00 5548

原创 Linux下抓包工具tcpdump应用详解

TCPDUMP简介(文章出处:http://www.examda.com/linux/fudao/20100316/092501345.html) 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。

2011-04-14 22:53:00 3037

原创 使用Zoundry Raven撰写博客

站点类型:custom metaweblogAPI URL: http://blog.csdn.net/你的用户名/services/metablogapi.aspx

2011-04-14 10:36:00 1102

原创 TCP/IP之一:网络结构与网络接口层

TCP/IP的层次结构如图1所示,是一个四层结构,各层的核心协议都已经包含在途中, 需要指出的是: (1)ICMP虽然是放在网络层,但是ICMP也是需要先封装成IP数据包再交给网络接口层的,同理,ARP和RARP也得先由网络接口层封装成帧,再在物理链路上传输。 (2)各层网络协议之间只要接口固定,彼此之间就可以互相通信,各层协议内部实现是自由的,最能体验这一点的是网络层与网络接口层,虽然一般网络层都是运行IP等协议,但是网络接口层确往往有多种选择,比如以太网、令牌总线、令牌环网、FDDI等。 (3)

2011-04-13 23:20:00 7162

原创 已读或计划读书籍列表

<br /><br />网络:<br />      1  TCP/IP详解 卷1<br />      2  TCP/IP详解 卷2<br />      3  TCP/IP详解 卷3<br />      4  Unix网络编程 套接口API<br />      5  Unix网络编程 进程间通信<br /> <br />操作系统:<br />      1  现代操作系统<br />      2  操作系统 精髓与设计原理<br />      3  Unix操作系统设计<br />      4

2011-04-12 22:19:00 974

原创 判断字节序小程序

<br />#include <stdio.h>int main(){ unsigned short a = 0x1; unsigned char *p = (char *)&a; if(*p) { printf("your system is little-endian/n"); } else printf("your system is big-endian/n"); return 0;} 

2011-04-09 18:23:00 743

原创 makefile那些事儿

<br /><br /><br /> <br /><br />Make工具的基本用法是很简单的,但是其强大功能的一面却为很多人所不知。本文不是以讲解make入门为目的,而是指出编译链接大型项目所不能不知道的make知识。<br /><br />(1)make有强大的推理能力。只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c, 就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出

2011-03-31 16:20:00 998 1

转载 linux下strace命令详解(转)

<br />1 功能说明<br /> <br />strace 命令是一种强大的工具, 能够显示任何由用户空间程式发出的系统调用. strace 显示这些调用的参数并返回符号形式的值. strace 从内核接收信息, 而且无需以任何特别的方式来构建内核. strace 的每一行输出包括系统调用名称, 然后是参数和返回值.<br />下面记录几个常用option:<br />-f -F选项告诉strace同时跟踪fork和vfork出来的进程<br />-o xxx.txt 输出到某个文档. <br />-e

2011-03-15 15:23:00 1194

原创 gcc常用参数和环境变量小结

<br />转自:http://keyknight.blog.163.com/blog/static/366378402007111811412356/<br /> <br />本文结合:http://blog.csdn.net/zblue78/archive/2007/02/01/1499717.aspx 看,完美了<br /> <br />Command-Line Options<br />命令行参数<br /><br />-c<br />Preprocess, compile, and assembl

2011-03-10 15:17:00 703

原创 c99中的restrict(转)

转自:http://hi.baidu.com/oney131/blog/item/10f71f1f0b5033174034176e.html 看了下网上的相关贴子,但还是问题解决的不够。下面是相关一个文章,我将在后面再加相关说明: 那么restrict的意义是什么呢? 概括的说,关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的

2011-03-08 07:12:00 665

原创 MySQL数据库之使用与开发(一)------mysql入门

MySQL数据库采用服务器--客户端模式,服务器端负责对数据库进行管理与操作,客户端通过与服务器端通信来执行各种操作。MySQL数据库的客户端有很多,比如mysql, MySQL workbench等。各种客户端小有差别,但都基本支持标准的SQL语言。 注:本系列文章采用mysql作为客户端。 文中多处参考MySQL cookbook第二版 1 创建用户账户与密码 在对MySQL数据库进行访问之前,首先需要连接到MySQL数据库服务器,而连接过程是需要提供用户名和密码的,所以在

2011-02-15 15:45:00 852

原创 linux下目录的权限解说

在linux系统中,权限概念的重要性相信不需要我来讲,所谓的权限无非是r,w,x,文件的各种权限都很好理解,较难理解的是目录的权限,下面我主要对目录的权限说一下自己的看法: 1. 目录的读权限 看过linux内核方面书的朋友应该都知道目录于内核而言也是文件,目录是特殊的文件,它的内容包括:这个目录下的文件名列表以及各个文件对应的文件系统中的索引节点信息。既然目录也是文件,那么目录的读权限就好理解了,如果你对一个目录没有读权限,那么也就是说你不能读取它的内容,请注意:它的内容是这个目录下的文

2011-01-24 15:47:00 726 1

原创 I帧 P帧 B帧的区别

<br /><br />B帧参考模式<br /> <br />1)同时参考前后的帧,记录 和(前面帧的 pixel 值 + 后面帧的 pixel 值)/2 的差值,也就是和 「前后画面的平均」的差值。所以记录的差值个数和 P 帧一样,只有一个,没有增加。<br />2)因为B 帧位于前后画面的中间,以「前后画面的平均」,也就是「前后画面的中间值」来作为预测数值(预测 B 帧的 pixel 数值为多少?如果有误差,再记录差值),这样这个预测数值会比单独使用前一个画面来预测,更接近目前真正的 B 帧的数值,可想

2010-12-09 11:30:00 3271

原创 开机服务自启动配置

设置Linux系统启动自动启动服务的两种方法:方法一:/etc/rc.d/rc.local 中增加需要启动的程序或服务。  例如:apache安装在 /usr/local/www目录下,若要设置自动启动服务可用以下命令:  vi /etc/rc.d/rc.local 加入:  /usr/local/www/bin/apachectl start方法二:将程序注册为系统服务  在/etc/rc.d/init.d目录下编辑启动脚本。  拷贝自动启动的服务程序到 /etc/rc.d/init.d 目录下:  例如

2010-12-01 11:44:00 632

转载 netstat命令详解

<br />Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。 <br />如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错 情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。<br />Netstat 详细参数列表<br />>netstat /?<br />显示协议统计

2010-12-01 10:48:00 912

转载 常见字符编码

<br />字符编码实现了字符集和编码值之间的映射关系,使得计算机可以识别并处理各种各样的字符。<br />由于历史原因,出现了多种字符编码标准,这些标准所使用的字符集和编码映射关系是大不相同的,有的标准效率高,但覆盖的字符(支持的抽象字符)太少,而有的支持大量字符,但由于编码格式的局限,效率较低。<br />各编码标准介绍:<br />ASCII<br />最早出现的编码标准是ASCII(谁叫计算机是发源自美国呢),由于拉丁字母很少,再加上一些常用的象形字符,凑起来也没超过128个,所以只使用了1个字节来

2010-11-24 10:18:00 927

转载 用C++设计一个不能被继承的类(转)

<br /><br />题目:用C++设计一个不能被继承的类。<br />分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。<br />在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。<br />首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类

2010-10-30 11:39:00 861

原创 链表环检测

<br />#include <stdio.h>#include <stdlib.h>#define N 45typedef struct Node{ int key; struct Node * next;}Node;// 检测链表是否存在环// 快慢指针方法实现int loopCheck(Node * head){ Node *slow = head, *fast = head; while(fast != NULL && fa

2010-10-08 19:40:00 1103

原创 中缀表达式 转换成 前缀表达式(二叉树实现)

<br />#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 100typedef struct Node{ char key; struct Node * left; struct Node * right;}Node;//search for the operator with the highest grade in aint search(char a[],

2010-10-03 16:57:00 6630

原创 位运算实现加法

<br />定理:设a,b为两个二进制数,则a+b = a^b + (a&b)<<1。<br /><br />证明:a^b是不考虑进位时加法结果。当二进制位同时为1时,才有进位,因此 (a&b)<<1是进位产生的值,称为进位补偿。将两者相加便是完整加法结果。

2010-10-02 08:10:00 1878 3

转载 profiler

<br />改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的。在本文中我们将学习如何使用 gprof 为 Linux ?? 平台上的用户空间和系统调用精确分析性能瓶颈。<br />    简介<br />    各种软件对于性能的需求可能会有很大的区别,但是很多应用程序都有非常严格的性能需求,这一点并不奇怪。电影播放器就是一个很好的例子:如果一个电影播放器只能以所需要速度的 75% 来播放电影,那么它几乎就没什么用处了。<br /> 

2010-10-01 21:40:00 641

转载 常量折叠

<br /> <br />#include <iostream>using namespace std;void main(){ const int a = 5; int *p = (int *)&a; //让p指向与a相同的内存空间 cout << &a << ", " << p << endl; *p = 10; // 照里说a的值也应该改变,实际却没有,这就是常量折叠. cout << a << ", " << *p << endl;

2010-09-27 20:26:00 606

渐进符号(算法分析)

算法分析中用到的关于渐进符号的PPT,比较全面,分享下

2009-11-28

DIB类(基于MFC的设备无关位图类)

这是我个人写的CDib类,已经实现读取,存储,显示BMP位图,方便易用,适合图像处理初学者(基于MFC).

2009-11-27

MFC WINDOWS 程序设计书上例子源代码

这是MFC WINDOWS 程序设计第二版书上例子源代码,各位想要的可以下载看看

2009-05-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除