【程式設計師面試題2016】騰訊企鵝
1、已知一棵二叉樹,如果先序遍歷的節點順序是: ADCEFGHB ,中序遍歷是: CDFEGHAB ,則後序遍歷結果為:( )
A. CFHGEBDA
B. CDFEGHBA
C. FGHCDEBA
D. CFHGEDBA
知識點
對於二叉樹的遍歷方式一般分為三種先序、中序、後序三種方式:
- 先序遍歷(根左右)
若二叉樹為空,則不進行任何操作:否則
1、訪問根結點。
2、先序方式遍歷左子樹。
3、先序遍歷右子樹。 - 中序遍歷 (左根右)
若二叉樹為空,則不進行任何操作:否則
1、中序遍歷左子樹。
2、訪問根結點。
3、中序遍歷右子樹。 - 後序遍歷 (左右根)
若二叉樹為空,則不進行任何操作:否則
1、後序遍歷左子樹。
2、後序遍歷右子樹。
3、放問根結點。
因此,根據題目給出的先序遍歷和中序遍歷,可以畫出二叉樹:
二叉樹遍歷.png
最後結果選擇: D
2、下列哪兩個資料結構,同時具有較高的查詢和刪除效能?( )
A. 有序陣列
B. 有序連結串列
C. AVL 樹
D. Hash 表
知識點
幾種常見的資料結構操作效能.png
平衡二叉樹的查詢,插入和刪除效能都是 O(logN) ,其中查詢和刪除效能較好;雜湊表的查詢、插入和刪除效能都是 O(1) ,都是最好的。所以最後的結果選擇: CD
3、下列排序演算法中,哪些時間複雜度不會超過 nlogn?( )
A. 快速排序
B. 堆排序
C. 歸併排序
D. 氣泡排序
知識點
幾種常見的排序演算法對比.png
根據上圖,觀察平均情況,最好最差情況的時間複雜度基本可以知道答案了,最後結果選擇: BC
4、初始序列為 1 8 6 2 5 4 7 3 一組數採用堆排序,當建堆(小根堆)完畢時,堆所對應的二叉樹中序遍歷序列為:( )
A. 8 3 2 5 1 6 4 7
B. 3 2 8 5 1 4 6 7
C. 3 8 2 5 1 6 7 4
D. 8 2 3 5 1 4 7 6
初始化序列:1 8 6 2 5 4 7 3,,小根堆就是要求結點的值小於其左右孩子結點的值,左右孩子的大小沒有關係,那麼小根堆排序之後為:1 2 4 3 5 6 7 8;
中序遍歷:左根右,故遍歷結果為:8 3 2 5 1 6 4 7
故最後選擇的結果: A
5、當 n = 5 時,下列函式的返回值是:( )
123456 [cpp]view plaincopyintfoo(intn){if(n<2)returnn;returnfoo(n-1)+foo(n-2);} A.5
B.7
C.8
D.1
這題只需把數代進去,就可以知道結果了,所以最後結果選: A
遞迴.png6、 S 市 A ,B 共有兩個區,人口比例為 3:5 ,據歷史統計 A 區的犯罪率為 0.01% ,B 區為 0.015% ,現有一起新案件發生在 S 市,那麼案件發生在 A 區的可能性有多大?( )
A.37.5%
B.32.5%
C.28.6%
D.26.1%
這道題首先得了解犯罪率是什麼?犯罪率就是犯罪人數與總人口數的比。因此可以直接得出公式:( 3 0.01% ) / ( 3 0.01% + 5 * 0.015% ) = 28.6%
當然如果不好理解的話,我們可以例項化,比如 B 區假設 5000 人,A 區 3000 人,A 區的犯罪率為 0.01%,那麼 A 區犯罪人數為 30 人,B 區的犯罪率為 0.015% ,那麼 B 區的犯罪人數為 75 人 ,求發生在 A 區的可能性,就是說 A 區的犯罪人數在總犯罪人數的多少,也就是 30/(30+75)=0.2857
當然,也可以迴歸到我們高中遺忘的知識:
假設C表示犯案屬性
在A區犯案概率:P(C|A)=0.01%
在B區犯案概率:P(C|B)=0.015%
在A區概率:P(A)=3/8
在B區概率:P(B)=5/8
犯案概率:P(C)=(3/80.01%+5/80.015%)
根據貝葉斯公式:P(A|C) = P(A,C) / P(C) = [P(C|A) P(A)] / [ P(C|A) P(A)+ P(C|B) P(B) ] 也可以算出答案來
故,最後結果選擇為: C
7、Unix系統中,哪些可以用於程序間的通訊?( )
A.Socket
B.共享記憶體
C.訊息佇列
D.訊號量
知識點
- 管道(Pipe)及有名管道(named pipe):管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊;
- 訊號(Signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援Unix早期訊號語義函式sigal外,還支援語義符合Posix.1標準的訊號函式sigaction(實際上,該函式是基於BSD的,BSD為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式);
- 報文(Message)佇列(訊息佇列):訊息佇列是訊息的連結表,包括Posix訊息佇列system V訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
- 共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用IPC形式。是針對其他通訊機制執行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。
訊號量(semaphore):主要作為程序間以及同一程序不同執行緒之間的同步手段。 - 套介面(Socket):更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上:Linux和System V的變種都支援套接字。
故最後選擇的結果為: ABCD
8、靜態變數通常儲存在程序哪個區?( )
A.棧區
B.堆區
C.全域性區
D.程式碼區
靜態變數的修飾關鍵字:static,又稱靜態全域性變數。故最後選擇的結果為: C
9、查詢效能( )
A. 在Name欄位上新增主鍵
B. 在Name欄位上新增索引
C. 在Age欄位上新增主鍵
D. 在Age欄位上新增索引
結果選: B
10、IP地址131.153.12.71是一個(B)類IP地址。
A.A
B.B
C.C
D.D
知識點
IP地址分類.png故將 131 轉為二進位制 :10000011,因此為 B 類 IP 地址,結果選 B
11、下推自動識別機的語言是:(C)
A.0型語言
B.1型語言
C.2型語言
D.3型語言
知識點
這是有關編譯原理的。
喬姆斯基體系是電腦科學中刻畫形式文法表達能力的一個分類譜系,是由諾姆·喬姆斯基於1956年提出的。它包括四個層次:
- 0-型文法(無限制文法或短語結構文法)包括所有的文法。該型別的文法能夠產生所有可被圖靈機識別的語言。可被圖靈機識別的語言是指能夠使圖靈機停機的字串,這類語言又被稱為遞迴可列舉語言。注意遞迴可列舉語言與遞迴語言的區別,後者是前者的一個真子集,是能夠被一個總停機的圖靈機判定的語言。
- 1-型文法(上下文相關文法)生成上下文相關語言。這種文法的產生式規則取如 αAβ -> αγβ 一樣的形式。這裡的A 是非終結符號,而 α, β 和 γ 是包含非終結符號與終結符號的字串;α, β 可以是空串,但 γ 必須不能是空串;這種文法也可以包含規則 S->ε ,但此時文法的任何產生式規則都不能在右側包含 S 。這種文法規定的語言可以被線性有界非確定圖靈機接受。
- 2-型文法(上下文無關文法)生成上下文無關語言。這種文法的產生式規則取如 A -> γ 一樣的形式。這裡的A 是非終結符號,γ 是包含非終結符號與終結符號的字串。這種文法規定的語言可以被非確定下推自動機接受。上下文無關語言為大多數程式設計語言的語法提供了理論基礎。
- 3-型文法(正規文法)生成正規語言。這種文法要求產生式的左側只能包含一個非終結符號,產生式的右側只能是空串、一個終結符號或者一個非終結符號後隨一個終結符號;如果所有產生式的右側都不含初始符號 S ,規則 S -> ε 也允許出現。這種文法規定的語言可以被有限狀態自動機接受,也可以通過正則表示式來獲得。正規語言通常用來定義檢索模式或者程式設計語言中的詞法結構。
正規語言類包含於上下文無關語言類,上下文無關語言類包含於上下文相關語言類,上下文相關語言類包含於遞迴可列舉語言類。這裡的包含都是集合的真包含關係,也就是說:存在遞迴可列舉語言不屬於上下文相關語言類,存在上下文相關語言不屬於上下文無關語言類,存在上下文無關語言不屬於正規語言類。
四種類型的文法的主要特點:
四種類型的文法的主要特點.png因此答案選擇:B
12、下列程式的輸出是:( )
1 2 3 4 5 6 7 [cpp]viewplaincopy #define add(a+b) a+b intmain() { printf(“%dn”,5*add(3+4)); return; } A.23
B.35
C.16
D.19結果選擇 D