程序员 shell google 编程 centos Firefox 云计算 wordpress linux Ubuntu Android apache php Python Windows 开源 java mysql nginx 微软

《 嵌入式系統設計與實踐》一一1.3 延伸閱讀

1.3 延伸閱讀
有很多關於設計模式的優秀參考書。以下兩本是我最喜歡的。
Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides(1995),設計模式:可復用面向對象軟件的基礎。Boston: Addison-Wesley。有很多關於設計模式的參考資料,但這本書是革命性的著作。由於這四個作者,這本書常稱為“四人幫”(GoF)書(標準的設計模式可以稱做GoF模式)。
Freeman, Eric T., Elisabeth Robson, Bert Bates, Kathy Sierra (2004). 《head First Design Patterns》. Cambridge, MA: O'Reilly Media. 
面試問題:Hello World
這裏有一個裝了編譯器和編輯器的計算機。請實現“Hello World”程序。在基本版本運行後,增加一個功能,從命令行中獲取名字。最後,告訴我在你的代碼開始執行之前(main()函數之前)發生了什麽(感謝Phillip King提供了這個問題)。
在很多嵌入式系統中,需要從頭開始開發。在這個任務的第一部分,我希望面試人能夠從一個白板開始,填入基本的功能,即使是在一個不熟悉的開發環境中。我希望他具備解決這個直接明了問題的編程技能。
這是一個基礎的編程問題,因此最好能熟悉簡歷上所述的編程語言。對這個問題來說,任何語言都是一樣的。在我要求實現“Hello world”時,我考察語言的細節(如包含哪個頭文件,在C和C++中使用命令行參數)。我期望面試者能基於編譯錯誤去發現和解決語法問題(然而,當他能輸入整個程序而沒有任何錯誤,即使是拼寫錯誤也沒有時,也會給我留下極其深刻的印象)。
註意:我自己是個不錯的打字員,但如果有人在旁邊看著我,我會每隔一個字母就輸錯。沒有問題,很多人都會這樣。所以,不要因為這而亂了方寸。專註在鍵盤和代碼上,而不是在你的打字技巧上。
這個問題的第二部分是關於嵌入式系統的切入點。純計算機科學家會把計算機看做一個理想的盒子,在其中執行他的完美算法。當問及在main函數之前發生了什麽時,他通常會說:“你知道的,程序運行了。”但他並沒有理解其中的含義。
但是,如果他提到“start”或者“cstart”,那麽他已經在面試中有個不錯的開始了。總的說來,我希望他能知道除了我們看到的代碼之外,程序還需要初始化,而不管是在什麽平臺。我期望能聽到他說設置異常向量來處理中斷、初始化關鍵外設、初始化棧空間、初始化變量,還有如果有C++對象則調用構造函數。如果他能說清楚編譯器隱式地做了什麽以及初始化代碼顯式地做了什麽,那就更棒了。
最好的回答就是一步一步描述清楚發生了什麽,並且解釋為什麽這些事情如此重要以及它們如何在嵌入式系統中發生。有經驗的嵌入式工程師通常會從向量表開始,從向量表重置到系統加電行為的描述。本書的後面章節將討論這些問題,因此即使這些名詞對大家來說是陌生的也不用擔心。
如果電氣工程師(EE)來問這個問題,候選人就可以進一步討論系統加電行為,那麽他會給面試額外的分數。比如,解釋為什麽系統不可能在開關打開後1毫秒之內啟動並運行。電氣工程師期望聽到加電時序、電壓上升時間、時鐘穩定時間、處理器重置/初始化延時等。

延伸阅读

    评论