天天看点

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

转载请注明出处:http://blog.csdn.net/lingzhm

这是2015年4月阿里巴巴集团实习生招聘的在线笔试题,本试题是Java研发工程师职位的题目(虽然选择题没有一道跟Java有关),C++研发及测试开发、算法工程师均是类似题目,重复率较高,故不再一一列出。图片中的选项不一定是正确答案。题目的分析答案由个人整理不保证完全正确,仅供大家参考。若针对个别题目有其他答案可以评论留言,一起学习。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:概率论中的几何模型,建立XY坐标系,画图,分两种情况,A先到,则B在A之后的一个小时内到均可,同理,B先到,A在B到的2小时内到均可。把正确的面积用每个点连接起来,除以总面积,得出19/32。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:

1、    fail fast :“快速失败”也就是fail-fast,它是Java集合的一种错误检测机制。当多个线程对集合进行结构上的改变的操作时,有可能会产生fail- fast机制。记住是有可能,而不是一定。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程 2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出 ConcurrentModificationException 异常,从而产生fail-fast机制。

2、     graceful degradation:优雅降级(Graceful degradation)是指电脑,机器,电子系统或者是网络在本身大部分已经毁坏或无效的情况下还能保持有限的功能这种能力。优雅降级的目的是阻止灾难 性的失败。理想情况下,有优雅降级特征的系统即使多个组件同时失效也不会引起停机。在优雅降级中,操作的效率和速度随着失效部件的增加逐渐下降。

3、     backup:备份。为应付文件、数据丢失或损坏等可能出现的意外情况,将电子计算机存储设备中的数据复制到磁带等大容量存储设备中。

4、     sandbox: 沙箱(Sandbox)是一种程序的隔离运行机制,其目的是限制不可信进程或不可信代码运行时的访问权限。沙箱技术经常被用于执行未经测试的或不可信的客户程序。为了阻止不可信程序可能破坏系统程序或破坏其它用户程序的运行,沙箱技术通过为不可信客户程序提供虚拟化的内存、文件系统、网络等资源,而这种虚拟化手段对客户程序来说是透明的。由于沙箱里的资源被虚拟化(或被间接化),所以沙箱里的不可信程序的恶意行为可以被限制在沙箱中,或者在沙箱里只允许执行在白名单里规定的有限的API操作。 沙箱技术一直是系统安全领域的挑战,不存在说哪一种方案是足够安全的。

5、     checkpoint: checkpoint是一个内部事件,这个事件激活以后会触发数据库写进程(DBWR)将数据缓冲(DATABUFFER CACHE)中的脏数据块写出到数据文件中。作用:保证数据库的一致性。

6、     watchdog: 【应该不是watchdo】在由单片机构成的微型计算机系统中, 由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:lg是对数函数: log以10为底的对数。如lg100=2, 这里令f(x) =ax2-8x+a-6, 题目称该对数函数的值域为R,但并没有强调定义域,即X的取值范围,因此,我们考察f(x)发现a取值的三种情况直接影响f(x)的曲线形状:

1、a = 0时,f(x) = -8x-6,由对数函数的性质我们知道-8x-6 > 0, f(x)此时的图像是一条直线,可以解出x的取值范围,使得对数函数值域为R,所以a=0是满足条件的。

2、a < 0 时,f(x)的曲线类似一座山峰有最大值,因此,既然对数函数的值域为R,那么值域总存在非常大的值n,10^n肯定能大于f(x)的最大值,因此存在最大值的f(x)不能使得对数函数的值域为R,且无论X取什么值。

3、a > 0 时,f(x)的曲线类似一个山谷有最小值m,这个最小值m可能小于0,大于0,等于0,假如 m > 0,那么[0, m)是f(x)无法取到的值,那么假如对数值域取一个很小的数k,10^k 正好属于[0, m),无论X取何值,显然无法满足值域为R,排除,那么,当m <= 0时,f(x)一定能取到[0,+ ∞),既然能完全满足对数值域为R这个条件,显然最小值m <= 0是可行的,意味着f(x)跟X轴要么有一个交点,要么有两个焦点,也就是△ = b2 - 4ac >=0, △ =-4a2+24a+64>= 0,解得a∈[-2,8],根据1,a=0是可以的,而3的条件是a>0,所以a∈[0,8],有人会问,这里让f(x)跟x轴交点了,岂不是不满足对数函数的定义了吗?答案是,我们有X,即定义域来限制这个问题,所以当a=0时定义域肯定跟a∈(0,8)时的定义域不同,但题目并没有要求函数的定义域是R。同理,题目若仅要求对数函数的定义域为R则会简单得多。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:建一个空表,实验一下。(1)是聚合函数,即使是空表,也会返回0。 而(2)(3)如果对空表执行,会返回NULL。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:为不失一般性,不妨考虑n!后面有几个0,因为总存在5的倍数,有2结尾的数使其乘出0,那么这里100/5 = 20.即存在20个5的倍数,其中包括5/10/15/20/25/···等等,这时我们发现,25 = 5 X 5 ,也就是说如果某个数是25的倍数,那么肯定会存在诸如4、8等的数,使其乘得的结果是2个0,由于之前我们考虑了25是5的倍数计算了一次5,那么这里的25倍数的个数n, 会使得在之前20个的基础上多出n个0,(而并非2n),那么100/25 = 4 ,有4个25的倍数,故100后面有24个0。但如果求126!的后面有多少个0呢?在我们前面分析的基础上,我们发现,125的倍数可以写成n*5*5*5,存在诸如14等任意末尾是4的数乘其得4个0,由于125是5的倍数计算过,25的倍数也计算过,所以这里意味着125多出一个5,即多出一个0。(当然,我们前面要重新计算125/5的个数等等··)同理1000!的阶乘后面0的个数我们就得考虑到有多少625倍数的数。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:二叉排序树,左孩子结点小于当前结点,右孩子结点大于或等于当前结点,其他结点同样符合该条件,按照序列顺序插入后,再插入8,实际上就是在5后面继续构建8结点,中序遍历规则就是左中右。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:*S1指向的是位于只读数据区的字符串常量的H的地址,对其进行修改是禁止的,所以1语句非法,语句3同理,编译通过,运行会发生不可预料的后果。(笔试的时候有点不相信自己的眼睛,这真的是Java研发工程师的题吗?)

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:答案是a=10,*p = 20。都知道常量不能被修改,但是可以通过指针对其进行修改,这里a、p的地址都是相同的,那么为什么输出结果反而不一样呢?这就是常量折叠。这个"常量折叠"就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。只是改了这个地址内容,但是a还是10,因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:排列组合计算公式:

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

公式P是指排列,从N个元素取r个进行排列,有顺序问题,例如几个数字排列成多少个三位数。计算方法可以简单理解为,从N开始向后阶乘r位。如P(5,3) = 5*4*3,实际上就是5向后乘了3位。公式C是指组合,从N个元素取R个,不进行排列,类似集合的概念。计算方法可以理解为,从N开始向后阶乘r位,再除以r的阶乘。

此外,象棋规则也需要了解,車要攻击,必须在同一条直线上,而且,这里题目中讲的6*6棋盘,不是6*6=36个方格,而是5*5=25个方格,因为象棋不是在方格内行棋的,而是在方格线上,所以这里的6*6棋盘是方格交点的个数而不是小方格的个数。首先,我们从36个点中取一个出来,拿一个車放置在这个位置,有36种取法,那么此时被第一个車占领的横线竖线就不能用来放置第二个車(因为会导致攻击,不符合题意),因此,第二个車只能放置在剩下的36-11 = 25个位置中的一个,有25种放法,同理,第三个車不能放置在被前两个車占领的两横两竖线上,只能放在剩下的25-9 = 16个位置上,再同理,最后一个只能放置在剩下的9个位置上。注意到,题目并没有说明这四个車是有编号的,即这是一个组合问题,而并非排列问题,就像4个車ABCD放在仅有的四个位置,问有几种放法,显然,跟上面的方法一样,我们得出有4*3*2*1 = 24种,但实际上如果不标记这四个車的编号,那么C(44) = 1,仅有一种,因此我们必须除去因排列的手段(理解起来更简单)重复放置的次数,即36*25*16*9/ 4! = 5400

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:组合数学问题,未解答。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:答案是26,从后向前推,最后甲乙丙—>16,16,16,则第三轮执行前甲乙丙à8,8,32,同理第二轮执行前甲乙丙à4,28,16,同理第一轮执行前甲乙丙à26,14,8。OK,不放心的话反推验证一下。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:bitset:一种高效位集合操作容器。标准非STL容器是指“可以认为它们是容器,但是他们并不满足STL容器的所有要求”。 容器适配器stack、queue及priority_queue都是标准非STL容器的一部分。此外,valarray也是标准非STL容器。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:该算法实现请查看博客中文章。

http://blog.csdn.net/lingzhm/article/details/44872481

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

明显看出10号结点下降到3有2个红色结点,而下降到12有1一个红色结点。注意到性质4导致了路径不能有两个毗连的红色节点就足够了。最短的可能路径都是黑色节点,最长的可能路径有交替的红色和黑色节点。因为根据性质5所有最长的路径都有相同数目的黑色节点,这就表明了没有路径能多于任何其他路径的两倍长。它可以在O(log n)时间内做查找,插入和删除。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:有向图的深度优先遍历,1、E访问后肯定访问F  2、正确  3、A到D未访问不可能访问F,4、正确,5、正确。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上FTP 服务器,就要用到 FTP 的客户端软件,通常Windows自带“ftp”命令,这是一个命令行的 FTP客户程序,另外常用的 FTP 客户程序还有CuteFTP、Flashfxp等。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:【排列组合问题】个位数中(0~9),有9个数是不包括数字3的,两位数中,(10~99)十位不能放0和3,则有8种选择,个位不能是3,则个位有9种选择,因此,两位数中有8*9个数不包括3。同理三位数中有8*9*9个数不包括3,四位数->8*9*9*9个,五位数->8*9*9*9*9个,六位数->8*9*9*9*9*9。

全部加起来,得531441。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:你问第一个机器人:我是一只狗,是吗?如果它说不是,OK,正常机器人,否则是智障机器人。同理问第二个,第三个。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析略。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

分析:P[0]的值等于a,p[0]+1,指向下一个元素即a[1] = 2的地址,   *(p[0]+1)取出2,q跟p指向同一个位置,指针数组的前部,q+2,下移到a+2的位置,*(q+2)取出a+2的值(是一个地址,指向3的位置),**(q+2)取出3。

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

未理解题目意图。

附加题:(80分钟)

一、

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

二、

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)

三、

2015年阿里巴巴实习生招聘笔试题详细解析(研发大类:Java研发/C++研发)