一、選擇題
1、數據庫表設計最合理的是(A)
A、學生{id,name,age} 學科{id,name} 分數{學生id,學科id,分數}
分析:數據庫里面 一般是 學生,學科,分數 分開放。
2、在數據庫系統中,產生不一致的根本原因是(D)
A.數據存儲量太大 B.沒有嚴格保護數據 C.未對數據進行完整性控制 D.數據冗余
3、15L和27L兩個杯子可以精確地裝(C)L水?
A. 53 B. 25 C. 33 D. 52
分析:15和27 升水 可以裝出 3升水,故:27 + 3 +3 因此33合理。。
4、考慮左遞歸文法 S->Aa|b、 A ->Ac | Sd |e,消除左遞歸后應該為(A)
e為空集
消除左遞歸,即消除 有A->A*的情況
消除做遞歸的一般形式為
U = Ux1 | U x2 |y1|y2
U = y1U' |y2 U'
U' = x1U'|x2U'|e
A = Ac|Aad|bd|e
A =bdA'|A'
A'= cA'|adA'|e
5、下列排序算法中,初始數據集合對排序性能無影響的是()
A.插入排序 B.堆排序 C.冒泡排序 D.快速排序
6、二分查找在一個有序序列中的時間復雜度為(O(logn))
7、路由器工作在網絡模型中的哪一層(網絡層)?
分析:主要作用就是選路和轉發,當然網絡層
8、select foo,count(foo) from pokes where foo>10 group by foo having count(*)>5 order by foo
SQL Select語句完整的執行順序:
1、from子句組裝來自不同數據源的數據;
2、where子句基於指定的條件對記錄行進行篩選;
3、group by子句將數據划分為多個分組;
4、使用聚集函數進行計算;
5、使用having子句篩選分組;
6、計算所有的表達式;
7、使用order by對結果集進行排序。
因此 合理的答案應該為 from --where-- group by-- having --select-- order by
只有select選出了相應的表 才能對其排序,刪除之類的操作
9、深搜如下圖,遍歷順序為()
這道題目 我咋看不出來 那個解呢。
如果深度的話 A B C D E F H I G
廣度的話 A B C D E F G H I
10、UNIX系統中,目錄結構采用(二級目錄結構)
11、請問下面的程序一共輸出多少個“-”?
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i=0; i<2; i++) { fork(); //復制父進程,調用一次,返回兩次 printf("-"); //緩沖區數據 } return 0; }
答案:8
分析:
如果你對fork()的機制比較熟悉的話,這個題並不難,輸出應該是6個“-”,但是,實際上這個程序會很tricky地輸出8個“-”。
要講清這個題,我們首先需要知道fork()系統調用的特性,
- fork()系統調用是Unix下以自身進程創建子進程的系統調用,一次調用,兩次返回,如果返回是0,則是子進程,如果返回值>0,則是父進程(返回值是子進程的pid),這是眾為周知的。
- 還有一個很重要的東西是,在fork()的調用處,整個父進程空間會原模原樣地復制到子進程中,包括指令,變量值,程序調用棧,環境變量,緩沖區,等等。
所以,上面的那個程序為什么會輸入8個“-”,這是因為printf(“-”);語句有buffer,所以,對於上述程序,printf(“-”);把“-”放到了緩存中,並沒有真正的輸出,在fork的時候,緩存被復制到了子進程空間,所以,就多了兩個,就成了8個,而不是6個。
另外,多說一下,我們知道,Unix下的設備有“塊設備”和“字符設備”的概念,所謂塊設備,就是以一塊一塊的數據存取的設備,字符設備是一次存取一個字符的設備。磁盤、內存都是塊設備,字符設備如鍵盤和串口。塊設備一般都有緩存,而字符設備一般都沒有緩存。
對於上面的問題,我們如果修改一下上面的printf的那條語句為:
printf("-\n");
或是
printf("-"); fflush(stdout);
就沒有問題了(就是6個“-”了),因為程序遇到“\n”,或是EOF,或是緩中區滿,或是文件描述符關閉,或是主動flush,或是程序退出,就會把數據刷出緩沖區。需要注意的是,標准輸出是行緩沖,所以遇到“n”的時候會刷出緩沖區,但對於磁盤這個塊設備來說,“n”並不會引起緩沖區刷出的動作,那是全緩沖,你可以使用setvbuf來設置緩沖區大小,或是用fflush刷緩存。
12、接上
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i=0; i<2; i++) { fork(); //復制父進程,調用一次,返回兩次 printf("-\n"); //緩沖區數據 } return 0; }
答案:6
13、避免死鎖的一個著名算法是(銀行家算法)
14、你怎么理解分配延遲(dispatch lantency)的?
分析:分配延遲 一般指進程切換時間 在進程調度哪里,只有A進程切換
15、不是進程的基本狀態的是(D)
A. 阻塞態 B.執行態 C.就緒態 D.完成態
16、任務 1: cpu 3.5分鍾 io 14分鍾
任務 2 : 10分鍾后 cpu 2 分鍾 io 8分鍾
任務3 : 15分鍾后 cpu 1.5分鍾 io 6分鍾
查了資料 io 花費p 則多道程序 cpu占用率 為 1-p^n只有 多個都處於等待才不是cpu時間
因此 分析過程如下
0-10分鍾 cpu時間 10*0.2 = 2
10-15分鍾 cpu利用率為 1-0.8^2 = 0.36 所以這 5分鍾里面 cpu時間 為 0.36*5 =1.8
15 -之后 cpu利用率 1-0.8^3 = 0.488
0-10提供2分鍾cpu時間
10-15 提供1.8分鍾cpu時間
15 -18.7 提供1.8分鍾cpu
18.7-21.5提供 1分鍾cpu
21.5-23.5提供0.4分鍾cpu時間
故,總共花費23.5分鍾
17、在所有非搶占CPU調度算法中,系統平均響應時間最優的是(C)
A.實時調度 B.段任務優先 C.時間片輪轉 D.先來先服務
18、什么是內存抖動(Thrashing)(A)?
A.非常頻繁的換頁活動
19、Belady's Anomaly出現在哪里()?
A內存管理算法 B內存換頁算法 C預防死鎖算法 D磁盤調度算法
分析:Belady異常(Belady Anomaly):有些情況下,頁故障率(缺頁率)可能會隨着所分配的幀數的增加而增加。
20、生產者消費者中不產生死鎖的程序是(A)
。。。。。。
二、填空題
21、將下圖進行拓撲排序得:ABCFD
分析:非常簡單,把握一個原則。。目的節點一定不排在源節點前邊
22、補充完整二分查找:
tail=mid-1;、head = mid;
23、補充完整求連續子數組最大和
nStart = max(nStart+A[i],0); nAll = max(nAll,nStart);
24、給一二叉樹,寫出先序遍歷順序。。abdefghc
25、最長遞增子序列,得到其長度的最優化時間復雜度為(O(nlogn)),空間復雜度為(O(n))
26、入棧出棧順序問題,卡特蘭數:n=5,那么。。。。C(2n,n)/(n+1)
27、a+b*(c-d)/e-f的逆波蘭式是:abcd-*e/+f-
三、附加題
1、海量數據處理。。獲取T級別條字符串中的出現次數最多的前10個關鍵字
2、設計一個IP統計系統(后台統計系統)
