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

    小编:管理员 1396阅读 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<n<p<q,以下计算效率最高的是

    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=<A, B, C, B, D, A, B>,Y=<B, D, C, A, B, A>,那么它们的最长公共子序列为<B, C, B, A>,它的特点在于每个字符可以不连续。LCS问题在实际中也有非常多的应用,比如说用于论文查重等。

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

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

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

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

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

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

    关联标签: