天天看點

【轉載】電子通信、嵌入式工程師的面試指南

轉自:​https://zhuanlan.zhihu.com/p/63785660

火哥自從校招找工作到現在,面試過不下50家公司,拿到過不少于30個offer。雖然不能是百戰百勝,但是也還算有着較高的面試成功率。這50場以上的面試中,火哥用過不同的履歷,嘗試過不同的項目介紹技巧,也算頗有心得,今天我們聊聊電子通信,嵌入式工程師面試的那些事。

一、公司面試求職者的目的是什麼

《孫子兵法》有雲知己知彼,百戰不殆,當然百戰不殆并不等于百戰百勝,而是說在知己知彼的前提之下,至少結果不會很難看,哪怕沒有打勝戰,也不至于損兵折将一敗塗地。

是以要去面試一家公司,首先搞清楚公司面試求職者的目的。很多人說,面試不就是為了招人嘛,當然招人是肯定要招的,但不僅僅這麼簡單。

不管是校招社招,有一些常年好像都在招聘,但是據我了解去面試的人成功率并不高,而且被問到遠超目前工作經曆的很難的問題,幼小的心靈遭受打擊,這到底是怎麼回事呢,其實面試你的公司其目的一般是這幾類:

  1. 常年挂機等大牛的公司。這類公司可能根本不缺人或者暫時沒有hc(head count 即部門招聘名額的意思)。但是他們也會長期在招聘網站上挂機,占用前排廣告位,因為招聘網站在同行業流量還算大,挂機費用也不貴,挂上職位,能給公司刷存在感,起到廣告效應,比電視廣告便宜多了。當然如果真的有行業大牛(比如Linus.Tovalds等等)來面試,公司也可能乘機申請特批的hc(一般要CEO簽字)挖到大牛。
  2. 尋找備胎的公司。有些公司人員架構基本成形,但是考慮到每年有一定離職率,或者已經給牛人發offer但是不确定牛人一定會來報到,是以有可能接下來會繼續邀請你面試,雖然可能面試過程你發揮不錯,問題都答出來了,聊的挺開心,但是最後由于牛人按時報到或者今年離職率低,沒有騰出hc, 最後沒有給你offer,其實這也是經常發生的,是以各位求職者沒有拿到正式offer之前,不要掉以輕心,不要抱有各種幼稚幻想,該繼續面下一家,該幹嘛繼續幹嘛。
  3. 團隊大體成形,有缺人的hc名額,但是項目不急的公司。這種公司也會經常出來邀請人面試,但一般難度會有點高,也會有點挑剔或者說謹慎,因為就目前公司人員配置,可能基本能完成項目,但是可能會有點趕,招你過來可以起到錦上添花但不是雪中送炭的作用,可能會更加看重你未來給公司帶來的潛力,而不是對目前公司平台,業務的熟悉程度。這種公司可能會在面試的時候,用更多不常用的基礎知識考察你的潛力,最後給最滿意的候選人發offer,屬于慢慢挑的公司。
  4. 急招對口業務項目的公司。顧名思義,公司非常缺人,非常急,希望你一周之内就能到崗(這時裸辭已經離職的可能比在職的反而有優勢)。這種公司招人,可能就不太管你基礎,潛力這些東西懂不懂,上來的問題一般就是你熟不熟悉某某平台,有沒有用過XX晶片,如果沒有就基本over了。

    是以面試勝敗乃兵家常事,火哥這種全球一流公司的老油條,也有面試小公司翻船的經曆,是以各位小夥伴面試求職,一定要保持良好心态,勝不驕敗不餒,不要一點小的失敗,被面試官鄙視兩句就上綱上線,覺得自己無能,其實面試官裡面也有很多傻逼的,很多時候面試失敗并不是你的錯,因為不同公司面試你的目的有時候你并不清楚。

    當然,回到正常的面試流程,公司邀請你來面試,可能是希望多了解你的長處,看看你的長處能不能在公司對應的崗位上産生價值(當然不排除少數公司出一些難題,打擊你的信心,讓你不敢要太高的薪水)。由于現代城市社會,由于都是陌生人社會,人和人之間,如果沒有機會共事過一份事業,彼此之間是很難有信任感的,尤其是技術人員之間的信任感更低(其實體育領域也是要有信任感,才敢在比賽最後時刻把球傳給最信任的隊友完成絕殺)。通過面試的了解(不管是問一些看起來用不上的基礎知識還是常用的業務知識),都是在增加用人部門和求職者之間的了解和信任,隻有你有足夠的技術說服力,讓面試官信任你的能力,對方才願意把重要的工作交給你。本文要聊的主要也是這種陌生人面試(一般曾經共事過的同僚再次搭檔,走走流程就好了,不用做那麼多算法題,因為共事的過程能夠給他們帶來足夠的信任),在這種陌生人面試的模式下,不管看重學曆,大廠背景,還是算法核心等基礎知識,業務知識項目經驗等等,都是增加信任感的一個媒介,不同面試官對這些東西權重不一樣,但是本質上還是考查你這個人值不值得信任,進而配置設定工作任務,有沒有可能最後把事情搞砸。

二、如何準備履歷

履歷是找工作的第一關,能否寫好履歷直接決定是否有面試邀請。火哥的準備履歷有這幾點竅門,是以有着較高的面試邀請率:

  1. 履歷要有公司和行業的針對性

    電子通信,嵌入式相關的行業其實很多,不同行業不同公司看重的項目和基礎技能其實是不一樣的(比如你做視訊相關的開發去面試語音技術相關的公司,對方對視訊相關的項目經驗不太了解或者興趣不大)。是以去面試不同行業的公司,履歷要有針對性,但是維護太多版本的履歷又很累,而且履歷履歷,盡量簡單(不超過2頁),一般2頁之内可能記錄不下你做過的所有項目和技能資訊。所有火哥一般會有一個基礎版的履歷,裡面記錄了所有工作以來做過的項目相關的東西,但是這份履歷一般不會直接投出去。除了基礎版履歷,火哥還會準備三份崗位版履歷(針對視訊開發,通用嵌入式驅動開發,通用嵌入式應用開發),每份履歷裡的項目經曆都可以從基礎版履歷裡面複制粘貼相關的項目,去除無關的項目。如果遇到你特别中意的公司和崗位(dream company),那麼就為這家公司的崗位專門修改一份履歷。但是一般情況下,三份不同的崗位版履歷根據JD描述,投遞到不同的崗位。

  2. 使用雲盤來儲存履歷

基礎版和崗位版的履歷最好在雲盤上統一管理和修改,因為你world pdf檔案,在不同的電腦和U盤上拷來拷去,久而久之你會搞亂,可能也分不清哪個盤上的履歷是最新的,這就可能出現投遞錯誤履歷的尴尬,是以最好用雲盤管理更新最新的履歷。

3. 技術詞彙要通用,關鍵詞加粗

一份履歷是否會收到面試邀請,最後做決定有可能是HR也有可能是用人部門。不同公司情況不一樣,不能一概而論,是以在履歷中描述技術相關資訊,請不要用太多私有,冷門特殊的技術詞彙(比如有些小夥伴履歷中寫負責AL006裝置的CD0x2協定的開發,不是細分專業領域,鬼知道你在開發啥)。

火哥這裡有技術項目介紹的例子,裡面通用的技術詞彙與開發平台全部标記起來,讓面試官和HR一眼就能看清楚重點。其實面試官和HR真正看履歷也是挑關鍵詞看,而不是把你的項目從頭看到尾,研究你做了什麼技術,是以标記出關鍵詞,讓HR或者用人部門快速知道你是否值得邀請。

4. GitHub、技術部落格等展示技術能力的連結

履歷隻能簡單的介紹一些工作經曆,但是如果面試官對你有興趣,想更加深入了解你做了什麼,這個時候,github和技術部落格是非常好的技術和能力的證明。畢竟面試的時間有限,要通過1個多小時的面試了解一個人全面的能力并不現實,是以很多面試官面試前後還會翻閱你的github和部落格,乃至最後比較候選人,選擇困難的時候,GitHub和部落格也是一個有力的參考(畢竟你不隻是能完成工作就行,很多時候好公司招人名額有限,你需要與同樣合适的人競争崗位,那用什麼證明你更優秀呢?)。我了解到很多有經驗,有技術的工程師,由于沒有github和部落格來宣傳自己的技術,隻通過短短一個小時的面試,沒有辦法把自己的技術展現完全,最後面試官不是很信服,反而選擇了技術不如他,但是有部落格和github能證明技術的候選人。

5. 關于有用的證書

電子通信、嵌入式等靠實際技能吃飯的行業,有用的職業證書可能不多,但是如果你從事網絡工程師相關的工作,思科或者華為認證還是有必要的,其它履歷上需要具體咨詢相關崗位有經驗的老鳥。

另外基本的一點就是英語六級(CET-6)證書,這個對985 211學曆背景的童鞋,CET-6應該屬于标配。但是普通一二三本工科專業,據我了解,CET6過級率應該不高,平均不到20%。但是如果要面試行業内的外企,三資企業,沒有CET6可能會讓老闆懷疑你的英語溝通能力,但對于已經畢業沒有CET6證書的童鞋,補救辦法就隻能考雅思6.5分以上或者托福對應分數來彌補沒有CET6的缺陷。

很多人說找工作看能力不看學曆,普通一二三本也有優秀的人才,學曆是層次是18歲聯考就決定了,後面不考研就沒法改變了,但是英語等級證書大學之後還是有機會考取的吧,而且機會很多,如果出身普本,又沒有CET6證書,怎樣證明你是普本中的優秀人才,和其它普本不一樣呢?是以CET6,雅思6.5等證書也是表證明學曆普通的你學習态度好的一個點。

6. 是否讓獵頭幫忙推薦履歷

關于獵頭崗位,一般獵頭推薦的都是薪資較高的中高端崗位(這樣獵頭提成高),獵頭推薦有這麼幾個優勢:

  1. 獵頭接觸過這個崗位的很多候選人,可能給你更多詳細的面試準備資訊(因為她更希望客戶面試通過)。
  2. 獵頭對這個崗位的薪資了解的資訊比你多,在談價的時候,獵頭可以起到擡價的作用(畢竟利益相關)
  3. 獵頭可以幫你獲得更多,更快的面試回報資訊,哪怕失敗了,也知道具體的原因和失敗點。

是以在這裡,火哥是建議如果有獵頭推薦的崗位,盡量找獵頭。但是需要注意的是,獵頭推薦崗位一般是從自己和客戶的利益出發,大部分推薦的是你有很大機率能面試上的崗位,而對你的職業崗位發展和這個行業的發展,以及你是否有機會挑戰更好更大的平台其實是不care的,甚至可能為了自己的利益忽悠你去一個并不是很有前景的行業和公司,是以自己分析利弊,決定是否接受獵頭推薦。

三、如何準備基礎知識的面試

  1. 為什麼社招有經驗的求職者還要考察書本基礎知識

    很多有經驗的工程師和我抱怨過,為什麼嵌入式面試,還要考一些平時根本用不上的算法,還要根本接觸不到的編譯器,Linux核心原理。

    關于這個疑惑,首先要接受這個事實,有經驗的工程師,尤其是非管理崗位的嵌入式工程師(包括初級、中級、進階),在社招需要做筆試題,考察很多算法和作業系統核心原理的知識的客觀存在事實,我參與的面試中,70%以上都有算法和核心原理的考察,尤其是創始人團隊是網際網路背景出身的情況下,對算法考察更為喜愛,而網際網路背景創始人團隊在電子通信,嵌入式相關領域招人的公司,往往參考BATH的薪資标準,給得起較高于傳統行業的薪資,是以為了高薪就業機會,你必須适應遊戲規則,準備算法,Linux核心,系統原理等基礎知識的面試。

    至于為什麼要考察這些,尤其是骨幹團隊已經成形的公司(上一段1 2 3 類公司都算),希望能通過基礎知識測試,摸底候選人的基本功掌握程度,期望招到的候選人,不隻是能處理目前的業務工作,而是有更強的發展潛力,能在公司需要的時候,适應公司技術發展的變化,調整自己的技術方向。因為在現代新興行業的公司,組織架構,技術方向調整是很常見的事情(火哥工作5年遇到過三次組織架構和分工調整),一般情況下認為,隻有基礎紮實的人,才能适應不同領域的調整。紮實的核心,算法基礎,能幫助你在工作中處理一些可能表面上看不到,埋藏在更加深層的bug,盡管這些問題不會天天出現,一旦出現真要命,因為你平時用的知名的工具,軟體,庫比如Linux核心,工具鍊,libc庫并不是完全沒有bug的,火哥之前就利用編譯連結的基礎知識,幫助客戶解決過glibc庫的版本相容性問題。在基本紮實的人,一般在解決問題的思路上,不會犯方向性的大錯誤,能夠快速定位到核心的問題。

    另外,紮實的基本功,也能增強上司對你的信任感。比如當你知道你乘坐的飛機的設計師和制造師是大專學曆出身,給你做臨床手術的醫生是三本或者大專學曆,平時口口聲聲說看能力不看學曆的人,心理會不會産生不信任感,不願意坐這架飛機,不願意這個醫生做手術呢?同理,如果你的下屬有很多基本知識都不知道,你敢把至關重要的客戶項目交給他嗎?

2、嵌入式工程師如何準備基礎知識面試

講了這麼多基礎知識面試的到底,但是到底如何準備呢?其實準備基礎知識面試沒有什麼捷徑,沒有太多投機取巧的方法,隻能老老實實針對性的花時間看專業書籍和文章。不要指望完全靠工作經項目的經驗來學習基礎知識,這就像職業球員一樣,不要指望聯賽,正常賽的比賽經驗來代替平時的速度,力量,耐力訓練一樣。工作(比賽)雖然确實有很多實踐性,經驗性的東西不可能在書本上學到,但是工作(比賽)并不能代替平時的基礎知識基本功訓練。同樣,運動員轉會的時候,也會有耐力,速度等基本功測試,就如同工程師跳槽的工程師有基礎知識摸底面試。工程師沒有平常的基本功訓練,知識很容易遺忘和脫節,就像運動員不注重平時訓練,身體狀态就會随着年齡下滑明顯(想想C羅34歲了還要有健身房專門的力量訓練)。

那麼基礎知識訓練該看些什麼呢?就嵌入式領域而言,火哥推薦下面這基本經典:

算法:刷完 算法(第四版) [https://book.douban.com/subject/19952400/] 上面的例題,有答案的練習題,這樣基本能應付大部分算法面試

資料結構: 資料結構與算法分析 [https://book.douban.com/subject/1139426/] 計算機必備知識,沒啥好說的,老老實實學完。

Linux核心:入門級-- Linux核心設計與實作(第三版) [https://book.douban.com/subject/6097773/], 進階級-- 深入Linux核心架構 [https://book.douban.com/subject/4843567/], Linux核心的學習時間花費可能比較長,也有一定難度,隻能說任重道遠,建議下一份對應版本的核心源碼,慢慢啃,花個半年一年總能啃完的。了解核心各種子系統和機制,對嵌入式Linux驅動開發也是大有好處。

程式設計規範: 代碼大全(第二版) [https://book.douban.com/subject/1477390/], 學習一些程式設計規範,增加和面試官聊天的談資。

其它:程式員的自我修養[https://book.douban.com/subject/3652388/], 講一些編譯,連結的知識,程式設計珠玑 [https://book.douban.com/subject/3227098/] 一些面試的技巧性算法速成。

3. 基礎知識筆試面試注意點

考慮到很多公司會考察紙上寫程式,是以帶上自動鉛筆和橡皮擦很重要,這能讓你紙上寫代碼的時候便于修改。另外,不适應紙上寫程式的,面試前最好找2道題在紙上真實寫寫,感覺和敲鍵盤完全不一樣,尤其是用墨筆寫,更加容易塗塗改改。

四、面試前要和hr确認的資訊

面試之前,建議加添加hr微信,問清楚面試的具體地點,以及面試多少輪,流程是怎麼樣的,大概需要多少時間,這樣便于你規劃交通和請假的時間(考慮到在職面試的情況)。另外可以了解公司的基本制度,比如正常情況下幾點上下班,一周幾天,有沒有大小周,是否需要打卡,是否彈性,五險一金的繳納标準(不少民營企業是以當地最低工資标準繳),醫保是不是第一檔(注意深圳一檔,二檔醫保的差別)。你可以通過後面這些資訊,判斷公司的制度對你是否可以接受,值不值得去一趟。

五、如何通過一些技巧在面試中多多展示自己的長處

很多工程師都有這樣的經曆,在平時工作中做了很多事情,解決了不少難題,但是卻在面試中不知道如何像面試官表達這些東西,或者漏掉了你的很多優秀的閃光點,吃了虧。

其實火哥也在以前的面試中面臨同樣的難題,明明有解決問題的能力,明明知道很多東西,但是在面試官面前都在把優點隐藏,把缺點放大。

那麼之後火哥在面試中做了哪些改進來提高offer率呢?

1. 準備項目PPT介紹系統原理和架構

以前有的小夥伴說,面試把平時的作品帶過去,到時面試愛怎麼吹就怎麼吹。

當然這是不現實的,很多做過的東西是前公司的帶不出來,加上面試公司的環境不一定允許你現場展示作品,這個想法不太現實。

不過,帶上一個台ipad平闆電腦或者小型的筆記本電腦,把你平時做過的主要項目的系統子產品架構做成PPT,在面試的時候給面試官講解展示,我覺得是一個很重要的技巧。

因為履歷隻是簡單介紹你的項目經曆,面試官不大可能從履歷上一眼就看明白你所做的項目的原理和架構。是以你要準備PPT資料是對履歷上項目資訊的一個補充,讓面試官看懂你做的項目。盡管現代大企業,項目分工細化,作為基層開發工程師,不太可能整個項目都是你自己獨立設計和實作的,總有你不懂的子產品,但是在面試準備PPT中,你還是要把整個項目的系統架構畫出來,讓面試官能夠了解整個項目是怎麼樣的,你在裡面做了什麼,盡管有些子產品你可能沒有參與,不懂,可以在聊天的時候對面試官說明,但是根據心理學的一些理論(應該是《影響力》還是《思考,快與慢》裡面的觀點,有興趣可以讀讀,增加個人軟實力)人腦一般注重的是資訊的完整性,而不是一些細節末枝的地方,是以能完整的給出項目系統框圖,讓面試官對你做的整個項目能夠有所了解,即使你有不懂的子產品,但也能給面試官帶來好感,讓他有問題可以交流,而不是制造冷場。

下面是火哥面試時候帶的PPT項目和系統軟體架構描述的例子:

在這裡大家要意識到一點,圖檔所攜帶的資訊量遠比文字來得大,在PPT裡盡量少寫文字,多畫圖,用架構圖描述你的項目,面試官可能也不會有耐心仔細看你的項目描述文字,如果沒有PPT所帶的框圖,而是直接帶着履歷去面試,面試官對于自己不熟悉的項目和詞彙也會聽得雲裡霧裡,不知所雲,最後不知道如何提問,尬聊收場。火哥也是在多次面試深刻領悟到這一點,發現純語言上的技術交流和溝通,會有許多誤解和資訊不對稱的地方,遠不如圖檔攜帶的資訊量大,是以自己制作項目介紹的PPT,通過PPT引導面試官熟悉你的項目,和你溝通交流,是技術面試裡面非常重要的一個環節。

2. 面試前自我排練,培養氣場

火哥在面試完和hr總結面試過程的時候,有些hr誇火哥面試氣場很好(這裡不要臉一下)。其實這個和火哥以前從小參加各種演講,辯論比賽,以及大學之後參加的科研論壇和項目答辯有關系。在技術面試中,表現出一種自信和鎮定是非常重要的,哪怕你有些問題你确實不懂,但是你的鎮定,不慌張,有條有理的氣場能給面試官一種靠譜感,讓他信任你。當然如果你從小缺乏這樣鍛煉的機會,那也不要緊,臨陣磨槍,在你做好項目的ppt之後,對着ppt把你的項目從頭到尾大聲講一遍,一定要講出來,實地演練,然後錄音,回過頭來聽錄音,自己感覺講的有些什麼不完美的地方,面試的時候還可以修正。其實每個人,内心的思路、想法和靈感遠比他口頭表達出來的多,如果隻思考而不錄音講出來,鍛煉你的表達,你永遠不知道你表達的東西和你想到的東西所展現的資訊差在哪裡。

3. 刻意準備2-3個平時解決的複雜問題的案例

能不能介紹一下你平時遇到的一個比較印象深刻的問題,以及你的解決思路。相信大家面試都遇到過這樣的問題,相對于這個問題,其實工作時間越久的童鞋反而越不好答,因為解決的問題太多,時間太久的東西可能忘記,一般最近的問題才容易回想,一時半會選擇困難不知道講哪個問題。

其實這個情況,火哥建議大家做好預案,用百度雲盤或者印象筆記,寫下你處理過的3個很有代表性的問題,每次面試之前稍微看一下,每次遇到這個問題就拿出準備好的模闆應答(為什麼要準備3個,因為怕面試官有些方向不熟,聊不下去,讓你換一個問題)。

4. 學會和面試官找共同技術話題,提供補充資訊,促進面試官多了解你

電子通信,嵌入式相關領域,業務方向很多,面試官的知識不可能面面俱到,做網絡的面試官不懂音視訊解碼,做mcu的面試官不懂協處理器并行加速都是很有可能的。然而現代社會,行業變遷太快,你不可能限定自己隻在一個行業裡面找工作,比如做手機wifi就隻做一輩子手機wifi,一輩子都在手機行業找工作,不考慮IPC網絡攝像頭行業,不考慮路由器行業,萬一手機行業需求不足,大規模裁員呢,你總得想辦法在原來技術可以用得上的新行業找工作。

這樣,和不同業務背景的面試官交流,找話題聊下去就是一個非常值得提升的軟實力。在和面試官交流的時候,切記不要面試官問一句,你就隻答一句,這樣如果面試官沒有題庫的話,過2-3輪基本就會尬聊結束的狀态。或者面試官無奈隻能讓你寫算法了。

正确的溝通方式是,面試官提問的問題,哪怕不懂,你也得多回答一些東西,牽涉一些主題相關的技能點,讓面試官多了解你的知識技能,引導面試官朝着你懂的方向提問。

舉個栗子,我沒有語音相關項目經曆,當面試官問我語音相關的問題,你懂嗎?我的回答不是兩個——不懂,而是說,雖然沒有做過語音相關的子產品,但是我之前寫過AAC音頻壓縮流和和h264視訊壓縮流做MP4 muxer封裝打包,以及音視訊播放同步相關的程式,這樣引導面試官像我提問音視訊同步的問題,順利回答出以音頻為基準,用pts時間戳做同步。同時也是在暗示面試官,雖然我沒做過語音相關的東西,但是對這方面還是有所了解,有一定基礎,能馬上學習适應。

另外,在介紹自己項目的時候記得延伸理論知識點,讓面試官有提問的空間,比如我在介紹在前公司用buildroot做自動化系統建構腳本的時候,不是一句話介紹說我用buildroot搭建了系統自動建構系統就完事了,而是接着補充道,這裡面我還做了工具鍊更新,用硬浮點替換軟浮點工具鍊,還對某些現有的方案做了更新,比如MIPS方案256MB DDR記憶體更新到512MB DDR記憶體,并且做了512MB大記憶體的壓力測試,這樣通過引申更多的技術關鍵詞,引導面試官提問我ARM硬浮點的基本工作原理,以及如何測速512MB DDR系統的性能等一系列新問題,然後通過這些新問題把自己積累的理論知識展現出來。

要知道你做得應用業務邏輯代碼其實都不好提問,大部分情況下都是問你用了哪些庫的哪些功能就沒了,反而牽涉到核心機制,CPU機制等基本工作原理的東西才好提問,也更好展現技術的深度。是以你要學會如何引導面試官像原理性問題上提問,同時你也要打紮實自己的技術基本功。

最後祝願認真讀完我的文章的童鞋都找到理想如意的工作。

文章同步 微信公衆号: ict_embedded