2021年阿里巴巴工程师A笔试面试题

小编:管理员 3308阅读 2021.06.11

第1题:


下列关键字序列为堆的是______。

A.100,60,70,50,32,65
B.60,70,65,50,32,100
C.65,100,70,32,50,60
D.70,65,100,32,50,60
E.32,50,100,70,65,60
F.50,100,70,65,60,32

答案:A



第2题:


如果一个博物馆参观者到达的速率是每分钟 20 人,平均每个人在馆内停留20分钟,那么该博物馆至少需要容纳______人才行?

A.100
B.200
C.300
D.400
E.500
F.600

答案:D



第3题:


计算三个稠密矩阵 A、B、C 的乘积 ABC,假定三个矩阵的尺寸分别为 m*n, n*p,p*q,且 m

A.(AB)C
B.A(BC)
C.(AC)B
D.(BC)A
E.(CA)B

答案:A



第4题:


通过算法生成的随机数是“伪随机”的,也就是说,在设定好第一个数之后,后面的数字的序列是确定的,并且经过一个非常大的循环会回到第一个数的状态,然后周而复始。显然,摇号、抽奖的程序是不能通过伪随机数来实现的。现实中常常基于某种热噪声来实现真正的随机数。假定某热噪声是标准正态分布,那么能否将它转换成(0,1)区间上的均匀分布______?

A.忽略测量和计算误差,可以转换为(0,1)区间上的均匀分布
B.无法转换为(0,1)区间上的均匀分布
C.信息不足,无法判断
D.借助伪随机数生成算法可以转换为(0,1)区间上的均匀分布
E.仅仅靠伪随机数生成算法,就可以生成(0,1)区间上的均匀分布
F.以上说法都不对

答案:A



第5题:


有一个用数组 C[1..m]表示的环形队列,m 为数组的长度。假设 f 为队头元素在数组中的位置,r 为队尾元素的后一位置(按顺时针方向)。若队列非空,则计算队列中元素个数的公式应为?

A.(m+r-f)mod m
B.r-f
C.(m-r+f) mod m
D.(m-r-f) mod m
E.(r-f) mod m

答案:A



第6题:


某足球队有四名外援,分别来自巴西、荷兰、意大利和美国。他们分别擅长前 锋、后卫或守门,其中:
① 美国外援单独擅长守门;
② 意大利外援不擅长前锋;
③ 巴西外援和另外某个外援擅长相同的位置;
④ 荷兰外援擅长的位置和巴西外援不同。
以上条件可以推出巴西外援擅长的位置是______。

A.前锋
B.守门
C.后卫
D.前锋或守门
E.后卫或守门
F.前锋或后卫

答案:C



第7题:


二分查找树里查询一个关键字的最坏时间复杂度是______

A.O(n)
B.O(n log n)
C.O(n^2)
D.O(n^3)
E.O(logn)
F.不确定

答案:A



第8题:


假设某段通信电文仅由 6 个字母 ABCDEF 组成,字母在电文中出现的频率分别为2,3,7,15,4,6。根据这些频率作为权值构造哈夫曼编码,最终构造出的哈夫曼树带权路径长度与字母 B 的哈夫曼编码分别为______。(这里假定左节点的值小于右节点的值)

A.86,1011
B.70,1000
C.86,0001
D.70,0010
E.92,1000
F.92,0100

答案:A



第9题:


并发进程执行的相对速度是______。

A.由进程的程序结构决定
B.由进程本身来控制
C.进程被创建时决定
D.与进程调度策略有关
E.与进程的销毁时间有关
F.由内存分配策略决定

答案:D



第10题:


某团队有 2/5 的人会写 Java 程序,有 3/4 的人会写 C++程序,这个团队里同时会写 Java 和 C++的最少有______人。

A.3
B.4
C.5
D.8
E.15
F.20

答案:A



第11题:


有一个装过食盐的瓶子,容积是 w,在食盐用完之后,还有一些食盐粉末(体 积可以忽略)残留在瓶子壁上。现在要把该瓶子改装糖,给你 u 体积的纯净 水,用来清洗该瓶子。在每次清洗之后,瓶子里会残留至少 v 体积的水(食盐 溶液,可以忽略盐的体积) 。假设 w>u>v,请问下述哪种方式使用这些纯净 水,能把瓶子洗得最干净______?

A.把所有的纯净水全部倒入瓶子,然后把水倒掉
B.将纯净水平均分成两份,用每一份清水洗一遍瓶子。
C.每次注入体积为 v 的纯净水清洗瓶子,直到纯净水用尽
D.每次注入体积为 2v 的纯净水清洗瓶子,直到纯净水用尽
E.将用过的水重新诸如瓶子,多次清洗
F.以上方法清洗效果相同

答案:C



第12题:


下列 C 代码中,不属于未定义行为的有:______。

A.int i=0;i=(i++);
B.char *p=”hello”;p[1]=’E’
C.char *p=”hello”;char ch=*p++
D.int i=0;printf(“%d%d\n”,i++ i--)
E.都是未定义行为
F.都不是未定义行为

答案:C



第13题:


毕业典礼后,某宿舍三位同学把自己的毕业帽扔了,随后每个人随机地拾起帽子,三个人中没有人选到自己原来带的帽子的概率是

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

答案:B



第14题:


村长带着 4 对父子参加爸爸去哪儿第三季第二站某村庄的拍摄。村里为了保护小孩不被拐走有个前年的规矩,那就是吃饭的时候小孩左右只能是其他小孩或者自己的父母。那么 4 对父子在圆桌上共有___种坐法。 (旋转一下,每个人面对的方向变更后算是一种新的坐法)

A.144
B.240
C.288
D.480
E.576
F.960

答案:D



第15题:


分布式系统中,______不是可扩展性所需要的

A.无状态应用集群
B.分布式缓存
C.负载均衡
D.硬件共享存储
E.分而治之的策略
F.以上所有都是

答案:F



第16题:


若干个等待访问磁盘者依次要访问的磁道为 19, 43, 40, 4, 79,11,76,当前磁头位于 40 号柱面,若用最短寻道时间优先磁盘调度算法,则访问序列为___

A.19,43,40,4,79,11,76
B.40,43,19,11,4,76,79
C.40,43,76,79,19,11,4
D.40,43,76,79,4,11,19
E.40,43,76,79,11,4,19
F.40,19,11,4,79,76,43

答案:B



第17题:


C++内存分配中说法错误的是:______。

A.对于栈来讲,生长方向是向上的,也就是向着内存地址增加的方向
B.对于堆,大量的 new/delete 操作会造成内存空间的不连续
C.堆容易产生 memory leak D,堆的效率比栈要低的多
D.堆的效率比栈要低得多
E.栈变量引用容易逃逸
F.以上都对

答案:A



第18题:


下列关于网络编程错误的是______。

A.UDP 是不可靠服务
B.主动关闭的一端会出现 TIME_WAIT 状态
C.服务端编程会调用 listen(),客户端也可以调用 bind()
D.TCP 建立和关闭连接都只需要三次握手
E.Linux 通过提供提供 socket 接口来进行网络编程
F.长连接相对短连接可以节省建立连接的时间

答案:D



第19题:


在 32 位操作系统中,下列类型占用 8 个字符的为______。

A.short int
B.Int C long
C.Unsigned int
D.Long long
E.Char
F.Int

答案:D



第20题:


在小端序的机器中,如果 

union X{

    int x;

    char y[4];

};

如果:
X a;
a.x=0x11223344;//16 进制 则:______

A.a.y[0]=11
B.a.y[1]=11
C.a.y[2]=11
D.a.y[3]=11
E.a.y[0]=22
F.a.y[3]=22

答案:D



第21题:


[问答题]

题目描述

java 中的 wait()方法和 sleep()方法的区别是什么?




对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备。


第22题:


[问答题]

题目描述

写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。




先求每个子树的最大值和最小值,递归实现。


第23题:


[问答题]

题目描述:

给定一个 query 和一个 text,均由小写字母组成。要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。例如, query 为“acbac”,text 为 “acaccbabb”,那么 text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3。请注意程序效率。




最长公共子序列

看过《算法导论》的人应该知道,动态规划中一个非常经典的例子就是LCS(Longest Common Length)最长公共子序列问题。下面我们来回顾一下LCS的概念。

    假设有两个字符串,X=,Y=,那么它们的最长公共子序列为,它的特点在于每个字符可以不连续。LCS问题在实际中也有非常多的应用,比如说用于论文查重等。

    都说表达一个动态规划算法的精髓在于状态转移方程,那么我们就顺便回忆一下LCS的状态转移方程吧。如果用c[i, j]来表示序列Xi和Yi的LCS的长度,那么有状态转移方程:

 
    下面进入本文的重点。如果将LCS的条件加严,要求子序列中的字符必须是连续的。那么应该如何求解这个最长公共连续子序列呢?

    为了便于书写,后文中再提到“最长公共连续子序列”,我都一律用STRICT-LCS代替。

    为了便于理解,还是用之前的两个字符串来举例说明什么是STRICT-LCS。X=,Y=。那么它们的最长公共连续子序列为

    我们仍然用Dynamic Programming求解。只不过在原来的基础上需要改变。首先,我们定义c[i, j]跟原来的意义略有不同。这里c[i, j]指的是最后一个元素为Xi(=Yj)的STRICT-LCS的长度,比如X=,Y=那么c[3, 3]=0,不管前面如何,如果Xi和Yj不相等,就得将c[i, j]清零,作为新的开始。

    LCS中,c[i, j]的值随着i、j值增大而渐渐增大,有累计效应;但是STRICT-LCS中,c[i, j]的值随时可能在某个时刻被清零。

关联标签: