各互联网名企面试题汇总(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,7518,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,7551,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

个人能力有限,欢迎各位博友批评指正!!!

原文地址:https://www.cnblogs.com/lxt1105/p/6512014.html