同樣工作5年,我實在自愧不如。或許是因為嵌入式太繁雜,一個公司一種開發模式,導致我個人的積累有些單薄。
為了方便大家,我決定簡單列出面試題目,而不做詳細說明,大家可以自己去搜索答案。
背景:
我之前工作過兩家公司,一家做智能卡芯片的,一家做藍牙產品,基本是應用層的內容。可惜嵌入式開發會越來越向底層發展,沒做過底層協議開發是我的一大軟肋。
自學過TCP/IP,linux內核(0.11版)
使用過python
公司A
一面
項目模式(產品/模塊)
藍牙芯片在產品中的作用(MCU,控制外部DSP或其他芯片;或只作為藍牙模塊)
藍牙軟件成品模式(固件模式,通過SPI燒錄)
藍牙協議棧的架構和分層
藍牙協議棧與網絡協議棧(4層架構或7層架構)的對比
藍牙芯片(是否基于Linux或其他常用架構)
藍牙軟件的軟件架構(event-driven類型的,而不是單片機那種大while循環的)
函數指針與指針函數分別是什么?用簡單的代碼表示出來
Linux內核的版本;操作系統任務切換的關鍵是什么(保存上個任務的上下文,加載下個任務的上下文)
二面
說說經歷過的最難的項目
分享
這個其實是我同學推薦的,雖然面試完全沒有準備(因為個人原因還未開始投簡歷),但面試過程還算基本順利。可惜該公司有個性格測試,沒過
公司B
自我介紹
項目模式(產品/模塊)
藍牙芯片在產品中的作用(MCU,控制外部DSP或其他芯片;或只作為藍牙模塊)
藍牙協議棧與TCP/IP模型的對比;描述一下TCP/IP模型(協議)的主要內容;藍牙協議的細節
wifi與藍牙的對比
藍牙通信速率(面試時沒答上來,基本沒關注過……后來了解到現在最大24Mbps,一般也就幾十k)
python的項目經歷
I2C的通信模式(看來是答錯了,我以為有個校驗位(UART有校驗位,是10位數據),結果每次傳輸是8bit,然后1bit應答),通信速率,工作時的掛載情況(最多5,6個設備)
USB的協議架構
git的使用
makefile的了解(編譯的經過)
Linux內核的版本(推薦我看2.4版本……)
Linux驅動開發
socket
分享
總結了之前的經驗,專門看了一些藍牙底層協議和網絡四層協議的對比,但是忽略了I2C,之前做I2C也不是做I2C的底層協議,主要是應用,抓取過一些I2C的通信數據,UART也是同樣的,結果我在數據格式上沒分清UART和I2C。USB協議也不太了解,只是在原來的公司做過一些基本是應用層的代碼改動。
公司C
部門1
自我介紹
手機開發
手機架構分層
C開發平臺
是否做過Linux驅動開發
部門2:
一面
自我介紹
最有挑戰的項目
職業發展方向(我表示我想做Linux驅動開發或系統開發,不過面試官說他們的項目里并沒有分的很詳細)
我問的問題:項目的產品
二面
C程序,判斷一個對稱數
刪除雙鏈表中的一個已知節點p
好的代碼應該有的特點
分享
部門1是做芯片開發的,可惜我完全沒接觸過。所以問了幾個問題后感覺不合適,就結束了。
公司D
單片機經驗(51或linux)
軟件架構;個人負責的部分
我問的問題:公司的主控芯片和產品的關系
分享
這個公司是看到我的藍牙經驗,考慮他們的產品中可能會用到藍牙才面試我的,但我做的不是藍牙底層協議,他們了解到這個后就沒怎么再問了
公司E
一面
好的編程習慣(結合C語言的測試題詳細說明,第一個點出C變量的聲明和初始化的位置應該在一起)
第一份工作的內容,負責的部分,拿到一個文檔后如何開發/測試
第二份工作中影響最大的項目,為什么要實現藍牙設備之間的連接?為什么不從主設備直接向2個藍牙設備播放音樂?
這么多年編程有什么最寶貴的編程經驗?
二面
影響最大的項目
分享
一面有點像壓力測試,比如問題“為什么要實現藍牙設備之間的連接?為什么不從主設備直接向2個藍牙設備播放音樂?”產品設計并不是我做的,至于為什么我也不清楚。“為什么不從主設備直接向2個藍牙設備播放音樂?”這是因為目前的任何一款手機還不支持同時向2個藍牙設備播放音樂。看來大家都知道藍牙,但是都沒用過啊,如果面試官用過多個藍牙設備,就不會問這種問題了。
公司F
volatile的作用(沒答上來)
如何寫一個無限循環?
如何跳出無限循環?(面試官說可以使用goto來跳出循環)
為什么一般C程序中不使用goto(面試官提示:如果從一個函數中使用goto到函數外,會有什么影響?)
UART,通信的細節:UART的數據格式?如何保證在偵聽UART時不會一直判斷接收到0?
2種CPU架構(不知道,面試官說是馮諾伊曼架構和哈佛架構,還提了一句圖靈機……)
RISC和CISC的區別(沒回答上來,面試官說是與指令長度有關。我說我只了解比如匯編中RET長度可能只有2字節,而jmp指令可能是4字節,這樣匯編轉換成機器碼后,可能會做4字節對齊,如果一段指令剛好差2個字節,就會補2字節的0。所以有些機器碼反匯編后就會出錯,是因為剛好補0造成的。)
寄存器長度變小,尋址范圍會變小么?(我答錯了。應該是不會,考慮CPU上的地址總線和數據總線是分開的)
一個簡單的C函數編程,如何把一個變量中的某一比特取反?
在軟件上,有中斷號,中斷向量表,中斷函數,3者的關系是什么?(學過linux 0.11版的同學們肯定都知道答案)
發生中斷,芯片會做什么?(我回答的軟件部分的東西:影響堆棧,任務會切換到內核態并執行中斷。不清楚具體硬件上會做什么,印象里CPU只有中斷標志位會被置位。其他芯片不太了解)
芯片如何降低功耗(sleep部分模塊,具體的睡眠操作:斷電還是取消時鐘)
如何喚醒已經睡眠的模塊?
時鐘變慢的影響?(不太懂芯片……)
英文對話
我問的問題:項目的工作方向(了解到是做一個芯片內部的模塊驗證工作)
分享
這家公司是做芯片的,所以問的東西有點偏底層,微電子方向。雖然感覺面試官超有親和力,但我還是想做軟件開發方面的,所以有點對不住這位面試官。
總結
嵌入式開發還是相當繁雜的。從芯片級開發到嵌入式產品的開發,或許我投的還是有些廣,但是有一點大家一定要知道,把自己寫在簡歷上的內容掌握,無論別人怎么問都不會出錯,這樣才能正確體現自己的實力
-
嵌入式
+關注
關注
5082文章
19118瀏覽量
305002 -
工程師
+關注
關注
59文章
1570瀏覽量
68514
發布評論請先 登錄
相關推薦
評論