您的位置:首页 > 其它

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

2015-09-11 18:28 281 查看
1.我们常说的mvc框架是指的什么的?



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



3.

有一个如下的结构体:

请问在64位编译器下用sizeof(struct A)计算出的大小是多少?



64位下int为4字节,long和指针为8字节,参看:/article/1980323.html

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



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


CLOSE-WAIT、


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


LASR-ACK、


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


CLOSE

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



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





基本的二分查找时间复杂度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的设备利用率?



因为是抢占式的,所以优先级最高的P5会优先执行,不用等待任何资源。

然后考虑P1,同一时刻CPU或者IO资源只能一个进程访问。



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



9.

请选择下面代码的输出结果



c*a*b++:相当于c*a*b;b+=1;两条语句

b++ 是先把 b 作为表达式的结果,然后再去做 b = b +1

c*a*(b++):这样的话迷惑性更大,但是这样跟没有括号是一样的,还是先b计算,然后再b+=1;

b++和++b在没有用在计算时候其实是一样的,只有用在计算的表达式里时候才会有先计算再加1还是先加1再计算的问题

10.

请问下列代码的输出结果有可能是哪些()?



要考虑大小端两种情况,

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

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

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

11.

如下代码,result变量的输出结果是多少?



注意:初始化列表里的变量是根据变量声明顺序赋值的,先赋值初始化列表后再运行构造函数中的程序

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的情况是()



作业归还分区,要调整空闲区表,把空闲区表调整成空闲区长度递减的次序排列登记。可变分区分配方式下,当收回主存时,应检查是否有与归还区相邻的空闲区,若有,则应合并成一个空闲区。

相邻可能有上邻空闲区、下邻空闲区、既上邻又下邻空闲区、既无上邻又无下邻空闲区四种情况。

有上邻空闲区,但无下邻空闲区.只修改上邻空闲区长度(为收回的空闲区长度与原上邻区长度之和),空闲区数不变
无下邻空闲区,但有下邻空闲区.改记录这个下邻空闲区记录的地址为收回空闲区的地址,长度为下邻空闲区的长度和收回空闲区的长度,空闲区数不变
有上邻空闲区,也有下邻空闲区.改记录上邻区记录的长度(为上邻区长度、下邻区长度和收回区长度之和),再把下邻区记录的标志位改为空,即空闲区数-1
无上邻空闲区,也无下邻空闲区.那么找一个标志位为空的记录,记下该回收区的起始地址和长度,且改写相应的标志位为未分配,表明该登记栏中指示了一个空闲区。 空闲区数+1

13.对于移动平均算法,是计算某变量之前n个数值的算术平均,正确的说法是



任何一个算法不同情况下可能有多种解法,一般我们以时间复杂度为评判的话,就会用牺牲空间换时间。

这个算法最明显的有两种解法,

1.每次进来一个变量n,就遍历前面n个数,然后求和,再取平均,这样的话时间复杂度为O(n),空间为O(1);

2.以空间换时间:从前往后没计算一次保留一次求和值到一个辅助空间,这样计算下一个的时候直接取得前一个和值加上当前数,再取平均得到当前平均,这样的话时间复杂度为O(1),空间为O(n)

14.某一速率为100M的交换机有20个端口,其一个端口上连着一台笔记本电脑,此电脑从迅雷上下载一部1G的电影需要的时间可能是多久?



交换机为独占带宽,即每个端口数据通过率为为最大100Mb/s。注意单位是Mb。因此最短时间(只有一台机器连接时候)为:

1GB/(100Mb/s)=1024MB/(12.5MB/s)=81.92s。
15.在linux编程中,以下哪个TCP的套接字选项与nagle算法的开启和关闭有关?



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

从上述描述中,禁用 nagle,实质就是不在延迟 TCP_NODELAY

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



原理如下:

先序遍历顺序是: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),该关系的候选关键字是:



如果一个 超关键字 去掉其中任何一个字段后不再能唯一地确定记录,则称它为“候选关键字”(Candidate
Key)。候选关键字既能唯一地确定记录,它包含的字段又是最精炼的。也就是说候选关键字是最简单的超关键字。

排除掉含有g f i的

18.

win32系统里,下面几个sizeof的运行结果是()



19.若系统中有五台打印机,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则在不发生死锁的情况下至多允许______个进程参与竞争



虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件

1 )互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2 )请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3 )不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4 )环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

因此为了避免发生死锁,则不能生成此资源的环形链,则4个进程是极限了。
哲学家就餐问题:当5个进程的时候如果都同时申请到了1台,就发生死锁了。如果是4个进程,那必然有一个能申请到2台。

20.在正方体上任取三个顶点连成三角形,则所得的三角形是直角非等腰三角形的概率为?



共有8个顶点,总有C(8,3);

任取一顶点,过该顶点取其中一个面的对角线,仅有一条过该顶点并且垂直于该面的边,每个顶点共有3个面,故共有3个三角形,总数为,8*3

如下图A点



21.以下哪个是由权值集合(16,8,4,2)构造的哈夫曼树(最优二叉树):


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









最优二叉树,是指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.关于红黑树和***L树,以下哪种说法不正确?



关于红黑树和***L树,来自网络:

1 好处 及 用途

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

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



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



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

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





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



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

***L树的定义:

一棵***L树满足以下的条件:

1>它的左子树和右子树都是***L树

2>左子树和右子树的高度差不能超过1

从条件1可能看出是个递归定义,如GNU一样.

性质:

1>一棵n个结点的***L树的其高度保持在0(log2(n)),不会超过3/2log2(n+1)

2>一棵n个结点的***L树的平均搜索长度保持在0(log2(n)).

3>一棵n个结点的***L树删除一个结点做平衡化旋转所需要的时间为0(log2(n)).

从1这点来看 红黑树是牺牲了严格的高度平衡的优越条件 为 代价红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和***L相同,但统计性能比***L树更高.
23.客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成功的,那么当第4个RTT时间内发送的所有TCP段都得到了ACK时,拥塞窗口大小是:



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。




详参:http://www.cnblogs.com/ggjucheng/archive/2012/02/03/2337420.html
24.关于epoll和select的区别,哪些说法是正确的?



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的网络层含有的协议是?



ip不用说了肯定是网络层协议,a对

icmp也不用说,icmp本质可以理解为带差错报告的ip协议,也是网络层,b对

arp是将ip地址解析为mac,rarp是arp的reverse,将mac解析为ip

所以虽然看上去他们工作都是在链路层,但是它们是网络层协议,cd也对
26.以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:



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观察可能出现的状态流转是:



中断连接端可以是client,也可以是server。

下图为client发起主动断开连接时,client和server的状态图。





详参:http://blog.csdn.net/whuslei/article/details/6667471
28.以下涉及到内存管理的代码段中,有错误的是:



new
和delete 配套使用 free和malloc配套使用 AB错误

D是因为申请的是一个元素,后面跟的12是初始化值,而不是数组,所以错误。

new和delete与free和malloc的差别是前面2个会分别调用构造函数和析构函数

29.下面哪些特性可能导致代码体积膨胀:



A宏定义会单纯的替换,也就是如果宏定义替换的内容会成倍复制,所以会导致代码膨胀

B模板的调用,会根据调用的参数,生成模板对应的实际调用的函数体,如果调用的参数不同,会生成不同的代码,所以会导致代码膨胀

C内联函数会拷贝至调用的位置,如果调用多次回导致代码膨胀
30.

小明设计了如下的学籍管理系统:

已知关系:学籍(学号,学生姓名) PK=学号

成绩(科目号,成绩,学号) PK=科目代码,FK=学号

已有表记录如下,请给出能够插入的成绩记录





成绩表中主键是“PK=科目代码”,所以 科目代码要唯一,所以可排除AC;在数据库完整性里有说:外键必须可以找到或者为空,所以 B是可以的,而D为空,所以也满足。故选BD
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: