牛客網校招全國統一模擬筆試(三月場)- Java方向


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

D:快速排序在排好序的情況下,時間復雜度為n^2
6、在網絡7層協議中,如果想使用UDP協議達到TCP協議的效果,可以在哪層做文章?
A 應用層   B 表示層   C 會話層   D 傳輸層   E 網絡層
解析: 因為UDP要達到TCP的功能就必須實現擁塞控制的功能,而且是在路由之間實現,這個在底層明顯是做不到擁塞控制的,在應用層也是做不到的,因為應用層之間和應用程序掛鈎,一般只能操控主機的程序,而表示層是處理所有與數據表示及運輸有關的問題,包括轉換、加密和壓縮,在傳輸層是不可能的,因為你已經使用了UDP協議,無法在本層轉換它,只有在會話層.
  會話層(SESSION LAYER)允許不同機器上的用戶之間建立會話關系。會話層循序進行類似的傳輸層的普通數據的傳送,在某些場合還提供了一些有用的增強型服務。允許用戶利用一次會話在遠端的分時系統上登陸,或者在兩台機器間傳遞文件。 會話層提供的服務之一是管理對話控制。會話層允許信息同時雙向傳輸,或任一時刻只能單向傳輸。如果屬於后者,類似於物理信道上的半雙工模式,會話層將記錄此時該輪到哪一方。
7、主機甲和乙已建立了 TCP 連接,甲始終以 MSS=1KB 大小的段發送數據,並一直有數據 發送;乙每收到一個數據段都會發出一個接收窗口為 10KB 的確認段。若甲在 t 時刻發生超時時擁塞窗口為 8KB,則從 t 時刻起,不再發生超時的情況下,經過 10 個 RTT 后,甲的發送窗口是()
A 10KB   B 12KB   C 14KB   D 15KB
解析: 當t時刻發生超時時,把ssthresh設為8的一半,即為4,且擁塞窗口設為1KB。然后經歷10個RTT后,擁塞窗口的大小依次為2、4、5、6、7、8、9、10、11、12,而發送窗口取當時的擁塞窗口和接收窗口的最小值,而接收窗口始終為10KB,所以此時的發送窗口為10KB,選A。

  實際上該題接收窗口一直為10KB,可知不管何時,發送窗口一定小於等於10KB,選項中只有A選項滿足條件,可直接得出選A。

8、linux 系統中,給文件授予可執行權限的命令是()

A chown   B mv   C sudo  D chmod

解析:chown更改文件的擁有者,mv移動,sudo以管理員權限運行,chmod給文件授予可執行權限。

9、下面關於Linux文件系統的inode描述錯誤的是:
A inode和文件是一一對應的
B inode描述了文件大小和指向數據塊的指針
C 通過inode可獲得文件占用的塊數
D 通過inode可實現文件的邏輯結構和物理結構的轉換
解析:  一般情況下,文件名和inode號碼是"一一對應"關系,每個inode號碼對應一個文件名。但是,Unix/Linux系統允許,多個文件名指向同一個inode號碼。這意味着,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。 除了硬鏈接以外,還有一種特殊情況。文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)。 這意味着,文件A依賴於文件B而存在,如果刪除了文件B,打開文件A就會報錯:"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode"鏈接數"不會因此發生變化。
10、進程阻塞的原因不包括________。
A 時間片切換   B 等待I/O   C 進程sleep   D 等待解鎖

解析:進程有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

解析: 統計函數不能在Where后面當做限定條件使用,因為where的過濾時機是在查看每一行屬性的時候,而統計函數需要在所有數據都查看之后才統計,所以這里用Where后面直接加什么都不對。
14、有土豆,蘿卜各一筐,土豆有 240 個,蘿卜有 313 個,把這兩筐平均分給一些小朋友,一直土豆分到最后余 2 個,蘿卜分到最后還余 7 個,求最多有多少個小朋友 參加分水果?
A 14   B 17   C 28   D 34
15、4個袋子,15個球,每個袋子至少放一個球,而且袋子中的球數量不能重復,有多少種方式?
A 4   B 5   C 6    D 7
解析:1,2,3,9   1,2,4,8   1,2,5,7   1,3,4,7   1,3,5,6   2,3,4,6
16、下列關於 java 語言的特點,描述錯誤的是()
A java是跨平台的編程語言
B java支持分布式計算
C java是面向過程的編程語言
D java支持多線程
解析:Java是面向對象的編程語言
17、instanceof運算符能夠用來判斷一個對象是否為:
A 一個類的實例   B 一個實現指定接口的類的實例   C 全部正確   D 一個子類的實例
解析:此解析見我另外一篇博客:Java中的instanceof關鍵字 https://www.cnblogs.com/zsh-blogs/p/10574183.html
18、關於PreparedStatement與Statement描述錯誤的是()
A 一般而言,PreparedStatement比Statement執行效率更高
B PreparedStatement會預編譯SQL語句
C Statement每次都會解析/編譯SQL,確立並優化數據獲取路徑
D Statement執行掃描的結果集比PreparedStatement大
解析:此解析見我另外一篇博客:PreparedStatement與Statement區別 https://www.cnblogs.com/zsh-blogs/p/10574381.html
19、有這么一段程序:
請問以上程序執行的結果是()
A true,true   B true,false   C false,true   D false,false
20、對於一個已經不被任何變量引用的對象,當垃圾回收器准備回收該對象所占用的內存時,將自動調用該對象的哪個方法()
A finalize   B notify   C notifyAll   D hashCode
解析: 垃圾回收過程中的對象銷毀–Finalization

  就在移除一個對象並回收它的內存空間之前,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、從對方的盒子里選一個球拿出來,把這個球移出游戲(對方不能再拿這個球)。

  妞妞和牛牛都十分聰明,不會出錯,並且盡可能讓自己的得分比對方多。妞妞想知道,在游戲結束的時候,他能比牛牛多得多少分呢?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM