您的位置:首页 > 职场人生

腾讯后台开发面试题--整理2

2015-09-05 01:17 330 查看
1)tcp三次握手的过程,accept发生在三次握手哪个阶段?

2)Tcp流, udp的数据报,之间有什么区别,为什么TCP要叫做数据流?

3)const的含义及实现机制,比如:const int i,是怎么做到i只可读的?

4) valitale的含义。

5)OFFSETOF(s, m)的宏定义,s是结构类型,m是s的成员,求m在s中的偏移量。

#define offsetof(s,m) (size_t)&(((s *)0)->m)
http://www.cppblog.com/lovedday/archive/2007/09/24/32801.html
比如:

struct AAA

{

int i;

int j;

};

struct AAA *pAAA;

pAAA=new AAA;

这时,pAAA实际上是一个Pointer, 指向某一确定的内存地址,比如0x1234;

而 pAAA->i 整体是一个int型变量,其地址是&(pAAA->i) ,'&'为取址运算符;

那么&(pAAA->i)一定等于0x1234,因为i是结构体AAA的第一个元素。

而&(pAAA->j)一定是0x1234 + 0x4 = 0x1238; 因为sizeof(int) = 4;

这个做法的巧妙之处就是:它把“0”作为上例中的pAAA,那么 &(pAAA->j)就是j的

offset啦,

解析结果是:

(s *)0 ,将 0 强制转换为Pointer to "s"

可以记 pS = (s *)0 ,pS是指向s的指针,它的值是0;

那么pS->m就是m这个元素了,而&(pS->m)就是m的地址,而在本例中就是offset啦

再把结果强制转换为size_t型的就是啦。

6)100亿个数,求最大的1万个数,并说出算法时间复杂度。

7)设计一个洗牌的算法,并说出算法的时间复杂度。


socket在什么情况下可读?

--------------

1)三次握手之后

2)流无边界,数据报有边界.TCP是先进先出的,并且可靠.

3)编译器相关,优化可能让其直接转为一常量代入.

4)volatile吧,告诉编译器此处必须得从地址去取,不得作相关优化。千万注意,这里与硬件cache可不是一回事。

5)#define OFFSETOF(s, m) ({s s1;(void*)(&s1)-(void*)(&s1->m);}) /*gcc*/

6)建一个堆,先把最开始的1万个数放进去。以后每进一个,都把最小的赶出来。

7)产生2*54+rand()%2次交换,所有序列已经很接近平均分布(只要rand()满足均分),并且比较快。否则会是复杂度比较高的算法。我统计 过。


不知道想问什么。

9)拥塞控制是把整体看成一个处理对象的,流量控制是对单个的。感知的手段应该不少,比如在TCP协议里,TCP报文的重传本身就可以作为拥塞的依据。依 据这样的原理,应该可以设计出很多手段。

9)流量控制与拥塞控制的区别,节点计算机怎样感知网络拥塞了?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: