2016 騰訊軟件開發面試題(部分)

nuws6854 7年前發布 | 21K 次閱讀 二叉樹 排序算法

一、前言

這篇文章是 2016 騰訊軟件開發面試題中不定項選擇題集合中的 1 -12 題,其中后面的 13-25題在下周的博客中寫,說明一下,這篇文章跟以往的每周一題有點不同,因為如果選擇一兩題,文章的邊幅有點少,而且選擇題相對來說,難度沒那么大,更主要的是為了讓大家全面的感受一下騰訊的面試題。

二、2016 騰訊軟件開發面試題(不定項選擇題【1-12】)

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 時,下列函數的返回值是:( )

[cpp] viewplaincopy
int foo(int n)  
{  
    if(n<2)return n;  
    return foo(n-1)+foo(n-2);  
}

A.5

B.7

C.8

D.1

這題只需把數代進去,就可以知道結果了,所以最后結果選: A

遞歸.png

6、 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/8 0.01%+5/8 0.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.信號量

知識點

  1. 管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關系進程間的通信,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關系進程間的通信;
  2. 信號(Signal):信號是比較復雜的通信方式,用于通知接受進程有某種事件發生,除了用于進程間通信外,進程還可以發送信號給進程本身;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基于BSD的,BSD為了實現可靠信號機制,又能夠統一對外接口,用sigaction函數重新實現了signal函數);
  3. 報文(Message)隊列(消息隊列):消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程可以向隊列中添加消息,被賦予讀權限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩沖區大小受限等缺點。
  4. 共享內存:使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。
    信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。
  5. 套接口(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、下列程序的輸出是:( )

[cpp] viewplaincopy

define add(a+b) a+b  

int main()   {       printf(“%dn”,5add(3+4));       return ;   } </pre>

A.23

B.35

C.16

D.19

因為我主要是 java 開發的,可是畢竟 c 和 c++ 都是大學的必修課,因此還是有點了解的。這里主要看清楚 define ,#define 的本質就是一個代換,題目 #define add(a+b) a+b 表明了 add(a+b) 替換成 a+b ,因此代碼輸出的那一行其實是 printf(“%dn”,53+4); ,所以最后的結果選擇 D</p>

 

 

來自:http://blog.jobbole.com/110287/

 

 本文由用戶 nuws6854 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!