(精确到分钟,向下取整)。
A. 各个分钟概率相等 B. 9:57 C. 9:58 D. 9:59
最后一个人在 9:50 到达的概率是 (0.1)^10
最后一个人在 9:51 ..... C(10,1)*(0.1)*(0.2)^9
... 52 .... C(10,1)*(0.1)*(0.3)^9
所以, 感觉不对, 有什么没考虑到
2.
s = 1 时, 概率 p = 1/(2^10)
s = 2 时, p = C(2,1) * 1/(2^10) *(0.5 + 0.25 + .... 1/(2^10))
...
s = k 时, p = C(k,1)*1/(2^10) * (0.5 + 0.25 +... + 1/(2^10))
然后求期望, 应该是 1024
3. 要提高多线程程序的效率,对锁的控制策略非常重要。一种策略是在锁的个数不太多、控制结构不太复杂的情况下,尽可能降低加锁的粒度;另一种策略是在合适的条件下取消用锁。以下情况中不可能取消锁的是
A. 多线程写一个共同的数据结构,且写操作是原子操作
B. 多线程写一个共同的数据结构,且写操作不是原子操作
C. 多线程读一个共同的数据结构,且读操作不是原子操作
D. 一个线程写,多个线程读一个共同的数据结构,写操作是原子操作,读操作不是原子操作
E. 一个线程写、多个线程读一个共同的数据结构,写操作不是原子操作,读操作是原子操作
B, D 都应该加锁
4. 一颗非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树可能是
A. 所有的结点均无右孩子
B. 只有一个叶子结点
C. 是一颗二叉树索树
D. 所有的结点均无左孩子
A, B, D
5. 以下数字在表示为double(8字节的双精度浮点数)时存在舍入误差的有
A. 根号2 B. 10的30次方 C. 0.1 D. 0.5 E. 100
A,B
6.
typedef struct node_s{ int item; struct node_s* next; }node_t; void reverse_list(node_t* head) { node_t* n=head; head=NULL; while(n){ } return head; }
以下哪项能实现该函数的功能
A. node_t* m=head; head=n; head->next=m; n=n->next;
B. node_t* m=n; n=n->next; m->next=head; head=m;
C. node_t* m=n->next; n->next=head; n=m; head=n;
D. head=n->next; head->next=n; n=n->next;
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
完成三次握手,主机A与主机B开始传送数据。
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进 入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.
设想你来做一个搜索引擎的爬虫,需要抓去约一百万家网站的网页内容。
1) 请画出一个抓虫系统的架构图。
2) 重点说明你的爬虫需要如何优化来提升性能。
一个爬虫架构
性能提升建议, 参考 http://blog.csdn.net/historyasamirror/article/details/7061059
1. Fetcher, DNS 比较耗时, 考虑使用异步机制
2. URL 去重, 可以使用 bloom filter
3. 镜像网站, 去重