阿里巴巴2014年暑假实习生笔试题+答案详解

  答案是自己整理的可能有问题,欢迎大家一起研究交流。



1、设栈S初始状态为空。元素a,b,c,d,e,f依次通过栈S,若出栈的顺序为c,f,e,d,b,a,则栈S的容量至少应该为__C___。

A,3   B,4   C,5   D,6

答案解析:a入栈,b入栈,c入栈,c出栈,d入栈,e入栈,f入栈,f出栈,e出栈,d出栈,b出栈,a出栈。S的容量至少为5。

 

2、10个相同的糖果,分给三个人,每个人至少要得一个。有__D_种不同分法。

A,33   B,34     C,35      D,36

答案解析:10个相同的糖,所以不用考每个人手中糖的差异性,10个糖中间9个空,即向9个空中任意放2个板子分开,即C2/9=36

 

3、小数值1.5625的二进制表示是__D_。 

A,101.1001 B,0.001C,101.111D,1.1001

答案解析:整数部分为1,取小数部分0.5625,0.5625*2=1.125,(1.125-1)*2=0.25,0.25*2=0.5,0.5*2=1

小数部分为0.1001

4、某二叉树的先序遍历是12453,中序遍历是42513,那么其后续遍历是___A_。

A,45231

B,42351

C,12345

D,54321

答案解析:从先序遍历中看书整个树的根是1,然后从中序遍历中看书根的左子树由4,2,5构成,右子树由3构成,再根据先序遍历中245的顺序知道2为子树的根,4为左子结点,5为右子结点这样就能画出整个二叉树。

 

5、主机甲和主机乙间已建立一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300字节和500字节的有效载荷,第一个段的序列号为200,主机乙正确接收到两个段后,发送给主机甲的确认序列号是_D___。

A,500        B,700        C,800        D,1000

答案解析:总共发送了1 000个字节,所以主机乙发送给主机甲的确认序号应该是1 000。

6、在N个乱序数字中查找第k大的数字,时间复杂度可以减小至___B__。 

A,O(N*logN) B,O(N) C,O(1) D,O(N^2)

答案解析:解法1:我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn + k)。

     解法2:利用选择排序或交互排序,K次选择后即可得到第k大的数。总的时间复杂度为O(n*k)

     解法3:利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:

      1. Sa中元素的个数小于k,则Sb中的第k-|Sa|个元素即为第k大数;

      2. Sa中元素的个数大于等于k,则返回Sa中的第k大数。时间复杂度近似为O(n)

     解法4:二分[Smin,Smax]查找结果X,统计X在数组中出现,且整个数组中比X大的数目为k-1的数即为第k大数。时间复杂度平均情况为O(n*logn)

     解法5:用O(4*n)的方法对原数组建最大堆,然后pop出k次即可。时间复杂度为O(4*n + k*logn)

     解法6:维护一个k大小的最小堆,对于数组中的每一个元素判断与堆顶的大小,若堆顶较大,则不管,否则,弹出堆顶,将当前值插入到堆中。时间复杂度O(n * logk)

     解法7:利用hash保存数组中元素Si出现的次数,利用计数排序的思想,线性从大到小扫描过程中,前面有k-1个数则为第k大数,平均情况下时间复杂度O(n)

http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html

 

7、平均速度最快的排序算法是__B__。

A, Shell排序                   B,快速排序           C,冒泡排序           D,插入排序

答案解析:在各种排序方法中,快速排序法和堆排序法的平均速度是最快的,因为它们的时间复杂度都是O(nlog2n),其他的排序算法的时间复杂度大都是O(n2)。

 

8、以下指令集架构属于复杂指令集架构的是_D_。 

A,ARM B,MIPS C,SPARC D,以上皆不是

答案解析:

MIPS是世界上很流行的一种RISC处理器。

1987年,SUN和TI公司合作开发了RISC微处理器——SPARC。

ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。

 

 

9、有两个N*N的矩阵A和B,想要在PC上按矩阵乘法基本算法编程实现计算A*B。假设N较大,本机内存也很大,可以存下A、B和结果矩阵。那么,为了计算速度,A和B在内存中应该如何存储(按行存指先存储第一行,再第二行,直到最后一行;按列存指先存储第一列,再第二列,直到最后一列) B

A,A按行存,B按行存

B, A按行存,B按列村

C, A按列村,B按行存

D, A按列村,B按列村

答案解析:A*B求出的结果矩阵中的元素时A的行和B的列相乘相加的结果。

 

10、设一棵二叉树中有3个叶子节点,有8个度为1的节点,则该二叉树中总的节点数为__B___。

A,12          B,13          C,14          D,15                  

答案解析:度为1的结点有8个,度为0的结点有3个,度为2的结点有2个(度为2的结点=度为0的结点-1),故二叉树的结点数为13个。

 

11、IP数据报头采用______字节序,在此字节序下从低地址到高地址0x1234的表示形式为______。

A, big_endian, 0x12 0x34 0 0                  B, little_endian,0x34 0x12 0 0               

C, big_endian, 0 0 0x12 0x34                  D, little_endian,0 0 0x34 0x12              

 

12、下列叙述中正确的是_D__。 

A,循环队列有队头和队尾两个指针,因此,循环队列是非线性结构  

B,在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况  

C,在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况  

D,循环队列中元素的个数是由队头指针和队尾指针共同决定

答案解析:循环队列中元素的个数是由队头指针和队尾指针共同决定的,元素的动态变化也是通过队头指针和队尾指针来反映的。

 

13、将一个从大到小的数组,用以下排序方法排序成从小到大的,__D___最快。

  A,插入排序     B,冒泡排序      C,快速排序     D,堆排序

答案解析:ABC的时间复杂度都为n^2,堆排序为O(nlog2n)。注:快速排序在这种情况下退化成了冒泡排序。

 

 

14、在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是______。

A,O(n)      B,O(n log n)    C,O(n(log n)2)     D,O(n 3/2)

 

 

15、已有变量定义和函数调用语句;编程-代码 int a=25; print_value(&a); 

则下面函数的正确输出结果是__D___。 void print_value(int* x) { 

printf("%xn",++*x); }

A,25  B,26  C,19  D,1a 

答案解析:首先输出格式是%x,按十六进制输出,++*x先运算++,26的十六进制是1a。

 

16、在二进制数据中,小数点向右移一位,则数据__C___。 

 A,除以10   B,  除以2    C,乘以2     D,乘以10

答案解析:小数点向右移动一位,相当于<<移位操作,移动一位则相当于乘2

 

17、设集合A={1,2,3},A上的关系R={(1,1),(2,2),(2,3),(3,2),(3,3)},则R不具备___D___。 

A,自反性    B,传递性    C,对称性    D,反对称性

答案解析:对称就是如果x!=y且xRy,则yRx。如(1)的情况。而(2)中有aRc却没有cRa,所以不是对称的。

反对称就是不存在(x!=y)且(xRy)且(yRx)的情况,一旦存在这种情况就不是反对称。如下例(1)和(2)中都存在这种情况,所以两者都不是反对称。

(1)R={<a,b>,<b,a>}      

(2)R={<a,b>,<b,a>,<a,c>}

(3)R={<a,b>,<b,c>,<a,c>}

 

18、下列叙述中正确的是__D___。 

 A,循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 

B,在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 

C,在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况 

D,循环队列中元素的个数是由队头指针和队尾指针共同决定

 

19、假定x=500,求下面函数的返回值__D___ 。 int fun(int x) { 

int countx = 0; while (x) { 

countx++; x = x & (x - 1);  } 

return countx; } 

 A, 2          B,3           C, 5           D, 6          

答案解析: x = x & (x - 1);第一次赋值运算,11111 0100&1 1111 0011=1 1111 0000,从中发现,1 1111 0100中有多少个1就会执行多少次循环。


20、有一台带一个千兆网卡的服务器A,会把接收到的消息转发给另外两台带一个千兆网卡的服务器B和C,B和C上面的一个服务进程处理一条10K字节的消息需要2毫秒。如果在B和C上面各跑80个服务进程,在不考虑CPU负载和进程切换、内存占用、传输损耗和交互损耗的情况下,B和C服务器每秒一共大约可以处理______条10K字节的消息。 

A,50000 B,60000  C,70000 D,80000

 

21、以下措施中,有可能改进分布式系统读写(IO)性能的有_D__。 

A,网络从千兆网升级为万兆网 

B,优化调度系统,尽量做到任务与数据相近(Locality) 

C,数据预取机制 

D,实现异步读写机制 

 

22、无锁化编程有哪些常见方法?______ 。 

A,针对计数器,可以使用原子加 

B,只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer) 

C,RCU(Read-Copy-Update),新旧副本切换机制,对于旧副本可以采用延迟释放的做法 

D,CAS(Compare-and-Swap),如无锁栈,无锁队列等待

 

23、程序 

struct T { char a; int *d; int b; int c:16; double e; }; T *p; 

在64位系统上以下描述正确的是。 

A,sizeof(p) == 8    B,sizeof(*p) == 32   C,sizeof(p->a) == 1    D,sizeof(p->e) == 4

 

 

24、下面所述步骤中,是创建进程所必须的步骤是_B__。 

A,由调度程序为进程分配CPU 

B,建立一个进程控制块 

C,为进程分配内存 

D,为进程分配文件描述符

 

 

 


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值