阿里巴巴2017秋招研发工程师笔试题详解

2.在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起冲突的是:

A.其中一个DELETE操作,一个是SELECT操作
B.其中两个都是UPDATE
C.其中一个是SELECT,一个是UPDATE
D.其中一个SELECT
E.其中一个是DELETE,另一个是UPDATE
F.两个都是DELETE

解析:F

当要删除的记录在数据库中不存在的时候,是不会报错的。

3.众所周知我们所处的宇宙的质能公式是E=mc 2 ,其中c是真空中的光速。和我们的宇宙平行的另一个宇宙meta,研究显示他们使用的质能公式是E=(2+ √3) m ,当一个物体的质量很大的时候,对应的能量E非常大,数据也非常的长。但meta宇宙里面的智慧生物非常的懒,他们只愿意把E取整,然后记录对应的能量E的最后一位整数,比如m=0时,他们会记录1,m=1时,他们会记录3,m=2时,他们会记录3.现在请问当m=80时,他们会记录多少?

A.1
B.2
C.3
D.4
E.5
F.6

题解:C

这道题的确是有规律,但是133规律的理由实际上是比较复杂的,并不是试出来的,因为存在有分数部分,所以规律在不被证明的情况下是可能打破的,但这种类型题的确是找规律才能解决,这里提供一个解法。

思考这个式子:(2+ √3) m +(2- √3) m ;你可能考虑到了两点,1是展开后,所有根式项被消去了剩下的是整数,2是(2- √3) m 这个式子永远都是一个小于1的数字。通过这两点,我们可能可以想了,实际(2+ √3) m +(2- √3) m 这个整数减1实际就是(2+ √3) m 的所有整数部分。

我们可以试一试假设f(m) = (2+ √3) m +(2- √3) m ,那么f(0) = 2,f(1) = 4,f(2) = 14,f(3) = 52,f(4) = 194,f(5) = 724看到这里,可能又有人说我发现这个规律了!末尾数是244的循环。的确这个规律是正确的,但是在没被证明的情况下,万一f(30)出现了小差错呢,都是有可能的,如费马的大素数猜想后来也被欧拉举出反例。

那现在来证明,根据之前的f(0) ~ f(5) 的结果,我们其实有一个大致的方向了,证明这个数列满足末尾数是244循环出现的!好了其实有这个思路之后,最直接的想法其实是根据通式求出递推式,若递推满足,那么我们猜想成立。我直接是猜测这个式子的满足线性,为什么,因为不满足线性的式子基本不可能出现循环规律(经验告诉我哈)。

好吧那么我们基本可以猜想这个式子实际是满足这个格式的f(m)=af(m-1)+bf(m-2),满不满足呢?试试,那么得出下列式子:

7+4√3=(2+√3)a+b

7-4√3=(2-√3)a+b

消去得出,a=4,b=-1。哈?好像猜对了。f(m+2)=4f(m+1)-f(m),在满足这种规律的情况下,只计算个位数用T(m)表示,T(0)=2,T(1)=4,T(2)=4,T(3)=4*4-4=2,T(4)=4*2-4=4,T(4)=4*2-4=4,当末尾重复出现244,并且显然在满足这个通式的情况下永远不会跳出这个循环。考虑T(80)=4。那么选4,呸呸呸!别忘了还要减一个(2- √3) m ,这个是一个小于1的数,所以结果肯定是xxxxx3.xxxxxx,个位数部分是3哦

 

4.页高速缓存是Linux kerne使用的主要的磁盘缓存技术。它允许系统把存放在磁盘上的一些数据保留在内存中,以便减少对磁盘的访问。进程对页高速缓存区中的数据修改之后,数据页被标记为“脏数据”在下列哪些条件下,脏数据不会被写入磁盘?

A.页高速缓存空间不足
B.突然断电
C.变脏以来,太久没有过更新
D.通过系统调用(sync(),fsync(),fdataasync())来强行对将对快设备的更新同步到磁盘
E.内存足够大
F.磁盘足够大

题解:B E

当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

9.以下程序的运行结果是?

 

 

A.foobar
B.barfoo
C.foobar或者barfoo都有可能
D.Bar
E.Foo
F.程序无法正常运行

题解:A

调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体。
1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;
2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码, 这样就没有达到写线程的目的。

10.输入图片大小为200×200,依次经过一层卷积(kernel size 5×5,padding 1,stride 2),pooling(kernel size 3×3,padding 0,stride 1),又一层卷积(kernel size 3×3,padding 1,stride 1)之后,输出特征图大小为:

A.95
B.96
C.97
D.98
E.99
F.100

题解:C

输入图片大小 W×W
Filter大小 F×F
步长 S
padding的像素数 P
N = (W − F + 2P )/S+1 (这里向下取整才对)

11.一个二叉树有100个子节点数为2的节点,100个子节点数为1的节点,那么个子节点数为0的节点(叶节点)的个数为:

A.101
B.100
C.200
D.300
E.99
F.1

题解:A

首先,假设该二叉树有n个节点,则有n - 1条边,这是因为除了根节点,其余的每个节点都有且只有一个父节点,那么这n个节点恰好为树贡献了n-1 条边。这是从下往上的思考,而从上往下(从树根到叶节点)的思考,容易得到每个节点的度数和 0*n0 + 1*n1 + 2*n2 即为边的个数。
因此,我们有等式 n-1 = n1 + 2*n2,把n用n0+n1+n2替换,
得到n0 + n1 + n2 - 1 = n1 + 2*n2,于是有
n0 = n2 + 1。

n0=n2+1=100+1=101

12.某种类型的双核 CPU 的性能提升了 1/3 ,假定该提升是通过对每条指令缩短执行时间实现的,那么它每条指令执行时间缩短了 () 。

A.1/4
B.1/8
C.1/3
D.1/6
E.1/5
F.1/2

解析:A

设 原来:1秒执行1条指令 现在:1秒执行4/3条指令
则 现在执行一条指令花费1秒/(4/3)=3/4秒
所以 每条指令执行时间缩短了1秒-3/4秒=1/4秒

13.一个map-reduce任务由m个mapper和r个reducer构成,计算的效率可以认为正比于mr的乘积(数据管道的个数),在限定任务的mr乘积约等于10000的情况下,假定每个mapper和每个reducer的成本分别为1和7,那么最佳的资源分配最接近于以下哪个方案?

A.mapper100个,reducer100个
B.Mapper200个,reducer50个
C.Mapper264个,reducer38个
D.Mapper316个,reducer32个
E.Mapper500个,reducer20个
F.Mapper1000个,reducer10个

解析:C

假定每个mapper和每个reducer的成本分别为1和7, 其实就是求最后和最小的方案
A : 100 + 100*7 = 800
B: 200 + 50*7 = 550
C: 264 + 38*7 = 530
D: 316 + 32*7 = 540
E: 500 + 20 * 7 = 640
F 1000 + 10*7 = 1070

所以C答案组合方式是最小成本组合。
C: Mapper264个,reducer38个

15.一个机器人玩抛硬币的游戏,一直不停的抛一枚不均匀的硬币,硬币有A,B两面,A面的概率为3/4,B面的概率为1/4。问第一次出现连续的两个A年的时候,机器人抛硬币的次数的期望是多少?

A.9/4
B.11/4
C.15/4
D.4
E.5
F.28/9

解析:F

注意题目要求是求期望。假设期望值为E。

先看第一次抛硬币:

如果抛到反面,那么还期望抛E次,因为抛到反面完全没用,总数就期望抛E+1,即: 1/4(E+1)
如果抛到正面,那么要看下一次。 如果下一次也是正面,那抛硬币就结束了,总数是2,即: 3/4 * 3/4 * 2
如果下一次是反面,那么相当于重头来过,总数就期望抛E+2,即: 3/4 * 1/4 * (E+2)
那么有:E = 1/4(E+1)+ 3/4 * 3/4 * 2 + 3/4 * 1/4 * (E+2)
得出 E = 28/9

16.小a和小b一起玩一个游戏,两个人一起抛掷一枚硬币,正面为H,反面为T。两个人把抛到的结果写成一个序列。如果出现HHT则小a获胜,游戏结束。如果HTT出现则小b获胜。小a想问一下他获胜的概率是多少?

A.3/4
B.1/2
C.2/3
D.5/9
E.1/3
F.1/4.

解析:C

 

 

首先,这是一个无限递归的问题,需要求极限:

1、b赢的线路更清晰一些,所以我们分析b赢的概率。
2、在一层递归里面,b确定赢的概率是1/4,但是剩下的1/4中,b可能输,也可能赢,赢的概率也是1/4
3、所以b=1/4+(1/4)^2+(1/4)^3+……=1/3

相应的a赢的概率就是2/3

18.以下哪个行为,不会明显加剧客户端运行过程中的卡顿:

A.在主线程集中处理耗时的操作
B.在子线程集中处理耗时的操作
C.在其它进程集中处理耗时的操作
D.提高后台线程的优先级
E.降低主线程的优先级
F.页面存在多个重叠显示的控件

题解:C

在其他进程里面处理耗时操作,相当于在另外的虚拟机里面执行操作,因此和当前的虚拟机也就是客户端没有明显的关系,如过不理解可以类比一下AIDL,客户端的一次请求就相当于一次RPC,请求到了服务器之后会在Binder线程池执行操作,而如果后台软件过多,只是因为CPU轮换和内存不足。题目说的是不会明显加剧卡顿,这是会造成卡顿的。

19.以下程序的输出是:

 

A.1,6
B.2,5
C.2,4
D.3,5
E.4,7
F.1,1

题解:D

 

首先第一个f函数 是个斐波那契数列 可知 f(7)=21 f(9)=55
下边count函数 是用来统计n的二进制表示中1个数量。count函数的原理 你可以去查MIT HAKMEM 169算法。

21 10101 55 110111

 

posted on 2021-08-10 11:53  九月旧约  阅读(306)  评论(0编辑  收藏  举报

导航