阿里巴巴2014年暑假实习生笔试题+答案详解
2015-02-02 22:04
274 查看
答案是自己整理的可能有问题,欢迎大家一起研究交流。
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,为进程分配文件描述符
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,为进程分配文件描述符
相关文章推荐
- 2014阿里巴巴实习生笔试题目(答案 )
- 阿里巴巴2013实习生笔试题一算法题详解
- 2015阿里巴巴实习生招聘笔试题,带答案,欢迎一起来讨论哇!
- 找工作学习笔记2------阿里巴巴实习生笔试题(含答案)
- 阿里巴巴2014年实习生笔试题目
- 微软2013暑假实习生笔试题(有答案)
- 2014年阿里巴巴数据分析师实习生招聘笔试题
- 腾讯2012实习生笔试题+答案解析
- 微软2012实习生笔试题+答案解析
- 微软的实习生笔试题,不是太难,算法的题好多,但是很多答案都不确定,欢迎大家讨论答案~
- 阿里巴巴2010校园招聘笔试题摘录(附答案)
- MTK深圳公司嵌入式软件工程师笔试题(答案详解)
- 阿里巴巴的Oracle DBA笔试题参考答案
- 腾讯2012实习生笔试题2+答案解析
- 2010 阿里巴巴校园实习生笔试题
- 微软2012实习生笔试题及答案(望讨论)
- Oracle DBA笔试题答案(阿里巴巴)-综合随意类
- 【面试专题】腾讯PHP实习生笔试题目及答案解析
- Oracle DBA笔试题答案(阿里巴巴)-系统管理类