2016腾讯校招研发笔试(三)

1.我们常说的mvc框架是指的什么的?

2016腾讯校招研发笔试(三)_第1张图片

2.对某二叉树进行先序遍历的结果是ABDEFC,中序遍历的结果是DBFEAC,则后序遍历的结果是()

2016腾讯校招研发笔试(三)_第2张图片


3.

有一个如下的结构体:
1
2
3
4
5
6
struct A{
  long a1;
  short a2;
  int a3;
  int *a4;
};
请问在64位编译器下用sizeof(struct A)计算出的大小是多少?

2016腾讯校招研发笔试(三)_第3张图片

64位下int为4字节,long和指针为8字节,参看:http://blog.csdn.net/zhangjikuan/article/details/46661047

4.以下不属于tcp连接断开的状态是?

2016腾讯校招研发笔试(三)_第4张图片

TCP连接断开的状态包括:FIN-WAIT-1(服务器端主动关闭TCP,等待客户端发送ACK时服务器端的状态)、

                                            CLOSE-WAIT、

                                           FIN-WAIT-2(服务器端收到ACK后的状态)、

                                           LASR-ACK、

                                          TIME-WAIT(只要一方处于此状态,连接不能再用)、

                                           CLOSE

5.下面关于ICMP协议的描述中,正确的是()

2016腾讯校招研发笔试(三)_第5张图片

6.有如下一个类似跳表的数据结构:每层都是已经排好序的链表,level1层的链表有所有元素,levelN层的链表只有levelN-1的1半的元素,levelN层的结点指向levelN-1层中相同的结点。请问查找一个元素的时间复杂度是:

2016腾讯校招研发笔试(三)_第6张图片

2016腾讯校招研发笔试(三)_第7张图片
基本的二分查找时间复杂度O(logn)
7. 在一个单CPU的处理机中,有P1,P3,P5三个作业,有两个IO设备IO1,IO2,并且能够实现抢先式多任务并行工作的多道程序环境中,投入运行优先级由高到低P5,P1,P3三个作业,他们使用设备的先后顺序和占用设备的时间分别为:P1:IO2(10ms) CPU(10ms) IO1(30ms)CPU(10ms)P3:IO1(30ms) CPU(10ms) IO2(30ms)CPU(10ms)P5:CPU(20ms) IO1(30ms) CPU(10ms) IO2(15ms)忽略其他的时间损耗,3个作业投入到全部完成的情况下。请问下列哪些选项为IO2的设备利用率?
2016腾讯校招研发笔试(三)_第8张图片

因为是抢占式的,所以优先级最高的P5会优先执行,不用等待任何资源。
然后考虑P1,同一时刻CPU或者IO资源只能一个进程访问。
2016腾讯校招研发笔试(三)_第9张图片

8.C语言里i=5,j=7,请问i|j等于多少?

2016腾讯校招研发笔试(三)_第10张图片

9.

请选择下面代码的输出结果
1
2
3
4
5
6
7
8
9
int main( int argc, char *argv[])
{
     int a=10;
     int b=4;
     int c=a/b;
     int d=c*a*b++;
     std:cout<
     return 0;
}

2016腾讯校招研发笔试(三)_第11张图片
c*a*b++:相当于c*a*b;b+=1;两条语句
b++   是先把   b   作为表达式的结果,然后再去做    b   =   b   +1
c*a*(b++):这样的话迷惑性更大,但是这样跟没有括号是一样的,还是先b计算,然后再b+=1;
b++和++b在没有用在计算时候其实是一样的,只有用在计算的表达式里时候才会有先计算再加1还是先加1再计算的问题
10.
请问下列代码的输出结果有可能是哪些()?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include
#include
union X
{
     int32_t a;
     struct 
     {
         int16_t b;
         int16_t c;
     };
};
int main(){
     X x;
     x.a=0x20150810;
     printf ( "%x,%x\n" ,x.b,x.c);
     return 0;
}

2016腾讯校招研发笔试(三)_第12张图片


要考虑大小端两种情况,

union:内部数据结构占用相同内存,即int_32t和struct占用同一块内存区域,所以向a中赋值相当于是向bc中

大端:高字节放低字节:c为高字节放0810,b低字节放2015

小端:高字节放高字节:c为高字节,放2015,b低字节放0810

11.

如下代码,result变量的输出结果是多少?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include
using namespace std;
int i=1;
class MyCls{
public :
     MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++){
         m_nThd=i;
     }
     void echo(){
         cout<< "result:" <
     }
private :
     int m_nFir;
     int m_nSec;
     int m_nThd;
     int &m_nFor;
};
int main()
{
     MyCls oCls;
     oCls.echo();
     return 0;
}

2016腾讯校招研发笔试(三)_第13张图片
注意:初始化列表里的变量是根据变量声明顺序赋值的,先赋值初始化列表后再运行构造函数中的程序
fir=1++;相当于fir=1;1++;这两条语句,所以fir=1
sec=2++=2,
thd=3++=3;
for=thd;for是thd的引用;thd=i=4;所以for=4
所以:1+2+4+4=11
12. 在动态分区分配方案中,某一作业完成后,系统收回其主存空间,并与相邻空闲区合并,为此需要修改空闲区表,造成空闲区数减1的情况是()
2016腾讯校招研发笔试(三)_第14张图片
作业归还分区,要调整空闲区表,把空闲区表调整成空闲区长度递减的次序排列登记。可变分区分配方式下,当收回主存时,应检查是否有与归还区相邻的空闲区,若有,则应合并成一个空闲区。
相邻可能有上邻空闲区、下邻空闲区、既上邻又下邻空闲区、既无上邻又无下邻空闲区四种情况。
  1. 有上邻空闲区,但无下邻空闲区.只修改上邻空闲区长度(为收回的空闲区长度与原上邻区长度之和),空闲区数不变
  2. 无下邻空闲区,但有下邻空闲区.改记录这个下邻空闲区记录的地址为收回空闲区的地址,长度为下邻空闲区的长度和收回空闲区的长度,空闲区数不变
  3. 有上邻空闲区,也有下邻空闲区.改记录上邻区记录的长度(为上邻区长度、下邻区长度和收回区长度之和),再把下邻区记录的标志位改为空,即空闲区数-1
  4. 无上邻空闲区,也无下邻空闲区.那么找一个标志位为空的记录,记下该回收区的起始地址和长度,且改写相应的标志位为未分配,表明该登记栏中指示了一个空闲区。 空闲区数+1

13.对于移动平均算法,是计算某变量之前n个数值的算术平均,正确的说法是
2016腾讯校招研发笔试(三)_第15张图片

任何一个算法不同情况下可能有多种解法,一般我们以时间复杂度为评判的话,就会用牺牲空间换时间。
这个算法最明显的有两种解法,
1.每次进来一个变量n,就遍历前面n个数,然后求和,再取平均,这样的话时间复杂度为O(n),空间为O(1);
2.以空间换时间:从前往后没计算一次保留一次求和值到一个辅助空间,这样计算下一个的时候直接取得前一个和值加上当前数,再取平均得到当前平均,这样的话时间复杂度为O(1),空间为O(n) 
14.某一速率为100M的交换机有20个端口,其一个端口上连着一台笔记本电脑,此电脑从迅雷上下载一部1G的电影需要的时间可能是多久?

2016腾讯校招研发笔试(三)_第16张图片
交换机为独占带宽,即 每个端口数据通过率为为 最大100Mb/s。注意单位是Mb。因此 最短时间(只有一台机器连接时候)为:
1GB/(100Mb/s)=1024MB/(12.5MB/s)=81.92s。
15. 在linux编程中,以下哪个TCP的套接字选项与nagle算法的开启和关闭有关?

2016腾讯校招研发笔试(三)_第17张图片
当有一个TCP数据段不足MSS,比如要发送700Byte数据,MSS为1460Byte的情况。nagle算法会延迟这个数据段的发送,等待,直到有足够的数据填充成一个完整数据段。也许有人会问,这有什么影响呢?没有太大的影响,总体上来说,这种措施能节省不必要的资源消耗。但是要发送的总体数据很小时,这种措施就是拖后腿了。比如,用户请求一个网页,大约十几KB的数据,TCP先发送了八九个数据包,剩下几百字节一直不发送,要等到另一个RTT才发送,这时候前面发送数据的ACK已经返回了。这样的用户体验是很不好的。 所以,现在很多服务器都选择主动关闭nagle算法,因为带宽够大,资源消耗不是问题,速度反而是个大问题。
从上述描述中,禁用 nagle,实质就是不在延迟  TCP_NODELAY

16.某二叉树的先根遍历序列和后根遍历序列正好相反,则该二叉树具有的特征是()

2016腾讯校招研发笔试(三)_第18张图片
原理如下:
先序遍历顺序是:M-L-R;
后序遍历顺序是:L-R-M;
可以看到,只有中间的结点(M)顺序变化了,左右结点相对位置是不变的。那可以推断出,要满足题意的话“二叉树的先序序列与后序序列正好相反”,说明整个二叉树左子树或者右子树有一个没有(遍历就成了,先:M-L ;后:L-M 或者  先:M-R ;后:R-M )也就是必然是一条链。
所以只有A对了。
标准答案应是: 任一结点都无左孩子或任一结点都无右孩子:相当于竖直的
17.已知关系R(F,G,H,I,J)及其上的函数相关性集合,F=(F->G,J->F,HJ->I),该关系的候选关键字是:

2016腾讯校招研发笔试(三)_第19张图片
如果一个  超关键字  去掉其中任何一个字段后不再能唯一地确定记录,则称它为“候选关键字”(Candidate Key)。候选关键字既能唯一地确定记录,它包含的字段又是最精炼的。也就是说候选关键字是最简单的超关键字。
排除掉含有g f i的
18.
win32系统里,下面几个sizeof的运行结果是()
1
2
3
4
5
6
int intValue=1024;
char str[]= "Tencent" ;
const char * ch=str;
sizeof (intValue)=__a___;
sizeof (str)=__b____;
sizeof (ch)=____c___;
2016腾讯校招研发笔试(三)_第20张图片
19. 若系统中有五台打印机,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则在不发生死锁的情况下至多允许______个进程参与竞争
2016腾讯校招研发笔试(三)_第21张图片
虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个 必要条件。
1  )互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2  )请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3  )不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4  )环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
因此为了避免发生死锁,则不能生成此资源的环形链,则4个进程是极限了。
哲学家就餐问题:当5个进程的时候如果都同时申请到了1台,就发生死锁了。如果是4个进程,那必然有一个能申请到2台。
20.在正方体上任取三个顶点连成三角形,则所得的三角形是直角非等腰三角形的概率为?
2016腾讯校招研发笔试(三)_第22张图片
共有8个顶点,总有C(8,3);
任取一顶点,过该顶点取其中一个面的对角线,仅有一条过该顶点并且垂直于该面的边,每个顶点共有3个面,故共有3个三角形,总数为,8*3
如下图A点
2016腾讯校招研发笔试(三)_第23张图片
21. 以下哪个是由权值集合(16,8,4,2)构造的哈夫曼树(最优二叉树):

正确答案: A   你的答案: B (错误)

2016腾讯校招研发笔试(三)_第24张图片
2016腾讯校招研发笔试(三)_第25张图片
2016腾讯校招研发笔试(三)_第26张图片
2016腾讯校招研发笔试(三)_第27张图片
最优二叉树,是指WPL(带权路径长度之和)最小
WPL(A):16*1+8*2+2*3+3*4=50
WPL(B):2*1+4*2+8*3+16*3=82
WPL(C):16*1+4*2+8*3+2*3=54
WPL(D):16*2+8*2+4*2+2*2=60
所以选A
22.关于红黑树和AVL树,以下哪种说法不正确?
2016腾讯校招研发笔试(三)_第28张图片
关于红黑树和AVL树,来自网络:

1 好处 及 用途

        红黑树 并不追求“完全平衡 ”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。

红黑树能够以 O(log2  n)  的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。

 

        当然,红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。

 

在实际的系统中,例如,需要使用动态规则的防火墙系统,使用红黑树而不是散列表被实践证明具有更好的伸缩性。

典型的用途是实现关联数组

 

 

 AVL树是最先发明的自平衡二叉查 找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An algorithm for the organization of information" 中发表了它。

 

引入二叉树的目的是为了提高二叉树的搜索的效率,减少树的平均搜索长度.为此,就必须每向二叉树插入一个结点时调整树的结构,使得二叉树搜索保持平衡,从而可能降低树的高度,减少的平均树的搜索长度. 

AVL树的定义: 
一棵AVL树满足以下的条件: 
1>它的左子树和右子树都是AVL树 
2>左子树和右子树的高度差不能超过1 
从条件1可能看出是个递归定义,如GNU一样. 

性质: 
1>一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1) 
2>一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)). 
3>一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n)).
 

从1这点来看 红黑树是牺牲了严格的高度平衡的优越条件 为 代价红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高.

23. 客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成功的,那么当第4个RTT时间内发送的所有TCP段都得到了ACK时,拥塞窗口大小是:
2016腾讯校招研发笔试(三)_第29张图片
16KB超时,阈值变为8KB,客户端从1KB开始穿(执行快开始算法)
1RTT 结束,1KB->2KB
2RTT 结束,2KB->4KB
3RTT 结束,4KB->8KB(到达阈值,执行拥塞避免算法)
4RTT 结束,8KB->9KB
结果C

拥塞避免和慢启动
当拥塞发生时(超时或收到重复确认),慢启动门限ssthresh被设置为当前拥塞窗口cwnd大小(题目为16)的一半,即8。同时cwnd重置为1。新的数据被接收,则cwnd增加,规则为ssthresh之前, 慢启动,即cwnd指数增长;到达ssthresh之后, 拥塞避免,即cwnd加1
2016腾讯校招研发笔试(三)_第30张图片 

详参: http://www.cnblogs.com/ggjucheng/archive/2012/02/03/2337420.html
24. 关于epoll和select的区别,哪些说法是正确的?
2016腾讯校招研发笔试(三)_第31张图片
select和epoll这两个机 制都是多路I/O机制的解 决方案,select为POSIX 标准中的,而epoll为 Linux所特有的。
epoll的最大好处是不会 随着FD的数目增长而降低 效率,在selec中采用轮 询处理,其中的数据结构 类似一个数组的数据结构 ,而epoll是维护一个队 列,直接看队列是不是空 就可以了。 nginx就是使用epoll来实 现I/O复用支持高并发, 目前在高并 发的场景下 ,nginx越来越收到欢迎
select的一 个缺点在于 单个进程能够监视的文件 描述符的数量存在最大限 epoll:(1)IO的效率不会 随着监视fd的数量的增长 而下降。epoll不同于 select和poll轮询的方式 ,而是通过每个fd定义的 回调函数来实现的。只有 就绪的fd才会执行回调函 数;(2)支持电平触发和边 沿触发(只告诉进程哪些 文件描述符刚刚变为就绪 状态,它只说一遍,如果 我们没有采取行动,那么 它将不会再次告知,这种 方式称为边缘触发)两种 方式,理论上边缘触发的 性能要更高一些,但是代 码实现相当复杂。(3)有 着良好的就绪事件通知机 select:(1)单个进程可监 视的fd数量受到了限制, 在32位机器上,他所能管 理的fd数量最大为1024; (2)对socket进行扫描时 是线性扫描,当socket文 件描述符数量变多时,大 量的时间是被白白浪费掉 的。
25. Internet的网络层含有的协议是?
2016腾讯校招研发笔试(三)_第32张图片
ip不用说了肯定是网络层协议,a对
icmp也不用说,icmp本质可以理解为带差错报告的ip协议,也是网络层,b对
arp是将ip地址解析为mac,rarp是arp的reverse,将mac解析为ip
所以虽然看上去他们工作都是在链路层,但是它们是网络层协议,cd也对
26. 以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:
2016腾讯校招研发笔试(三)_第33张图片
c选项,float有精度问题,尾数不精确,比较会出问题
d选项,字符串比较,一般用strcmp(str1,str2),直接用==比较两个字符串,应该比较的是字符串的首地址是否相等,那就不是真正的字符串比较了
D估计大家都知道字符串用==比较没有意义
说说C吧,也是基本的,浮点型(double,flout)由于是用于科学计算的,尾数一定会不精确的,所以不能用==比较,Java可以用Math.abs(fVar-0.02) < 0.0000001表示等于,或者直接用Double.compare(d1, d2)比较,C也一样。
27.TCP链接中主动断开链接netstat观察可能出现的状态流转是:
2016腾讯校招研发笔试(三)_第34张图片
中断连接端可以是client,也可以是server。
下图为client发起主动断开连接时,client和server的状态图。
2016腾讯校招研发笔试(三)_第35张图片 2016腾讯校招研发笔试(三)_第36张图片
详参: http://blog.csdn.net/whuslei/article/details/6667471
28. 以下涉及到内存管理的代码段中,有错误的是:
2016腾讯校招研发笔试(三)_第37张图片
new 和delete 配套使用  free和malloc配套使用 AB错误
D是因为申请的是一个元素,后面跟的12是初始化值,而不是数组,所以错误。
new和delete与free和malloc的差别是前面2个会分别调用构造函数和析构函数
29.下面哪些特性可能导致代码体积膨胀:
2016腾讯校招研发笔试(三)_第38张图片
A宏定义会单纯的替换,也就是如果宏定义替换的内容会成倍复制,所以会导致代码膨胀
B模板的调用,会根据调用的参数,生成模板对应的实际调用的函数体,如果调用的参数不同,会生成不同的代码,所以会导致代码膨胀
C内联函数会拷贝至调用的位置,如果调用多次回导致代码膨胀
30.
小明设计了如下的学籍管理系统:
已知关系:学籍(学号,学生姓名) PK=学号
成绩(科目号,成绩,学号) PK=科目代码,FK=学号
已有表记录如下,请给出能够插入的成绩记录
2016腾讯校招研发笔试(三)_第39张图片
成绩表中主键是“ PK=科目代码”,所以   科目代码要唯一,所以可排除AC;在数据库完整性里有说:外键必须可以找到或者为空,所以   B是可以的,而D为空,所以也满足。故选BD



你可能感兴趣的:(Interview)