小米嵌入式面經(轉發)

面試得很廣,從硬件、軟件、基礎知識、簡歷內容都有涉及。


整個面試持續了將近三個小時,由三位面試官輪流來問,分別偏重硬件、軟件、以及綜合,但總的來說還是圍繞簡歷和基礎知識來問的。
第一位面試官面的比較偏重硬件,分別問了:
1、數據傳輸的時候如果上下升延雙倍速率採集數字信號的話,如果有一個邊沿正好採集到數字跳 變時怎麼辦(我回答是從佈局佈線、建立保持時間以及FPGA的引腳約束相關方面來回答的);
2、模電中的運放,叫畫一個求對數的電路,表示好幾年沒複習過,完全忘了,面試官表明還是很注重基礎的;
3、由於面試得是小米的智能家居相關部門,而面試得這個團隊產品上用的操作系統不是linux,而是類似ucos這樣的,問了好一些進程間同步及通信的手段,也就是自旋鎖、信號量這些東西的原理,還叫自己實現自旋鎖;
4、看我FPGA有相關經驗,叫用Verilog寫了個計數器;
5、單向鏈表的排序;
6、快速排序;
7、C語言的一些基礎知識(volatile、const、static、指針之類的);
第二位面試官稍微偏軟一些,問的都是軟件相關的問題:
1、實現memcpy(char*dest,char*sor,size_t size);
2、寫一個宏OFFSET,已知結構體中一個成員,求出該成員在結構體中的內存偏移量,
#define OFFSET(type,member) ((size_t)&(((type*)0)->member))
3、結構體中的內存分佈等;
4、出了一個題,已知有一個硬件計數器控制該計數器有兩個寄存器,一個用於設置時鐘的初始值,一個用於設置時鐘的門限值,當時鍾初始值設置好後開始計數,當計數值達到門限值後,便會觸發一個函數的執行,讓我編寫兩個函數,分別實現1:在任意時刻能夠設置多少時間後觸發某個函數的執行;2:在任意時刻能夠取消之前設置的執行任務;(解決思路是用鏈表實現一個最小優先隊列,設置任務對應着隊列的插入,到時間執行和刪除對應着優先隊列的結點的刪除,觸發時跳到相應的函數中就行了);
最後一個面試官由於時間不足了,只問了一個比較發散的問題:
1、假設有一個很大的文件,裏面的數據結構如下:
XXX.XXX.XXX.XXX(IP地址) 天氣;如192.168.1.1 晴轉多雲
問怎麼用最快的方式找到一個地區的天氣狀況(IP地址往往與地區有着對應關係)。我回答的思路是在存儲文件的時候就將每一條信息對齊(即佔用大小一樣的地址),然後使用二分法搜尋每一個IP段的位置,移動文件指針即可(O(lgn));
當然,還問了些許關於簡歷上的項目,總的來說,問的很雜很多,但不會很難;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章