接踵而至的筆試啊。。。各類忙碌啊。。。node
1, 假設把整數關鍵碼K散列到有N個槽的散列表,如下哪些散列函數是好的散列函數()linux
A.h(k)= K/N B.h(k)=1 C.h(k) = k mod N 算法
D.h(k) = (K + random(N) ) mod N ,random(N)返回一個0到N的整數數據庫
2,下面的排序算法中,初始化數據集的排練順序對算法的性能無影響的是()數組
A,堆排序 B,插入排序 C,冒泡排序 D,快速排序緩存
3,下面說法錯誤的是()dom
A,CISC計算機比RISC計算機指令多函數
B,在指令格式中,採用擴展操做碼設計方案的目的是爲了保持指令字節長度而增長尋址空間性能
C,增長流水線段數據理論行能夠提升CPU頻率spa
D,馮諾依曼機體系結構的主要特徵是存儲程序的工做方式。
4,不屬於馮諾依曼機提議結構必要組成部分的是()
A,CPU B,Cache C,RAM D,ROM
5,一個棧的入棧序列爲 A B C D E 則不可能的輸出是()
A,DECBA B,DCEBA C,ECDBA D,ABCDE
6,你認爲能夠完成編寫一個C語言編譯器的程序設計語言是()
A,彙編語言 B,C語言 C,VB語言 D,以上皆可
7,關於C++/JAVA類中的static成員和對象成員的說法正確的是()
A, static成員變量在對象構造時生成
B, static成員函數在對象成員韓式中沒法調用
C, 虛成員函數不能是static成員函數
D, Static成員函數不能訪問static成員變量
9,某進程在運行過程當中須要等待從磁盤讀入數據,此時該進程的狀態將()
A,從運行變爲阻塞 B,從運行變爲就緒 C,從就緒變爲運行 D,從阻塞變爲就緒
10,下面算法的時間複雜度是()
Int f (unsigned int n){
If( n == 0 || n == 1){
Return 1;
}else return n*f(n-1);
}
A,O(1) B,O(n) C,O(n^2) D,O(n!)
11,n從1開始,每一個操做能夠選擇對n加1,或者對n加倍,若是想得到整數2013,只須要()個操做
A,18 B,24 C,21 D不可能
12,對於一個具備n個頂點的無向圖,若採用鄰接表表示,則存放表頭結點的數組的大小爲() A,n B,n+1 C,n-1 D,n+邊數
13,考慮一個特殊的hash函數h,能將任一字符串hash成一個整數k,其機率P(k) = 2 ^(-k),k=1,2,3….對一個未知大小的字符串集合S中的每個元素取hash值所組成的集合爲h(S)。若h(S)中最大的元素maxh(S) = 10,那麼S的大小的指望是()
A,5 B,10 C,512 D,1024
14,以下函數,在32bit 系統foo(2^31-3) 的值是()
Int foo(int x){
Return x&-x;
}
A,0 B,1 C,3 D,4
15,對於順序存儲的線性數組,訪問結點和增長,刪除結點的時間複雜度()
A,O(n),O(n) B,O(n),O(1) C,O(1),O(n) D,O(1),O(1)
16,在32位系統環境,編譯選項爲4字節對齊,那麼sizeof(A)和sizeof(B)是()
Struct A{
Int a;
Short b;
Int c;
Char d;
};
Struct B{
Int a;
Short b;
Char d;
Int c;
};
A,16,16 B13,12 C,16,12 D,11,16
17,袋中有紅球,黃球,白球個1個,每次任取一個又放回,如此連續抽取3次,則下列時間中機率是8/9的是()
A, 顏色全相同 B,顏色不全相同 C,顏色全不一樣 D,顏色無紅色
18,一個洗牌程序的功能是將n張牌的順序打亂。一下關於洗牌程序的功能定義說法最恰當的是()
A, 每張牌出如今n個位置上的機率相等
B, 每張牌出如今n個位置上的機率獨立
C, 任何連續位置上的兩張牌的內容獨立
D, N張牌的任何兩個不一樣的排列出現的機率相等
19,用兩種顏色去染排成一個圈的6個旗子,若是經過旋轉獲得則只算一種,問一共有多少種染色模式。 A,10 B,14 C,15 D,16
20,遞歸式的先序遍歷一個n節點,深度爲d的二叉樹,須要找空間的大小爲()
A,O(n) B,O(d) C,O(logn) D,O(nlogn)
二,不定項選擇
21,兩個線程運行在雙核機器上,每一個線程主程序以下,線程1,x=1;r1=y;線程2:y=1;r2=x。x和y是兩個全局變量,初始化爲0,一下哪個是r1和r2的可能值()
A,r1=1,r2=1 B,r1=1,r2=0 C,r1=0,r2=0 D,r1=0,r2=1
22,關於linux系統的負載(LOAD),如下表述正確的是()
A, 經過就緒和運行的進程數來反映
B, 能夠經過TOP命令查看
C, 能夠經過uptime查看
D, Load:2.5 1.3 1.1 表示系統的負載壓力在逐漸減少
23,關於排序算法的一下說法,錯誤的是()
A, 快速排序的平均時間複雜度爲O(nlogn),最快時間複雜度爲O(n^2)
B, 堆排序的平均時間複雜度爲O(nlogn),最快時間複雜度爲O(nlogn)
C, 冒泡排序的平均時間複雜度爲O(n^2),最快時間複雜度爲O(n^2)
D, 歸併排序的平均時間複雜度爲O(nlogn),最快時間複雜度爲O(n^2)
24,假定函數rand_k 會隨機返回一個[1,k]之間的整數(K >= 2),而且每一個整數值出現的概率相等。已知目前有rand_7的實現,請問經過調用rand_7和四則運算函數,並適當增長邏輯判斷和循環等控制邏輯,下來函數能夠實現的有()
A,rand_3 B,rand_21 C,rand_23 D,rand_47
三,填空與問答
2六、某緩存系統採用LRU淘汰算法,假定緩存容量爲4,而且初始爲空,那麼在順序訪問如下數據項的時候,一、五、一、三、五、二、四、一、2,出現緩存直接命中的次數是(),最後緩存中即將準備淘汰的數據項是()
答:直接命中的次數是3次,分別是訪問1,5,1,3,5,2,4,1,2時。最後緩存中即將準備淘汰的數據項是5
2七、有兩個較長的單向鏈表a和b,爲了找出節點node知足node in a 而且node in b,請設計空間使用盡可能小的算法。(用C/C++/JAVA或僞碼錶示均可以)
答:node in a 而且node in b,就是求兩個鏈表的公共節點吧
就是先分別遍歷一遍鏈表A和鏈表B,在遍歷時分別記下鏈表AB的長度,而且在最後看看鏈表A和鏈表B的最後一個節點是否是相同,若是相同則有公共節點,若是不一樣就沒有公共節點。
找公共節點就是再利用兩個指針,根據遍歷時記錄的長度,找到第一個公共節點,這個節點後面的就都是公共節點了。
2八、當存儲數據量超出單節點數據管理能力的時候,能夠採起的辦法有數據庫sharding的解決方案,也就是按照必定的規律把數據分散存儲在多個數據管理節點N中(節點編號0.1.2...N-1)。假設存儲的數據是a,請完成爲數據a計算存儲節點的程序。(沒學過C語言的同窗也能夠用僞碼完成)
#define N 5
int hash(int element)
{
return element*2654435761;
}
int shardingIndex(int a)
{
int p = hash(a);
//1
return p;
}
空格1處: p %= N;
2九、宿舍內5個同窗一塊兒玩對戰遊戲,每場比賽有一些人做爲紅方,另外一些人做爲藍方,請問至少須要多少場比賽,才能使任意兩我的之間有一場紅方對藍方和一場藍方對紅方的比賽?
答案爲4場。
第四部分 JAVA選作題
一、如下每一個線程輸出的結果是什麼?(不用關注輸出的順序,只需寫出輸出的結果集便可)
二、一個有10億條記錄的文本文件,已按照關鍵字排好序存儲,請設計算法,能夠快速的從文件中查找關鍵字的記錄。