缘由

当时去笔霸的题,现在终于流传到网上了。

所谓参考答案,也不是阿里巴巴给的,有些我做的,有些是网上摘抄的,总之是我认可的。所以请大家还是抱着怀疑的态度去考察每一道题。

主要参考了一下博客:

  • http://blog.csdn.net/dianacody/article/details/22690015
  • http://blog.csdn.net/iloveyoujelly/article/details/22941531

一、单选题(前10题,每题2分;后10题,每题3分;共50分。选对得满分,选错倒扣1分,不选德得0分)

1.假设一个主机的IP地址为192.168.5.121,而子网掩码为255.255.255.248。那么该主机的网络号部分(包括子网号部分)为      。 
 A. 192.168.5.12      B. 192.168.5.121    C. 192.168.5.120    D.192.168.5.32 

答:
首先,计算机的地址有2部分,2部分再一起才能完整的表示出一个计算机。不过如果你看到某个文档上面只有IP没有后面的子网掩码,那就表示用的是默认的子网掩码。。
默认子网掩码---A类IP为255.0.0.0;B类IP为255.255.0.0;C类IP为255.255.255.0
A类IP地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。 
B类IP地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。 
C类IP地址范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。 
其次,
所谓网络号就是这个ip段的第一个ip地址,另外,最后一个ip地址就是广播地址。
网络号可以通过本网段的任一一个ip和子网掩码 按位 与 出来。
所以这道题就将192.168.5.121 和 255.255.255.248 的二进制相与,由于子网掩码的前三位都是255,都是1111 1111 所以,ip地址的前三个也不变。下面是与第4个。
121:01111001
248:11111000
120:01111000
所以网络号就是:192.168.5.120/29。
其中,29的意思就是指这个ip地址的前29个bit位用来表示网段号,后三位用来表示主机号。如何得到29呢?就是通过子网掩码来看的,因为子网掩码 255.255.255.248 写成二进制:
1111 1111.1111 1111.1111 1111.11111000 前面有29个1,这就代表了前面29个是固定的网段号,只有后面3个000可以变。
000 为 120
111 为 127
所以这个网段的ip地址为:192.168.5.120-127
网络号:192.168.5.120
广播地址:192.168.5.127
可用地址是192.168.5.121-126
附加两个小的知识点:
运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0

二进制与十进制 互相转换:

二进制数1101.01转化成十进制
1101(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25
十进制789转二进制
789=1100010101
789/2=394 余1 第10位
394/2=197 余0 第9位
197/2=98 余1 第8位
98/2=49 余0 第7位
49/2=24 余1 第6位
24/2=12 余0 第5位
12/2=6 余0 第4位
6/2=3 余0 第3位
3/2=1 余1 第2位
1/2得0 余1 第1位

2.64位系统上,定义变量int*a[2][3]占据  字节。 
A.4   B.12    C. 24    D.48


刚开始我以为是指针的大小,但是64位应该8个字节,没有这个答案,那可能就是int类型的字节大小*个数了。所有就是4*6=24。选c。

32位或64位系统上的基本类型的字节大小,可用如sizeof(char),sizeof(char*)等得出
32位编译器:
char:1个字节
char*(即指针变量):4个字节(32位的寻址空间是2^32,即32个bit,也就是4个字节。同理64位编译器)
shortint:2个字节
int:4个字节
unsignedint:4个字节
float:4个字节
double:8个字节
long:4个字节
longlong:8个字节
unsignedlong:4个字节

64位编译器:
char:1个字节
char*(即指针变量):8个字节
shortint:2个字节
int:4个字节
unsignedint:4个字节
float:4个字节
double:8个字节
long:8个字节
longlong:8个字节
unsignedlong:8个字节

3.Linux中使用df –h /home和du –sh /home所查看到的已使用的磁盘容量不同,可能的原因是      。  

A.命令不同,所以结果肯定不同     
B.两个命令所用的参数有问题
C.运行中的进程打开文件被删除导致  
D. Linux的特性导致的

答:
选c
df和du显示的磁盘空间使用情况不一致的原因及处理http://blog.csdn.net/smstong/article/details/8715650

4.一个C语言程序在一台32位及其上运行。程序中定义了三个变量x,y,z,其中x和z是int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,x,y,z的值分别是    
 。  
A. x=0000007FH, y=FFF9H, z=00000076H
B. x=0000007FH, y=FFF9H, z=FFFF0076H 
C. x=0000007FH, y=FFF7H, z=FFFF0076H
D. x=0000007FH, y=FFF7H, z=00000076H

答:
D
[解析] 
1、十进制整数到二进制的转换,数据的补码表示;
2、补码加法运算,2两个不同位数的补码数相加时需要进行符号扩展;
X=127,[X]补=0000007FH(32位整数),运算后其值不变
Y=-9,[Y]补=FFF7H (16位整数),运算后其值不变
[Z]补 = [X补+Y补]=0000007FH+FFFFFFF7H=00000076H
3、解题技巧,也可先求出127+(-9)=118,再变成补码后去与可供选择的答案对比。

5.有如下数组定义,  
int [][] myArray = new int [3][] { 
new int[3]{5, 6, 2},  
new int[5]{6, 9, 7, 8, 3}, 
new int[2]{3,2}};
则,myArray[2][2]的值是。
A. 9         B. 2       C. 6        D.越界

答:
D越界,因为数组下标从0开始。

6.快速排序的期望运行时间复杂度是  。 
A. O(n2)     B. O(nlogn)      C. O(n)      D.O(2n) 

答:B,没什么争议吧

7.在一个长度为n的顺序表中删除第i个元素,要移动 个元素。如果在第i个元素前插入一个元素,要后移个元素。  
A. n-i, n-i+1     B. n-i+1, n-i      C. n-i, n-i      D. n-i+1, n-i+1

答:
选A。设想,删除最后一个元素,就不需要移动,所以是n-n。在最后一个元素前插入一个元素也只需要移动最后一个元素。

8.下面C++程序的输出是              。
void f(char *x)
{
x++;
*x = ‘a’;
}
int main()
{
char str [ sizeof (“hello”)];
strcpy( str, “hello”);
f(str);
cout << str;
return 0;
}

A. hello
B. hallo
C. allo
D.以上都不是

答:
选B,和我想的一样。char *x 和打印时候的str没有一点关系。
如下图1。


9.有以下程序,其执行结果是              。
  char fun(char x, char y)
  {
  if(x) return y;
  }
  int main()
  {
  int a = ‘0’, b = ‘1’, c = ‘2’;
  printf(“%c\n”, fun(fun(a, b), fun(b, c)));
  }
  
A.函数调用出错  
B.2  
C.0  
D.1

答:
有一道类似的题。
http://www.chsi.com.cn/xy/com/200901/20090116/16609340.html
应该选B.2。
因为注意int a = '0',不是 int a = 0。所以int a = '0'时,a其实是ascii码值。

10.当n=6时,下列函数的返回值是  。
  int foo (int n)
  {
  if(n <= 2) return n;
  return foo(n-1) + foo(n-2);
  }
A.1 B. 8 C. 13 D.21

答:
这道题考了太多遍了吧。
foo(0) = 0
foo(1) = 1
foo(2) = 2
foo(3) = 3
foo(4) = 5
foo(5) = 8
foo(6) = 13
所以选C

(以下每题3分)
11.在一台主流配置的PC机上,调用f(35)所用的时间大概是              。
unsigned long long  cnt=0;  
int f(int x)  
{  
    int s=0;  
    cnt++;  
    while(x--)  
        s+=f(x);  
    return max(s,1);  
}  
A. 几毫秒 B. 几秒 C.几分钟 D.几小时

答:
这题我觉得很怪,也很难。看看这位网友的分析吧。

  • http://blog.csdn.net/chhuach2005/article/details/23659479

f(0)=1,f(1)=1+f(0)=2f(0),f(2)=1+f(1)+f(0)=4f(0),f(3)=1+f(2)+f(1)+f(0)=8f(0),f(n)=2^nf(0),f函数执行2^n次,分析结果正如下图所示。下图所示为:cout<<n<<":   "<<cnt<<"  "<<sum<<"  time:  "<<GetTickCount()-start<<endl;


输出依次为:n的取值、f()的执行次数cnt、sum的值、程序运行时间(单位ms)
实际n=35是,执行次数2^35=34359738368,运行时间为1368031ms约22.8分钟,PC配置为CPU 2G 22核

目前主流PC配置为主频3.5G 4核。设指令周期2-5,f()执行一次,要执行10条指令左右。因为是4核的,1s估测运算3.5G条指令。3.5*10^9/10=100s。这样算,大概只需要2分钟,当然,计算机不可能不做其他事。CPU也不可能100%使用,时间肯定大于2分钟。

12.在一棵度为4的树T中,有20个度为4的节点,10个度为3的节点,1个度为2的节点,10个度为1的节点,则树T的叶子个数为              。
A.41   B. 82   C. 113     D.122

答:
所谓节点的度,节点拥有的子树的个数或者分支的个数。直观的来看,就是节点之间的连线。
设有n个节点 则有n-1条边(这是树的定义所规定的,比如2个节点之间就一条线,但是三个节点只有两个线连接两个节点,有一个节点作为根)
由于边数就是树中所有节点的度的总和:
n-1=20*4+10*3+1*2+10*1则n=123
叶子节点就等于总节点数减去有度的节点数。
123-20-12-1-10=80

13.有堆栈S,按顺序ABCD进栈,则出栈顺序不可能存在的是       。
A. DCBA        B. BACD     C. BADC       D. CABD

答:
选D
因为C最先出栈,说明栈中已经形成了ABC的结构,那么C出栈之后,B在A前面,A不可能比B先出栈。

14. 使用二分查找在有序数组a[n]中查找一个元素x的时间复杂度              。
  A. O(n) B. O(n2) C. O(log n) D. O(n logn)

答:
选C,就是树的高度。常识。

15. 图中标出了每条有向公路最大流量,请问从S到T最大流量是              。
  A.46 B. 47 C. 54 D.77

答:
选A。参见博客:通俗的讲讲求最大流的解法http://blog.csdn.net/zy825316/article/details/34845093

16.一天,有为年轻人来到张老板的店里花80元买了件原价为160元的纪念品。这件礼物的成本是65元。结账时,年轻人掏出一张100元,张老板当时没有零钱,就用那100元向隔壁店家换了零钱,找给年轻人20元。但是隔壁店家后来发现那100元是假钞,张老板无奈还了100元。那么,张老板在这次交易中实际损失了      元钱。
A. 65     B. 85       C. 100      D.185

答:
我最终还是被绕进去了,选了错误的答案,算了礼物的成本和老板补给年轻人的钱,还有就是老板退给街坊的钱。却忘了街坊还(hai 二声)给了老板100元钱。
其实最聪明的人一眼就看穿了,老板与街坊换不换钱对本题是完全没有影响的,与街坊换钱完完全全就是干扰。
我再做一次,选B。因为礼品成本是65,这是老板亏的,然后又找给了年轻人20,这也是老板亏。一共是85元钱。

17. 2^100 mod 7 =         。
A. 2      B. 3     C. 4     D.5


先说mod,在计算机程序设计中通常都有MOD运算,它的含义是 取得两个整数相除后结果的余数。
例如:7 mod 3 = 1
因为7 除以 3 商2余1。余数1即执行MOD运算后的结果
对本题而言,观察
2≡2(mod 7)
2^2≡4(mod 7)
2^3≡1(mod 7)
2^100≡2 * 2^99≡2 * 2^(3*33)≡2(mod 7)
即2的100次方除以7余2。“≡” 表示同余。你如果还没学过的话,可以这样解释,就是因为2^3除以7余1,所以2^3乘以某个自然数(比如随便一个n),那2^3 * n除以7的余数就跟n除以7的余数一样,所以我们在探究2的100次方除以7的余数的时候,就可以把2^100不断约去2^3,而余数不变;因为100里面有33个3,所以都约去之后剩下1,那就是2^100跟2除以7的余数是一样的,而2除以7的余数是2,所以2^100除以7的余数也是2。

18.某公司在华东和华南两大区域开展业务,年底汇总业绩的时候发现,两大区域的月度客户转化率(=成为会员的客户数/访问店铺的客户数)分别提高了10%和5%,以下描述中正确的是      。
A.尽管各自的月度转化率都有提高,但公司的整体月度转化率仍有可能降低
B.市场对业务认可度提高,越来越多访问店铺的客户成为会员
C.华东区的客户更容易被转化,该公司应该把业务重点放在这个区域
D.华南区的客户更需要提高转化,该公司应该把业务重点放在这个区域

答:
别人选B。
应该例算式:
华东成为会员数:x1
华南成为会员数:x2

华东访问店铺数:y1
华南访问店铺数:y2

现在是:x1/y1 与 x2/y2 上涨了,能否推出x1+x2/y1+y2 一定上涨了的结论。呼,数学功底不好。所以就先留在这里儿吧。

19.一次又8个人参加的网球比赛,根据选手实力。分别编号1——8,1号实力最强,而实力差距小于等于2才有可能爆冷。8人进行1/4决赛,胜出的4人继续半决赛,直到产生冠军。问有可能获得冠军的编号最大的选手是——
A、4 B、6 C、7 D、8

参考答案
B。3淘汰1、4淘汰2、6淘汰8、7淘汰5;4淘汰3、6淘汰7;6淘汰4获胜。
反正觉得这题挺无语的

20.某国家非常重男轻女,若一户人家生了一个女孩,便再要一个,直到生下男孩为止。假设生男生女概率相等,问平均每户有几个女孩
A、 0.5 B、2/3C、1D、4/3

参考答案 C。没有任何因素影响男女出生的概率->生男生女的概率相等->男孩女孩应为1:1,说明每家都会有而且只有一个男孩(可能没有女孩儿,也可能有很多女孩),则平均下来每家应该有一个女孩。

二、不定向选择题
21.以下有关C语言的说法中,错误的是——
A、内存泄露一般是指程序申请了一块内存,使用完后,没有及时将这块内存释放,从而导致程序占用大量内存。
B、无法通过malloc(size_t)函数调用申请超过该机器物理内存大小的内存块。
C、无法通过内存释放函数free(void*)直接将某块已经使用完的物理内存直接还给操作系统
D、可以通过内存分配函数malloc(size_t)直接申请物理内存

参考答案
A:正确
B:错误
C:正确 
D:正确
对于BD,如下图所示:

对于C,如下图所说:

22.下面关于二叉搜索树的正确说法包括——
A、待删除结点有左子树和右子树时,只能使用左子树的最大值结点替换待删除结点。
B、给定一棵二叉搜索树的前序和后序结果,无法确定这棵二叉树
C、给定一棵二叉搜索树,根据节点值大小排序所需时间复杂度是线性的
D、给定一棵二叉搜索树,可以在线性时间复杂度内转化为平衡二叉搜索树

参考答案:
A:错误,也可以用右子树的最小节点
B:正确。知道中序 并且知道先序和后序其中之一就能确定一颗二叉树。所以中序是关键。
C:不确定
D:可以通过后续遍历来完成转换,可以实现线性时间复杂度。先转左子树,再右子树,再处理根节点,而他不平衡只需要通过旋转来校正就是。旋转复杂度是O(1),树的遍历是O(n) ,就是相当于“遍历”的复杂度。

23.被称为中国雨人的周玮,仅仅使用1分钟的时间就可以对16位数字开14次方。那么,以下数字中,不可能成为其候选答案的是——
A、11.0 
B、12.0
C、13.0
D、14.0
E、15.0

参考答案 ADE
让人无语的题

24.有3个包,每个包里各放了两个球。包A里的球都是白色的,包B里的球都是黑色的,包C里的球一黑一白。现随机取一个包,并从中随机取一个球。发现该球是白色的。那么这个包里剩下的球也是白色的概率是——
A、0
B、0.33
C、0.5
D、0.66

E、1

我选C,因为既然已经确定是白色的球了,那么不是A包,就是C包。如果是A包,剩下的球是白色,如果是B包,剩下的球黑色。所以是0.5的概率。

三、填空与问答
25. (4分)某电子眼镜的分辨率为640×360;相当于在距离2.5米左右观看一个25英寸大小的屏幕,其长宽比为16:9。已知蓝牙4.0技术工作在2.4GHz频带,理论最大带宽为24Mbps,请问该眼镜是否可以通过该技术将每秒50帧真彩(24bits,每8个bit用于传输三原色中一种颜色)画面传输至其他屏幕上?如果是,请说明原因。如果否,请说明理论上大约多久才能传送一帧真彩画面。
参考答案:
不能,640*360*24*50=2.76*10^8>24*1024*1024=2.5*10^7。
640*360*24表示每一帧的bit,乘以50之后就是每秒的总共的bit。
与蓝牙的传输相比,大于了24*1024*1024 bit,所以不能。

26.将N条长度为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为——M*logN
我的解答:
有人说是M*logN。但是我质疑,我认为过程大家应该都是知道的,那就是用堆排序,首先,我们从N条链中都取出一个元素,然后堆排序,就可以拿到最小的元素。将最小元素放入存储最终结果的链中,接着再从该最小元素的链中取一个新元素,再堆排序。又是logN,所以一共要经历M*N*logN次。

27.(6分)有ABCD四人,要在夜里过一座桥。他们通过这座桥分别耗时1、2、5、10分钟,只有一只手电,并且同时最多只能两个人一起过桥,请你安排过桥方案,能够使这四个人都过桥,且总共花的时间最短。需要给出所花费的时间以及具体方案。
我的解答:

  • 参见另一片博客:http://blog.csdn.net/zy825316/article/details/22570053


28. (8分)下列代码是实现有序正数数组的二分查找(也称为折半查找),请指出其中的bug。
int binary_search( int *array, int length,int key){
 intstart = 0, end = length – 1;
 while(end> start){
 int middle = (start + end) / 2;
 int tmp = array[middle];
 if(tmp < key){
 start = middle;
}else if(tmp > key){
         end = middle;
}else{
return middle;
}
}
return -1;
}

  • 参见另一片博客:http://blog.csdn.net/zy825316/article/details/22570053

29.(8分)有种数据结构叫做跳跃列表(Skip List),它是基于并联的链表随机化数据结构,其效率可比拟于二叉查找树(对于大多数操作需要O(n logn)平均时间)。它是按层建造的,底层是一个普通的有序链表,每个更高层都充当下面列表的“快速跑道”,这里在层i中的元素按概率1/p出现在层i+1中。平均起来,每个元素都在p/(p-1)个列表中出现,而最高层的元素(通常是在跳跃列表前端的一个特殊的头元素)在O(logpn)个列表中出现,调节p的大小可以在内存消耗和时间消耗上进行折中。试分析在该数据结构中查找一个元素的平均时间复杂度。

  • 参见另一篇博客:http://blog.csdn.net/zy825316/article/details/22600003

阿里巴巴 暑假实习 笔试题(2014年3月29日)相关推荐

  1. 概率速度2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试

    题记:写这篇博客要主是加深自己对概率速度的意识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 昨天来本想去加入北大的口试,结果去了说不给霸笔,尼玛,好吧,哥又乖乖的回来了,在现有网上有 ...

  2. 2014.3.29阿里巴巴暑期实习笔试题分析

    參考:http://blog.csdn.net/iloveyoujelly/article/details/22941531 以下中的[分析]是我给出的. 2014.3.29阿里巴巴暑期实习笔试题分析 ...

  3. 2014年3月29日缅甸将举行人口普查

    2014年3月29日缅甸将举行人口普查 2013.04.22 来源:缅华网 林耀宗译自(新金国日报20-4-2013)     仰光省人口普查委员会秘书吴季林说:2014年人口普查时,因发生冲突而不安 ...

  4. 2014年11月3日至2014年12月29日

    2014年11月3日 1.在MyEclipse中运行写好的MapReducer,抛出: 2014-11-0310:59:24,729 WARN [main] util.NativeCodeLoader ...

  5. deepin linux64,Linux Deepin系统2014.1版For Linux-64(2014年8月29日发布) Linux Deepin系统2014.1版 其他 Linux...

    驱动说明 Linux Deepin系统2014.1版For Linux-64(2014年8月29日发布)由于Compiz在虚拟机中性能不佳(Deepin 2014.1以Compiz作为窗口管理器),所 ...

  6. 与hamachi齐名的Remobo已于2014年7月29日暂停服务

    Remobo是一款方便的虚拟局域网联机和远程控制软件,目前已经暂停服务 原因是缺乏资金支持 下面是原文和翻译,翻译来自谷歌翻译 原文地址:http://blog.remobo.com/ Remobo ...

  7. 梦想世界2014年5月29日服务器维护公告,《梦想世界》2018年3月29日维护公告

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 <梦想世界>2018年3月29日维护内容如下 <梦想世界>2018年3月全新玩法"穹顶之争"即将全部上线!以下 ...

  8. 梦想世界2014年5月29日服务器维护公告,【公告】2014年11月13日服务器维护公告

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 <梦想世界>2014年11月13日维护内容如下: 1.账号相关:一个手机号只能绑定一个帐号,调整为最多可绑定3个 2.战斗相关:部分副本和除魔 ...

  9. 阿里巴巴2014校招笔试题-2013年9月14日

    不得不吐槽,阿里真是太混乱了,北京的笔试在考场等了两个半小时,考卷都没运到考场,@阿里巴巴集团校园招聘 回应说:"北京的同学们,简单解释下,为了试卷的保密,印刷的时间都比较晚,结果出意外了. ...

最新文章

  1. java三大范_Java深度学习系列——数据库的三大范式
  2. ×××:关于促进云计算创新发展 培育信息产业新业态的意见
  3. PAT甲级 -- 1053 Path of Equal Weight (30 分)
  4. numpy基础(part6)--协方差与相关系数
  5. 把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析
  6. excel中自动填充到最后一行
  7. android启动页面显示空白,android – 启动时的空白页面
  8. 雨松MOMO《Unity 3D游戏开发》源码公布
  9. 搜狗词库爬虫(1):基础爬虫架构和爬取词库分类
  10. iOS 集成极光推送 (swift版)
  11. CSS 模拟电影卡片
  12. excel表格显示无法连接服务器,excel中表格无法连接数据库-EXCEL 连接SQL SERVER数据库显示无法连接...
  13. linux系统网络老掉线,Linux使用ADSL上网时经常掉线
  14. 华东师范大学软件工程专硕考研398分复习经验总结
  15. 报错Minimum supported Gradle version is 4.4. Current version is 4.0.
  16. [艾兰岛]制作传送门之搭建系列——kura酱长期更新
  17. Ubuntu下用shell脚本实现俄罗斯方块游戏
  18. python语音转文字库_有没有语音转文字的APP?
  19. 使用linux的gpio点亮imx6ull的led灯
  20. 硬件配置部分——从无到有自主搭建视觉惯性VI-SLAM(vins-mono)平台

热门文章

  1. jQuery与JS实现AJAX实例!(附AJAX教程、路线图)
  2. 如何用U盘安装操作系统
  3. 因特网、万维网、互联网区别
  4. hibernate数据检索策略
  5. WIN7下WIFI共享上网教程
  6. 数据库的运算----选择,投影,连接
  7. 小苹果蹿红背后的网络营销思考
  8. 安全测试涉及的测试对象有哪些?
  9. 我对2021年前端团队的规划
  10. PID控制器中的常见问题