一、下列描述錯誤的是() A、讀取SATA硬盤數據的速度約爲500Mbps。 B、讀取18XDVD光盤數據的速度爲1Gbps。 C、千兆以太網的數據讀取速度約爲1Gbps。 D、讀取DDR3內存數據的速度約爲100Gbps。node
答案:D算法
二、()不能用於Linux中的進程間通訊 A、共享內存 B、命名管道 C、信號量 D、臨界區數組
答案:D併發
解析: 進程間通訊(Inter-Process Communication) (1)管道(pipe):半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用,一般指父子進程,named pipe,容許無親緣關係的進程間通訊。 (2)信號量(semophore):是一個計數器,能夠用來控制多個進程對共享資源的訪問,如內存,常被用作鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。主要用做進程間或同一進程不一樣線程間的同步手段。 (3)消息隊列(message queue):消息隊列是由消息的鏈表,存放在內核中並由消息隊列表示符表示。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。 (4)信號(sinal):信號是一種比較複雜的通訊方式,用於通知接受進程某個事件已經發生。 (5)共享內存:是映射一段能被其它進程所訪問的內存,這段共享內存由一個進程建立,但多個內存可均可以訪問。是最快的IPC方式,它是針對其它進程間通訊方式運行效率低專門設計的。每每與其餘通訊機制配合使用,如信號量,實現進程間的同步和通訊。 (6)套接字(Socket):是一種 (7)臨界區(Critical section)實際上指一段代碼,在執行以前須要獨佔一些額外共享資源的訪問權。這種方式可讓多行代碼以「原子方式」來對資源進行控制。函數
三、設在內存中有P1,P2,P3三道程序,並按照P1,P2,P3的優先級次序運行,其中內部計算和IO操做時間由下表給出(CPU計算和IO資源都只能同時由一個程序佔用):操作系統
P1:計算60ms --> IO 80ms --> 計算20ms線程
P2:計算120ms --> IO 40ms --> 計算40ms設計
P3:計算40ms --> IO 80ms --> 計算40ms排序
完成三道程序比單道運行節省的時間是()遞歸
A.80ms
B.120ms
C.160ms
D.200ms 答案: 解析: 假設P一、P二、P3不可搶佔,則串行執行耗時:160+200+160=520
CPU順序:P11(60)>P21(120)>P13(20)>P31(40)>P23(40)>等待IO(40)>P33(40)
IO順序: 等待CPU(60)>P12(80)>等待CPU(40)>P22(40)>等待CPU(20)>P32(80)
組後執行完成的是CPU,則CPU執行時間爲總耗時:60+120+20+40+40+40+40=360
四、兩個"等價線程"併發的執行下列程序,a爲全局變量,初始爲0,假設printf、++、--操做都是原子性的,則輸出不多是哪一個() void foo() { if(a <= 0) { a++; } else { a--; } printf("%d", a); }
A.01 B.10 C.12 D.22
答案:A
對於B答案,P1執行程序,輸出1,P2執行程序,輸出0;
對於C答案,初始爲0,P1執行完判斷語句,決定要執行a++,中斷,P2進行判斷,此時a仍然等於0,執行判斷語句,並執行輸出,獲得1,P1而後繼續執行,此時它該執行a++,這時a=1,執行並輸出,結果爲2;
對於D答案,初始爲0,P1執行完判斷語句,決定要執行a++,中斷,P2進行判斷,此時a仍然等於0,執行a++,獲得a=1,中斷,P1繼續執行a++,a=2,P1輸出,獲得2,P1結束,P2繼續執行輸出語句,獲得2;
5.給定fun函數以下,那麼fun(10)的輸出結果是()
int fun(int x) { return (x==1) ? 1 : (x + fun(x-1)); }
A.0
B.10
C.55
D.3628800
遞歸展開,f(10)=10+f(9)=10+9+f(8)+……+1=55
六、在C++程序中,若是有一個整型變量頻繁使用,最好將它定義爲 A、auto B、extern C、static D、register 答案:D 解析:C語言四個存儲說明符:auto、extern、static、register (1)auto 動態存儲(默認) :在函數中定義的自動變量;動態存儲,在定義該變量的函數被調用時,才分配存儲單元; (2)static 靜態存儲 用靜態存儲方式存儲變量,生命週期爲進程的整個執行時間 分類:在函數體外定義的靜態全局變量(它能夠用extern在其餘文件中聲明並引用此靜態全局變量) 在函數體內定義的靜態變量叫靜態局部變量(它使用存在,並只能在聲明的函數中訪問,其餘函數無權訪問,系統在未賦值狀況下自動賦值爲0) 靜態全局變量的說明
靜態全局變量要是定義在.cpp文件中,那麼這個變量只能被這個.cpp文件中的函數訪問 靜態全局變量要是定義在.h文件中,那麼這個變量能夠被任何包含了這個.h文件的.cpp文件訪問
"注意不要在頭文件中生命static變量和全局變量(demo1\demo2\main)"
(3)register寄存器存儲 這種變量直接放在CPU的寄存器中,不須要訪問內存,而直接從寄存器中讀取,這樣提升效率。
(4)extern引用聲明
做用: 其餘文件的函數,經過在正常的函數聲明前加上extern聲明外部函數 調用其餘文件的全局變量,經過在全局變量聲明前加上extern聲明外部函數
七、長爲n的字符串中匹配長度爲m的子串的算法複雜度爲 A、O(n) B、O(n+m)C、O(n+logm)D、O(m+logn) 答案:B 普通匹配在最壞狀況下時間複雜度爲O(m*(n-m+1)); KMP算法時間複雜度爲O(m+n);
找子串中的next[j]序列,即子串中某一位跟前面哪個重複
讓子串向右移動的儘量遠一些來達到下降複雜度的目的。
子串 ababaabab next[j] (01)1234234 最大右移 112222555
next[j]表示若比對到j位,發生不匹配,則子串向右移動next[j]位。
KMP算法待改進
八、判斷一包含n個整數的數組a[]中是否存在i、j、k知足a[i]+a[j]=a[k]的時間複雜度最小值爲() A、O(n^3)B、O(n^2logn)C、O(n^2)D、O(nlogn)
九、下列排序算法中最壞複雜度不是n(n-1)/2的是 A.快速排序 B.冒泡排序 C.直接插入排序 D.堆排序 答案: 解析:只有堆排序和歸併排序的最壞複雜度爲O(nlogn)
10.三次射擊能中至少一次的機率是0.95,請問一次射擊能中的機率是多少?
A.0.32 B.0.5 C.0.63 D.0.85
答案:
解析:1-(1-p)^3=0.95+估算
2、不定項選擇
十一、如下哪些進程狀態轉換是正確的()
A.就緒到運行 B.運行到就緒 C.運行到阻塞 D.阻塞到運行 E.阻塞到就緒】
答案:D
解析:一、就緒》執行 二、執行》就緒 三、執行》阻塞 四、阻塞》就緒
12.一個棧的入棧數列爲:一、二、三、四、五、6;下列哪一個是可能的出棧順序
13.下列哪些代碼可使得a和b交換數值 A、b=a+b;a=a+b;b=b-a
14.A和B晚上無聊就開始數星星。每次只能數K個(20<=k<=30)A和B輪流數。最後誰把星星數完誰就獲勝,那麼當星星數量爲多少時候A必勝?(選項不記得) A、2013 B、2888 C、3935 D、4062 E、25051
答案:ABCDE 首先,A先取,使剩餘的星星爲50的倍數。而後數星星的順序爲B、A、B、A……。B數k個星星,則A就數50-k個,使剩餘星星始終爲50的倍數,最後,必定是A數最後的星星。A必勝。
3、填空問答題 15.已知一個整數數組A和數組長度爲n,設計一個簡潔的程序(<20行代碼)完成數組元素在原地倒敘,好比輸入時A爲{1,2,3,4},則程序結束時,A爲{4,3,2,1}。要求使用加減乘除賦值和邏輯控制語句,不得調用類庫函數。 看到卷子,得了4分
void revense(int * a,int n) {
if(n<=0)break; else { int i,j,temp; for(i=0,j=n-1;;i<n/2,j>n/2;i++,j--) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } 16.給你三個線程,分別採用先來先分配的策略和最短執行之間的調度策略,而後計算每一個線程從提交到執行完成的時間。 題目實在太長,還有幾個表格。考察的是操做系統裏面做業調度算法先進先出和最短做業優先。
17.某工程師總結了一下近半年上班苦逼的經歷,得出一些苦逼的數據,他忘記設鬧鈴的機率是0.2;上班路上堵車的機率時0.5;他還記錄下一個表。請計算他60個工做日中遲到天數的指望值。 事件 遲到機率
忘記設鬧鈴,堵車 1.0
忘記設鬧鈴,沒堵車 0.9
設了鬧鈴,堵車 0.8
設了鬧鈴,沒堵車 0.0
答案: 計算60個工做日中遲到的天數的指望 (1)忘記設鬧鈴,堵車的天數:0.20.560=6; (2)忘記設鬧鈴,沒堵車:0.2*(1-0.5)60=6; (3)設了鬧鈴,堵車:0.80.560=24; (4)設了鬧鈴,沒堵車:0.80.5*60=24; 則其遲到天數的機率分佈爲 6 6 24 24 1 0.9 0.8 0
故其指望值爲61+60.9+240.8+240=6+5.4+19.2+0=30.6
1八、在某戰場有n個戰士,n>4,每一個戰士都知道一些不一樣的戰報。他們指望經過一些雙方交流(如:打電話)來共享戰報,達到每一個人都知道全部戰報的效果。每次交流都能使雙方得知對方知道的全部戰報。請設計一個高效的算法來達到這個目標,並求出雙方交流次數和最小值(不用寫代碼)。 參考其餘人解法: 一、分紅兩組:1) 2個node,2) n-2個node 二、2個node須要鏈接1次,使得2個node擁有2個節點信息; 三、n-2個node至少須要n-3次鏈接,使得最後鏈接的2個node擁有這n-2個node的信息; 四、第一組的2個node與第n-2組的最後兩個node(即得到該組所有信息的2個nodes)分別鏈接;因而4個節點獲得所有信息,鏈接了2次。這裏是爲何節約了一次鏈接的關鍵。 五、剩下的n-4個node都沒有得到所有信息,每一個node至少須要一次鏈接。所以至少須要n-4次鏈接。用擁有所有信息的其中一個node與剩下的n-4個node鏈接。則只須要n-4次。 六、得總過須要1+(n-3)+2+(n-4)= 2n-4.
另外能夠用遞歸法證實:
1九、房間裏有N-1爲羣衆和1位明星。每位羣衆都認識該明星,羣衆之間的認識情況未知, 而該明星卻不認識任何一位羣衆。假設你是機器人,具備問一我的是否定識另外一我的的功能,每次耗費時間O(1)。請設計一個最優算法在這N我的中找到該明星,並分析複雜度。(不用寫代碼,不分析複雜度不得分)
這個問題等價於找未知序列數中的最小數
4、綜合題
淘寶網某金冠賣家,在各城市共建有n個倉庫,造成如圖所示的一個環形。開始時,每一個倉庫的存貨量不等。由於供銷的須要,賣家想調整各倉庫,使全部倉庫的存貨量都同樣。請幫賣家設計一種算法,用最少的費用(即最小搬運量)到達他的目的。搬運貨物時,只能在相鄰的倉庫間搬運。