1、若二叉樹采用二叉鏈表存儲結構,要交換其所有分支結點左、右子樹的位置,利用()遍歷方法最合適
A 前序 B 中序 C 后序 D 按層次
解析:顯然后序遍歷比較合理。正常的邏輯應該就是:做好當前結點子樹內部的交換,然后交換當前結點的左右子樹。剛好符合后序遍歷的算法邏輯。
1. 交換好左子樹
2. 交換好右子樹
3. 交換左子樹與右子樹
其他算法如先序和按層次其邏輯都差不多,即訪問當前結點時交換其左右子樹。從邏輯上來看稍顯別扭一點點。因此說最合適應該是后序遍歷,但是從實現上來說先序和按層次都是可以的。
1. 交換左子樹與右子樹
2. 遍歷左子樹
3. 遍歷右子樹
按層次遍歷
1. 根結點入隊列
2. 出隊列,交換其左右子樹,將子樹的根入隊列
3. 重復2直到隊列為空
中序遍歷相對較難實現一些。
2、鏈表不具備的特點是( )
A 可隨機訪問任何一個元素
B 插入、刪除操作不需要移動元素
C 無需事先估計存儲空間大小
D 所需存儲空間與線性表長度成正比
解析:鏈表是線性表的鏈式存儲,是用結點來存儲數據元素。線性表采用鏈表作為存儲結構時,不能進行數據元素的隨機訪問,其優點是插入和刪除操作不需要移動元素。所以,本題應該選擇A。
3、下列關於棧的敘述正確的是()
A 棧是非線性結構
B 棧是一種樹狀結構
C 棧具有先進先出的特征
D 棧有后進先出的特征
解析:棧實際上也是線性表,是按照“先進后出”或“后進先出”的原則組織數據的。
4、某棵完全二叉樹上有698個節點,則該二叉樹的葉子節點數為
A 349 B 350 C 255 D 351
解析:所謂完全二叉樹是指除最后一層外,每一層上的結點數均達到最大值;在最后一層上只缺少右邊的若干結點。具有n個結點的完全二叉樹,其父結點數為int(n/2),而葉子結點數等於總結點數減去父結點數。本題n=698,故父結點數等於int(698/2)=349,葉子結點數等於 698-349=349。
5、輸入若已經是排好序的,下列排序算法最快的是()
A 插入排序 B Shell排序 C 合並排序 D 快速排序
解析:A:插入排序只需要遍歷一遍,時間復雜度為O(n)
B:希爾排序基於插入排序,只有好的情況下才能達到O(n)
C:歸並排序時間復雜度為nlogn
實際上該題接收窗口一直為10KB,可知不管何時,發送窗口一定小於等於10KB,選項中只有A選項滿足條件,可直接得出選A。
8、linux 系統中,給文件授予可執行權限的命令是()
A chown B mv C sudo D chmod
解析:chown更改文件的擁有者,mv移動,sudo以管理員權限運行,chmod給文件授予可執行權限。
解析:進程有3個狀態:就緒態。執行態、阻塞態。三種狀態的轉換包含有:
就緒->執行,執行->就緒,執行->阻塞,阻塞->就緒
等待I/O、進程sleep、等待解鎖等原因都會導致進程暫停。關於"時間片切換",當進程已經獲得了除cpu外所有的資源,這時的狀態就是就緒態,當分配到了時間片就成了執行態,當時間片用完之前一直未進入阻塞態的話,此后便繼續進入就緒態。所以進程的就緒與阻塞是完全不同的。
11、如何減少換頁錯誤?
A 進程傾向於占用CPU
B 訪問局部性(locality of reference)滿足進程要求
C 進程傾向於占用I/O
D 使用基於最短剩余時間(shortest remaining time)的調度機制
解析:換頁錯誤又稱缺頁錯誤,當一個程序試圖訪問沒有映射到物理內存的地方時,就會出現缺頁錯誤, 這時操作系統就要去虛擬內存中加載這塊內存頁。
減少換頁錯誤的方法,即降低缺頁中斷率:
1、內存頁框數。增加作業分得的內存塊數。
2、頁面大小。頁面划分越大,中斷率越低。
3、替換算法的優劣影響缺頁中斷次數
4、程序局部性。程序局部性好可減少缺頁中斷(為什么?)。
那么B是對的,而對於D,最短剩余時間調度是CPU調度就緒進程的方式,與頁面置換算法無關,不要搞混淆了。
局部性原理是一個經典的原理,分為時間局部性和空間局部性,意思是應用一旦訪問了一個空間的數據,則這個空間中的相鄰區域的內容也很可能被訪問,一旦訪問了某一段代碼,則其周圍的代碼也很可能被訪問。局部性原理的運用就是根據這個,把可能訪問的數據和代碼都加在到內存中,以后訪問就不用加載了(因為主要的消耗在IO端)。這也是迪傑斯特拉提出的goto語句有害的依據,應為goto語句能打破局部性原理,造成計算機的延遲加劇。
12、在內存分配的"最佳適應法"中,空閑塊是按()。
A 始地址從小到大排序
B 始地址從大到小排序
C 塊的大小從小到大排序
D 塊的大小從大到小排序
13、某網站的數據庫有一個成績表myscore,希望找出成績表中平均得分小於90的所有試卷。
A select paper_id from myscore where sum(score) < 90 group by paper_id
B select paper_id from myscore group by paper_id having avg(score) < 90
C select paper_id from myscore where avg(score) < 90
D select paper_id from myscore where avg(score) < 90 group by paper_id

就在移除一個對象並回收它的內存空間之前,Java垃圾回收器將會調用各個實例的finalize()方法,這樣實例對象就有機會可以釋放掉它占用的資源。盡管finalize()方法是保證在回收內存空間之前執行的,但是對具體的執行時間和執行順序是沒有任何保證的。多個實例之間的finalize()執行順序是不能提前預知的,甚至有可能它們是並行執行的。程序不應該預先假設實例執行finalize()的方法,也不應該使用finalize()方法來回收資源。
在finalize過程中拋出的任何異常都默認被忽略掉了,同時對象的銷毀過程被取消
JVM規范並沒有討論關於弱引用的垃圾回收,這是明確聲明的。具體的細節留給實現者決定。
垃圾回收是由守護進程執行的
21、【加減二叉樹】
二叉樹是除了葉子節點之外所有的節點都最多有兩個子節點的樹。滿二叉樹則是除葉子節點外所有節點都有兩個子節點的樹,且所有葉子節點到根節點的距離都相 等。 現在有一棵無限大的滿二叉樹,根節點編號為1。編號為i的節點的左兒子編號為2*i,右兒子2*i+1(比如根節點1的左兒子為2,右兒子為3,2的左兒子為4,右兒子為 5。)。牛牛在這棵樹上做一個游戲,他從妞妞那里得到了兩個數n和k,妞妞希望他拿着數字0從根節點開始往下走,每次選擇一條邊移動,到達一個節點時選擇加 上這個節點的編號或者減去這個節點的編號。在走到第k個節點時所得到的數字剛好等於n。
這樣的路徑當然有很多。為了增加難度,妞妞決定讓牛牛告訴她經過的節點的編號和最小的路徑。 妞妞很聰明,給出的問題都是一定存在答案的。
你能幫幫牛牛嗎?
22、【走斜線】
有天他來到一張方格地圖上,整張地圖可以看做一個二維坐標軸。牛牛此刻處於原點(0,0),他想要到點(x,y)去。
牛牛有強迫症,他規定自己必須恰好k步走到點(x,y),中途可以經過任何點包括(x,y),但是第k步一定要到達(x,y)。 一步有八種走法,直線東(+1,0)南(0,-1)西(-1,0)北(0,+1),斜線東南(+1,-1)東北(+1,+1)西南(-1,-1)西北(-1,+1)。
牛牛會在能k步到達目的地的基礎下盡量走斜線,你能計算出牛牛到底走了多少條斜線嗎?
23、【得分最大】
牛牛和妞妞從他們的好朋友果果處得到了兩個盒子,盒子里是一些寫了分值的彩球。牛牛和妞妞發現兩個盒子里的彩球數目是相等的,就決定一人一個。
妞妞拿到自己的盒子之后,決定跟牛牛玩一個游戲,規則如下:
一開始兩個人盒子里的彩球數目都是n個,由妞妞先手,兩人輪流實行下面兩個操作中的一個(只能選其中一個執行,不能不執行。),直到兩個盒子里的彩球都被 拿完位置。
1、從自己的盒子里選一個球拿出來,把球上面的分值加在自己的總得分上邊。
2、從對方的盒子里選一個球拿出來,把這個球移出游戲(對方不能再拿這個球)。
妞妞和牛牛都十分聰明,不會出錯,並且盡可能讓自己的得分比對方多。妞妞想知道,在游戲結束的時候,他能比牛牛多得多少分呢?