百度2014軟體開發工程師筆試題詳解 轉)

2022-04-10 12:43:49 字數 2520 閱讀 9204

**

一.簡答題

1.簡述iso的7層設計

解析:應用層:提**用程式間通訊

表示層:處理資料格式、資料加密等

會話層:建立、維護和管理會話

運輸層:建立主機端到端連線

網路層:定址和路由選擇

資料鏈路層:介質訪問,鏈路管理

物理層:位元流傳輸

2.如何在多個程序間進行資料共享(至少寫出3種)

linux下:

windows下:

共享記憶體:win32 api中共享記憶體(sharedmemory)實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替檔案控制代碼(handle),就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該檔案對映物件就可以訪問該記憶體塊。由於共享記憶體是用檔案對映實現的,所以它也有較好的安全性,也只能執行於同一計算機上的程序之間。

匿名管道:管道(pipe)是一種具有兩個端點的通訊通道:有一端控制代碼的程序可以和有另一端控制代碼的程序通訊。管道可以是單向-一端是唯讀的,另一端點是只寫的;也可以是雙向的一管道的兩端點既可讀也可寫。

命名管道:命名管道(named pipe)是伺服器程序和乙個或多個客戶程序之間通訊的單向或雙向管道。不同於匿名管道的是命名管道可以在不相關的程序之間和不同計算機之間使用,伺服器建立命名管道時給它指定乙個名字,任何程序都可以通過該名字開啟管道的另一端,根據給定的許可權和伺服器程序通訊。

郵件槽:郵件槽(mailslots)提供程序間單向通訊能力,任何程序都能建立郵件槽成為郵件槽伺服器。其它程序,稱為郵件槽客戶,可以通過郵件槽的名字給郵件槽伺服器程序傳送訊息。進來的訊息一直放在郵件槽中,直到伺服器程序讀取它為止。乙個程序既可以是郵件槽伺服器也可以是郵件槽客戶,因此可建立多個郵件槽實現程序間的雙向通訊。

剪貼簿:剪貼簿(clipped board)實質是win32 api中一組用來傳輸資料的函式和訊息,為windows應用程式之間進行資料共享提供了乙個中介,windows已建立的剪下(複製)-貼上的機制為不同應用程式之間共享不同格式資料提供了一條捷徑。當使用者在應用程式中執行剪下或複製操作時,應用程式把選取的資料用一種或多種格式放在剪貼簿上。然後任何其它應用程式都可以從剪貼簿上拾取資料,從給定格式中選擇適合自己的格式。

動態資料交換:動態資料交換(dde)是使用共享記憶體在應用程式之間進行資料交換的一種程序間通訊形式。應用程式可以使用dde進行一次性資料傳輸,也可以當出現新資料時,通過傳送更新值在應用程式間動態交換資料。

wm_copydata訊息:wm_copydata是一種非常強大卻鮮為人知的訊息。當乙個應用向另乙個應用傳送資料時,傳送方只需使用呼叫sendmessage函式,引數是目的視窗的控制代碼、傳遞資料的起始位址、wm_copydata訊息。接收方只需像處理其它訊息那樣處理wm_copy

3.簡述tcp與udp的區別

tcpudp

是否有序

接收到的可能亂序,但是有段標號供排序

無序可靠性

可靠的不可靠的

是否連線

面相連線

面相非連線

負責維護虛擬連線,負載較高

無連線,負載較小

是否確認

需要確認(可靠性的一種)

不需要確認

是否有控制

滑動視窗和擁塞控制機制

無控制二.演算法題

1.有乙個資料a = [a_1,a_2,a_3.....a_n],n的大小不定,請設計演算法將a中的所有資料組合進行輸出

解析:可以採用遞迴的方式來實現,每次取乙個元素,在剩下元素的陣列中遞迴,要注意遞迴結束的條件。 

2.有這樣乙個陣列a,大小為n,相鄰元素差的絕對值都是1,如a=,現在給定陣列a和目標整數t,請找到t在a中的位置。(15分)

解析:解法一:常規解法:遍歷,時間複雜度o(n)

解法二:快速定位到第乙個目標整數,後面繼續遍歷,最好情況下是o(1),最壞情況是o(n)

快速定位方法:以a[0]dis = t - a[0],如果a[dis] = t,則定位到,

否則a[dis]必然小於t,重複步驟1

3.二叉樹的面積等於二叉樹的長乘以二叉樹的寬,二叉樹的寬等於最長節點間的距離,二叉樹的長等於根節點到子節點的最長長度,請設計演算法計算二叉樹的面積?

解析:面積 = 長 * 寬 = 樹的深度 * (左子樹的深度 + 右子樹的深度 + 1)

三.演算法設計題

需要將其中的乙個點進行刪除

1.在乙個區域內,請設計演算法將有效的點進行輸出(盡可能多的點)?

2.如果區域足夠大,點足夠多,演算法會出現效能的瓶頸,請設計詳細的演算法來說明並解決問題?

解析:個人理解

1 關鍵是在怎麼樣解決兩個點之間發生衝突的情況,在發生衝突時應該如何調整。

從地鐵左上角開始標記,逐行標記

預設的標記位置為點的右邊

當發生衝突時,檢視衝突區域的負責點,詢問是否可以調整為左置

如果被衝突點可以重置方向,則重置;否則,同樣發起詢問動作,直到有乙個點重置成功為止。

2 效能瓶頸應該出現在調整演算法上,當發生一次衝突時,可能會引起連帶的反應,造成多次調整。

解決方案:對點進行分級,每個點增加權重,按級別進行標記,優先標記權重值較高的點。

筆試收錄 百度 軟體工程師

1 請實現兩棵樹是否相等的比較,相等返回,否則返回其他值,並說明演算法複雜度。資料結構為 typedef struct treenodetreenode 函式介面為 int comptree treenode tree1,treenode tree2 注 a b兩棵樹相等當且僅當root c roo...

百度2013研發工程師A筆試

1 動態鏈結庫和靜態鏈結庫的優缺點 動態鏈結的優點 1 不占用源程式 段,節省空間。2 使程式更容易更新。3 減少物理頁面的切入。4 增加程式的可擴充套件性 動態鏈結的缺點 1 效能損失 2 相容性問題 靜態鏈結的優點 1 裝載速度快。2 不存在版本相容的問題 靜態鏈結的缺點 1 體積問題 2 可擴...

百度的筆試題(開發測試工程師)

1.改程式目的是從乙個字串中求出字母a z分別出現的次數。include stdafx.h include stdio.h include string.h void foo char a 100 int cnt 256 for char c a c z c 找出程式中的錯誤,並且修改!修改為 in...