各互联网名企面试题汇总(2)
一、迅雷2016研发工程师笔试题(快速排序)
已知关键字序列为(51、22、83、46、75、18、68、30),按关键码字51进行一趟快速排序,完成后的序列为(A)
A:(30、22、18、46、51、75、68、83)
B:(30、18、22、46、51、75、83、68)
C:(30、18、22、46、51、75、68、83)
D:(18、22、30、46、51、68、75、83)
解释:这道题看快排算法如何写:有两种解法
1.双路快排:
起始序列:51,22,83,46,75,18,68,30
以51为基准:51,22,30,46,75,18,68,83
:51,22,30,46,18,75,68,83
出现了交叉:18,22,30,46,51,75,68,83 为答案,发现选项里并没有
2.单路快排:
起始序列:51,22,83,46,75,18,68,30
以51为基准:30,22,83,46,75,18,68,51
:30,22,51,46,75,18,68,83
:30,22,18,46,75,51,68,83
:30,22,18,46,51,75,68,83 为最终答案,选 A
二、2016英特尔软件研发类笔试题(堆排序)
初始序列为 1 8 6 2 5 4 7 3 一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:(A )
A. 8 3 2 5 1 6 4 7
B. 3 2 8 5 1 4 6 7
C. 3 8 2 5 1 6 7 4
D. 8 2 3 5 1 4 7 6
解释:最小堆,是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于其左孩子和右孩子节点的值。根据题意画出对应的完全二叉树,图左边为初始完全二叉树,图右边为经过堆排序之后的完全二叉树。
所以对应的中序遍历结果为:中序,左根右,8,3,2,5,1,6,4,7,所以选A
三、迅雷2016研发工程师笔试题(顺序表插入)
顺序表含有127个元素,向其插入一个新元素并保持原来顺序不变,平均要移动____个元素()
A:63.5
B:8
C:32
D:7
解释:共有128个位置可以插入,每个位置上要移动的元素个数为127,126,125,...1,0,假设每个位置都是等可能的,平均移动元素即为数学期望,求得为63.5个
四、2016腾讯软件开发部分试题
1.已知一棵二叉树,如果先序遍历的节点顺序是: ADCEFGHB ,中序遍历是: CDFEGHAB ,则后序遍历结果为:( D)
A. CFHGEBDA
B. CDFEGHBA
C. FGHCDEBA
D. CFHGEDBA
解答:先序遍历:根左右。先访问根结点,再先序遍历左子树,再先序遍历右子树
中序遍历:左根右。中序遍历左子树,访问根结点,中序遍历右子树。
后序遍历:左右根。后序遍历左子树,后序遍历右子树,访问根结点。
根据先序遍历和中序遍历结果,可以得出后序遍历结果为:CFHGEDBA,所以选D
2.下列哪两个数据结构,同时具有较高的查找和删除性能?( CD)
A. 有序数组
B. 有序链表
C. AVL 树
D. Hash 表
解释:这个无需多说,直接上图。
根据表可知:选CD,选择平衡二叉树和哈希表
3、下列排序算法中,哪些时间复杂度不会超过 nlogn?( BC)
A. 快速排序
B. 堆排序
C. 归并排序
D. 冒泡排序
解释:考察排序,直接上图。
所以,根据性能,选择最坏情况下的时间复杂度,满足要求的是堆排序和归并排序,选BC
4.当 n = 5 时,下列函数的返回值是:(A )
int foo(int n)
{
if(n<2)
return n;
return foo(n-1)+foo(n-2);
}
A.5
B.7
C.8
D.1
解释:递归的调用,画出图,一目了然,选A
5.下列程序的输出是:( D)
#define add(a+b) a+b
int main()
{
printf(“%dn”,5*add(3+4));
return ;
}
A、23
B、35
C、16
D、19
解释:#define本质是代换,用 add(a+b)替换 a+b ,所以输出的是:5 * 3 + 4 = 19 ,选 D
6.Unix系统中,哪些可以用于进程间的通信?( ABCD)
A.Socket
B.共享内存
C.消息队列
D.信号量
解释:
管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点;
共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
套接口(socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
7.静态变量通常存储在进程哪个区?( C)
A: 栈区
B: 堆区
C: 全局区
D: 代码区
解释:静态变量的修饰关键字:static,又称静态全局变量。故最后选择的结果为: C
8.IP地址131.153.12.71是一个(B)类IP地址。
A.A
B.B
C.C
D.D
解释:这个考察IP地址的基本概念,如下图所示:
故将 131 转为二进制 :10000011,因此为 B 类 IP 地址,结果选 B
五、迅雷2016研发工程师笔试题(双向循环链表)
在带头结点的双向循环链表中插入一个新结点,需要修改的指针域数量是( D )
A:2个
B:6个
C:3个
D:4个
解释:双向循环链表,每个结构体都有指向自己前驱和后继的两个指针。假设待插入的结构体的两个指向指针目前都指向null,那么要修改4个,被插入位置的前一个结构体的后继指针(1),被插入结构体前驱指针(2)和后继指针(3),被插入位置后一个结构体的前驱指针(4),所以选择 D
个人能力有限,欢迎各位博友批评指正!!!