- 相關(guān)推薦
2014年阿里校招筆試題目
前言
我明天上午9點(diǎn)還有面試,今天突然看到某大牌IT公司筆試題目,必須做一下了
題目
一、單選題
1.假設把整數關(guān)鍵碼K散列到N個(gè)槽列表,以下哪些散列函數是好的散列函數
A: h(K)=K/N;
B: h(K)=1;
C: h(K)=K mod N;
D: h(K)=(K+rand(N)) mod N, rand(N)返回0到N-1的整數
選擇C,解釋?zhuān)洪_(kāi)始糾結于C和D,但是hash的特性在于常數的時(shí)間執行插入、刪除和查找操作,用D作為hash函數無(wú)法滿(mǎn)足該條件,用C產(chǎn)生碰撞可以用鏈接法解決沖突,感謝@zdw12242的糾正
2.下面排序算法中,初始數據集的排列順序對算法的性能無(wú)影響的是:
A: 堆排序 B:插入排序
C: 冒泡排序 D:快速排序
選擇A,解釋?zhuān)?1)堆排序的時(shí)間復雜度一直都是O(nlogn),不穩定(2)插入排序在初始有序情況下,時(shí)間復雜度為O(n),平均時(shí)間復雜度為O(n^2),穩定排序(3)冒泡排序在初始有序的情況下,增加交換標示flag可將時(shí)間復雜度降到O(n),穩定排序(4)快速排序在初始有序的情況下,可能會(huì )退化到O(n^2),不穩定排序
3. 下面說(shuō)法錯誤的是:
A: CISC計算機比RISC計算機指令多
B: 在指令格式中,采用擴展操作碼設計方案的目的是為了保持指令字長(cháng)不變而增加尋址空間
C:增加流水線(xiàn)段數理論上可以提高CPU頻率
D:馮諾依曼體系結構的主要特征是存儲程序的工作方式
選擇B,解釋(1)CISC復雜指令集,RISC精簡(jiǎn)指令集,從名字上就可以得出A正確(2)保持指令字長(cháng)度不變而增加指令操作的數量(3)看樣子都覺(jué)得正確(4)馮諾依曼體系結構的主要特點(diǎn):存儲程序控制(要求計算機完成的功能,必須事先編制好相應的程序,并輸入到存儲器中,計算機的工作過(guò)程是運行程序的過(guò)程);程序由指令構成,指令和數據都用二進(jìn)制表示;指令由操作碼和地址碼構成;機器以cpu為中心
4. 不屬于馮諾依曼體系結構必要組成部分是:
A:CPU B: Cache C:RAM D:ROM
B,解釋?zhuān)厚T諾依曼體系結構必要組成部分:運算器、控制器、存儲器、輸入設備、輸出設備,Cache屬于緩存了
5. 一個(gè)棧的入棧序列式ABCDE則不可能的出棧序列是:
A:DECBA B:DCEBA C:ECDBA D:ABCDE
C,不解釋
.你認為可以完成編寫(xiě)一個(gè)C語(yǔ)言編譯器的語(yǔ)言是:
A:匯編 B:C語(yǔ)言 C:VB D:以上全可以
D,解釋?zhuān)浩鋵?shí)你學(xué)好編譯原理用什么語(yǔ)言都能寫(xiě)出來(lái)
7. 關(guān)于C++/JAVA類(lèi)中的static成員和對象成員的說(shuō)法正確的是:
A:static成員變量在對象構造時(shí)候生成
B: static成員函數在對象成員函數中無(wú)法調用
C: 虛成員函數不可能是static成員函數
D: static成員函數不能訪(fǎng)問(wèn)static成員變量
C,解釋?zhuān)弘m然博主主要以php和c為主,php也能面向對象,我來(lái)簡(jiǎn)單說(shuō)明一下。(1)static成員變量可以直接定義,例如public statci $a = 10; 所以A錯(2)在對象成員函數里可以通過(guò)類(lèi)名::static函數名的方法調用,我的項目中超過(guò)靜態(tài)方法(4)同樣道理,類(lèi)名::static成員變量名,這也是訪(fǎng)問(wèn)static成員變量唯一的方法(3)是正確的,雖然我都不知道什么是虛函數,排除法可以完成
9:某進(jìn)程在運行過(guò)程中需要等待從磁盤(pán)上讀入數據,此時(shí)進(jìn)程的狀態(tài)將:
A: 從就緒變?yōu)檫\行 B:從運行變?yōu)榫途w
C: 從運行變?yōu)樽枞?D:從阻塞變?yōu)榫途w
C,解釋?zhuān)篒/O事件讓進(jìn)程從running->waitting
10:下面算法的時(shí)間復雜度為:
A: O(1) B:O(n) C:O(N*N) D:O(n!)
B,解釋?zhuān)簺](méi)啥好解釋的
11: n從1開(kāi)始,每個(gè)操作可以選擇對n加1或者對n加倍。若想獲得整數2013,最少需要多少個(gè)操作。
A:18 B:24 C:21 D;不可能
A,解釋?zhuān)簲祵W(xué)方法->從 2013 倒推, 奇數 減一,偶數 除2,編程實(shí)現->是一個(gè)明顯的bfs題目,編程實(shí)現為18,共享一下自己的bfs代碼:
12:對于一個(gè)具有n個(gè)頂點(diǎn)的無(wú)向圖,若采用鄰接表數據結構表示,則存放表頭節點(diǎn)的數組大小為:
A: n B: n+1 C: n-1 D:n+邊數
A,解釋?zhuān)焊杏X(jué)沒(méi)啥好解釋的,n個(gè)頂點(diǎn)數組大小應該就是n吧,如果非要從下標從1開(kāi)始,那就是n+1,蛋疼的題目,話(huà)說(shuō)在A(yíng)CM上寫(xiě)bfs,dfs,最短路徑全是用鄰接矩陣,就誰(shuí)會(huì )用鄰接表這么蛋疼的設計,又不是hash
13.考慮一個(gè)特殊的hash函數h,能將任一字符串hash成一個(gè)整數k,其概率p(k) = 2^(-k),k = 1,2,3,4,....對于一個(gè)未知大小的字符串集合S中的每一個(gè)元素取hash值所組成的集合為h(S).若h(s)中最大元素max h(s) =10,那么s的大小期望是
A:1024 B:512 C:5 D:10
我讀不懂題啊有沒(méi)有,我想選c
14.如下函數,在32bit系統foo(2^31-3)的值是:
A: 0 B: 1 C:2 D:4
C,解釋?zhuān)何抑幌胝f(shuō)注意運算符優(yōu)先級,注意^是異或
15.對于順序存儲的線(xiàn)性數組,訪(fǎng)問(wèn)節點(diǎn)和增加節點(diǎn)刪除節點(diǎn)的時(shí)間復雜度為:
A: O(n),O(n) B:O(n),O(1) C:O(1),O(n) D:O(n),O(n)
C,解釋?zhuān)航o定下標,訪(fǎng)問(wèn)為O(1),增加和刪除節點(diǎn)涉及到移動(dòng)操作為O(n)
16:在32為系統環(huán)境,編譯選項為4字節對齊,那么sizeof(A)和sizeof(B)是:
Struct A
{
int a;
short b;
int c;
char d;
};
Struct B
{
int a;
short b;
char c;
int d;
};
A: 16,16 B:13,12 C:16,12 D:11,16
C,解釋?zhuān)鹤止潓R包含了每個(gè)變量自身對齊和復雜類(lèi)型整體對齊。pragma pack參考鏈接:http://blog.csdn.net/wzy_1988/article/details/11834881
對于A(yíng):
int a自身對齊是4,pragma pack指定對齊也是4,因此其有效對齊為4,起始地址0x0000滿(mǎn)足0x0000 % 4 == 0
short b自身對齊是2,指定對齊是4,因此有效對齊為其最小值2,起始地址0x0004滿(mǎn)足0x0004 % 2 == 0
int c自身對齊是4,pragma pack指定對齊也是4,因此其有效對齊為4,起始地址0x0006不滿(mǎn)足0x0006 % 4 == 0,因此需要填充空字節,起始地址為0x0008
char d自身對齊是1,指定對齊是4,因此有效對齊為其最小值1,起始地址0x000C滿(mǎn)足0x000C % 1 == 0
結構體還需要整體對齊,也就是結構體成員最大有效對齊的倍數,0x000D不滿(mǎn)足 % 4 ==0, 需要需要補充3個(gè)字節,總字節數為16
對于B:
int a自身對齊是4,pragma pack指定對齊也是4,因此其有效對齊為4,起始地址0x0000滿(mǎn)足0x0000 % 4 == 0
short b自身對齊是2,指定對齊是4,因此有效對齊為其最小值2,起始地址0x0004滿(mǎn)足0x0004 % 2 == 0
char d自身對齊是1,指定對齊是4,因此有效對齊為其最小值1,起始地址0x0006滿(mǎn)足0x000C % 1 == 0
int c自身對齊是4,pragma pack指定對齊也是4,因此其有效對齊為4,起始地址0x0007不滿(mǎn)足 % 4 ==0,需要補充一個(gè)空字節,起始地址為0x0008
結構體需要整體對齊,結構體整體有效對齊是4,0x000C % 4 == 0,因此總字節為12
17.袋中有紅球,黃球,白球各一個(gè),每次任意取一個(gè)放回,如此連續3次,則下列事件中概率是8/9的是:
A: 顏色全相同 B:顏色全不相同C:顏色不完全相同 D:顏色無(wú)紅色
C,解釋?zhuān)?1)顏色全相同:C(1,3) / 27 = 1 / 9(2)顏色全不相同:3 * 2 * 1 / 27 = 2 / 9 (4)顏色無(wú)紅色: 2 * 2 * 2 / 27 = 8 / 27 (3)顏色不完全相同 = 1 - P(顏色完全相同) = 1 - 1 / 9 = 8 / 9
18.一個(gè)洗牌程序的功能是將n張牌的順序打亂,以下關(guān)于洗牌程序的功能定義說(shuō)法最恰當的是:
A: 每張牌出現在n個(gè)位置上的概率相等
B: 每張牌出現在n個(gè)位置上的概率獨立
C: 任何連續位置上的兩張牌的內容獨立
D: n張牌的任何兩個(gè)不同排列出現的概率相等
D,解釋?zhuān)簶?lè )樂(lè )說(shuō)選D,其實(shí)我覺(jué)得A也挺對的,這到題目我寫(xiě)了一個(gè)測試洗牌的程序,但是自己測試問(wèn)題很大,懷疑是隨機數獲取的問(wèn)題,求大家幫忙指點(diǎn):
19.用兩種顏色去染排成一個(gè)圈的6個(gè)棋子,如果通過(guò)旋轉得到則只算一種,一共有多少種染色:
A: 10 B:11 C:14: D:15
不會(huì ),這么多概率題目啊,我去
20.遞歸式的先序遍歷一個(gè)n節點(diǎn),深度為d的二叉樹(shù),則需要?臻g的大小為:
A: O(n) B:O(d) C:O(logn) D:(nlogn)
B,解釋?zhuān)盒枰紤]最壞的情況,A和B我不確定啊,蛋疼
二、多選題
21.兩個(gè)線(xiàn)程運行在雙核機器上,每個(gè)線(xiàn)程主線(xiàn)程如下,線(xiàn)程1:x=1;r1=y;線(xiàn)程2:y=1;r2=x;
X和y是全局變量,初始為0。以下哪一個(gè)是r1和r2的可能值:
A: r1=1,r2=1
B: r1=1,r2=0
C:r1=0,r2=0
D:r1=0,r2=1
ABD,解釋?zhuān)簉1和r2不可能同時(shí)為0,當一個(gè)有賦值時(shí),必然完成了對另一個(gè)x或y的賦值
22.關(guān)于Linux系統的負載,以下表述正確的是:
A: 通過(guò)就緒和運行的進(jìn)程數來(lái)反映
B: 通過(guò)TOP命令查看
C: 通過(guò)uptime查看
D: Load:2.5,1.3,1.1表示系統的負載壓力在逐漸變小
BC,解釋?zhuān)篈LINUX系統還需要包含處于waitting狀態(tài)的進(jìn)程 D說(shuō)明系統負載變大,load average分別是系統1分鐘,5分鐘,15分鐘的平均負載
23.關(guān)于排序算法的以下說(shuō)法,錯誤的是:
A: 快速排序的平均時(shí)間復雜度O(nlogn),最壞O(N^2)
B:堆排序平均時(shí)間復雜度O(nlogn),最壞O(nlogn)
C:冒泡排序平均時(shí)間復雜度O(n^2),最壞O(n^2)
D:歸并排序的平均時(shí)間復雜度O(nlogn),最壞O(n^2)
D,解釋?zhuān)簹w并排序最壞的時(shí)間復雜度也是O(nlogn)
24.假設函數rand_k會(huì )隨機返回一個(gè)【1,k】之間的隨機數(k>=2),并且每個(gè)證書(shū)出現的概率相等。目前有rand_7,通過(guò)調用rand_7()和四則運算符,并適當增加邏輯判斷和循環(huán)控制邏輯,下列函數可以實(shí)現的有:
A:rand_3 B:rand_21 C:rand_23 D:rand_49
ABCD
填空和問(wèn)答
25.某二叉樹(shù)的前序遍歷-+a*b-cd/ef,后續遍歷abcd-*+ef/-,問(wèn)其中序遍歷序列為
扯淡啊,根據前序和后序沒(méi)法唯一確定中序好不好,我擦
26.某緩存系統采用LRU,緩存容量為4,并且初始為空,那么在順序訪(fǎng)問(wèn)以下數據項的時(shí)候:1,5,1,3,5,2,4,1,2
出現緩存直接命中的次數為:(),最后緩存即將淘汰的是()
3,5
27.兩個(gè)較長(cháng)的單鏈表a和b,為了找出節點(diǎn)node滿(mǎn)足node in a并且node in b。請設計空間使用盡量小的算法
求兩個(gè)鏈表的公共節點(diǎn)題目
28.存儲數據量超出單節點(diǎn)數據管理能力的時(shí)候,可以采用的辦法有數據庫sharding的解決方案,也就是按照一定的規律把數據分散存儲在多個(gè)數據管理節點(diǎn)N中(節點(diǎn)編號為0,1,2,,,,N-1)。假設存儲的數據時(shí)a 請完成為數據a計算存儲節點(diǎn)的程序
#define N 5
int hash(int element){
return element*2654435761;
}
int shardingIndex(int a){
int p = hash(a);
_________________________; //這里是空格
return p;
}
p = p % N;解釋?zhuān)焊杏X(jué)沒(méi)啥好解釋的,基本的散列函數
29.宿舍內5個(gè)同學(xué)一起玩對戰游戲,每場(chǎng)比賽有一些人作為紅方,一些人作為藍方,請問(wèn)至少需要多少場(chǎng)比賽,才能使得任意兩個(gè)人之間有一場(chǎng)紅方對藍方和藍方對紅方的比賽
4,被n多人指點(diǎn)之后的結果
【阿里校招筆試題目】相關(guān)文章:
阿里巴巴校招筆試題,試題分享08-10
2016銀行春季校招筆試題目07-26
央視校招筆試經(jīng)驗01-16
美團校招筆試題題目整理03-16
中興2016年校招筆試題08-16
交通銀行校招機考筆試經(jīng)驗07-15
2015招商銀行筆試題目08-10
阿里巴巴筆試題08-10
阿里在線(xiàn)前端筆試題08-04