天天看點

阿裡筆試題整理1

1.下面哪一個不是動态連結庫的優點?(B)

A.共享

B.裝載速度快

C.開發模式好

D.減少頁面交換

知識補充

1)動态連結庫:

a.動态連結提供了一種方法,使程序可以調用不屬于其可執行代碼的函數。

b.使用動态連結庫可以更為容易地将更新應用于各個子產品,而不會影響該程式的其他部分。

c.動态連結庫檔案,是一種不可執行的二進制程式檔案,它允許程式共享執行特殊任務所必需的代碼和其他資源。

https://baike.baidu.com/item/動态連結庫/100352?fr=aladdin#4

2)動态連結庫的優缺點

a. 更加節省記憶體并減少頁面交換;

b. DLL檔案與EXE檔案獨立,隻要輸出接口不變(即名稱、參數、傳回值類型和調用約定不變),更換DLL檔案不會對EXE檔案造成任何影響,因而極大地提高了可維護性和可擴充性;

c.不同程式設計語言編寫的程式隻要按照函數調用約定就可以調用同一個DLL函數;

d.适用于大規模的軟體開發,使開發過程獨立、耦合度小,便于不同開發者和開發組織之間進行開發和測試。

e. 使用動态連結庫的應用程式不是自完備的,它依賴的DLL子產品也要存在,如果使用載入時動态連結,程式啟動時發現DLL不存在,系統将終止程式并給出錯誤資訊。而使用運作時動态連結,系統不會終止,但由于DLL中的導出函數不可用,程式會加載失敗;速度比靜态連結慢。當某個子產品更新後,如果新子產品與舊的子產品不相容,那麼那些需要該子產品才能運作的軟體,統統撕掉。這在早期Windows中很常見。

3)靜态連結庫:

所謂靜态連結庫,說白了就是在你把寫好的代碼編譯的時候,就把你引用的庫一起給編進去了,從此後你編出來的執行程式跟外面都不再有任何關系,即使這個庫更新了,你也搭不上邊兒,其次,如果系統中許多類似的程式都需要用到這個庫,那麼各自在編譯的時候都需要把這個庫給編進去,浪費存儲空間(加載到記憶體裡應該也是浪費記憶體空間的)。linux系統中靜态庫的名字一般叫xxx.a, 是以如果你看到一個以 .a結束的檔案那麼它多半就是一個靜态連結庫檔案。

4)靜态連結庫的優缺點:

a.代碼裝載速度快,執行速度略比動态連結庫快;

b.隻需保證在開發者的計算機中有正确的.LIB檔案,在以二進制形式釋出程式時不需考慮在使用者的計算機上.LIB檔案是否存在及版本問題,可避免DLL地獄等問題。

c.使用靜态連結生成的可執行檔案體積較大,包含相同的公共代碼,造成浪費;

2.n個數值選出最大m個數(3<m<n)的最小算法複雜度是(A)

A.O(n)

B.O(nlogn)

C.O(logn)

D.O(mlogn)

E.O(nlogm)

F.O(mn)

知識補充:

1)最簡單的方法:将n個數排序,排序後的前k個數就是最大的k個數,這種算法的複雜度是O(nlogn)。

2)O(n)的方法:利用快排的patition思想,基于數組的第k個數來調整,将比第k個數小的都位于數組的左邊,比第k個數大的都調整到數組的右邊。

3)O(nlogm)的方法:先建立一個大小為m的最小堆,接下來我們每次從輸入的n個整數中讀入一個數,如果這個數比最小堆的堆頂元素還要大,那麼替換這個最小堆的堆頂并調整。

4)部分快排 時間複雜度 O(N) ,存儲複雜度 O(N);堆排序 時間複雜度 O(NlogM) 空間複雜度 O(M) 。如果數組能存下的話,O(N) 是最小時間複雜度。但是你可能面臨從(檔案)流中讀取資料,O(N) 的空間複雜度超過記憶體限制的情況,這種情況下就該用優先隊列了。

3.由權值分别為1、12、13、4、8的葉子節點生成一顆哈夫曼樹,它的帶權路徑長度為(F)

A.12

B.68

C.43

D.6

E.25

F.81

知識補充:

1)哈弗曼樹

a.給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。

b.路徑和路徑長度。在一棵樹中,從一個結點往下可以達到的孩子或孫子結點之間的通路,稱為路徑。通路中分支的數目稱為路徑長度。若規定根結點的層數為1,則從根結點到第L層結點的路徑長度為L-1。

c.結點的權及帶權路徑長度。若将樹中結點賦給一個有着某種含義的數值,則這個數值稱為該結點的權。結點的帶權路徑長度為:從根結點到該結點之間的路徑長度與該結點的權的乘積。

d.樹的帶權路徑長度。樹的帶權路徑長度規定為所有葉子結點的帶權路徑長度之和,記為WPL。

阿裡筆試題整理1

4.阿裡巴巴國際站的股票代碼是1688,這個數字具有這樣的特性,首先是個首位為1的4位數,其次恰巧有且僅有1個數字出現了兩次。類似的數字還有:1861,1668等。這樣的數字一共有(F)個。

A.144

B.180

C.216

D.270

E.288

F.432

知識補充:

分兩種情況讨論:

1)若這個四位數的重複數字為1,那麼首先從三個空位中選出一個給1,第二步從剩下9個可選數字中選出2個有序的排列到剩下的兩個空位中去,那麼有C(1,3)A(2,9)=3(9!/(9-2)!)=398=216種可能;

2)若這個四位數的重複數字不為1,那麼首先從9個可選數字中選出一個作為重複數字(C(1,9)),并放到三個空位中的兩個(這兩個數字相同,故隻涉及組合)(C(2, 3)),然後從剩下8個數字中選出一個(它的位置在重複數字确定後就自然固定了,不可選)即可,故有C(1,9)*C(2, 3)*C(1, 8)=216種可能。

總共:216+216=432

5. 工程師M發明了一種遊戲:M将一個小球随機放入完全相同的三個盒子中的某一個,玩家選中裝有球的盒子即獲勝;開始時M會讓玩家選擇一個盒子(選擇任何一個獲勝機率均為1/3);玩家做出選擇後,M會打開沒有被選擇的兩個盒子中的一個空盒,此時M會詢問玩家是否更改選擇(可以堅持第一次選擇,也可以選擇另一個沒有打開的盒子),下列叙述正确的有(E)。

A.改選後,玩家獲勝的機率還是1/3

B.若不改選,玩家的獲勝機率是1/2

C.無論怎麼選擇,獲勝的機率都是1/2

D.堅持原來的選擇獲勝機率更高

E.選擇另一個沒有被打開的盒子獲勝機率更高

F.獲勝機率取決于随機因素(如小球的實際位置)

知識補充:

三個盒子A,B,C。其中,1表示有球,0表示沒球。

選取三個盒子機率都一樣。我們假設選擇了A。

此時有三種情況如下所示:

情況一:我選中了有球的盒子,我更換的話将失敗,不更換的話将成功。

情況二:我選中了沒球的盒子,我更換的話将成功,不更換的話将失敗。

情況三:我選中了沒球的盒子,我更換的話将成功,不更換的話将失敗。

綜上,我們發現更換了成功的機率是2/3;二不更換成功的機率是1/3。

是以選擇E。

6.以下哪種方式,在讀取磁盤上多個順序資料塊時的效率最高?(C)

A.中斷控制方式

B.DMA方式

C.通道方式

D.程式直接通路方式

E.循環檢查I/O方式

F.以上通路方式都一樣

知識補充:

1)程式直接通路方式跟循環檢測IO方式,應該是一個意思吧,是最古老的方式。CPU和IO串行,每讀一個位元組(或字),CPU都需要不斷檢測狀态寄存器的busy标志,當busy=1時,表示IO還沒完成;當busy=0時,表示IO完成。此時讀取一個字的過程才結束,接着讀取下一個字。

2)中斷控制方式:比循環檢測先進些,IO裝置和CPU可以并行工作,隻有在開始IO和結束IO時,才需要CPU。但每次隻能讀取一個字。

3)DMA方式:Direct Memory Access,直接存儲器通路,比中斷先進的地方是每次可以讀取一個塊,而不是一個字。

4)通道方式:比DMA先進的地方是,每次可以處理多個塊,而不隻是一個塊。

7.下列不是程序間的通信方式的是(B)

A.管道

B.回調

C.共享記憶體

D.消息隊列

E.socket

F.信号量

知識補充:

1)管道( pipe ):管道是一種半雙工的通信方式,資料隻能單向流動,而且隻能在具有親緣關系的程序間使用。程序的親緣關系通常是指父子程序關系。

2)信号量( semophore ) : 信号量是一個計數器,可以用來控制多個程序對共享資源的通路。它常作為一種鎖機制,防止某程序正在通路共享資源時,其他程序也通路該資源。是以,主要作為程序間以及同一程序内不同線程之間的同步手段。

3) 消息隊列( message queue ) : 消息隊列是由消息的連結清單,存放在核心中并由消息隊列辨別符辨別。消息隊列克服了信号傳遞資訊少、管道隻能承載無格式位元組流以及緩沖區大小受限等缺點。

4) 共享記憶體( shared memory ) :共享記憶體就是映射一段能被其他程序所通路的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以通路。共享記憶體是最快的 IPC 方式,它是針對其他程序間通信方式運作效率低而專門設計的。它往往與其他通信機制,如信号量,配合使用,來實作程序間的同步和通信。

5) 套接字( socket ) : 套解口也是一種程序間通信機制,與其他通信機制不同的是,它可用于不同及其間的程序通信。

8.已知IBM的PowerPC是big-endian位元組序列而Intel的X86是little-endian位元組序,如果在位址啊存儲的整形值時0x04030201,那麼位址為a+3的位元組記憶體儲的值在PowerPC和Intel X86結構下的值分别是?(A)

A.1 4

B.1 3

C.4 1

D.3 1

E.4 4

F.1 1

知識補充:

大端從大位址開始存儲,小端相反,兩者都是從資料低位開始存起;

假設從上至下位址遞增,則

PowerPC(大): Intel X86(小):

04 01 低

03 02 |

02 03 |

01 04 高

a+3指向最大的位址,是以分别為1 4

9.在TCP/IP建立連接配接過程中,用戶端或伺服器的狀态轉移說法錯誤的是(D)?

A. 經曆SYN_RECV狀态

B.經曆SYN_SEND狀态

C.經曆ESTABLISHED狀态

D.經曆TIME_WAIT狀态

E.伺服器在收到syn包時将加入半連接配接隊列

F.伺服器收到用戶端的ack包後将從半連接配接隊列删除

知識補充:

1)Tcp/Ip有3次握手:第一次握手:用戶端向伺服器端發送SYN包(syn=j),進入SYN_SEND狀态,等待伺服器确認。第二次握手:伺服器收到SYN包,确認SYN,此時syn=j+1,同時發送一個SYN包(syn=k)即SYN+ACK包,此時伺服器進入SYN_RECV狀态;第三次握手:用戶端收到SYN+ACK包,向伺服器發送ACK确認包,此時用戶端和伺服器端均進入ESTABLISHED狀态。

2)其中有一個半連接配接狀态:伺服器維護一個半連接配接隊列,該隊列衛每個用戶端SYN包開設一個條目,标明伺服器已經接到SYN包,并向用戶端發出确認,這些條目表示的連接配接處于SYN_RECV狀态,得到用戶端的确認後進入ESTABLISHED狀态。

3)TIME_WAIT是斷開連接配接時的狀态

4)TCP連接配接的建立與終止 :http://www.cnblogs.com/newwy/p/3234536.html

10.已知一棵二叉樹的先序和中序周遊序列如下:先序:A、B、C、D、E、F、G、H、I,J中序:C、B、A、E、F、D、I、H、J、G其後序周遊序列為:(E)

A.C、B、D、E、A、G、I、H、J、F

B.C、B、D、A、E、G、I、H、J、F

C.C、E、D、B、I、J、H、G、F、A

D.C、E、D、B、I、H、J、G、F、A

E.C、B、F、E、I、J、H、G、D、A

F.C、B、F、E、I、H、J、G、D、A

知識補充:

1)先序,中序,後序,已知中序和先序或者中序和後序兩種周遊結果,就可以逆向推導出整顆樹

a.由先序,知A是根

b.由中序,知B、C為A左子樹,D、E、F、G、H、I、J為A右子樹

c.由先序,知B為A左子樹根

d.由中序,知C為B左子樹

e.由先序,知D為A右子樹根

f.由中序,知E、F為D左子樹,G、H、I、J位D右子樹

g.由先序,知E為D左子樹根

h.由中序,知F為E左子樹

i.由先序,知G為D右子樹根

j.由中序,知H、I、J為G左子樹

k.由先序,知H為G左子樹根

l.由中序,知I為H左子樹,J為H右子樹

m.樹推導構造完畢

11.同一個程序中的線程不共享的部分是(F)

A.信号

B.堆

C.檔案描述符

D.程序組id

E.代碼段

F.棧空間

知識補充:

1)線程共享的環境包括:程序代碼段、程序的公有資料(利用這些共享的資料,線程很容易的實作互相之間的通訊)、程序打開的檔案描述符、信号的處理器、程序的目前目錄和程序使用者ID與程序組ID。

2)程序擁有這許多共性的同時,還擁有自己的個性。有了這些個性,線程才能實作并發性。這些個性包括:

a.線程ID: 每個線程都有自己的線程ID,這個ID在本程序中是唯一的。程序用此來标

識線程。

b.寄存器組的值: 由于線程間是并發運作的,每個線程有自己不同的運作線索,當從一個線

程切換到另一個線程上 時,必須将原有的線程的寄存器集合的狀态儲存,以便

将來該線程在被重新切換到時能得以恢複。

c.線程的堆棧: 堆棧是保證線程獨立運作所必須的。線程函數可以調用函數,而被調用函數中 又是可以層層嵌套的,是以線程必須擁有自己的函數堆棧, 使得函數調用可以正常執行,不 受其他線程的影響。

d.錯誤傳回碼: 由于同一個程序中有很多個線程在同時運作,可能某個線程進行系統調用

後設定了errno值,而在該 線程還沒有處理這個錯誤,另外一個線程就在此時

被排程器投入運作,這樣錯誤值就有可能被修改。是以,不同的線程應該擁有自己的錯誤返 回碼變量。

e.線程的信号屏蔽碼:由于每個線程所感興趣的信号不同,是以線程的信号屏蔽碼應該由線程自己管理。但所有的線程都共享同樣的信号處理器。

f.線程的優先級:由于線程需要像程序那樣能夠被排程,那麼就必須要有可供排程使用的參數,這個參數就是線程的優先級。

12.下面關于系統調用的描述中,錯誤的是(B)

A.系統調用把應用程式的請求傳輸給系統核心執行

B.系統調用中被調用的過程運作在"使用者态"中

C.利用系統調用能夠得到作業系統提供的多種服務

D.是作業系統提供給程式設計人員的接口

E.系統調用給使用者屏蔽了裝置通路的細節

F.系統調用保護了一些隻能在核心模式執行的操作指令

知識補充: 調用程式是運作在使用者态,而被調用的程式是運作在系統态, 被調用的過程運作在核心。

13.在動态分區配置設定方案中,系統回收主存,合并空閑空間時需修改空閑區表,以下哪種情況空閑區會減1?(F)

A.隻要回收主存,空閑區數就會減一

B.空閑區數和主存回收無關

C.無上鄰空閑區,也無下鄰空閑區

D.有上鄰空閑區,但無下鄰空閑區

E.有下鄰空閑區,但無上鄰空閑區

F.有上鄰空閑區,也有下鄰空閑區

知識補充: 1) 在分區配置設定方案中,回收一個分區時有幾種不同的鄰接情況,在各種情況下應如何處理? 答:有四種:上鄰,下鄰,上下相鄰,上下不相鄰。

a.回收分區的上鄰分區是空閑的,需要将兩個相鄰的空閑區合并成一個更大的空閑區,然後修改空閑區表。

b.回收分區的下鄰分區是空閑的,需要将兩個相鄰的空閑區合并成一個更大的空閑區,然後修改空閑區表。

c.回收分區的上、下鄰分區都是空閑的(空閑區個數為2),需要将三個空閑區合并成一個更大的空閑區(空閑區個數為1 ),然後修改空閑區表、

d.回收分區的上、下鄰分區都不是空閑的,則直接将空閑區記錄在空閑區表中。

14.下面關于虛拟區域網路VLAN的叙述錯誤的是(D)

A.VLAN是由區域網路網段構成的與實體位置無關的邏輯組

B.利用以太網交換機可以很友善地實作VLAN

C.每一個VLAN的工作站可處在不同的區域網路中

D.不同VLAN内的使用者可以互相之間直接通信

E.VLAN可以強化網絡安全和網絡管理

F.VLAN能靈活控制廣播活動

VLAN(Virtual Local Area Network)的中文名為"虛拟區域網路"。

知識補充:

1)虛拟區域網路(VLAN)是一組邏輯上的裝置和使用者,這些裝置和使用者并不受實體位置的限制,可以根據功能、部門及應用等因素将它們組織起來,互相之間的通信就好像它們在同一個網段中一樣,由此得名虛拟區域網路。VLAN是一種比較新的技術,工作在OSI參考模型的第2層和第3層,一個VLAN就是一個廣播域,VLAN之間的通信是通過第3層的路由器來完成的。與傳統的區域網路技術相比較,VLAN技術更加靈活,它具有以下優點: 網絡裝置的移動、添加和修改的管理開銷減少;可以控制廣播活動;可提高網絡的安全性。

2)在計算機網絡中,一個二層網絡可以被劃分為多個不同的廣播域,一個廣播域對應了一個特定的使用者組,預設情況下這些不同的廣播域是互相隔離的。不同的廣播域之間想要通信,需要通過一個或多個路由器。這樣的一個廣播域就稱為VLAN。

15.剛畢業的小王上班有兩路公共汽車都可以從家到公司.如果隻等A車,平均需要5分鐘才等到;如果隻等B車,平均需要7分鐘才能等到.假定兩輛車運作時間獨立,那麼小王平均需要等多長時間才能等到A車或B車?(C)

A.2分鐘

B.2分35秒

C.2分55秒

D.3分鐘

E.5分鐘

F.6分鐘

知識補充:

35分鐘内一共來了12輛車

平均每 35/12 min 來一輛

35/12min = 2min55s

16.一個黑色袋子中裝有5個紅球,5個藍球,5個黃球,從中抽取三次,每次抽一個球,取完不放回,則每種顔色球各得一個的機率是(F)

A.1/5

B.1/4

C.1/3

D.12/91

E.20/91

F.25/91

知識補充:

1)最開始是0個球,第一次不管怎麼選都會選一個和以前不同顔色的球,是以第一次選擇顔色不同的球機率為1;

2)第一次選擇之後,還剩14個球,其中 被第一次選走的那個顔色隻有4個,剩下的兩種顔色的球個數不變,都為5,然後選一個與第一次顔色不同的球的機率是:10/14, 這是第二次選擇

3)第二次選擇之後,還剩13個球,其中被第一次和第二次選中的球,各有4個,剩下的沒選到顔色的球還是5個,這次選中還沒選到的這個顔色的球的機率是:5/13

4)是以選擇三個不同顔色總的機率為:1*(10/14)*(5/13) = 25/91.

17.

int pint = 0;

pint += 6;

cout << pint << endl;

以上程式的運作結果是(C):*

A.12

B.72

C.24

D.0

E.6

F.任意數

知識補充:

1)在初始化中隻有位址才能指派給指針,是以*int p=0是指p指向位址0x00。

2)int型數占4個位元組,是以加6表示偏移了24個位元組,結果的位址應為0x18,即是24.

18.下面哪種協定在資料鍊路層?(F)

A.ARP

B.ICMP

C.FTP

D.UDP

E.HTTP

F.VPN

知識補充:

ICMP是網絡層,UDP是傳輸層,FTP和HTTP是應用層 。目前VPN隧道協定主要有4種:點到點隧道協定PPTP、第二層隧道協定L2TP、網絡層隧道協定IPSec以及SOCKS v5協定。其中,PPTP和L2TP工作在資料鍊路層,IPSec工作在網絡層,SOCK v5工作在會話層。

19.一組記錄排序碼為(5 11 7 2 3 17),則利用堆排序方法建立的初始堆為(C)

A.(11 5 7 2 3 17)

B.(11 5 7 2 13 3)

C.(17 11 7 2 3 5)

D.(17 11 7 5 3 2)

E.(17 7 11 3 5 2)

F.(17 7 11 3 2 5)

知識補充:

如果堆的有序狀态因為某個節點變得比它的父節點更大而打破,那麼就需要通過交換它和它的父節點來修複堆。

阿裡筆試題整理1