1. 程式人生 > 實用技巧 >我的牛客-阿里2017實習(一)刷題之路

我的牛客-阿里2017實習(一)刷題之路

  1. 下面哪一個不是動態連結庫的優點?
    共享
裝載速度快
開發模式好
減少頁面交換
1 靜態連結庫的優點 

 (1) 程式碼裝載速度快,執行速度略比動態連結庫快; 

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

2 動態連結庫的優點 

 (1) 更加節省記憶體並減少頁面交換;

 (2) DLL檔案與EXE檔案獨立,只要輸出介面不變(即名稱、引數、返回值型別和呼叫約定不變),更換DLL檔案不會對EXE檔案造成任何影響,因而極大地提高了可維護性和可擴充套件性;

 (
3) 不同程式語言編寫的程式只要按照函式呼叫約定就可以呼叫同一個DLL函式; (4)適用於大規模的軟體開發,使開發過程獨立、耦合度小,便於不同開發者和開發組織之間進行開發和測試。 3 不足之處 (1) 使用靜態連結生成的可執行檔案體積較大,包含相同的公共程式碼,造成浪費; (2) 使用動態連結庫的應用程式不是自完備的,它依賴的DLL模組也要存在,如果使用載入時動態連結,程式啟動時發現DLL不存在,系統將終止程式並給出錯誤資訊。而使用執行時動態連結,系統不會終止,但由於DLL中的匯出函式不可用,程式會載入失敗;速度比靜態連結慢。當某個模組更新後,如果新模組與舊的模組不相容,那麼那些需要該模組才能執行的軟體,統統撕掉。這在早期Windows中很常見。

2.n個數值選出最大m個數(3<m<n)的最小演算法複雜度是
O(n)
O(nlogn)
O(logn)
O(mlogn)
O(nlogm)
O(mn)

劍指offer第30題
1.最簡單的方法:將n個數排序,排序後的前k個數就是最大的k個數,這種演算法的複雜度是O(nlogn)
2.O(n)的方法:利用快排的patition思想,基於陣列的第k個數來調整,將比第k個數小的都位於陣列的左邊,比第k個數大的都調整到陣列的右邊,這樣調整後,位於陣列右邊的k個數最大的k個數(這k個數不一定是排好序的)
3.O(nlogk)的方法:先建立一個大小為k的最小堆,接下來我們每次從輸入的n個整數中讀入一個數,如果這個數比最小堆的堆頂元素還要大,那麼替換這個最小堆的堆頂並調整。

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

4.阿里巴巴國際站的股票程式碼是1688,這個數字具有這樣的特性,首先是個首位為1的4位數,其次恰巧有且僅有1個數字出現了兩次。類似的數字還有:1861,1668等。這樣的數字一共有()個。
144
180
216
270
288
432
1)若這個四位數的重複數字為1,那麼首先從三個空位中選出一個給1,第二步從剩下9個可選數字中選出2個有序的排列到剩下的兩個空位中去,那麼有C(1,3)*A(2,9)=3*(9!/(9-2)!)=3*9*8=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會詢問玩家是否更改選擇(可以堅持第一次選擇,也可以選擇另一個沒有開啟的盒子),下列敘述正確的有()。
改選後,玩家獲勝的概率還是1/3
若不改選,玩家的獲勝概率是1/2
無論怎麼選擇,獲勝的概率都是1/2
堅持原來的選擇獲勝概率更高
選擇另一個沒有被開啟的盒子獲勝概率更高
獲勝概率取決於隨機因素(如小球的實際位置)

6.以下哪種方式,在讀取磁碟上多個順序資料塊時的效率最高?
中斷控制方式
DMA方式
通道方式
程式直接訪問方式
迴圈檢查I/O方式
以上訪問方式都一樣
(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.下列不是程序間的通訊方式的是()
管道
回撥
共享記憶體
訊息佇列
socket
訊號量


# 管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。  
# 訊號量( semophore ) : 訊號量是一個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。  
# 訊息佇列( message queue ) : 訊息佇列是由訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。  
# 共享記憶體( shared memory ) :共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以訪問。共享記憶體是最快的 IPC 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。  
# 套接字( socket ) : 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。
# 回撥: 是一種程式設計機制。



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




1 4
1 3
4 1
3 1
4 4
1 1


9.在TCP/IP建立連線過程中,客戶端或伺服器的狀態轉移說法錯誤的是?
經歷SYN_RECV狀態
經歷SYN_SEND狀態
經歷ESTABLISHED狀態
經歷TIME_WAIT狀態             (TIME_WAIT是斷開連線時的狀態
伺服器在收到syn包時將加入半連線佇列
伺服器收到客戶端的ack包後將從半連線佇列刪除

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

11.設有四個元素A、B、C、D順序進棧,在進棧過程中可以出棧,出棧次序錯誤的排列是
ABCD
DCBA
ACBD
BCDA
ACDB
DCAB
A:A進A出,B進B出,C進C出,D進D出。
B:ABCD依次進入,DCBA依次輸出。
C:A進A出,BC進CB出,D進D出。
D:A進,B進B出,C進C出,D進D出,A出。
E:A進A出,B進,C進C出,D進D出,B出

12.

20
21
22
23
24
非以上選項

union:當多個數據需要共享記憶體或者多個數據每次只取其一時,可以利用聯合體(union);
它有以下特點:
    (1)它是一個結構;
    (2)它的所有成員相對於基地址的偏移量都為0;
    (3)此結構空間要大到足夠容納最"寬"的成員;
    (4)其對齊方式要適合其中所有的成員
綜上:
    而分配給union的實際大小不僅要滿足是對齊大小的整數倍,同時要滿足實際大小不能小於最大成員的大小。
    本題目中
    注意第一行,#pragma pack(2)
    首先考慮沒有這句話時,我們在類、結構或者union補齊位元組的時候,找它們的成員資料中找位元組最大的那個數去衡量如何對齊,假設為z;
    但是有了這句話以後,對齊方式是取 pack(n)中n和z的最小值去對齊;
    可見本題中對齊位元組數為2;
    之後往下看 int number; 佔4個位元組
    接下來考慮union大小
    union UBffer
    {
        char buffer[13]; // 13
        int number; // 4
    }ubuf; buffer 是13個位元組,number 是4個位元組,取最大的 為13,注意還要位元組對齊,對齊位元組數為2,所以Union大小為14,既滿足buffer的對齊 也滿足number的對齊。
    void foo(){} 不佔
    typedef char*(*f)(void*); 不佔
    enum{hdd,ssd,blueray}disk; 4個位元組
13.同一個程序中的執行緒不共享的部分是()
訊號
檔案描述符
程序組id
程式碼段
棧空間
14.下面關於系統呼叫的描述中,錯誤的是()
系統呼叫把應用程式的請求傳輸給系統核心執行
系統呼叫中被呼叫的過程執行在"使用者態"中
利用系統呼叫能夠得到作業系統提供的多種服務
是作業系統提供給程式設計人員的介面
系統呼叫給使用者遮蔽了裝置訪問的細節
系統呼叫保護了一些只能在核心模式執行的操作指令



15.在動態分割槽分配方案中,系統回收主存,合併空閒空間時需修改空閒區表,以下哪種情況空閒區會減1?





只要回收主存,空閒區數就會減一
空閒區數和主存回收無關
無上鄰空閒區,也無下鄰空閒區
有上鄰空閒區,但無下鄰空閒區
有下鄰空閒區,但無上鄰空閒區
有上鄰空閒區,也有下鄰空閒區

16.下面關於虛擬區域網VLAN的敘述錯誤的是()
VLAN是由區域網網段構成的與物理位置無關的邏輯組
利用乙太網交換機可以很方便地實現VLAN
每一個VLAN的工作站可處在不同的區域網中
不同VLAN內的使用者可以相互之間直接通訊
vLAN可以強化網路安全和網路管理
VLAN能靈活控制廣播活動


VLAN(Virtual Local Area Network)的中文名為"虛擬區域網"。
虛擬區域網(VLAN)是一組邏輯上的裝置和使用者,這些裝置和使用者並不受物理位置的限制,可以根據功能、部門及應用等因素將它們組織起來,相互之間的通訊就好像它們在同一個網段中一樣,由此得名虛擬區域網。VLAN是一種比較新的技術,工作在OSI參考模型的第2層和第3層,一個VLAN就是一個廣播域,VLAN之間的通訊是通過第3層的路由器來完成的。與傳統的區域網技術相比較,VLAN技術更加靈活,它具有以下優點: 網路裝置的移動、新增和修改的管理開銷減少;可以控制廣播活動;可提高網路的安全性。
在計算機網路中,一個二層網路可以被劃分為多個不同的廣播域,一個廣播域對應了一個特定的使用者組,預設情況下這些不同的廣播域是相互隔離的。不同的廣播域之間想要通訊,需要通過一個或多個路由器。這樣的一個廣播域就稱為VLAN。

17.剛畢業的小王上班有兩路公交車都可以從家到公司.如果只等A車,平均需要5分鐘才等到;如果只等B車,平均需要7分鐘才能等到.假定兩輛車執行時間獨立,那麼小王平均需要等多長時間才能等到A車或B車?
2分鐘
2分35秒
2分55秒
3分鐘
5分鐘
6分鐘

在時間t內,A車t/5趟, B車t/7趟,所以在t內等到車共計t/5+t/7趟,等到一趟的時間則為t/(t/5+t/7),等價35/12,

18.一個黑色袋子中裝有5個紅球,5個藍球,5個黃球,從中抽取三次,每次抽一個球,取完不放回,則每種顏色球各得一個的概率是()
1/5
1/4
1/3
12/91
20/91
25/91


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

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

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

所以選擇三個不同顏色總的概率為:1*(10/14)*(5/13) = 25/91.

12
72
24
0
6
任意數


兩個點:
1.在初始化中只有地址才能賦值給指標,因此*int p=0是指p指向地址0x00。
2.int型數佔4個位元組,因此加6表示偏移了24個位元組,結果的地址應為0x18,即是24.



20.某種5號(AA)充電電池在充滿電之後的電量是900毫安時和1100毫安時的可能性各為1/2。如果將將電池串聯使用,常常會因為其中一部分電池先放電完畢,而且其它電池還有100毫安時以上的電量時,引起先放完電的電池損壞。那麼以下說法正確的是:




如果兩節這樣的電池串聯使用,那麼必然有1節電池會損壞。
如果有許多節這樣的電池串聯使用,則至少會有1節電池會損壞。
如果放電電量控制在900毫安時以內,則不會有電池損壞
當有2n節電池串聯使用時,至多會有n節電池會損壞
當串聯的電池個數是奇數時,不會有電池損壞。
電量少的電池一定會損壞。
“”“就是個腦經急轉彎,題目中說一部分放電完畢,另一部分電剩餘超過100,而C選項電還沒放完呢。。。。



21.下面哪種協議在資料鏈路層?





ARP
ICMP
FTP
UDP
HTTP
VPN

TCP/IP模型中,ARP協議屬於網路層,在OSI參考模型中,ARP屬於資料鏈路層
ICMP是網路層,UDP是傳輸層,FTP和HTTP是應用層 目前VPN隧道協議主要有4種:點到點隧道協議PPTP、第二層隧道協議L2TP、網路層隧道協議IPSec以及SOCKSv5協議。其中,PPTP和L2TP工作在資料鏈路層,IPSec工作在網路層,SOCKv5工作在會話層。
22.一組記錄排序碼為(5 11 7 2 3 17),則利用堆排序方法建立的初始堆為
(11 5 7 2 3 17)
(11 5 7 2 13 3)
(17 11 7 2 3 5)
(17 11 7 5 3 2)
(17 7 11 3 5 2)
(17 7 11 3 2 5)


23.甲乙丙三人是阿里巴巴開發人員,ABC三人是阿里巴巴測試人員,每個開發都有對應的測試人員。主管介紹說:“A對應的開發是乙的好友,並在三個開發中最年輕;丙的年齡比C對應的開發大。”則開發和測試的對應關係為()。
甲-A,乙-B,丙-C
甲-A,乙-C,丙-B
甲-B,乙-A,丙-C
甲-B,乙-C,丙-A
甲-C,乙-A,丙-B
甲-C,乙-B,丙-A

24.某機器人可以說真話或者假話。某程式設定其週末(週六週日)說真話,週四說謊話,其他日期隨機。某測試打算驗證該功能。他連續七天,每天問機器人“你在哪裡出生的?”,在前六天得到了這樣的答案:阿里,淘寶,阿里,淘寶,天貓,淘寶。那麼第七天,機器人的回答應該是()
阿里
淘寶
天貓
阿里或淘寶
阿里或天貓
天貓或淘寶
A,週六週日說真話,所以有連續兩天的答案是一樣的所以只有第一天是週日才可能有這種情況,顧答案是A