2021年阿里巴巴工程師A筆試面試題

小編:管理員 439閱讀 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題:


通過算法生成的隨機數是“偽隨機”的,也就是說,在設定好第一個數之后,后面的數字的序列是確定的,并且經過一個非常大的循環會回到第一個數的狀態,然后周而復始。顯然,搖號、抽獎的程序是不能通過偽隨機數來實現的,F實中常;谀撤N熱噪聲來實現真正的隨機數。假定某熱噪聲是標準正態分布,那么能否將它轉換成(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,在食鹽用完之后,還有一些食鹽粉末(體 積可以忽略)殘留在瓶子壁上,F在要把該瓶子改裝糖,給你 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]的值隨時可能在某個時刻被清零。

關聯標簽: