摘要:
在IP协议的报头中,除了TTL字段,还有几个字段是非常重要的,这就是我们今天要讨论的标识符、标志位以及偏移量,这3个字段在IP数据报的分片与重组中,是非常重要的字段。我们都知道,不同类型的网络,其MTU(最大传输单元)各不相同,如以太网中,最大的传输帧为1518字节,FDDI为4500字节,令牌环帧在4500字节到17800字节之间,而IP协议的一个重要功能,就是能够对传输的数据大于硬件接口的MTU时,对其进行分段传输。即大于MTU的数据报将被分为2个或多个的合适的大小被传输。一个分片在到达接收主机的路径中,还可能被继续分片,因此,分片的IP数据报可能会以不同的路径传输到接收主机,接收主机通过 阅读全文
摘要:
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。1)遍历文件a,对每个url求取,然后... 阅读全文
摘要:
1.为什么要定义虚析构函数?如果有一个带有虚函数功能的类,则它需要一个虚析构函数,原因如下:1)如果一个类有虚函数功能,它经常作为一个基类使用;2)如果它是一个基类,它的派生类经常使用new来分配;3)如果一个派生类对象使用new来分配,并且通过一个指向它的基类的指针来控制,那么它经常通过一个指向它的基类的指针来删除它(如果基类没有虚析构函数,结果将是不确定的,实际发生时,派生类的析构函数永远不会被调用);基类有虚析构函数的话,最底层的派生类的析构函数最先被调用,然后各个基类的析构函数被调用。2.声明为保护(protected)的析构函数如果在一个派生类中定义了基类以外的成员对象,且基类析构函 阅读全文
摘要:
1.字符串按字节反转,即字符串abcdef,反转为fedcba。#include <iostream>using namespace std;char *reverse(char *str){ if(NULL==str) return NULL; char *begin=str; char *end=str; while(*end!='\0')//让end指向最后一个字符 end++; end--; while(begin<end) { char tmp=*begin; *begin=*e... 阅读全文
摘要:
1. 多态在面向对象语言中,接口的多种不同实现方式即为多态。多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数。多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的。多态可以让父类的指针有“多种形态”,这是一种泛型技术。(所谓泛型技术,就是试图使用不变的代码来实现可变的算法)。2. 虚函数2.1虚函数定义在基类的类定义中,定义虚函数的一般形式:Virtual 函数返回值类型 虚函数名(形参表){函数体}虚函数必须是类的非静态成员函数(且非构造函数),其访问权限是public。2.2 虚函数的作用虚函数的作用是实现动态联编,也就是在程序的 阅读全文
摘要:
1. new与operator newC++中有很多语法让人难以理解,如:new operator(操作符,下同)和operator new之间差异,确切的说,应该是new与operator new 的区别。1.1 new operator如下代码:string *ps=new string("memory management");这里所使用的new就是所谓new operator,是由C++语言内建的,就像sizeof那样,不能改变意义,总是做相同的事情。这个动作的含义分为两方面:第一,它分配足够的内存,用来放置某类型的对象。对于上例而言,它分配足够放置一个string 阅读全文
摘要:
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.2 void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间,返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制 阅读全文
摘要:
一 普通的static关键字1. 静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:1.1 该变量在全局数据区分配内存; (1)未经初始化的静态全局变量会被程序自动初始化为0( 在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0); (2)静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;(3)静态全局变量不能被其它文件所用; (4)其它文件中可以定义相同名字的变量,不会发生冲突;1.2 全局变量和全局静态变量的区别:1)全局变量是不... 阅读全文
摘要:
1. 空指针、NULL指针、零指针1.1什么是空指针常量0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择 0L);至于 C++ 系统,由于存在严格的类型转化的要求,void* 不能象 C 中那样自由转换为其它指针类型,所以通常 阅读全文
摘要:
1. 增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。 如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:void *memcpy (void *s1, const void *s2, size_t ... 阅读全文