嵌入式C面試題後的玄機

一、 int a=2,b=11,c=a+b++/a++; 則c值爲多少?
【考點】編碼規範。
表面上考察你對運算符優先級的掌握程度,但實際上優先級這些玩意很難死記硬背得住?你們的疑惑不就是運算符的結合順序麼?那麼如何去避免呢?c=a+((b++)/(a++))不就好了麼,其實問題背後考察的是你的編碼規範,如何寫清晰易懂的代碼,如何在一個團隊中讓本身的代碼狠容易毫無誤差的讓新人看懂~程序員

二、 Static用在全局變量定義和函數內部局部變量定義有何區別?
【考點】編碼規範及模塊化設計。
Static變量的兩個屬性涉及存儲位置及可見域。在大型的程序設計中static全局變量能夠有效的避免名字空間的重複及無心的變量引用,這樣能夠有效的提升程序設計的安全性,同時也利用模塊化做業安全

三、 在程序設計中哪些地方須要使用define?如何用define來定義一年內有多少小時的常量?
【考點】可移植性。
嵌入式程序設計的特色就是軟硬件平臺可變性,有效利用define常量能夠提升程序的可移植性,這樣改動方便,不易出錯網絡

四、 Define宏語句和inline函數有什麼區別?
【考點】時空效率及宏的反作用。
嵌入式系統平臺一般存儲資源有限,但同時又對實時性有必定的要求,兩者如何權衡須要考慮。Define宏語句相對於函數調用能提升運行時間性能,但消耗了空間,而且不標準的宏語句定義在不標準的編碼中更容易出現反作用,所以inline函數則是define語句的完美替代品。小資金幹大事正是嵌入式的終極目標!架構

五、 哪些地方能夠用到const?const變量和函數輸入參數用const修飾有哪些做用?
【考點】程序設計可靠性。
Const只讀變量能夠有效克服define常量的一些弊端,如無類型安全檢查。Const形參能夠有效避免程序內部更改無心的更改。人非聖賢孰能無誤,因此咱們要將這些可能的失誤通通交給智能的編譯器,這樣就能夠將錯誤扼殺在搖籃中模塊化

六、 Int,short,char在32位平臺下各佔幾個字節?一個結構體含有int、short、char變量各一個,結構體佔據的總內存空間多少?
【考點】跨平臺移植。
嵌入式並不是x86,其硬件平臺具有很大的差別性,同爲int在不一樣的架構體系下可能佔據的字節數是不同的。不一樣的平臺也有不一樣的編譯器,其在變量對齊方面可能有不一樣的特性。所以在結構體定義時如何設計成員變量的順序以有效減小佔據的內存空間,以及如何填充特定字段保證訪問對齊問題,都是嵌入式系統結構體設計時應該考慮的跨平臺可移植性問題函數

七、 如何將unsigned int明肯定義爲一個32位類型?define和typedef有何區別?
【考點】跨平臺移植。
define和typedef均可以實現變量類型重定義,可是typedef類型的指針變量能夠有效去除變量定義的二義性。在嵌入式的工程項目中,一般爲了保證數據類型的統一且便於跨平臺移植時修改數據類型方便,一般都會單獨定義一個數據類型的頭文件,把全部用到的數據類型typedef成所熟悉的形式性能

八、 有沒有用過volatile?有哪些典型的適用場合?
【考點】編譯優化的反作用。
一般爲了提升程序運行的效率,編譯器會自動進行一些優化,如將變量放在寄存器中,以減小存儲器訪問次數,在數據長期未變時不從新讀取內存等等。可是優化有時會帶來問題,如硬件寄存器、多任務共享變量、中斷和主程序共享變量,優化有可能帶來數據訪問不一致性的問題,所以對於這些個別變量,咱們須要用volatile聲明告訴編譯器取消優化優化

九、 參數傳遞有哪些形式?寄存器和堆棧傳遞各有什麼優缺點?
【考點】編譯優化、調用性能、接口設計。
每種體系結構及對應的編譯器對參數傳遞都有本身的規定。參數傳遞並不是老是經過堆棧進行的,參數入棧出棧是須要耗費時間的,編譯器老是儘可能優化利用寄存器來傳遞參數,由於寄存器的訪問效率要高,但當參數過多時,將放棄優化從而用棧傳遞參數。所以爲了提升調用性能,應儘可能減小參數個數,太多時能夠將全部參數從新定義爲一個結構體,利用結構體指針來傳遞參數。在函數接口設計時應考慮硬件平臺和編譯器的特性,以靈活定義參數形式編碼

十、 中斷服務程序設計應注意的問題?中斷觸發方式的選擇?中斷處理太長怎麼辦?中斷處理程序如何與主應用程序交互?
【考點】中斷服務程序設計。
嵌入式程序最大的特色是常常須要和硬件打交道,中斷是接收外界輸入的典型方式,一般都決定了系統運行流程,所以如何高效不丟失的處理中斷是每一個嵌入式程序員應考慮的問題設計

十一、 TCP/IP和OSI七層模型是如何劃分的?各層的功能,這麼設計有什麼好處?
【考點】層次化軟件設計保證可移植性。
分層模型最大的好處就是某一層變化了,只要其提供上層的接口未變,那麼上層就無需作任何改動。所以只須要更改本層的實現便可。嵌入式平臺由於軟硬件多變性,爲了最大限度的利用先前的成果,軟件設計必定要遵循這種層次化模型,這樣才能保證其可移植性

十二、 TCP和UDP的區別?各類網絡互連設備都用在哪一層?如何創建連接?如何進行擁塞控制? 【考點】協議設計可靠性及緩衝區設計管理。 TCP和UDP的最大區別在於可靠性,TCP經過三次握手協議及超時機制安全可靠的創建或者釋放鏈接。協議設計最大的問題就是如何保證效率合可靠性,TCP的設計爲咱們提供了一個參考。而滑動窗口機制能夠有效的進行擁塞控制,但窗口大小的設計則關係到內存利用率及緩衝效率可靠性等問題。在嵌入式的驅動程序設計中,常常會開闢緩衝區來進行流量控制及防止數據覆蓋,緩衝區的大小設計則須要更加具體的應用狀況設計才能保證可靠性合靈活性

相關文章
相關標籤/搜索