一、单向选择题

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

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

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

  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 第六次除后到7 第七次除后到3 第八次除后最后一张

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

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

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

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

解析:

  对于A选项:我开始也觉得不对,但我同学深入到汇编去分析:

++a应该要写成 2到3条汇编语言,分析可以得出,先是线程2 +1得到2,++a的汇编语言中,print a获取的a 的值是寄存器中存2的值,然后在转去线程1执行,线程1++得到3,print 3,  a虽然是3了,但是线程2中print 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-9,a-z分别由数字0-35表示,则10进制数字872581表示字符串___B___。

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

解析:(872581)10=(18 25 10 13)36,所以为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的个数为3,b的个数为2,l的个数为1,i的个数为1。

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

  编码: 个数

  a:1 3

  b:01 2

  l:000 1

  i:001 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个子集,那么三个子集的元素必须是1、1、2个。有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语言中指针的说法错误的是:___B_。

  A. 指针的值是一个地址

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

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

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

解析:B。非法指针是指指针指向已经被回收或者指向一个错误的地址,题中的表述不完整。

  C的话,两个地址值相减,所得的结果只有天知道,没有意义。

  补充:所有类型的指针的大小都是一样的,因为它所存的只是一个地址,而这个地址是固定的,一般都是4个字节。可以用sizeof函数试一下。所以A、D是正确的。

二、不定向选择题

参考答案:BE。纯数学题啊,大阿里真有你的。。。

  B是对的,举不出反例;空集是空集的子集,但不是真子集,所以E是对的。其他几项都可以举出错误的例子。

参考答案:AB。水题不解释。

13、以下关于内存泄露的说法正确的是___C__。

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

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

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

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

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

解析:

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

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

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

   对于D选项,不确定,但“只要”的表述总觉得不对。

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

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

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

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

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

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

解析:

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

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

第三部分 填空与问题

参考答案:O(log2(n))。

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

解析:v值越大,1-(1-p)^mv的值越大,即这个服务一年的无故障概率越高。

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

参考答案:4场

分析:一次划分中,某方可以有1人,另一方有4人或某方有2人,另一人有3人。

要使任意两个人之间有一场红方对蓝方和蓝方对红方的比赛,假设5个同学为A,B,C,D,E,相当有有向图的5个节点,任意两个节点间有两个方向的边连接。

即总的节点关系有(5个节点中选取两个节点)A(5,2)=5*4=20个关系。

而一次比赛(一次划分)能够生成的关系(一方两人一方三人的划分)c(2,1)*c(3,1)=2*3=6或者(一方四人一方一人的划分)c(4,1)*(c(1,1)=4*1=4,

所以一场比赛(一次划分)最多生成的关系次数为6

所以需要20/6=3.33..即至少需要4场比赛

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

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

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

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

解析:

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

  (2)假设该机器的核数为n,其中4<=n<=16,以及文件中有m条记录,那么可以创建n个线程,每个线程并发 最多 处理不同的m/n+1(取整加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. 1 void Swap(char *a, char *b)
  2. 2 {
  3. 3 char tmp = *a;
  4. 4 *a = *b;
  5. 5 *b = tmp;
  6. 6 }
  7. 7 void reverse(char *str, int first, int last)
  8. 8 {
  9. 9 if(str == NULL || first > last){
  10. 10 return;
  11. 11 }
  12. 12 int i = first, j = last;
  13. 13 while(i < j){
  14. 14 Swap(&str[i], &str[j]);
  15. 15 i++;
  16. 16 j--;
  17. 17 }
  18. 18 }
  19. 19 char* RerveAll(char *str)
  20. 20 {
  21. 21 if(str == NULL){
  22. 22 return NULL;
  23. 23 }
  24. 24 //反转整个字符串
  25. 25 reverse(str, 0, strlen(str) - 1);
  26. 26 //段内逐步反转
  27. 27 size_t i = 0;
  28. 28 int istart = 0;
  29. 29 for(i = 0; i < strlen(str); i++){
  30. 30 if(str[i] == '.')
  31. 31 {
  32. 32 reverse(str, istart, i - 1);
  33. 33 istart = i + 1;
  34. 34 }
  35. 35 }
  36. 36 //最后一个'.'后面的字符串
  37. 37 reverse(str, istart, i - 1);
  38. 38 return str;
  39. 39 }
 

第四部分 综合题

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

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

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

  如:

  16 1001 1002 3003

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

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

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

阿里巴巴集团2013实习生招聘技术类笔试题(B)的更多相关文章

  1. 阿里巴巴集团2013实习生招聘技术类笔试卷(B)

    一.单选题 1.在常用的网络协议中,___是面向连接的.有重传功能的协议. A.IP   B.TCP    C.UDP    D.DXP 2.500张多米诺骨牌整齐地排成一列,依顺序编号为1.2.3… ...

  2. 阿里巴巴集团2016校园招聘-Python工程师笔试题(附加题+部分答案)

    前言 第一次网上笔试,被虐的很惨.一是不太习惯,最主要的是还是自己对Python的掌握,还不够熟练.下面是这次阿里笔试相关信息 笔试时间是,2015年8月23日,10:00——12:00 对于笔试题, ...

  3. [转]Hulu 2013北京地区校招笔试题

    填空题: 1.中序遍历二叉树,结果为ABCDEFGH,后序遍历结果为ABEDCHGF,逆序遍历结果为? 2.对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为 ...

  4. 蘑菇街2015校招技术类笔试题A卷,回忆版(杭州站)

    笔试时间:10月9号 下午 1.一串数据的最大递增序列,输出个数 例如 4,2, 6,3, 1,5, 最大递增序列为, 2,3, 5,输出3, 2.求两个整型数据集合的交集,尽可能少用时间. 假设两个 ...

  5. 阿里巴巴2013年实习生笔试题B

    阿里巴巴集团2013实习生招聘技术类笔试题(B) 一.单向选择题 1.在常用的网络协议中,___B__是面向连接的.有重传功能的协议. A. IP B. TCP C. UDP D. DXP 2.500 ...

  6. Java工程师笔试题整理[校招篇]

    Java工程师笔试题整理[校招篇]     隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...

  7. 华为C语言笔试题集合

    ①华为笔试题搜集 1.static有什么用途?(请至少说明两种)     1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.     2) 在模块内(但在函数体外),一个被声明为 ...

  8. 2016最新Java笔试题集锦

    更新时间:2015-08-13         来源:网络         投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...

  9. [原创]Java常见笔试题知识点汇总

    前天数梦工厂来学校招聘,笔试题比较有特点,全是Java题,基本就是Java的一些特点.凭记忆按照题目找到一些必备知识点 (1). try {}里有一个return语句,那么紧跟在这个try后的fina ...

随机推荐

  1. Hdu1092

    #include <stdio.h> int main() { ; while(scanf("%d",&n)){ ) {;} else{ int i,a; ;i ...

  2. Codeforces 571B Minimization

    http://codeforces.com/problemset/problem/571/B 给出一个序列,可以任意调整序列的顺序,使得给出的式子的值最小 思路:我们可以把序列分解,变成k条链,n%k ...

  3. CS找工作好文章

    我的美国CS面试经验分享 -- 转载 怎样花两年时间去面试一个人 上面列出了一些比较好的书单 cs土硕找工作总结(二) 笔试面试准备http://blog.renren.com/blog/221227 ...

  4. Powershell---1 介绍和安装

    Powershell 介绍和安装   Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆 ...

  5. POJ3669(Meteor Shower)(bfs求最短路)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12642   Accepted: 3414 De ...

  6. Visual Studio 2015 使用ODP.net进行EF开发

    刚转了新公司,以前公司都是用VS+MSSQL作为开发工具的 现在新公司由于数据库是Oracle,而且新公司比较小规模,开发团队也没有什么规范 访问数据库的方式一直使用ADO.net的DataTable ...

  7. android recover 系统代码分析 -- 选择进入

    最近做Recovery的规范及操作指导文档,花了一些时间将流程搞清. Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级.而在进入Recover ...

  8. LDA-线性判别分析(二)

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  9. Oracle优化技术

    1.基本原理 Oracle的日志:Oracle中为了提高硬盘写的效率,採用内存中数据缓冲区来保存数据,等到一定量或一定时间后才写到磁盘(DBWR). 这个时候假如断电之类的故障发生,数据缓冲区的数据将 ...

  10. 本地化下按首字母分组排序的神器——UILocalizedIndexedCollation

    最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引.因为按照我一贯的的做法,都是想要做成更通用的.支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多 ...