相關崗位
嵌入式軟體。
C++後臺開發。
遊戲相關崗位以及硬體。
前期準備
1. 筆試刷題 ,非常重要,不然面試機會都沒有,leetcode感覺是普通應用題,實際筆試可能是綜合應用題,我採取的是專題速刷,半個月回顧一次;
2. 專業面試準備 ,重點複習資料結構、作業系統與計算機網路,我採取的方式先看別人的面經總結,並結合筆記,最後結合書籍構建系統,有時間可以看看原始碼,個人除了後臺相關重點關注了嵌入式相關的總結以及linux原始碼分析,深入理解linux核心,linux驅動開發。
3. 綜合面試準備,個人專案精煉,個人職責,亮點總結,個人專案介紹從結構、硬體、軟體角度分析,完成的工作,可採用第一點、第二點等方法表示,個人專案逐點介紹採用為什麼?怎麼做?取得的效果?流程介紹,並準備一兩個超級亮點和超級難點(你並未解決)。
1.大疆:
一面,仔細詢問筆試細節,並且挖深,被仔細詢問了在筆試中用的bitmap演算法,為何要用,有什麼特點,怎麼做的,然後抓住linux驅動開發專案追問細節,並引申,open/read/write等函式具體是怎麼工作的,從使用者態的系統呼叫聞到核心態的資料結構,基數樹等,記憶體管理相關問到了linux系統中頁快取、快取命中以及mmap相關的問題,比如兩個大檔案需要進行互動如何做,中斷的上半部以及下半部等,為何要設定上半部和下半部,怎麼做的,自旋鎖和互斥鎖的區別以及應用場景,如何實現一把自旋鎖。
二面,基本就是問專案,RM比賽中學到了什麼,比賽看了沒有,覺得有什麼問題,哪些可以改進,如果讓你重新設計一個機器人,你希望設計出什麼新功能可以在比賽中取到突出的效果。專案中涉及到硬體電路設計,被問到了訊號鏈如何分析以及電源管理如何設計,開關電源與線性穩壓器的對比,能接受提前實習麼?
三面,應該是個pm,專案介紹,你覺得你做的最好的是哪塊,最差的是哪塊,個人優缺點,合作中出現問題應該怎麼做,然後就是介紹公司業務和發展。
2.華為
一面,筆試回顧,個人情況特殊,筆試40分鐘A了兩個題便出去做oppo筆試,第三題沒看,面試官看提交情況很好,只有3次提交,便放我一馬,沒問第三題,然後詢問專案,細節記不大清,都是基本操作,最後做演算法題,leetcode原題,打家劫舍,簡單動態規劃,分析一下演算法複雜度。
二面,說一面面試官評價不錯,直接跳過了專案介紹與詢問,問中學時候參加資訊學競賽的經歷以及中興演算法大賽,最後環節是演算法題,消滅程序樹,hash表加佇列。
三面,專案介紹,什麼是一份好的程式碼,瞭解作業系統麼,做過哪些相關的工作,看過哪些相關的書籍。
3.小米
一面,詢問專案細節,RTOS與linux的區別,如果讓你寫一個RTOS你應該寫哪些功能,哪些是必須的,會用到哪些重要的資料結構,指標熟悉麼,和C++中的引用的區別,什麼時候用二級指標,C++中動態陣列vector是怎麼實現的,C語言中的設計模式瞭解麼,最後做了一個簡單的題,找出區間內乘積最大的兩個素數。
二面,基本是專案,沒啥印象了,然後問拿了哪些offer。
4.遠景
一面,專案細節,三次握手以及四次揮手,超時重傳演算法,如何給一個超大檔案進行排序,hash分桶;
二面,跟大疆三面差不多;
三面,跟hr聊天;
終面,會什麼,能做什麼,然後就是崗位介紹畫餅。
總結
重點還是程式碼基礎,也就是資料結構和演算法,和專案結合的程式碼的邏輯實現,CS基礎知識個人認為自己用的少的把面經看完即可,把自己做的專案細節融匯貫通,能抗住連環5問即可,答不上來避免強答,然後整理思路理清條理,平時多思考為什麼怎麼做有什麼效果,然後乾淨一點吐詞清晰即可,給自己一個好的面試體驗以及給面試官一個好的面試體驗,回答的時候儘量看著面試官(雖然有時候面試官在敲程式碼)。