Fork me on GitHub

2012年3月8日

摘要: 假设数组A有n个元素,数组B有n个元素。看到这种题的时候,我们最直观的就是通过两层for循环来对比每个数组中的数字。因此A数组中的每个元素都会和B数组中的每个元素对比过一次,所以总共要对比的次数是n个n相加(或者是n个m相加),也就是n2(或者为n x m).因此我们想能不能有更快的方法呢?让其中一个数组的查找的时间复杂度不再是O(n)就可以了。也就是我们在这个数组中查找一个数,不是通过遍历的方式。但是不是通过遍历的方式能在一个数组中找到一个自己想要的数吗?看起来必须有什么特殊的方法才行。我们再回过头来看数组是什么组成的:1.下标2.下标所代表的元素我们按位置查找时,数组的速度是O(1)的,因 阅读全文
posted @ 2012-03-08 01:43 pengyingh 阅读(249) 评论(0) 推荐(0)
摘要: consistent hashing算法早在1997年就在论文Consistent hashing and random trees中被提出,目前在cache系统中应用越来越广泛;1基本场景比如你有N个cache服务器(后面简称cache),那么如何将一个对象object映射到N个cache上呢,你很可能会采用类似下面的通用方法计算object的hash值,然后均匀的映射到到N个cache;hash(object)%N一切都运行正常,再考虑如下的两种情况;1一个cache服务器m down掉了(在实际应用中必须要考虑这种情况),这样所有映射到cache m的对象都会失效,怎么办,需要把cach 阅读全文
posted @ 2012-03-08 01:36 pengyingh 阅读(196) 评论(0) 推荐(0)
摘要: TCP是一个可靠的协议。有时人们会说:"TCP能够保证它所发送数据的可靠传输。"这种说法尽管很常见,但却非常不恰当。首先,只要稍微想一下就会知道这不可能是对的。比如,假设在数据传输的过程中将一台主机从网络上断开,TCP这侧不管做出何种努力,都无法获取其余 的数据。网络确实会中断,主机确实会崩溃,用户确实会在TCP连接仍然活跃的时候关机。这些事件或其他类似的事件都使得TCP无法将它从应用程序收到的数 据传送出去。但更重要的是,TCP"确保可靠传输"这种说法会对不够谨慎的网络程序员产生微妙的影响。当然,没人真的会相信TCP有某种魔法总是可以将数据安全 地传送 阅读全文
posted @ 2012-03-08 01:06 pengyingh 阅读(282) 评论(0) 推荐(0)
摘要: TCP是一种流协议(stream protocol)。这就意味着数据是以字节流的形式传递给接收者的,没有固有的"报文"或"报文边界"的概念。从这方面来说,读取TCP数据就像从串行端口读取数据一样--无法预先得知在一次指定的读调用中会返回多少字节(也就是说能知道总共要读多少,但是不知道具体某一次读多少)。为了说明这一点,我们假设在主机A和主机B的应用程序之间有一条TCP连接,主机A上的应用程序向主机B发送一条报文。进一步假设主机A有两条报文要发送,并两次调用send来发送,每条报文调用一次。很自然就会想到从主机A向主机B发送的两条报文是作为两个独立实体,在 阅读全文
posted @ 2012-03-08 00:56 pengyingh 阅读(170) 评论(0) 推荐(0)
摘要: 如前文所说,不同类型的Socket与不同类型的底层协议族以及同一协议族中的不同协议相关联。而我想说的主要就是TCP/IP协议族中的内容。现在TCP /IP协议族中的主要socket类型为"流套接字(stream socket)"和"数据报套接字(datagram socket)"。如果类比到现实中 stream socket类似于打电话沟通,datagram socket类似于写信沟通。当然,其他协议族当然也有相应的stream socket和datagram socket。我学习的时候喜欢把类似的事物的异同点相比较,因此我就先从相同点开始说起。一.Cl 阅读全文
posted @ 2012-03-08 00:41 pengyingh 阅读(289) 评论(0) 推荐(0)
摘要: 这篇随笔是我接着上篇《字节和字符,对信息进行编码》继续写的内容,看过上篇随笔能更好的理解这篇内容。我想从基础的开始说起,一直说到Asp.net,WCF为止。信息是指由程序创建和建设的“字节序列”。在网络环境中,这些字节序列被称作“分组报文”。一组报文包括了网络用来完成工作的控制信息,还包括了数据信息。协议相当于互相通信的程序(进程间通信)间达成的一种约定,它规定了分组报文的交换方式和它们包含的含义。一组协议规定了以下信息:1.结构。 比如报文中哪一部分表明了其目的地址。2.解析。如何对报文中所包含的信息进行解析。设计一组协议,通常是为了在一定约束条件下解决某一特定问题。比如,超文本传输协议ht 阅读全文
posted @ 2012-03-08 00:29 pengyingh 阅读(215) 评论(0) 推荐(0)
摘要: TCP/IP 协议以字节的方式传输用户数据,并没有对其进行检查和修改。这个特点使得应用程序可以非常灵活地对其中传输的信息进行编码。TCP/IP的唯一约束是,信 息必须在块(chunk)中发送和接收,而块的长度必须是8位的倍数。而字节正好是8位的,因此我们可以认为在TCP/IP协议中传输的信息是字节序列。 鉴于此,我们可以进一步把传输的信息看做数字序列或数组,每个数字的取值范围是0~255(8位)应用程序协议:明确定义了信息的发送者应该怎样排列和解释这些位序列(bit sequence),同时还要定义接受者应该怎样解析,这样才使得信息的接受者和发送者能够抽取每个字段的意义。在Java和C#程序中 阅读全文
posted @ 2012-03-08 00:27 pengyingh 阅读(228) 评论(0) 推荐(0)
摘要: 客户端的调用: public class VoteClientTCP { public static int CANDIDATEID = 888;//随便写了一个 public static void Main(String[] args) { int port = 5555; IPEndPoint ipep = new IPEndPoint(GetLocalhostIPv4Addresses().First(), port); Socket sock = new Socket(AddressFamily.InterN... 阅读全文
posted @ 2012-03-08 00:14 pengyingh 阅读(280) 评论(0) 推荐(0)
摘要: 在前面《字节和字符,对信息进行编码》,《Socket=>流,TCP连接,TCP可靠性概述》一系列的随笔中我们已经表述了相应的理论知识,现在可以动手实现一个自己的应用程序协议。将数据转换成在线路上传输的字节序列只完成了一半的工作,在接收端还必须将接受到的字节序列还原成原始信息。如果以流作为传输的形式,那么首先面临的问题就是在接收端如何确定这是一条消息,换句话说就是如何定位一条消息的开始和结束。值得注意的是,这个工作应该是在应用程序协议这一层来完成而不是在TCP这一层来完成,应用程序协议必须指定消息的接受者如何确定何时消息已完整接收。TCP协议中没有消息边界的概念,这会让我们在解析信息的时候 阅读全文
posted @ 2012-03-08 00:09 pengyingh 阅读(240) 评论(0) 推荐(0)
摘要: 之前我们实现了一个自己的应用层的协议,功能非常简单,只包括了最基本的成帧和解析功能。不过有了这些基础,我们再返回来看看现在在互联网上最通行的http协议,就会容易懂得许多。http具体是做什么的,网上面讲解很多,比如:我们知道,Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层(Application layer),它包含所有高层的协议。高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、网络新闻传输协议NNTP和HTTP协议等。 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地. 阅读全文
posted @ 2012-03-08 00:05 pengyingh 阅读(268) 评论(0) 推荐(0)

导航