虔诚的学习者 阿里巴巴2013年实习生笔试题B

阿里巴巴集团2013实习生招聘技术类笔试题(B

一、单向选择题

1、在常用的网络协议中,___B__是面向连接的、有重传功能的协议。

  A. IP     B. TCP     C. UDP     D. DXP

 

2、500张骨牌整齐地排成一行,按顺序编号为123......499500,第一次拿走所有奇数位置上的骨牌,第二次再从剩余骨牌中拿走所有奇数位置上的骨牌,依次类推,请问最后剩下的一张骨牌的编号为__B__

  A. 128     B. 250     C. 256     D. 500

解析:

  第一次后剩下250个偶数:2,4,6,8......498,500

  将它们除以2得到1-250的一列

  第二次后剩下125个偶数:2,4,6,8......248,250

  将它们除以2得到1-125的一列

  第三次后剩下62个偶数2,4,6,8.......122,124

  将它们除以2得到1-62的一列

  第四次后剩下31个偶数2,4,6,8......60,62

  将它们除以2得到1-31的一列

  同理,第五次后到15 第六次除后到第七次除后到第八次除后最后一张

  所以,它的编号为1*2^8=256

 

3、两个线程并发执行以下代码,假设a是全局变量,初始值为1,那么以下输出中__D__是不可能的。

复制代码
1 void foo()
2 
3 {
4 
5 ++a;
6 
7 printf(“%d_”,a);
8 
9 }
复制代码

 

  A. 3_2_     B. 2_3_     C. 3_3_     D. 2_2_

解析:

  对于A选项:线程1先执行++a,此时a=2

  对于B选项:线程1先执行++a,此时a=2,然后线程1输出;线程2执行++a,此时a=3,最后线程2输出;

  对于C选项:线程1先执行++a,此时a=2,然后中断,线程2执行++a,此时a=3,线程2输出,最后线程1输出;

  对于D选项:这个是不可能的。

 

4、某系统采用36进制数字来表示一个字符串,36个字符0-9a-z分别由数字0-35表示,则10进制数字872581表示字符串___B___

  A. imc     B. ipad     C. iphone     D. ipod

解析:(87258110=18 25 10 1336,所以为ipad

 

5、以下代码输出的结果是:___B___

 

  A. 81     B. 27     C. 9     D. 3

 

6、关于数据结构的以下说法,错误的是___C___

  A. 红黑树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)

  B. B+树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)

  C. Hash表插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(n)

  D. 排序链表插入操作的平均时间复杂度为O(n),最坏时间复杂度为O(n)

解析:

  Hash表的查找、插入和删除都是O(1)

 

7、哈夫曼编码是一种无损二进制熵编码算法,其加权路径长度最小,字符串“alibaba”的二进制哈夫曼编码有___C__位(bit)。

  A. 11     B. 12     C. 13     D. 14

解析:

  a的个数为3b的个数为2l的个数为1i的个数为1

  最后构造的哈夫曼树,编码如下所示。

  编码: 个数

  a1     3

  b01   2

  l000   1

  i001   1

  所以,哈夫曼编码长度为:3*1 + 2*2 + 3*1 + 3*1 = 13

 

8、节点按中序遍历为xyz的二叉树可能有__D__种。

  A. 2     B. 3     C. 4     D. 5

解析:

  注意左右子树的问题就OK了。

 

9、在4个元素的集合上可定义的互不相同的划分有___B___种。

  A. 14     B. 15     C. 16     D. 17

解析:

  集合A的一个划分确定A的元素间的一个等价关系。

  如果划分为4个子集,只有一种划分;

  如果划分为3个子集,那么三个子集的元素必须是112个。有C(4,2)=6种划分;

  如果划分为2个子集,那么可能是1+3,也可能是2+2.1+3的情况,有四种方法去选择集合的元素,所有有4种。如果是2+2,有C(4,2)=3种。所以,总共有7种两个子集的划分;

  如果划分为1个子集,只有一种划分;

  所以,总共有1+6+7+1 = 15种划分。

 

10、以下关于C语言中指针的说法错误的是:___C__

  A. 指针的值是一个地址

  B. 非法指针是指该指针的值不是一个已经分配内存的地址

  C. 两个指向同类型地址的指针之间做减法是没有意义的

  D. 指针的指针占用的内存空间和其他指针占用的内存空间相同

 

二、不定向选择题

13、以下关于内存泄露的说法正确的是_____。《此题不确定》

  A. 内存泄露是操作系统内存管理出错导致的问题

  B. 单线程程序不可能内存泄露

  C. 如果一个进程在运行过程中占用的内存无限制的上升,那么该进程有内存泄露

  D. 只有进程在退出之前释放了所有分配的内存,那么就不会有内存泄露

  E. 内存泄露仅仅出现在C/C++程序的问题,Java程序不会出现内存泄露 

解析:

  对于A选项,内存泄露通常是指分配出去的内存使用完毕后没有释放掉,未被回收,所以,A应该不对。

  对于B选项,肯定是不对的,单线程也会出现内存泄露;

  对于E选项,肯定是不对的,Java程序也会出现内存泄露的问题;

 

14、关于进程和线程,下面说法正确的是__BCD__

  A. 线程是资源分配和拥有的单位

  B. 线程和进程都可以并发执行

  C. 在linux系统中,线程是处理器调度的基本单位

  D. 线程的粒度小于进程,通常多线程比多进程并发性更高

  E. 不同的线程共享相同的栈空间

 解析:

  对于A选项,进程是系统资源分配和调度的基本单位;而线程是处理器调度的基本单位;

  对于E选项,应该是属于同一进程的不同线程共享相同的栈空间;

 

第三部分 填空与问题

16、某种物理机一年的无故障概率为p,每台物理机通过虚拟技术可以虚拟出v台虚拟机,假定在物理机没出现故障的情况下虚拟机不会出现故障,那么每台虚拟机一年无故障的概率为___p___。如果有m台这样的物理机,虚拟出mv台虚拟机,通过某种分布式容错技术,可以使基于这些虚拟机搭建的服务只要有一台虚拟机无故障,这个服务便可以无故障。那么这个服务一年的无故障概率为__1-1-p^m_。如果想通过同样数量的虚拟机实现更高的无故障概率,但不限制物理机的数量,可以采用的方法是_降低每台物理机虚拟出的虚拟机的数量_

解析:

 

17、宿舍内5个同学一起玩对战游戏,每场比赛有一些人作为红方,另一些人作为蓝方,请问至少有多少场比赛,才能使任意两个人之间有一场红方对蓝方和一场蓝方对红方的比赛?请写出思路及结果。

解析:

   4场。

 

18、读取并处理一个文件中的记录,每条记录处理会产生一个对应的结果,不同记录的处理过程之间互不依赖,结果输出到另一个文件中,某程序员实现了该处理程序的单线程版本,运行时发现CPU使用率达到80%

(1)为何CPU使用率不是100%

(2)假定程序运行的机器的核数在416不等,如何设计程序,使该处理程序运行的最快?

(3)在一个n核机器上,速度最快是原来的程序的多少倍?

解析:

  (1CPU使用率达不到100%,有可能是CPU分配给该进程的时间片用完,其他进程抢占了CPU,从而导致该程序阻塞;

  (2)假设该机器的核数为n,其中4<=n<=16,以及文件中有m条记录,那么可以创建n个线程,每个线程并发 最多 处理不同的m/n+1条记录,这样会使该处理程序运行的最快;

  (3)最多为n倍。

 

19、请实现一个程序,能对点分字符串按段翻转。如”www.taobao.com”翻转为”com.taobao.www”,”sports.sina.com.cn”翻转为”cn.com.sina.sports”。要求时间复杂度为O(n),空间复杂度为O(1),结果保存在参数指针所指的空间中。

解析:

  解决方法是这样的,分为两步:

1)首先将整个字符串逐个反转,例如www.taobao.com 处理后就是 moc.oaboat.www

2)再在段内进行一次反转,结果就是com.taobao.www了;

  

复制代码
 1 void Swap(char *a, char *b)
 2 {
 3     char tmp = *a;
 4     *a = *b;
 5     *b = tmp;
 6 }
 7 void reverse(char *str, int first, int last)
 8 {
 9     if(str == NULL || first > last){
10         return;
11     }
12     int i = first, j = last;
13     while(i < j){
14         Swap(&str[i], &str[j]);
15         i++;
16         j--;
17     }
18 }
19 char* RerveAll(char *str)
20 {
21     if(str == NULL){
22         return NULL;
23     }
24     //反转整个字符串
25     reverse(str, 0, strlen(str) - 1);
26     //段内逐步反转
27     size_t i = 0;
28     int istart = 0;
29     for(i = 0; i < strlen(str); i++){
30         if(str[i] == '.')
31         {
32             reverse(str, istart, i - 1);
33             istart = i + 1;
34         }
35     }
36     //最后一个'.'后面的字符串
37     reverse(str, istart, i - 1);
38     return str;
39 }
复制代码

 

 

第四部分 综合题

  某B2C网站有1亿用户和200万商品,每一个用户都有自己喜欢的若干件商品,如果两个用户都喜欢同一件商品,我们定义中两个用户有一个“同好商品”,“同好度”为两个用户的同好商品数和这两个用户中至少有一人喜欢的商品数的比值。同好度衡量了两个用户之间的商品喜好的接近程序,这有着十分重要的用途。

  请设计一个算法,计算每一个用户的同好用户集合及同好度。

  输入数据:多个文件,每个文件的数据有多行,每一行的数据格式如下:用户ID喜欢的商品ID1 喜欢的商品ID2 .......喜欢的商品n,其中用户ID和商品ID均为32位整数,中间以空格分隔。

  如:

  16 1001 1002 3003

  输出数据:一个或多个文件,每一行的数据格式如下:

  用户ID 同好用户ID1:同好度 同好用户ID2:同好度......同好用户IDn:同好度

  中间以空格隔开。算法可以描述为伪代码。

 

 


 

  转载请注明:http://www.cnblogs.com/iloveyouforever/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值