記錄嵌入式面試的流程


 選擇嵌入式行業,意味着初期進行很大的付出,希望找到一份滿意的工作也是理所當然的,最近正好離開原公司,面試了幾家企業,基本參加的都給了offer,這里總結下面試遇到的事情,也是一種積累。我也經歷過剛踏入嵌入式行業啥都不會的時候,那時面試都是以基礎C語言為主,再以簡單的模塊如AD的精度,串口, SPI接口的應用調試特性為主,我下面分享的則是結合上面的知識,告訴你們一般公司對3年左右工程師的需求,我以有代表性的面試流程總結來講訴。

  1. 基礎C語言測試,常見的題目類似下面的:

  • 定義一年有多少秒
  • volatile,static用法
  • 翻轉指針鏈表
  • 清除,置位,賦值數據位
  • 中斷函數,浮點
  • 如何C代碼實現判斷大端,小端
  • 指針,數組,強制轉換
  • 存儲空間,堆,棧,全局變量區
  • ...
  • 函數的健壯性,代碼改進

  這些面試資料網上一大把,可能是公司流程問題,不過對於3年以上工程師面試,公司也不看重這些,基本上是個過場,對的多不加分,錯的多是扣分項,當然如果是一線的嵌入式研發工程師,基本上1年以上經驗這些都不該有大問題,可以某些筆誤,但不應該有明顯不了解,這部分只對於初/未入行業的開發人員還是有一定篩選意義的。

  2. 與人事的面試

   人事的面試在技術面試的前/后都有可能,這一步一般來說即重要,也不重要。重要的是在於這一步決定了你以后在公司的福利待遇,工作時長,餐補和交通補貼等,不重要是除非你有重大的錯誤,如欺瞞學歷,態度不端正等,基本不會影響到面試錄取的最終結果。這里面有個重要的技巧,那就是薪資范圍一定要比你心理能接受的價位要高,如心理價位是1w,那至少要1w2-1w4,心理價位是1w5,那至少要1w8-2w;因為這並不得罪人,在工資上,負擔對象是公司,而不是你對面的人事,這樣給后期技術面成功后留下調整的空間,我至今還沒遇到過要多少給多少的,后期都是通過溝通在預期薪資基礎上少500-1500不等,千萬不要要低了,因為這會影響到未來幾年的收入,還影響調薪的基數。另外對於加班和現在深惡痛絕的996,可能是因為行業原因,加班我是接受的,在項目緊張的時候別說996了,997我都干過,但我不接受的是強制996,就是我有工作未完成,加班我願意來,但不能強制,周六必須上班這種。當然我也因此直接拒絕了一些公司,甚至我所在行業的靠前企業,當然這是我的想法。我這么說就是告訴你不要把自己放的太低,即使是面試者,和面試官也是平等的,提出自己的訴求沒問題,當然我不會說堅持不加班的,這就是對自己和工作需求博弈的定位。

  3. 與技術的面試

  在我剛踏入嵌入式行業的時候,技術面試對我簡直就是災難,現在回想起來,其實對於面試官來說,這種面試也很窄,只能從較少的小項目中來問一些很基礎的東西,如各個模塊的調試經歷,涉及到C知識,對硬件開發的了解(這一部分是初期很薄弱的),關鍵是稍微問深點也很難答上來,因為這些模塊我們都是調用芯片廠商庫開發的,也沒用覆蓋性的測試,很難說出有亮點的問題和解決問題的思路,但當工作幾年出來后,再去面試是很有趣的事情,基本上都是和比你強,或者至少一個水平的人來互相探討交流,是一個吸收碰撞,整理自己不足,開拓視野的過程,這里分享下我遇到的面試問題。

  技術面試很多都是以介紹自己的工作項目開始,在我工作3年后面試基本上自我介紹就可以完全把控流程,這種對於做過項目的人來說其實真的很簡單,甚至通過一個項目,就大致可以整體了解一個人的水平,以我剛入行做的交換機管理模塊為例,我大致闡述了產品的架構,由STM32芯片+新塘單片機+FPGA構成,我負責STM32芯片完整軟件開發,支持遠程網絡在線升級,主要包含FreeRTOS移植,LWIP移植,http/telnet/snmp服務器實現,以及與新塘通過RS485接口,使用自定義協議通訊,這些簡單一列出來,很多問題立馬就提出來了,下面並非標准答案,只是我根據實際開發產品,所闡述最后得到offer的答案,這個要謹記。

  1.項目中的任務是怎么分配的,任務間怎么通訊

  LWIP占用兩個任務,底層任務和LWIP內部管理任務,底層任務由信號量堵塞,由ETH中斷觸發產生信號量,讀取ETH接收的數據;LWIP內部管理任務使用隊列管理內部的所有消息。RS485任務單獨創建任務,與UART和DMA中斷配合,產生信號量來讀取共享數據區的接收數據,用於輪詢下位單片機提供的FPGA參數。http和telenet也都是單獨任務管理,使用郵箱與LWIP內部管理任務進行TCP數據的交互。另外還有空閑任務用於LED指示燈的閃爍和看門狗喂狗。

  說明:用來考察對項目的認知熟練程度,只有完整實現的才能理清楚內部整體架構信息。

 

  2.項目使用了自定義協議,是什么結構,可以用C寫下如何實現嗎

  這個如果學習了解過Modbus協議,那么我們這個自定義協議其實差不多,結構為:起始位+地址位+指令+數據長度+數據+CRC校驗(具體代碼實現較多,這里不在贅述,實現可參考《利用串口點亮/關閉LED燈》里面關於協議的實現)。

  說明:即考察C知識(指針,數組), 也涉及到協議的理解,這在嵌入式行業里也是十分重要的大類分支。

 

  3.項目使用RS485接口,是如何保證雙機通訊的穩定性的

  為了實現穩定性,主要包含了硬件/軟件的方法,軟件上當數據發送失敗或等待返回超時,進行異常計數,繼續輪詢,當超過一定次數后(我們定義的是三次,成功則清零),此時則通過硬件引腳強制復位下位機芯片,並將下位機狀態置為異常態,清零計數,在重復輪詢過程,如果繼續失敗,則將下位機狀態置為出錯,修改內部錯誤碼,並反映到外部的指示燈上和管理界面上,通知產品通訊故障。

  說明:穩定性,即是技術問題,也是經驗問題,這可以看出開發中的設計思路問題,對於一些要求比較高的行業,如電源管理,車輛管理中,冗余設計是必要了解的。

 

  4.你們對於FLASH的配置數據存儲有效性是怎么保證的

  對於配置數據的存儲有效性,也涉及到軟件/硬件方法,硬件上我們使用備份頁和備份標志區,將要寫入區域的數據先寫入備份區,同時置位備份標志位,然后在原地址執行解鎖,擦除,寫入流程,如果成功則擦除備份標志位,失敗返回錯誤即可。軟件上我們將寫入FLASH的數據定義為結構體,並添加CRC校驗位,讀取后校驗失敗后則使用默認的配置數據。

  說明:同上

 

  5.你實現了在線升級功能,具體怎么實現的

  在線升級主要實現bootload以及實現網頁在線下載,產品中將FLASH划分成bootload和Application,以及更新代碼暫存區,通過網頁將固件更新到暫存區,並修改標志位,產品重啟后,bootload如果檢測標志位和校驗都通過,則將代碼移動到Application區域,然后在跳轉執行,否則直接跳轉執行(我這里只是簡單說下流程,實際會復雜些,詳情可以看之前的文章)。

  說明:在線升級本身技術上來說不難,但從這可以考察對於設計的把控程度。

 

   6.你們產品開發的流程是什么,你參與了什么

  • 市場調研
  • 項目立項,主要配合產品經理參與前期產品定義和項目規划
  • 產品基本架構設計,主要配合芯片/模組選型和功能需求分析,初步文檔完善
  • 硬件實現和開發板軟件搭建,軟件部分負責前期開發板搭建基礎框架實現,配合硬件解決設計問題
  • 軟件流程開發,在實際硬件板進行功能開發,並反饋結果,同時完善文檔。
  • 產品優化和需求更新,主要結合開發遇到的軟/硬件問題,配合硬件完善產品的功能,並解決伴隨開發的需求更新問題。
  • 產品測試,配合測試工程師的電壓穩定性,高低溫,老化,產品需求方面的測試,解決反饋的問題。
  • 開發文檔,使用文檔和后期維護文檔完善

  說明:參與正規的流程開發,熟練掌握流程,是從嵌入式工程師走向架構師的必要過程,為了未來更好發展,多聽,多看,多參與是必須的,單純的做技術其實很困難。

 

  7.對於多人合作的項目,你們怎么進行管理的,如果你參與的項目,在客戶現場需要更改別人維護的底層庫,你怎么處理

  我以前參與的項目是使用SVN管理,個人對自己負責的庫進行維護管理,其它人需要更新的話需要提交問題給維護者,由對方經過全面測試進行更新。遇到你說的情況,之前采用的方法是如果客戶要求不緊急,則現場人員將更新提交到庫的維護人員,全面測試后進行庫的更新,然后在客戶這邊進行整體庫的替換,如果要求時間比較緊張,則現場提供測試版本分支,不直接並入庫中,解決后在提交給庫的維護人員,測試后進行版本更新,然后通知用戶更新到正式版本。

  說明:分支管理和客戶需求的沖突對於大型項目是一個抉擇問題,也是經常遇到的問題,很難有最優解,最好根據公司的制度處理,我這里說明的只是根據自己公司處理的解決辦法,並不一定是最優的辦法。

 

  8.你掌握的這些接口,模塊(SPI, I2C, USB, TCP/IP接口等)在這份工作可能並沒有任何涉及,你是怎么看待的

  其實嵌入式內部也是分很多行業的,像我之前在的通訊,安全行業,基本上知識涉及偏差也很大,但這么多項目做下來,也經歷了很多產品,可以明白這些接口,模塊在實際的項目開發中是占比很小的一部分,實際工作集中在任務管理,協議處理,功能需求實現這部分,雖然這些模塊在這份工作沒有涉及,可調試這些模塊,實現功能的過程中,積累的C語言知識,硬件驅動開發能力,軟件設計思路是相通,這部分才是積累的知識。     

  說明:對於剛入職的工程師來說,嵌入式本身可能就是一個方向,但是對於向架構師發現發展的嵌入式工程師來說,嵌入式本身就是一個大類,可能涉及的方向有通訊行業,安全行業(指紋,支付,視頻監控,智能家居),電源管理等,如果想進一步發展,是需要既要了解嵌入式,也要更深層次的對於行業進行掌握,我也是做開發多年,換了2家公司才明白嵌入式內部的隔行如隔山,這個問題沒有正確答案,但反映的問題倒是讓我對自己進行了全面的總結,也算面試的意外之喜。

 

  還有些問題因為印象不深刻就不一一贅述了,上面的這些聊完,在穿插些結構圖的繪畫和講解,基本上一個小時也過去了,面試是不是就不知不覺完成了,縱觀流程就會發現,對於一個成熟的工程師,基礎的研發能力,功能開發的思路,對產品的認知(穩定性和項目流程), 與他人的配合,還有對行業和自己的認知都是考察的內容,如果沒有充分的經驗,是很困難的,這里以此共勉,希望有幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM