京東2015年應屆生招聘筆試題(A)卷答案選擇題部分

1.操作系統死鎖的必要條件(多選題):()
  A.互斥條件
  B.系統資源有限
  C.進程調度不合理
  D.環路等待條件
答:A,C,D
參考資料:http://blog.sina.com.cn/s/blog_5e3604840100ddgq.html


2.定義根節點深度爲1,有n個元素的完全二叉樹的深度是()
  A.D(n) = log2(n)
  B.D(n) = 1 + log2(n)
  C.D(n) = n + log2(n)
  D.D(n) = 1 + n * log2(n)
答:B
思路:如果瞭解二叉樹就能知道數的深度是log2(N),那麼要不要加1呢,試試就知道要加1。(這裏log(N)是去除小數點後面的數字的,也就是想下取整)
見圖1
圖1

3.以下函數的時間複雜度()
void recursive(int n,int m,int o) {
	if(n <= 0) {
		printf("%d,%d\n",m,o);
	} else {
		recursive(n-1,m+1,o);
		recursive(n-1,m,o+1);
	}
}
  A.O(n*m*o)
  B.O(n^2*m^2)
  C.O(2^n)
  D.O(n!)
答:C
思路:咱們不用管後面的m和o,因爲循環的判斷條件是n,你看if語句裏面,是n<=0的時候跳出循環,所以n纔是重點,當n>0時,一個recursive(n)需要處理2個recursive(n-1),遞歸下去,每個recursive(n-1)又要處理2個recursive(n-2),所以這個函數一共要處理2^n個recursive(0,m,o);所以時間複雜度爲O(2^n)。
這裏,2^n 表示 2的n次方。


4.這是一道關於進程和線程的題,題目太模糊看不太清,推薦一個不錯介紹進程和線程的博客:
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html


5.假設你只有100Mb的內存,需要對1Gb的數據進行排序,最合適的算法是
  A.歸併排序
  B.插入排序
  C.快速排序
  D.冒泡排序
答:A
思路:這道題一開始我不是很會,因爲我一直在糾結100Mb內存如何存儲1Gb的數據。
    學長說是A,所以先選A。我會繼續對此問題進行追蹤……


6.以下關於TCP/IP協議的描述中,不正確的是()
  A.TCP負責將信息拆分爲數據包,並在數據包達到目的地後對其進行裝配
  B.IP負責爲數據包選擇路由以使將其傳遞到正確的目的地
  C.TCP協議是可靠的服務,當客戶端第一次向服務端發送會話請求的時候,就會把數據傳輸過去
  D.IP、ICMP和IGMP都是網絡層的協議
答:C
思路:其他沒有看,因爲雖然我讀書少沒有學過TCP/IP,但是我知道TCP/IP的三次握手。
【重點:TCP/IP的三次握手與四次揮手】
http://www.2cto.com/net/201310/251896.html
推薦到這個網站上看看。


7.SQL語言中,刪除一個表的命令是()
  A.DELETE
  B.DROP
  C.CLEAR
  D.REMOVE
答:B
思路:在數據庫中,數據庫是由若干個表組成的;表是由若干個記錄組成的。
刪除數據庫和表的操作都是DROP;
刪除記錄是DELETE。
最基本的一些指令可以看這裏:http://blog.csdn.net/lasolmi/article/details/39857245


8.已知一棵二叉樹,其先序序列爲EFHIGJ,中序序列爲HFIEJKG,則該二叉樹根節點的右孩子爲()
  A.E
  B.J
  C.G
  D.H
答:首先你得了解先/中/後序序列的概念。
這裏我簡要講一下(也可到百度上面查):
先序序列就是對一棵二叉樹進行先序遍歷得到的一串序列。先序遍歷就是:首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹,如果二叉樹爲空則返回。


中序序列就是對一棵二叉樹進行中序遍歷得到的一串序列。中序遍歷就是:中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,再訪問根結點,最後遍歷右子樹。即:
若二叉樹爲空則結束返回
否則:
(1)中序遍歷左子樹。
(2)訪問根結點。
(3)中序遍歷右子樹。
注意的是:遍歷左右子樹時仍然採用中序遍歷方法。


後序序列就是對一棵二叉樹進行後序遍歷得到的一串序列。後序遍歷就是:後序遍歷首先遍歷左子樹,然後遍歷右子樹,最後遍歷訪問根結點,在遍歷左、右子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後遍歷根結點。即:
若二叉樹爲空則結束返回,
否則:
(1)後序遍歷左子樹
(2)後序遍歷右子樹
(3)訪問根結點

如圖2


其先序遍歷結果爲:ABDECF
其中序遍歷結果爲:DBEAFC
其後序遍歷結果爲:DEBFCA


對於這三種遍歷順序,我們只要知其二就能得到剩下的一種遍歷序列。
具體方法可以參考此文:http://www.cnblogs.com/bmrs/archive/2010/08/19/SloveTree.html


9.兩人玩遊戲,在腦門上貼數字(正整數>=1),只看見對方的,看不見自己的,而且兩人的數字相差1,以下是兩人的對話:
 A:我不知道
 B:我也不知道
 A:我知道了
 B:我也知道了
問A頭上的字是多少,B頭上的字是多少()
  A.A是4,B是3
  B.A是3,B是2
  C.A是2,B是1
  D.A是1,B是2
答:B
思路:我們來模擬一下過程:
 A看到B頭上的2,但是他不知道自己是1還是3
 B看到了A頭上的3,所以他也不知道
 A聽B說不知道,就知道自己頭上的是3了,因爲如果自己頭上的是1,B肯定知道自己是2
 因爲如果A是4的話,A肯定不會說自己知道了,所以B知道了A是2,從而B也知道了自己是3.
 我的推理結束了。


10.如下的無向圖中有多少個不同的最小生成樹()
 A.4
 B.5
 C.6
 D.7
答:A(待驗證)
思路:求一個圖的最小生成樹的算法有kruskal算法和prim算法,在prim算法過程中對其進行改進可以成爲求最小生成樹個數的算法。這裏因爲情況比較少,所以我們可以自己手算來得到效果。


11.在C++中,爲了讓某個類只能通過new來創建(即如果直接創建對象,編譯器將報錯),應該()
 A.將構造函數設爲私有
 B.將析構函數設爲私有
 C.將構造函數和析構函數均設爲私有
 D.沒有辦法能做到
答:A


12.內聯函數在以下場景中最有用的()
 A.當函數代碼較長且多層嵌套循環的時候
 B.當函數中有較多的靜態變量的時候
 C.當函數代碼較小並且被頻繁調用的時候
 D.以上都不對
答:C
思路:內聯函數inline在非遞歸的時候理論上會更快(但是之前自己試的時候感覺更慢,括號內的可以省略)。


13.下列程序的輸出結果:
#include <iostream>
using namespace std;
class A {
public:
    void print() {cout<<"A:print()";}
};
class B:private A {
public:
    void print() {cout<<"B:print()";}
};
class C:public B {
public:
    void print() {A:print();}
};
int main() {
    C b;
    b.print();
}
 A.A:print()
 B.B:print()
 C.編譯出錯
答:C
思路:沒有學過C++那麼深,在我的編譯器codeblocks上沒出錯,只是什麼都沒有打印到屏幕上。


14.題目模糊,只知道是Java中的異常處理的catch...(try...)finally...的用法。
題目涉及知識點:Java的異常處理。
課參考資料:http://blog.csdn.net/hguisu/article/details/6155636

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章