腾讯后台开发面试题--整理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)流量控制与拥塞控制的区别,节点计算机怎样感知网络拥塞了?
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)流量控制与拥塞控制的区别,节点计算机怎样感知网络拥塞了?
相关文章推荐
- iOS面试题汇总 - 帮助弄清各种概念
- 十道海量数据处理面试题与十个方法大总结
- 关于PHP程序员解决问题的能力
- 程序员的激情其实是一种痛苦
- 链表面试题Java实现【重要】
- LeetCode趣题
- 动态规划
- 贪心法
- [转载]程序员的激情其实是一种痛苦
- 黑马程序员——45,内部类,多态,异常
- 面试题搜集
- 黑马程序员-Java基础:面向对象(上)
- 整理其他前端常见面试知识点
- 《剑指Offer》面试题:在 O(1)时间删除链表结点
- Android面试题目及其答案
- 程序员的自我修养及进步
- 剑指Offer第二章面试题(Java版)
- 常见的二叉树面试题大汇总(涵盖二叉搜索树)
- 剑指offer——面试题:42(二)s的连续正数序列
- 《剑指Offer》面试题:反转链表