嵌入式linux面試題解析(三)——Linux應用編程部分一

嵌入式linux面試題解析(三)——Linux應用編程部分一

一、TCP與UDP的區別linux

    TCP:是面向鏈接的流傳輸控制協議,具備高可靠性,確保傳輸數據的正確性,有驗證重發機制,不會出現丟失或亂序。面試

    UDP:是無鏈接的數據報服務,不對數據報進行檢查與修改,無須等待對方的應答,會出現分組丟失、重複、亂序,但具備較好的實時性,UDP段結構比TCP的段結構簡單,所以網絡開銷也小。編程

 

二、流量控制和擁塞控制windows

    擁塞控制
    網絡擁塞現象是指到達通訊子網中某一部分的分組數量過多,使得該部分網絡來不及處理,以至引發這部分乃至整個網絡性能降低的現象,嚴重時甚至會致使網絡通訊業務陷入停頓,即出現死鎖現象。擁塞控制是處理網絡擁塞現象的一種機制。
    流量控制
    數據的傳送與接收過程中極可能出現收方來不及接收的狀況,這時就須要對發方進行控制,以避免數據丟失。網絡

 

三、多線程如何同步數據結構

    Linux系統中多線程同步有最經常使用的是:互斥鎖、條件變量和信號量。多線程

 

4進程間通信的方式優缺點併發

A、管道( pipe )socket

管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用。進程的親緣關係一般是指父子進程關係。
B、有名管道 (named pipe) tcp

有名管道也是半雙工的通訊方式,可是它容許無親緣關係進程間的通訊。
C、信號量( semophore )

信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
D、消息隊列( message queue )

消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
E、信號 ( sinal )

信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
F、共享內存( shared memory

共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的IPC方式,它是 針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號量,配合使用,來實現進程間的同步和通訊。

G、套接字( socket )

套解口也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣及其間的進程通訊。

優缺點:

    A、無名管道簡單方便但侷限於單向通訊的工做方式而且只能在親緣進程之間實現管道的共享有名管道雖然能夠提供給任意關係的進程使用可是因爲其長期存在於系統之中,使用不當容易出錯。

    B、消息隊列能夠再也不侷限於父子進程而容許任意進程經過共享消息隊列來實現進程間通訊並由系統調用函數來實現消息發送和接收之間的同步從而使得用戶在使用消息緩衝進行通訊時再也不須要考慮同步問題使用方便,可是信息的複製須要額外消耗 CPU的時間不適宜於信息量大或操做頻繁的場合。

    C、共享內存針對消息緩衝的缺點改而利用內存緩衝區直接交換信息,無須複製,快捷、信息量大是其優勢。可是共享內存的通訊方式是經過將共享的內存緩衝區直接附加到進程的虛擬地址空間中來實現的所以,進程之間的讀寫操做的同步問題操做系統沒法實現必須由各進程利用其餘同步工具解決。另外,因爲內存實體存在於計算機系統中因此只能由處於同一個計算機系統中的諸進程共享,不能網絡通訊。

 

五、tcp鏈接創建的時候3次握手,斷開鏈接的4次握手的具體過程

    創建鏈接採用的3次握手協議,具體是指:
    第一次握手是客戶端connect鏈接到server,server accept client的請求以後,向client端發送一個消息,是第二次握手,第3次握手就是client向server發送的,就是對第二次握手消息的確認。以後client和 server就開始通信了。
    斷開鏈接的4次握手,具體以下:
    斷開鏈接的一端發送close請求是第一次握手,另一端接收到斷開鏈接的請求以後須要對close進行確認,發送一個消息,這是第二次握手,發送了確認 消息以後還要向對端發送close消息,要關閉對對端的鏈接,這是第3次握手,而在最初發送斷開鏈接的一端接收到消息以後,進入到一個很重要的狀態 time_wait狀態,最後一次握手是最初發送斷開鏈接的一端接收到消息以後對消息的確認。

 

六、epoll與select的區別

    select在一個進程中打開的最大fd是有限制的,由FD_SETSIZE設置,默認值是2048。不過 epoll則沒有這個限制,它所支持的fd上限是最大能夠打開文件的數目,這個數字通常遠大於2048,通常來講內存越大,fd上限越大,1G內存都能達到大約10w左右。
    select的輪詢機制是系統會去查找每一個fd是否數據已準備好,當fd不少的時候,效率固然就直線降低了,epoll採用基於事件的通知方式,一旦某個 fd數據就緒時,內核會採用相似callback的回調機制,迅速激活這個文件描述符,而不須要不斷的去輪詢查找就緒的描述符,這就是epoll高效最本質的緣由。
    不管是select仍是epoll都須要內核把FD消息通知給用戶空間,如何避免沒必要要的內存拷貝就很重要,在這點上,epoll是經過內核於用戶空間mmap同一塊內存實現的,而select則作了沒必要要的拷貝

 

七、epoll中et和lt的區別與實現原理

    LT:水平觸發,效率會低於ET觸發,尤爲在大併發,大流量的狀況下。可是LT對代碼編寫要求比較低,不容易出現問題。LT模式服務編寫上的表現是:只要有數據沒有被獲取,內核就不斷通知你,所以不用擔憂事件丟失的狀況。
    ET:邊緣觸發,效率很是高,在併發,大流量的狀況下,會比LT少不少epoll的系統調用,所以效率高。可是對編程要求高,須要細緻的處理每一個請求,不然容易發生丟失事件的狀況。

 

八、UNIX系統中進程由三部分組成:進程控制塊,正文段和數據段。這意味着一個程序的正文與數據能夠是分開的,這種分開的目的是爲了?ABC

  A.可共享正文

  B.可共享數據

  C.可重入

  D.方便編程

 

九、什麼是驅動模塊?

    答:驅動模塊在大多數場合稱爲"主程序",它接收測試數據並將這些數據傳遞到被測試模塊.單元測試一個函數單元時,被測單元自己是不能獨立運行的,須要爲其傳送數據,爲此寫驅動。

  驅動模塊主要完成如下事情:

    A、接受測試輸入;

    B、對輸入進行判斷;

    C、將輸入傳給被測單元,驅動被測單元執行;

    D、接受被測單元執行結果,並對結果進行判斷;

    E、將判斷結果做爲用例執行結果輸出測試報告。

 

10、若是可以執行完美的黑盒測試,還須要進行白盒測試嗎?(白盒與黑盒的區別)

    答案:任何工程產品(注意是任何工程產品)均可以使用如下兩種方法之一進行測試。

    黑盒測試:已知產品的功能設計規格,能夠進行測試證實每一個實現了的功能是否符合要求。 白盒測試:已知產品的內部工做過程,能夠經過測試證實每種內部操做是否符合設計規格要求,全部內部成分是否以通過檢查。

軟件的黑盒測試意味着測試要在軟件的接口處進行。這種方法是把測試對象看作一個黑盒子,測試人員徹底不考慮程序內部的邏輯結構和內部特性,只依據程序 的需求規格說明書,檢查程序的功能是否符合它的功能說明。所以黑盒測試又叫功能測試或數據驅動測試。黑盒測試主要是爲了發現如下幾類錯誤:

    A、是否有不正確或遺漏的功能?

    B、在接口上,輸入是否能正確的接受?可否輸出正確的結果?

    C、是否有數據結構錯誤或外部信息(例如數據文件)訪問錯誤?

    D、性能上是否可以知足要求?

    E、是否有初始化或終止性錯誤?

    軟件的白盒測試是對軟件的過程性細節作細緻的檢查。這種方法是把測試對象看作一個打開的盒子,它容許測試人員利用程序內部的邏輯結構及有關信息,設計 或選擇測試用例,對程序全部邏輯路徑進行測試。經過在不一樣點檢查程序狀態,肯定實際狀態是否與預期的狀態一致。所以白盒測試又稱爲結構測試或邏輯驅動測 試。白盒測試主要是想對程序模塊進行以下檢查:

    A、對程序模塊的全部獨立的執行路徑至少測試一遍。

    B、對全部的邏輯斷定,取"真"與取"假"的兩種狀況都能至少測一遍。

    C、在循環的邊界和運行的界限內執行循環體。

    D、測試內部數據結構的有效性,等等。

    以上事實說明,軟件測試有一個致命的缺陷,即測試的不徹底、不完全性。因爲任何程序只能進行少許(相對於窮舉的巨大數量而言)的有限的測試,在未發現錯誤時,不能說明程序中沒有錯誤。

 

十一、進程有三種狀態:(   C )。
    A 、準備態、執行態和退出態           B 、精確態、模糊態和隨機態
    C 、運行態、就緒態和等待態           D 、手工態、自動態和自由態

 

十二、文件系統的主要功能是(  A  )。
    A、實現對文件的按名存取                    B、實現虛擬存儲          
    C、 提升外存的讀寫速度                     D、用於保存系統文檔

 

1三、如下作法不利於嵌入式應用軟件的移植的是 D 。
    A) 在軟件設計上,採用層次化設計和模塊化設計
    B) 在軟件體系結構上,在操做系統和應用軟件之間引入一個虛擬機層,把一些通用的、共性的操做系統API接口函數封裝起來
    C) 將不可移植的部分局域化,集中在某幾個特定的文件之中
    D) 在數據類型上,儘可能直接使用C語言的數據類型

 

1四、操做系統中同時存在着多個進程,它們(C )
    A、不能共享系統資源           B、不能調用同一段程序代碼
    C、能夠共享全部的系統資源        D、能夠共享容許共享的系統資源

 

1五、 B )不是進程和程序的區別。
    A. 程序是一組有序的靜態指令,進程是一次程序的執行過程
    B. 程序只能在前臺運行,而進程能夠在前臺或後臺運行
    C. 程序能夠長期保存,進程是暫時的
    D. 程序沒有狀態,而進程是有狀態的

 

1六、若是Boot Loader、內核、啓動參數以及其餘的系統映像四部分在固態存儲設備上分別獨立存放,則其存儲結構的分配順序應當是:_D____。                 
    A . 文件系統、內核、啓動參數、Bootloader   
    B . 啓動參數、Bootloader、內核、文件系統
    C . Bootloader、內核、啓動參數、文件系統  
    D . Bootloader、啓動參數、內核、文件系統  

 

1七、Boot Loader 的stage2一般使用C語言實現,以完成複雜的功能,並增長可讀性和可移植性,如下哪一步驟屬於stage2的內容:__D____  
    A . 爲加載 Boot Loader 的 stage2 準備 RAM 空間
    B . 設置好堆棧
    C . 硬件設備初始化
    D . 將 kernel 映像和根文件系統映像從 flash 上讀到 RAM 空間中

相關文章
相關標籤/搜索