一、前言
本來這篇文章打算在上一篇文章後一個星期就寫完的,可是最近跟一個同學在討論創業的事情,因此遲遲還沒寫完,拖到現在(2017年2月14日01:25:22),因此今晚必需趕出來。
二、2016 騰訊軟件開發面試題(不定項選擇題【13-25】)
13、瀏覽器訪問某頁面,HTTP 協議返回狀態碼爲 403 時表示:( )
A. 找不到該頁面
B. 禁止訪問
C. 內部服務器訪問
D. 服務器繁忙
這題直接給答案了,因爲這是很基礎的題目,無論是什麼開發,都離不開網絡了,而網絡開發的核心就是 HTTP 協議,因此這是很基礎的題目,在之前的文章中也有介紹過Android 網絡框架_網絡框架的核心Http協議,最後這題的答案選擇爲:B
14、如果某系統 15*4=112 成立,則系統採用的是( )進制。
A.6
B.7
C.8
D.9
這題因爲是選擇題,我們可以直接從 A 的選項開始,假設是 6 進制的,我們把等式 15 * 4 = 112 轉爲十進制,就是 11 * 4 = 44,最後驗證等式是否成立,明顯等式是成立的,因此答案已經出來了,選擇 A 。
當然我們也可以假設是 X 進制,且我們知道 X 大於 5, 則:(x+5)*4 = x*x +x +2,所以最後計算的結果也爲 6
15、某段文本中各個字母出現的頻率分別是{a:4,b:3,o:12,h:7,i:10},使用哈夫曼編碼,則哪種是可能的編碼:(A)
A. a(001) b(000) h(01) i(10) o(11)
B. a(0000) b(0001) h(001) o(01) i(1)
C. a(000) b(001) h(01) i(10) o(00)
D. a(0000) b(0001) h(001) o(000) i(1)
知識點
關於哈夫曼樹的知識點很容易遺忘,因爲對於我來說,用的還是比較少的,甚至說接觸的也比較少。但是一些注意的知識點還是要記住的。
關於哈夫曼樹的注意點:
1、滿二叉樹不一定是哈夫曼樹
2、哈夫曼樹中權越大的葉子離根越近 (很好理解,WPL最小的二叉樹)
3、具有相同帶權結點的哈夫曼樹不惟一
4、哈夫曼樹的結點的度數爲 0 或 2, 沒有度爲 1 的結點。
5、包含 n 個葉子結點的哈夫曼樹中共有 2n – 1 個結點。
6、包含 n 棵樹的森林要經過 n–1 次合併才能形成哈夫曼樹,共產生 n–1 個新結點
哈夫曼樹的應用很廣,哈夫曼編碼就是其在電訊通信中的應用之一。廣泛地用於數據文件壓縮的十分有效的編碼方法。其壓縮率通常在20%~90%之間。在電訊通信業務中,通常用二進制編碼來表示字母或其他字符,並用這樣的編碼來表示字符序列。
例:如果需傳送的電文爲 ‘ABACCDA’,它只用到四種字符,用兩位二進制編碼便可分辨。假設 A, B, C, D 的編碼分別爲 00, 01,10, 11,則上述電文便爲 ‘00010010101100’(共 14 位),譯碼員按兩位進行分組譯碼,便可恢復原來的電文。
好了,瞭解了相關的知識點,我們開始解題,首先,創建一個哈夫曼樹,原則如下:
將每個英文字母依照出現頻率由小排到大,最小在左,組成一個序列
每個字母都代表一個終端節點(葉節點),比較每個字母的出現頻率,將最小的兩個字母頻率相加合成一個新的節點,將兩個字母從序列中刪除,將生成的節點加入到字母隊列中
重複前面兩步,直到序列中沒有字母爲止
好了,創建了哈夫曼樹,最後我們進行編碼,編碼的規則如下:
給霍夫曼樹的所有左鏈結 ‘0’ 與右鏈結 ‘1’
從樹根至樹葉依序記錄所有字母的編碼
因此最後的結果爲:a(001), b(000),h(01),i(10),o(11),選擇 A
16、TCP 和 IP 分別對應了 OSI 中的哪幾層?()
A. Application layer
B. Presentation layer
C. Transport layer
D. Network layer
知識點
所以最後的答案爲 CD
17、一個棧的入棧序列是A,B,C,D,E,則棧的不可能的輸出序列是?()
A.EDCBA
B.DECBA
C.DCEAB
D.ABCDE
堆棧分別是先進後出,後進先出,
選項 a 是 abcde 先入棧,然後依次出棧,正好是 edcba
選項 b 是 abcd 先依次入棧,然後 d 出棧, e 再入棧, e 出棧
選項 c 是錯誤的,不可能 a 先出棧
選項 d 是 a 入棧,然後 a 出棧;b 再入棧, b 出棧.依此類推
最後的結果選擇 C
18、同一進程下的線程可以共享以下?( )
A.stack
B.data section
C.register set
D.file fd
知識點
線程共享的內容包括:
- 進程代碼段
- 進程的公有數據(利用這些共享的數據,線程很容易的實現相互之間的通訊)
- 進程打開的文件描述符、
- 信號的處理器、
- 進程的當前目錄和
- 進程用戶ID與進程組ID
線程獨有的內容包括:
- 線程ID
- 寄存器組的值
- 線程的堆棧
- 錯誤返回碼
- 線程的信號屏蔽碼
所以選擇爲 BD
19、對於派生類的構造函數,在定義對象時構造函數的執行順序爲?( )
1:成員對象的構造函數
2:基類的構造函數
3:派生類本身的構造函數A.123
B.231
C.321
D.213
這個很基礎的編程問題了,選擇 D
20、 如何減少換頁錯誤?( )
A. 進程傾向於佔用CPU
B. 訪問局部性(locality of reference)滿足進程要求
C. 進程傾向於佔用I/O
D. 使用基於最短剩餘時間(shortest remaining time)的調度機制
知識點
換頁錯誤又稱缺頁錯誤,當一個程序試圖訪問沒有映射到物理內存的地方時,就會出現缺頁錯誤, 這時操作系統就要去虛擬內存中加載這塊內存頁。
減少換頁錯誤的方法,即降低缺頁中斷率:
1. 內存頁框數。增加作業分得的內存塊數。
2. 頁面大小。頁面劃分越大,中斷率越低。
3. 替換算法的優劣影響缺頁中斷次數
4. 程序局部性。程序局部性好可減少缺頁中斷
因此選擇 B
21、遞歸函數最終會結束,那麼這個函數一定?()
A. 使用了局部變量
B. 有一個分支不調用自身
C. 使用了全局變量或者使用了一個或多個參數
D. 沒有循環調用
這題也是簡單的編程知識題目,選擇 B
22、編譯過程中,語法分析器的任務是(B)
A. 分析單詞是怎樣構成的
B. 分析單詞串是如何構成語言和說明的
C. 分析語句和說明是如何構成程序的
D. 分析程序的結構
知識點
- 詞法分析(lexical analysis)
詞法分析是編譯過程的第一個階段。這個階段的任務是從左到右的讀取每個字符,然後根據構詞規則識別單詞。詞法分析可以用lex等工具自動生成。
- 語法分析(syntax analysis)
語法分析是編譯過程的一個邏輯階段。語法分析在詞法分析的基礎上,將單詞序列組合成各類語法短語,如“程序”,“語句”,“表達式”等等。語法分析程序判斷程序在結構上是否正確。
- 語義分析(semantic analysis)
屬於邏輯階段。對源程序進行上下文有關性質的審查,類型檢查。如賦值語句左右端類型匹配問題。
所以 BCD 都屬於詞法分析,選擇結果爲 BCD
23、同步機制應該遵循哪些基本準則?(ABCD)
A.空閒讓進
B.忙則等待
C.有限等待
D.讓權等待
24、進程進入等待狀態有哪幾種方式?(D)
A. CPU調度給優先級更高的線程
B. 阻塞的線程獲得資源或者信號
C. 在時間片輪轉的情況下,如果時間片到了
D. 獲得spinlock未果
25、設計模式中,屬於結構型模式的有哪些?(BC)
A. 狀態模式
B. 裝飾模式
C. 代理模式
D. 觀察者模式