2011年10月9日
摘要: 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1: 可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。s 遍历文件b,采取和a相同的方式将url分别存储到1000各小文件(记为)。这样处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对 阅读全文
posted @ 2011-10-09 09:56 Glroy 阅读(1947) 评论(1) 推荐(0) 编辑
  2011年9月25日
摘要: 一、Linux服务器上11种网络连接状态: 图:TCP的状态机通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接.. 阅读全文
posted @ 2011-09-25 19:32 Glroy 阅读(12738) 评论(6) 推荐(2) 编辑
  2011年8月25日
摘要: Select在Socket编程中还是比较重要的,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。 Select的函数格式(Unix系统下的伯克利socket编程,和windows下的略有区别,体现两个方面:一是select函数的第一个参数,在windows下可以忽略,但在linux下必须设为最大文件描述符加1;二是结构fd_set在两个系统里定义不一样):int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); /*参数列表int max... 阅读全文
posted @ 2011-08-25 20:33 Glroy 阅读(80706) 评论(9) 推荐(9) 编辑
  2011年8月18日
摘要: assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#include <stdio.h>#include <assert.h>#include <stdlib.h>int main( v 阅读全文
posted @ 2011-08-18 20:29 Glroy 阅读(441767) 评论(19) 推荐(44) 编辑
  2011年6月10日
摘要: // Base 64 encoder / decoderAnsiString Base64Encoder(AnsiString slToEnc) { //The Base64 Table const char Base64Table[64]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; char * buftoenc = slToEnc.c_str(); int bufsize = slToEnc.Length() + 1; char * encbuf = new char[slTo 阅读全文
posted @ 2011-06-10 09:28 Glroy 阅读(571) 评论(0) 推荐(0) 编辑
  2011年5月16日
摘要: 可变参数的英文表示为:variable argument。它在函数的定义时,用三个点号“.”表示,用逗号与其它参数分隔。可变参数的特点:不像固定参数那样一一对应,也不像固定参数有固定的参数类型和参数名称;可变参数中个数不定可是传入的是一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应。 由此可见,可变参数的形式非常自由而富有弹性。因些,它给那些天才程序员有更大地想象和发挥空间。然而,更多地自由,同样也加大操作上的难度。以下就对可变参数的几个方面作一 定的介绍。1)可变参数的存储形式。 大家都知道,一般函数的形参属于局部变量。而局. 阅读全文
posted @ 2011-05-16 22:12 Glroy 阅读(913) 评论(0) 推荐(0) 编辑
  2011年5月10日
摘要: 二叉树是很有用的一种数据结构,遍历则是其基本操作,这里列出实是保证完整性。二叉树后序遍历的非递归遍历中当当前节点存在右子树的时候需要先遍历右子树,因此要对二叉树的节点定义中添加_tag域,标志当前节点右子树是否已经遍历,备用的结构定义和函数://二叉树节点定义class TreeNodeElement{ public: TreeNodeElement(); TreeNodeElement(int value); TreeNodeElement(int value,TreeNodeElement* l,TreeNodeElement* r); ~TreeNodeElement(); priva. 阅读全文
posted @ 2011-05-10 22:03 Glroy 阅读(693) 评论(0) 推荐(0) 编辑
  2011年4月30日
摘要: 将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。语法使用 CAST:1CAST( expressionASdata_type )使用 CONVERT:1CONVERT(data_type[(length)], expression [, style])参数expression 是任何有效的 Microsoft® SQL Server™ 表达式。有关更多信息,请参见表达式。data_type 目标系统所提供的数据类型,包括bigint和sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。leng 阅读全文
posted @ 2011-04-30 17:26 Glroy 阅读(330) 评论(0) 推荐(0) 编辑
  2011年4月25日
摘要: 在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #pragma para 其中para为参数,下面来看一些常用的参数。(1)message 参数 message参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#pragma message("消 阅读全文
posted @ 2011-04-25 16:23 Glroy 阅读(728) 评论(0) 推荐(0) 编辑