close

 

 

最近因專案完成,所以較為悠閒,於是在同事的請求下,出了這份面試考題,放於網路,希望明日即將考試的你/妳,有這個運氣看到這一篇文章。

我把答案,放在文張的最下面,有興趣的朋友可以試者玩看看^_^。

 

 

 

Linux面試考題

  1. 描述Linux運行級別0-6的各自意思.
  2. 描述Linux系統從開機到登陸介面的啟動過程.
  3. 給出正確的關機和重新啟動服務器的命令.
  4. 請描述下列路徑的內容是做些甚麼事情的.

  1) /var/log/messages :_______________________

  2) /var/log/secure :_________________________

  3) /var/spool/clientmqueue:___________________

  4) /proc/inierupts: _________________________

  5) /etc/fstab:_____________________________

  6) /etc/profil:_____________________________

 

  1. LINUX 命令及作用

  1. cp         : ___________________________

  2. mv        : ___________________________

  3. mkdir    : ___________________________

  4. cd         : ___________________________

  5. cat       : ___________________________

  6. ls          : ___________________________

  7. rm        : ___________________________

  8. find      : ___________________________

  9. rmdir    : ___________________________

10. echo      : ___________________________

11. hostname: ___________________________

12. whoami  : ___________________________

13. useradd : ___________________________

14. passwd  : ___________________________

15. su         : ___________________________

16. alias      : ___________________________

17. head     : ___________________________

18. tail       : ___________________________

19. touch    : ___________________________

20. pwd      : ___________________________

 

  1. 關鍵字static的作用是什麼?
  2. 協處理器主要控制:__________________
  3. 關鍵字volatile有什麼含意?並給出三個不同的例子。
  4. 中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴展—讓標準C支持中斷。具代表事實是,產生了一個新的關鍵字 __interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一個中斷服務子程序(ISR),請評論一下這段代碼的。

__interrupt double compute_area (double radius) 

 {

   double area = PI * radius * radius;

   printf("\nArea = %f", area);

   return area;

 }

 

  1. 當一個異常出現以後,ARM微處理器會執行哪幾步操作?
  2. ARM微處理器在較新的體系結構中支持兩種指令集:____________
  3. 多線程如何同步?
  4. 我們常常會需要和TCPUDP打交到,可否敘述一下,TCPUDP的區別是什麼?
  5. 請解釋大小端 (Big-Endian/Little-Endian)
  6. 請簡單描述一下,Process/thread的區別是什麼。

 

 

 

 

 

 

 

 

 

 

 

 

解答篇

第一題:
Ans:

 0: 關機模式

 1: 單用戶模式 (破解root密碼)

 2: 無網路支持的多用戶模式

 3: 有網路支持的多用戶模式 (工作最常使用到的)

 4: 保留,未使用

 5: 有網路支持的X-windows支持多用戶模式(桌面)

 6: 重新引導系統,就是重新啟動電腦的意思

 

第二題:

Ans:

 1. 開機BIOS自己檢查,加載硬碟。

 2. 讀取MBRMBR引導。

 3. grub引導Menu ( Boot loader )

 4. 加載kernel.

 5. 加載init process,根據initab文件設定運行級別。

 6. init process,執行rc.sysinit文件。

 7. 啟動kernel model,執行不同級別的腳本程式。

 8. 執行/etc/rc.d/rc.local

 9. 啟動mingetty,進入系統登陸介面。

 

第三題:

Ans:

1. shutdown

  [-t]指定在多長時間之後關閉系統

  [-r]重啟系統

  [-k]並不真正關機,只是給每個登入用戶發送警告信號

  [-h]關閉系統(halt)

 

 2. halt

  halt 是最簡單的關機命令,原理就是調用sutdown-h命令,halt執行的時候,殺死應用process,完成後就會停止kernel.

 

  halt命令的部分參數如下:

   [-f]沒有調用shutdown而強制關機或重新啟動

   [-i]關機或重新啟動之前,關掉所有網路的接口

   [-p]關機時調用poweroff

  

 3. reboot

  reboot工作過程與halt類似,作用是重新啟動,而halt是關機。

 

 4. init

  init 是所有process的祖先,其Process號始終為1. init用於切換系統的運型級別,切換的工作是立即完成的。

  而如果用init()命令將系統運行級別切為0,則為關機的意思,而如果是6則為重新啟動。

 

 

 

第四題:

  1) /var/log/messages        : 系統日誌文件

  2) /var/log/secure       : 系統安全文件(顯示登陸訊息的文件)

  3) /var/spool/clientmqueue: 例行性任務回執郵件存放文件

  4) /proc/inierupts        : 當前系統中斷報告文件

  5) /etc/fstab                     : 關機自動掛載磁碟的配置文件

  6) /etc/profile                   : 環境變量存放的文件

 

第五題:

1. cp             : 複製

 2. mv          : 移動文件或目錄

 3. mkdir     : 創建目錄

 4. cd          : 切換目錄

 5. cat         : 查看文件內容

 6. ls           : 查看目錄下文件

 7. rm          : 刪除文件或目錄

 8. find : 查找文件或目錄

 9. rmdir     : 刪除空目錄

10. echo : 顯示輸出

11. hostname: 主機名

12. whoami   : 查看當前用戶

13. useradd : 添加用戶

14. passwd   : 改密碼

15. su           : 切換用戶角色

16. alias : 查看及設置別名

17. head : 查看文件前N (default :10)

18. tail   : 查看文件後N (default :10)

19. touch      : 修改文件時間或建置新檔

20. pwd        : 顯示目前所在的目錄

 

 

第六題:

Ans:

 1. 在函數體,一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變。

 2. 在模塊內(但在函數體外),一個被聲明為靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。

 3. 在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地範圍內使用。

 

 

第七題:

Ans :

 片內的MMU、指令和數據緩存(IDC)、寫緩沖(Write Buffer

 

 

第八題:

Ans:

  1. 並行設備的硬件寄存器(如:狀態寄存器)

  2.  一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)

  3. 多線程應用中被幾個任務共享的變量

 

 

第九題:

Ans:

  1. ISR不能retrun一個值。

  2. ISR不能傳遞參數。

  3. 在許多的處理器/編譯器中,浮點數一般都是不可重入的,有些處理器/編譯器不允許在ISR中做浮點數的運算,此外,ISR應該是短而且有效率的,在裡面做運算,是不明智的。

  4. printf()經常有重入和性能上的問題,所以在這裡面printf東西,是很沒效率的。

 

 

 

第十題:

當一個異常出現以後,ARM微處理器會執行以下幾步操作。

      Step1.   將下一條指令的地址存入相應連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執行。若異常是從ARM狀態進入,則LR寄存器中保存 的是下一條指令的地址(當前PC4PC8,與異常的類型有關);若異常是從Thumb狀態進入,則在LR寄存器中保存當前PC的偏移量,這樣,異常 處理程序就不需要確定異常是從何種狀態進入的。例如:在軟件中斷異常SWI,指令 MOV PCR14_svc總是返回到下一條指令,不管SWI是在ARM狀態執行,還是在Thumb狀態執行。

 

      Step2. CPSR複製到相對應的SPSR中。

      Step3. 根據異常類型、強制設置CPSR的運作模式。

      Step4. 強制PC從相關的Exception向量位址取下一條指令執行,從而跳轉到相對應的exception處理程序處。

 

 

 

第十一題:

Ans:

  ARM指令集、Thumb指令集

 

 

第十二題:

Ans: Linux系統中的mutiple thread最常用的是 1.互斥鎖、條件變量、信號量。

 

 

第十三題:

Ans:

 

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

 

  2.UDP:

  是無連接的數據服務器,不對數據進行檢查與修改,無需等待對方的應答,會出現分組丟失、重複、亂序,但具有較好的實時性,UDP段結構比TCP的段結構簡單,因此,網路的開銷也小。

 

 

第十四題:

Ans:

  Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

  Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

 

 

第十五題:

Ans:

  process:

  已經被load到記憶體中,任何一行code隨時會被cpu執行,且其宣告的在記憶體的變數的值會隨需求而不斷變動,我們稱為[ 程序 ] 也就是活的Program,一個多工作業系統(Multitasking Operating System)可以同時運行多個Process然而一個CPU一次只能做一件事情,但CPU的數量永遠少於運行中的Process數,因此每個Process使用的時間需要被排程(Scheduling),又每個Process間在記憶體中,如果擺放的方式不當,就會在記憶體中產生很多沒辦法用到的碎片,因此Memory Mnagement是一個問題,每個Process所需要的記憶體總合,也可能大於實體記憶體,因此需要另外用二次儲存裝置充當虛擬記憶體(VirtualMemory),但是二次儲存裝置的速度肯定很慢,因此如何做到對虛擬記憶體最小的依賴,盡量避免Page Fault(電腦在主記憶體中找不到資料,而要去二次記憶體找,就稱為Page Fault)防止Thrashing的發生(因為VirtualMemory演算法不當,造成幾乎每次存取都要依賴二次記憶體,就是Thrashing),以達到效能最佳化。

 

  Thread :在同一個Process底下,有許多自己的分身,就是Thread,中文又翻成執行緒。以往一個Process一次只能做一件事情,因此要一面輸入文字,一面計算字數,這種事情是不可能的。但是有了Thread之後,可以在同一個Process底下,讓輸入文字是一個Thread,計算文字又是另外一個Thread,對CPU來說兩個都是類似一個Process,因此兩個可以同時做。又一個Process底下有數個Thread,而一個ProcessGlobal Variable可以讓它的所有Thread共享,也就是所有Thread都可以存取同一個ProcessGlobal Variable。而每個Thread自己也有自己的專屬Variable

  但是,如果有兩個Thread要存取同一個Global Variable,有可能發生問題,也就是說可能會存取到錯的值(例如兩個Thread同時要對一個Variable做加減,最後那個答案可能會是錯的),這就是Synchronization問題。又,每一個Thread之間可能會互搶資源,而造成死結(Deadlock),只要以下四個條件都滿足就有死結。

(1)這個資源不能同時給兩個人用

(2)有一個人拿了一個資源,又想拿別人的資源

(3)如果一個人占了茅坑不拉屎,占用資源很久,仍不能趕他走

(4)ABBCCDD又等A 等成一圈。 要解決這種狀況有Avoid(預防) 避免(Prevent)兩種方式,破除以上四種其中一種即可。

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow

    Eric 發表在 痞客邦 留言(0) 人氣()