歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 嵌入式面試題目考點重要分析

嵌入式面試題目考點重要分析

日期:2017/2/28 15:45:08   编辑:Linux教程

每一個細化的行業,一個公司,甚至一個崗位面試同樣一方面技能(無論是理論還是實踐),都是有不同的側重點的。

把握住這個多去了解相關方面的知識,面試的成功率就會提高不少。

eg:關於嵌入式。

1、 int a=2,b=11,c=a+b++/a++; 則c值為多少?

【考點】編碼規范。

表面上考察你對運算符優先級的掌握程度,但實際上優先級這些玩意很難死記硬背得住?大家的疑惑不就是運算符的結合順序麼?那麼如何去避免呢?c=a+((b++)/(a++))不就行了麼,其實問題背後考察的是你的編碼規范,如何寫清晰易懂的代碼,如何在一個團隊中讓自己的代碼狠容易毫無偏差的讓新人看懂~

2、 Static用在全局變量定義和函數內部局部變量定義有何區別?

【考點】編碼規范及模塊化設計。

Static變量的兩個屬性涉及存儲位置及可見域。在大型的程序設計中static全局變量可以有效的避免名字空間的重復及無意的變量引用,這樣可以有效的提高程序設計的安全性,同時也利用模塊化作業

3、 在程序設計中哪些地方需要使用define?如何用define來定義一年內有多少小時的常量?

【考點】可移植性。

嵌入式程序設計的特點就是軟硬件平台可變性,有效利用define常量可以提高程序的可移植性,這樣改動方便,不易出錯

4、 Define宏語句和inline函數有什麼區別?

【考點】時空效率及宏的副作用。

嵌入式系統平台通常存儲資源有限,但同時又對實時性有一定的要求,二者如何權衡需要考慮。Define宏語句相對於函數調用能提高運行時間性能,但消耗了空間,並且不標准的宏語句定義在不標准的編碼中更容易出現副作用,因此inline函數則是define語句的完美替代品。小資金干大事正是嵌入式的終極目標!

5、 哪些地方可以用到const?const變量和函數輸入參數用const修飾有哪些作用?

【考點】程序設計可靠性。

Const只讀變量可以有效克服define常量的一些弊端,如無類型安全檢查。Const形參可以有效避免程序內部更改無意的更改。人非聖賢孰能無誤,所以我們要將這些可能的失誤統統交給智能的編譯器,這樣就可以將錯誤扼殺在搖籃中

6、 Int,short,char在32位平台下各占幾個字節?一個結構體含有int、short、char變量各一個,結構體占據的總內存空間多少?

【考點】跨平台移植。

嵌入式並非x86,其硬件平台具備很大的差異性,同為int在不同的架構體系下可能占據的字節數是不一樣的。不同的平台也有不同的編譯器,其在變量對齊方面可能有不同的特性。因此在結構體定義時如何設計成員變量的順序以有效減少占據的內存空間,以及如何填充特定字段保證訪問對齊問題,都是嵌入式系統結構體設計時應該考慮的跨平台可移植性問題

7、 如何將unsigned int明確定義為一個32位類型?define和typedef有何區別?

【考點】跨平台移植。

define和 typedef都可以實現變量類型重定義,但是typedef類型的指針變量可以有效去除變量定義的二義性。在嵌入式的工程項目中,通常為了保證數據類型的統一且便於跨平台移植時修改數據類型方便,通常都會單獨定義一個數據類型的頭文件,把所有用到的數據類型typedef成所熟悉的形式

8、 有沒有用過volatile?有哪些典型的適用場合?

【考點】編譯優化的副作用。

通常為了提高程序運行的效率,編譯器會自動進行一些優化,如將變量放在寄存器中,以減少存儲器訪問次數,在數據長期未變時不重新讀取內存等等。但是優化有時會帶來問題,如硬件寄存器、多任務共享變量、中斷和主程序共享變量,優化有可能帶來數據訪問不一致性的問題,因此對於這些個別變量,我們需要用volatile聲明告訴編譯器取消優化

9、 參數傳遞有哪些形式?寄存器和堆棧傳遞各有什麼優缺點?

【考點】編譯優化、調用性能、接口設計。

每種體系結構及對應的編譯器對參數傳遞都有自己的規定。參數傳遞並非總是通過堆棧進行的,參數入棧出棧是需要耗費時間的,編譯器總是盡量優化利用寄存器來傳遞參數,因為寄存器的訪問效率要高,但當參數過多時,將放棄優化從而用棧傳遞參數。因此為了提高調用性能,應盡量減少參數個數,太多時可以將所有參數重新定義為一個結構體,利用結構體指針來傳遞參數。在函數接口設計時應考慮硬件平台和編譯器的特性,以靈活定義參數形式

10、 中斷服務程序設計應注意的問題?中斷觸發方式的選擇?中斷處理太長怎麼辦?中斷處理程序如何與主應用程序交互?

【考點】中斷服務程序設計。

嵌入式程序最大的特點是經常需要和硬件打交道,中斷是接收外界輸入的典型方式,通常都決定了系統運行流程,因此如何高效不丟失的處理中斷是每個嵌入式程序員應考慮的問題

11、 TCP/IP和OSI七層模型是如何劃分的?各層的功能,這麼設計有什麼好處?

【考點】層次化軟件設計保證可移植性。

分層模型最大的好處就是某一層變化了,只要其提供上層的接口未變,那麼上層就無需做任何改動。因此只需要更改本層的實現即可。嵌入式平台因為軟硬件多變性,為了最大限度的利用先前的成果,軟件設計一定要遵循這種層次化模型,這樣才能保證其可移植性

12、 TCP和UDP的區別?各種網絡互連設備都用在哪一層?如何建立鏈接?如何進行擁塞控制?

【考點】協議設計可靠性及緩沖區設計管理。

TCP和UDP的最大區別在於可靠性,TCP通過三次握手協議及超時機制安全可靠的建立或者釋放連接。協議設計最大的問題就是如何保證效率合可靠性,TCP的設計為我們提供了一個參考。而滑動窗口機制可以有效的進行擁塞控制,但窗口大小的設計則關系到內存利用率及緩沖效率可靠性等問題。在嵌入式的驅動程序設計中,經常會開辟緩沖區來進行流量控制及防止數據覆蓋,緩沖區的大小設計則需要更加具體的應用情況設計才能保證可靠性合靈活性

Copyright © Linux教程網 All Rights Reserved