標籤:
一、單選題(4)
1、HTTP應答中的500錯誤是:( )
A.伺服器內部出錯
B.檔案未找到
C.用戶端網路不通
D.沒有存取權限
解析:常見HTTP狀態代碼及其含義如下:
200:正常;請求已完成。
400:錯誤請求 — 請求中有文法問題,或不能滿足請求。
404:找不到 — 伺服器找不到給定的資源;文檔不存在。
500:內部錯誤 — 因為意外情況,伺服器不能完成請求。
2、在CPU和記憶體之間增加cache的作用是( )
A.提高記憶體穩定性
B.解決記憶體速度低於CPU的效能瓶頸
C.增加記憶體容量
D.增加記憶體容量且加快存取速度
解析:CPU處理資料,硬碟儲存資料,記憶體負責串連CPU和硬碟,儲存臨時使用的資料。記憶體只用於暫時存放程式和資料,一旦關閉電源或發生斷電,其中的程式和資料就會丟失。
cache名為高速緩衝儲存空間,cache是存在於主存(記憶體)與CPU之間的一級儲存空間,其作用是緩和中央處理器和主儲存空間之間速度不匹配的矛盾。
3、關於鎖和事務描述正確的是( )
A.事務T1獲得了資料項目D1上的排它鎖後就可以對D1做讀寫操作了
B.按照不同的力度,鎖可以分為:表級鎖,頁級鎖,行級鎖,列級鎖
C.表級鎖比行級鎖更容易發生死結
D.SELECT語句不會產生鎖
解析:常見的鎖有表鎖、 行鎖、 頁鎖、外鍵鎖等
鎖有一定的消耗,主要有:獲得鎖,檢查鎖是否已經解除,釋放鎖等,這些操作都會增加系統的開銷。 表鎖開銷比較小,但是並發效能也較差,行鎖並發效能高,但是需要更多鎖,資料庫系統一般都支援鎖的自動升級,例如一個事務中的鎖過多的時候,可能會將行鎖定擴大到表鎖。 mysql的各個儲存引擎根據不同的應用情境採用不同的鎖機制,MyISAM儲存引擎採用表鎖,InnoDB使用行鎖。如果執行alert table之類的操作,伺服器也會採用表鎖,而忽略儲存引擎的鎖機制。
頁鎖,某些資料庫支援頁鎖,頁鎖粒度介於行鎖和表鎖之間,用於鎖定存放資料的頁,1頁通常含有n個資料行。
1) 表級鎖:開銷小,加鎖快;不會出現死結;鎖定粒度大,發生鎖衝突的機率最高,並發度最低。2) 行級鎖:開銷大,加鎖慢;會出現死結;鎖定粒度最小,發生鎖衝突的機率最低,並發度也最高。3) 頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死結;鎖定粒度界於表鎖和行鎖之間,並發度一般。
SELECT會產生共用鎖定。
4、甲乙兩個人答對一道題的機率分別為90%和80%,對於一道判斷題,他們都選的“正確”,問這道題正確的機率為( )
A.9/10
B.18/25
C.36/37
D.35/36
解析:
5、有足夠量的2分、5分、1分硬幣,如果想湊齊一元錢,可以有( )中方法
A.541
B.270
C.1024
D.128
解析:
package basic;public class cal1 { public static void main(String[] args) { // TODO Auto-generated method stub int count=0; for(int i=0;i<=20;i++){ for(int j=0;j<=50;j++){ for(int k=0;k<=100;k++){ if(5*i+2*j+k==100){ count++; } } } } System.out.println(count);//print "541" }}
6、65,8,50,15,37,24,(),括弧中的數字是( )
A.25
B.26
C.22
D.27
7、有關下述Java代碼描述正確的是( )
public class TestClass{
private static void testMethod(){
System.out.println(“testMethod”);
}
public static void main(String[] args){
((TestClass)null).testMethod();
}
}
A.編譯通過,運行異常,報NullPointerException
B.編譯通過,運行異常,報IllegalArgumentException
C.編譯通過,運行異常,報NoSuchMethodException
D.運行正常,輸出testMethod
package basic;public class TestClass{ private static void testMethod(){ System.out.println("testMethod"); } public static void main(String[] args){ ((TestClass)null).testMethod();//print "testMethod" }}
8、設有一個用數組Q(1..m)表示的環形隊列,約定f為當前隊頭元素在數組中的下標號,r為隊尾元素的後一位置(按順時針方向),若隊列非空,則計算隊列中元素個數的公式是( )
A.(m+r-f)mod m
B.r-f
C.(m-r-f)mod m
D.(m-r+f) mod m
9、設有向圖G=(V,E),頂點集V={V0,V1,V2,V3},邊集E={<v0,v1>,<v0,v2>,<v0,v3>,<v1,v3>},若從頂點V0開始對圖進行深度優先遍曆,則可能得到的不同遍曆序列個數為
A.2
B.3
C.4
D.5
10、下列選項中,不能構成折半尋找中關鍵字比較序列的是( )
A.500,200,450,180
B.500,450,200,180
C.180,500,200,450
D.180,200,500,450
二、多選題
1、使用ping命令ping另外一台主機,收到正確的應答,能說明( )
A.目的主機可達
B.源主機的ICMP軟體和IP軟體運行正常
C.目的主機的ICMP軟體和IP軟體運行正常
D.ping報文經過的路由選擇正常
2、關於進程和線程,下列選項中說法正確的是( )
A.線程可以與同進程中的其他線程共用資料,但擁有自己的棧空間,擁有獨立的執行序列
B.線程是並發程式在執行過程中分配和管理資源的基本單位
C.一個進程是PCB結構與程式的資料的組合
D.線程的改變不僅代表了CPU執行過程的改變,也發生了進程所擁有資源變化
3、事務具有多個特性,其中包括( )
A.一致性
B.持久性
C.原子性
D.隔離性
解析:對資料庫事務擁有的四個特性解釋如下:
原子性(Atomicity):事務作為一個整體被執行,包含在其中的對資料庫的操作要麼全部被執行,要麼都不執行。
一致性(Consistency):事務應確保資料庫的狀態從一個一致狀態轉變為另一個一致狀態。一致狀態的含義是資料庫中的資料應滿足完整性條件約束。
隔離性(Isolation):多個事務並發執行時,一個事務的執行不應影響其他事務的執行。
持久性(Durability):已被提交的事務對資料庫的修改應該永久儲存在資料庫中。
4、下面選項正確的是( )
A.二維數組和多維陣列均不是特殊的線性結構
B.向二叉排序樹中插入一個結點需要比較的次數可能大於該二叉樹的高度
C.如果某個有向圖的鄰接表中第i條單鏈表為空白,則第i個頂點的出度為零
D.不論線性表採用順序儲存結構還是鏈式儲存結構,刪除值為X的結點的時間複雜度均為O(n)
解析:多位元組是一種最簡單的非線性結構,它採用順序儲存結構。線性結構是一個有序資料元素的集合。 常用的線性結構有:線性表,棧,隊列,雙隊列,數組,串。關於廣義表,是一種非線性資料結構。常見的非線性結構有:二維數組,多維陣列,廣義表,樹(二叉樹等),圖。
5、已知一段文本有1382個字元,使用了1382個位元組進行儲存,這段文本全部是由a、b、c、d、e這5個字元組成,a出現了354次,b出現了483次,c出現了227次,d出現了96次,e出現了232次,對這5個字元使用哈夫曼(Huffman)演算法進行編碼,則以下哪些說法正確( )
A.使用哈夫曼演算法編碼後,用編碼值來儲存這段文本將花費最少的儲存空間
B.使用哈夫曼演算法進行編碼,a、b、c、d、e這5個字元對應的編碼值是唯一的
C.使用哈夫曼演算法進行編碼,a、b、c、d、e這5個字元對應的編碼值可以有多個,每個字元編碼的位(bit)數是確定的
D.b這個字元的哈夫曼編碼值位元應該最短,d這個字元的哈夫曼編碼值位元應該最長
解析:哈夫曼編碼是一種可變長的編碼,它依據字元出現的機率來決定字元編碼的長度,使得出現機率大的字元編碼長度短,出現機率小的字元的編碼長度長,於是可以減少整體的編碼的長度。
三、編程題
1、編寫一個函數實現:判斷一個字串是否重複字元,字元集為ASCII。
要求:不允許使用額外的資料結構
package basic;public class RepeatOrNot { public static boolean judge(String str){ char[] chars=str.toCharArray(); for(int i=0;i<chars.length;i++){ char c=chars[i]; String cStr=String.valueOf(c); str=str.replaceFirst(cStr, " "); if(str.indexOf(cStr)!=-1){ return false; } } return true; } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(RepeatOrNot.judge("abca"));//print "false" System.out.println(RepeatOrNot.judge("abcd"));//print "true" }}
2、對於一個字串,請設計一個高效演算法,找到第一次重複出現的字元。
測試範例:
“qywyer23tdd”,11
返回:y
package basic;import java.util.HashMap;import java.util.Map;public class FindTheFirstRepeatChar { private static String getFirstRepeatChar(String str){ char[] chars=str.toCharArray(); Map<String,Integer> maps=new HashMap<String,Integer>(); char c; String cStr; for(int i=0;i<chars.length;i++){ c=chars[i]; cStr=String.valueOf(c); if(maps.containsKey(cStr)){ return cStr; }else{ maps.put(cStr, 1); } } return ""; } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(FindTheFirstRepeatChar.getFirstRepeatChar("qywyer23tdd")); System.out.println(FindTheFirstRepeatChar.getFirstRepeatChar("qywaqer23tdd")); }}
3、輸入一個字串,內有數字和非數字字元,如:ak123x456 17960?302gx14563,將其中連續的數字作為一個整體,依次存放到一個數組a中,例如123放入a[0],456放入a[1],……,編程統計其共有多少個整數,並輸出這些數。
package basic;import java.util.ArrayList;import java.util.List;public class GetNumbers { private static void getNumbers(String str) { char[] chars = str.toCharArray(); int k, flag = 0; List a = new ArrayList(); for (int i = 0; i < chars.length; i++) { k = Integer.valueOf(chars[i]); if (k >= 48 && k <= 57) { flag = flag * 10 + (k-48); } else if (flag != 0) { a.add(flag); flag = 0; } } if (flag != 0) { a.add(flag); } for (Object o : a) { System.out.println(o); } } public static void main(String[] args) { // TODO Auto-generated method stub GetNumbers.getNumbers("abc09ddd124fff456 7898");//print "9 124 456 7898" }}
參考部落格及書籍:
資料庫鎖機制:http://www.cnblogs.com/zhouqianhua/archive/2011/04/15/2017049.html
進程與線程的區別:http://www.cnblogs.com/way_testlife/archive/2011/04/16/2018312.html
哈夫曼演算法詳解:http://noalgo.info/411.html
關於進程與線程的習題:http://blog.csdn.net/livelylittlefish/
http://blog.csdn.net/livelylittlefish/
http://c.biancheng.net/cpp/html/2643.html
資料結構c語言版 陳明
電信20150924筆試題