1. 程式人生 > >Java遊戲伺服器端面試題整理(轉載)

Java遊戲伺服器端面試題整理(轉載)

  一、選擇題

1、既希望較快的查詢又便於線性表動態變化的查詢方法是?
A:順序查詢 B:折半查詢 C:索引順序查詢 D:雜湊法查詢

ans:C
詳細解釋:
查詢是在大量的資訊中尋找一個特定的資訊元素,在計算機應用中,查詢是常用的基本運算,例如編譯程式中符號表的查詢。用關鍵字標識一個數據元素,查詢時根據給定的某個值,在表中確定一個關鍵字的值等於給定值的記錄或資料元素。在計算機中進行查詢的方法是根據表中的記錄的組織結構確定的。
順序查詢也稱為線形查詢,從資料結構線形表的一端開始,順序掃描,依次將掃描到的結點關鍵字與給定值k相比較,若相等則表示查詢成功;若掃描結束仍沒有找到關鍵字等於k的結點,表示查詢失敗。
二分查詢要求線形表中的結點按關鍵字值升序或降序排列,用給定值k先與中間結點的關鍵字比較,中間結點把線形表分成兩個子表,若相等則查詢成功;若不相等,再根據k與該中間結點關鍵字的比較結果確定下一步查詢哪個子表,這樣遞迴進行,直到查詢到或查詢結束髮現表中沒有這樣的結點。
【優缺點】折半查詢法的優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。
分塊查詢也稱為索引順序查詢,把線形分成若干塊,在每一塊中的資料元素的儲存順序是任意的,但要求塊與塊之間須按關鍵字值的大小有序排列,還要建立一個按關鍵字值遞增順序排列的索引表,索引表中的一項對應線形表中的一塊,索引項包括兩個內容:① 鍵域存放相應塊的最大關鍵字;② 鏈域存放指向本塊第一個結點的指標。分塊查詢分兩步進行,先確定待查詢的結點屬於哪一塊,然後在塊內查詢結點。
雜湊表查詢是通過對記錄的關鍵字值進行運算,直接求出結點的地址,是關鍵字到地址的直接轉換方法,不用反覆比較。假設f包含n個結點,Ri為其中某個結點(1≤i≤n),keyi是其關鍵字值,在keyi與Ri的地址之間建立某種函式關係,可以通過這個函式把關鍵字值轉換成相應結點的地址,有:addr(Ri)=H(keyi),addr(Ri)為雜湊函式。


2、分別以下列構造二叉排序樹,與用其他三個序列所構造的結果不同的是?
A:(100,80,90,60,120,110,130)

B:(100,120,110,130,80,60,90)
C:(100,60,80,90,120,110,130)
D:(100,80,60,90,120,130,110)
ans:C
這道題我答錯了,我選得B,回來一看應該選擇C項,有餘長時間沒有看過作業系統了,好多東西我都忘記了,這道題真真的是蒙的。
詳細解釋:
一、二叉排序樹的定義
二叉排序樹或者是空樹,或者是具有如下性質的二叉樹:
1、左子樹上所有結點的資料值均小於根結點的資料值;
2、右子樹上所有結點的資料值均大於或等於根結點的資料值;
3、左子樹、右子樹本身又各是一棵二叉排序樹。
二、叉排序樹的構造
二叉排序樹的構造過程實質上就是排序的過程,它是二叉排序樹作媒介,將一個任意的資料序列變成一個有序序列。二叉排序樹的構造一般是採用陸續插入結點的辦法逐步構成的。具體構造的思路是:
1、以待排序的資料的第一個資料構成根結點;
2、對以後的各個資料,逐個插入結點,而且規定:在插入過程的每一步,原有樹結點位置不再變動,只是將新資料的結點作為一個葉子結點插入到合適的位置,使樹中任何結點的資料與其左、右子樹結點資料之間的關係仍然符合對二叉排序樹的要求。
所以有2可知,明顯我們應該選擇出C,因為只有C項的兩個子樹是以60,120為對應根節點的,其他的三個是以80,120作為子樹根節點的。

3、實現傳送到某個email連結的Html程式碼是【】?
A:< mail>xxx@yyy< /mail>
B:< mail href="xxx@yyy"/>
C:< a href="mailto:xxx@yyy">
D:< a href="xxx@yyy">
ans:C
詳細解釋:
^_^,這題我做對了,其實我不懂這個Html程式碼,我做到這道題的時候使用Html語言的邏輯猜的,看A和B,我使用排除法,要使A對,那麼要是按照Html的邏輯,那麼B也對,所以我知道A和B不對,另外對於D,明顯是超連結的語句啊,所以我選得C,回來一看果然對了,蒙也要技術的。
或者自己使用dreamweaver的插入--電子郵件標籤都看的到。 

二、填空題

1、多個執行緒互斥使用資源,對應的訊號量的變化範圍【 】?
ans:[0,1]
詳細解釋:一般訊號量為0,1就可以了,若某個資源一次最多可以n個執行緒可以訪問,那麼訊號量的範圍就為【0~(n-1)】

2、對於資源靜態分配法來避免死鎖,主要是打破了死鎖四個條件的那個【】?
ans:部分分配條件
詳細解釋:
死鎖的條件
1、互斥條件(Mutual exclusion):資源不能被共享,只能由一個程序使用。
2、請求與保持條件(Hold and wait):已經得到資源的程序可以再次申請新的資源。
3、非剝奪條件(也稱為部分分配條件)(No pre-emption):已經分配的資源不能從相應的程序中被強制地剝奪。
4、迴圈等待條件(Circular wait):系統中若干程序組成環路,改環路中每個程序都在等待相鄰程序正佔用的資源
死鎖預防的方法:
(1)打破"不剝奪條件:強迫那些請求新資源而沒有立即得到滿足的程序,釋放它已保持的其它資源。即一個程序已佔用的資源在執行過程中可能要暫時釋放。
(2)打破"部分分配"條件:對某程序所要求的資源一次性地分配完畢。這樣,程序在執行過程中就不再需要新的資源。這種方法又稱為預先靜態分配法。但在做靜態分配時,只要有一種資源不能滿足,該程序就必需等待.
(3)打破"環路等待"條件:在資源的分配過程中,對資源的請求作出某種限制,使環路不可能出現--有序資源分配法

3、當一個程序獨佔處理器順序執行的時候,具有兩個特性【】和可再現性。
ans:封閉性
詳細解釋:
程式順序執行的特徵:
a.順序性:每一操作必須在下一操作開始之前結束
b.封閉性:程式執行時獨佔全機資源,資源的狀態(除初始狀態外)只有本程式才能改變,程式一旦執行,其結果不受外界影響
c.可再現性:程式執行環境和初始條件相同,重複執行時,結果相同
我開始寫的是可預見性……我也不從哪裡看到這個說法的……

4、中級表示式3+x*(2.4/5+6)所對應的字尾表示式為【】?
ans:3x2.45/6-*+
5、在一個帶頭節點的單迴圈連結串列中,P指向尾結點的直接前驅,則指向頭結點的指標head可用P表示為head=【 】?
ans:P->next->next
6、有序表(12,18,30,43,56,78,82,95)中以此二分查詢43和56元素時,其查詢長度分別為【 】和【 】?
詳細解釋:這題要說難難在那裡哪?就是二分法比較的時候,當數列個數是偶數的時候到底是應該去哪個值,也就是說第一次比較的值應該是43,還是56,如果是43,那麼這題就是1,3這個結果,那麼恭喜你,你答對了,要使56,那麼這道題就是3,1.結果正好相反。像本篇日誌所涉及的第一道題就講到了查詢方法:二分法,其中還提供一個連結:http://www.emcad.com/Teaching/DS-DB/Search.htm,其實這個連結中舉的例子是錯誤的,因為在演算法實現中(1+n)/2並不會四捨五入,因為c和c++都是取整的,也就是說本題(1+8)/2=4,也就是43而不是56!!!另外還有一種理解方法,有8個數(偶數),那麼8/2=4,所以比較的是第四個數。這麼理解也是對的。