標籤:blog http 使用 ar 檔案 資料 sp div 2014
轉:http://blog.csdn.net/zs634134578/article/details/21387117
一.簡答題
1.簡述iso的7層設計
解析:
- 應用程式層:提供應用程式間通訊
- 展示層:處理資料格式、資料加密等
- 會話層:建立、維護和管理會話
- 運輸層:建立主機端到端串連
- 網路層:定址和路由選擇
- 資料連結層:介質訪問,鏈路管理
- 物理層:位元流傳輸
2.如何在多個進程間進行資料共用(至少寫出3種)
Linux下:
- 管道
- 訊號量
- 共用記憶體
- 訊息佇列
- 本地區socket
Windows下:
- 檔案對應;檔案對應(Memory-Mapped Files)能使進程把檔案內容當作進程地址區間一塊記憶體那樣來對待。因此,進程不必使用檔案I/O操作,只需簡單的指標操作就可讀取和修改檔案的內容。
- 共用記憶體: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的區別
|
TCP |
UDP |
是否有序 |
接收到的可能亂序,但是有段標號供排序 |
無序 |
可靠性 |
可靠的 |
不可靠的 |
是否串連 |
面相串連 |
面相非串連 |
負責 |
維護虛擬串連,負載較高 |
無串連,負載較小 |
是否確認 |
需要確認(可靠性的一種) |
不需要確認 |
是否有控制 |
滑動視窗和擁塞控制機制 |
不控制 |
二.演算法題
1.有一個資料A = [a_1,a_2,a_3.....a_n],n的大小不定,請設計演算法將A中的所有資料群組合進行輸出
解析:可以採用遞迴的方式來實現,每次取一個元素,在剩下元素的數組中遞迴,要注意遞迴結束的條件。
2.有這樣一個數組A,大小為n,相鄰元素差的絕對值都是1,如A={4,5,6,5,6,7,8,9,10,9},現在給定數組A和目標整數t,請找到t在A中的位置。(15分)
解析:
解法一:常規解法:遍曆,時間複雜度O(n)
解法二:快速定位到第一個目標整數,後面繼續遍曆,最好情況下是O(1),最壞情況是O(n)
快速定位方法:以A[0]<t為例:
- dis = t - A[0],如果A[dis] = t,則定位到,
- 否則A[dis]必然小於t,重複步驟1
3.二叉樹的面積等於二叉樹的長乘以二叉樹的寬,二叉樹的寬等於最長節點間的距離,二叉樹的長等於根節點到子節點的最長長度,請設計演算法計算二叉樹的面積?
解析:面積 = 長 * 寬 = 樹的深度 * (左子樹的深度 + 右子樹的深度 + 1)
三.演算法設計題
百度地圖中存在需要標註的很多點,並且這些點都需要帶描述,現將描述假設為矩形,並且可以位於點的左邊或右邊,但點不能移動,如果兩個點間的描述發生覆蓋,則
需要將其中的一個點進行刪除
1.在一個地區內,請設計演算法將有效點進行輸出(儘可能多的點)?
2.如果地區足夠大,點足夠多,演算法會出現效能的瓶頸,請設計詳細的演算法來說明並解決問題?
解析:個人理解
1 關鍵是在怎麼樣解決兩個點之間發生衝突的情況,在發生衝突時應該如何調整。
- 從地鐵左上方開始標記,逐行標記
- 預設的標記位置為點的右邊
- 當發生衝突時,查看衝突地區的負責點,詢問是否可以調整為左置
- 如果被衝突點可以重設方向,則重設;否則,同樣發起詢問動作,直到有一個點重設成功為止。
2 效能瓶頸應該出現在調整演算法上,當發生一次衝突時,可能會引起連帶的反應,造成多次調整。
解決方案:對點進行分級,每個點增加權重,按層級進行標記,優先標記權重值較高的點。
百度2014軟體開發工程師筆試題詳解 (轉)