秋招是每個在校學生都要經歷的一個階段。本篇文章記錄了自己的秋招歷程。秋招投遞公司23家,簡歷被刷1家。筆試/測評掛掉3家。至今無消息的8家。獲得Offer的公司有小米,兆易創新,全志科技,浙江大華,海格通信,京信通信,景嘉微電子,廣州朗國電子,北京華大電子,中國長城科技集團。已簽約浙江大華。最后收獲了一個滿意的Offer。前事不忘,后事之師。希望自己總結的這些內容能對后面准備秋招的同學有所幫助!
1. 自我介紹
本碩雙非,本科電子信息工程,碩士電子與通信工程。導師申請的項目中有一部分需要用Stm32實現,所以自己在碩士期間接觸Stm32比較多。當時也考慮到,如果只會Stm32,找工作可能會比較吃力。而自己對嵌入式底層的內容也比較感興趣。所以,在研二的時候每天花一點時間來學習下驅動開發,以后找工作打算從事底層驅動開發相關的內容。
2. 秋招准備
2.1 Linux驅動
在2019年12月的時候,基本就把韋東山老師的第二期課程學習了一遍了,雖然在學習過程中有很多不明白的,但也堅持看了一遍。把有疑問的地方記錄了下來,打算后面再慢慢的去深入研究。
韋東山老師講的課程確實很好,但是對於基礎不太好的可能會比較吃力,很容易勸退。當時思考了下,自己為什么聽不懂呢,哪里有欠缺?我們對自己應該有一個清晰的認識,我從Stm32轉驅動開發,優勢就是我對於基本的硬件原理都比較熟悉,欠缺的是對於Arm架構的深入了解,操作系統和計算機組成原理的基本知識。所以,這個時候發現自己聽不懂的情況下,有些問題搞不明白,先不要深究,后面可以慢慢補。
今年疫情在家,在3月份的時候,對照自己之前的學習筆記和遺留的疑問,把之前學過的內容又看了下,當看第二遍的時候,對於很多問題也可以想清楚了。
考慮到驅動這塊沒有做過具體的項目,我就對照着韋東山老師的移植Uboot的視頻,自己移植了一遍。(S3C2440移植uboot之編譯燒寫uboot)自己對於Uboot的啟動流程也就很熟悉了。超詳細分析Bootloader(Uboot)到內核的啟動流程(萬字長文!)既然打算把這個寫在簡歷上,就要把這個啟動流程搞得特別明白,有些基本的源碼也是要知道的(比如,如何初始化NAND FLASH,時鍾如何配置的)。而且,寫在簡歷上的面試官一定會問的。
2.2 Arm體系與架構
關於Arm的體系架構這部分是一定要看的。推薦一本書,杜春雷老師寫的《ARM體系結構與編程》,這本書其實就是ARMV7開發手冊的中文版,很多內容都是手冊里面的。書的話不一定都要看,學習過程中,哪里不了解再去查書,效果可能會更好。
2.3 數據結構與算法分析
數據結構與算法的內容時秋招中的重中之重,筆試必考,面試必考。所以這部分要好好准備。
數據結構的話本科也沒學過。4月份的時候開始在家,從基本的鏈表,二叉樹,堆,隊列,字符串,排序算法,查找算法等基礎內容學起。當時參考的資料是在網上找的一本PDF。里面包含了基本數據結構的算法的實現。對着PDF資料邊看邊理解,自己動手去實現了一遍。剛開始學習數據結構的內容,一定要多畫圖,像鏈表的內容,不畫圖有時候可能不太好理解指針是如何指向的。總之要找到適合自己的學習方式。
圖論的內容比較難,如果不打比賽,可以直接跳過(只針對嵌入式開發的同學)。還有字符串的KMP算法也比較難理解(其實刷題Leetcode題目之后就會發現,字符串匹配的題目解法很多,不一定要KMP)。也可以先不看。
關於我寫的一些數據結構的內容,可以在數據結構與算法分析專欄中看到。大家可以參考下。
此外我還整理了下數據結構中比較重要的內容,在面試中一定要達到可以在白紙上寫的水平。具體如下圖所示。
在學習完基本的數據結構與算法的內容之后,接下來就是刷題了。我自己是在Leetcode上刷的題目。由於時間有限,我刷題一開始的策略是按照 題目類型 去刷題(參考了知乎各位大佬的刷題策略),主要內容集中在了鏈表,二叉樹,字符串,數組這四個部分。把這部幾個部分出現頻率高的題目都總結了出來。各個部分頻率總結鏈接:
【leetcode】高頻題目整理_所有題目匯總篇( High Frequency Problems, All Problems )
刷題過程中會遇到一些特定算法的題目,比如滑動窗口,雙指針,動態規划等。遇到這種題目,能解決的先解決掉,不能解決的后面可以按照算法類型統一解決。
最后,在筆試的時候,很多公司的大題的筆試系統其實並不是像Leetcode一樣只寫個子函數就行了,而是和ACM競賽的類型一樣,需要自己處理輸入輸出。這部分一定要提前練習。如果不熟悉系統,筆試的時候雖然有思路,但是也寫不出來。建議提前熟悉下輸入輸出。
2.4 C語言
C語言這部分的話,可以上網搜索一些面試中經常問到的內容。這里也推薦一本書,何昊老師寫的《程序員面試筆試寶典第三版》(不要找錯了)。這本書是針對C/C++程序員的,主要介紹了面試過程中經常問到的問題,整體的內容偏向底層,問題解釋的也比較清楚。但是有些地方有錯誤,看的時候要注意。可以加書后面的QQ群,向作者反饋錯誤。
C++語言,平常用得少,我這部分就沒准備,給不了大家意見。在面試中好幾次問到我C++的指針引用之類的基礎知識,只能和面試官說C++內容用得少,不熟悉。不過,這並不會成為面試官最后是否要你的決定性因素(只針對嵌入式底層來說)。
2.5 操作系統&計組
這塊是我的軟肋,好多概念不太懂。不過在學習驅動的過程中,我把這些概念也都整理了一些。具體文章可以看下面的內容。
你真的懂Linux內核中的阻塞和異步通知機制嗎?(花了五天整理,牆裂推薦!)
關於操作系統的一些知識,同樣是整理了網上常見的一些面試題目。這份嵌入式軟件開發知識點總結一共有13W字,涵蓋了Linux,C語言,Arm體系與架構,操作系統,計算機組成原理等方方面面的知識。我在秋招過程中問到的問題,在里面基本都可以找到。這份資料給了我很大幫助。資料放在了公眾號【嵌入式與Linux那些事】中,大家可以關注后回復“秋招大禮包”免費自取。
2.6 項目經驗
如果自己做過一些項目的話,建議寫兩到三個自己做過的項目,主要從以下幾個方面介紹:
項目名稱:基於XXX的XXX
個人角色:項目負責人/模塊負責人
起止時間:2020.3~2020.6
項目描述:主要介紹項目主要內容,4句話即可。
編程語言和環境:gcc3.4.2,Ubuntu16.04,S3C2440開發板
負責事宜:寫自己做了哪些內容,第一,XXXX;第二,XXXX;第三,XXX;
如果沒有做過項目,可以去找一些開源的項目做一下(韋東山老師第三期的視頻中有相關項目的介紹),比如移植Uboot,數碼相框等(韋老師最新的IMX6ULL開發板已經有了更加高大上的項目,也可以寫在簡歷中)。但是不要找那種爛大街的,比如XXX管理系統,五子棋,貪吃蛇。說實話,這些東西再怎么做,一聽這個名字面試官就會沒興趣了。
我們也可以適當“包裝”自己的項目,我這個項目是導師申請的國家自然科學基金項目(或者XX省科技重大專項)的一部分,這個項目主要是完成XX技術的攻關。我這個項目是和XX部隊(XX高校)合作的項目,我們負責XX部分。這么一寫的話“檔次”是不是就上去了呢?但是這里不是讓大家在簡歷中去造假,在簡歷中造假是不能接受的,這是一個人基本的道德底線!
自己寫上去的項目一定要搞清楚,弄得明明白白。有好幾次面試中,面試官讓我講你做的這個東西原理是什么。由於原理比較復雜,所以面試中,我都是邊畫圖邊講,涉及到的公式還要進行推導,為什么這樣做,都得給面試官講清楚。如果他沒有聽懂,那就是我們沒有講清楚。
說了這么多,其實主要就是弄清楚這幾個問題:為什么做這個項目?一共幾個人做?你是什么角色?你做了哪些部分?你認為最難得地方是什么?如何解決的?最后收獲是什么?。
事實上,我們所做的東西是什么,面試官並不太在意,畢竟公司做的東西比我們要復雜的多,對比公司的產品來說,我們的簡直太low了,我們所做的可能只是個“玩具”而已。面試官主要考察的就是項目的真實性和我們的表達能力。
也可以參考下其他人整理的
如何在面試中介紹自己的項目經驗
2.7 其他
至於其他內容,主要有以下幾個方面吧。
1.不要放過任何一次和面試官聊天的機會(發哥和我說的,受益匪淺)。
今年疫情在家的時候,請教了發哥關於校招找一份什么樣的工作,嵌入式軟件工程師的職業規划等問題,非常感謝發哥在晚上十點多手打了1000多字解答我的疑惑。特別強調了,在校生要抓住校招的機會,提前准備,多和面試官聊聊天。和發哥聊完后自己對於整個行業有了更清楚的認識,謝謝發哥!
多面試!多面試!多面試!重要的話說三遍!看到有合適的公司要盡早投遞,不要到后面沒有HC了。
比如我投遞華為是在9.10號。筆試在9.14。雖然筆試過了,測評也過了。但是這個時候其實有點晚了(也可能和投遞的部門有關系)。部門的HR和我說,他們第一批的面試已經結束了,領導要求這段時間要形成閉環。第二批還會有一些HC,但是在10月之后了,而且名額也不會太多了。相反,投遞其他部門的同學,在9.19-9.24這周都收到了面試通知。
其剛開始前幾次面試肯定會有些緊張,不知所措。但是當你面了三五場之后,你就會發現,面試官問的東西都是差不多的。我在9月中下旬,最多的一天面了4場。有句話說得好,吹牛X吹多了,后面也就很自然了。
2.回答問題一定要有邏輯性!先拋出結論,再分要點回答。
比如,面試官問你平常你是如何學習專業知識的?以什么樣的方式?
答:學習的形式主要分為兩種:一種是在學習的過程中解決疑問,以解決問題為導向。比如,在移植Uboot的過程中,我會想到為什么要關閉I-Cache,D-Cache等,關閉中斷等(這里可以拋出這些問題,以防后面會問),遇到這些問題我就會記錄下來,然后上網去查資料。在解決這些問題的過程中,可能會遇到其他的問題,繼續查找相關資料,直到最后都搞清了。第二種就是系統的學習,如果有比較充足的時間,我會去拿着像Arm體系和架構,深入理解計算機系統這些書去一點一點的讀。去理解這些內容。以上就是我日常的一個學習方式。
3.自我介紹。
自我介紹是面試中必不可少的部分。面試官一般會利用自我介紹的時間來瀏覽下你的簡歷。建議准備一個一分鍾的自我介紹和三分鍾的自我介紹。我在面試小米的時候,面試官直接打斷我,說自我介紹簡單一點,要不后面沒有時間寫代碼了。
我的自我介紹主要是三部分,第一部分是開場白,名字,學校,專業,應聘崗位,應聘該崗位的原因。第二部分是項目經驗的簡單介紹,這里一定要簡潔,主要說下自己做了那些東西。第三部分是學習能力的介紹,這部分是為了拋出自己寫博客的情況,有技術博客並且博客的內容比較充實的話,在面試中確實是個加分項。
4.簡歷填寫
投遞簡歷時常常需要在各個網站填寫自己的個人信息。建議使用如下工具,可以方便的在各個網站自動識別填充所需內容。當然,也有許多識別不了的。這種就沒辦法了。當然,如果大家有其他工具也可以推薦!
5.最后要知道一些知識
3. 書籍推薦
C語言
C Primer Plus,C缺陷和陷阱,C和指針,C專家編程
數據結構
大話數據結構,數據結構與算法描述-C語言描述。
硬件原理
Arm體系結構與編程,Armv7/Armv9數據手冊。
Linux驅動
嵌入式Linux應用開發完全手冊,Linux設備驅動開發詳解,Linux設備驅動程序
Linux應用編程
Unix環境高級編程,Unix環境網絡編程
計算機基礎
深入理解計算機系統,現代操作系統,計算機組成與設計:硬件軟件接口,計算機體系結構:量化研究方法
Linux內核
Linux內核完全注釋(麻雀雖小五臟俱全),Linux內核設計與實現,Linux內核源代碼情景分析
以上書籍加粗的為重點推薦。如果時間不充裕,可以當作工具書來查詢。當然,有時間還是建議認真讀下。
需要電子書的可以在公眾號【嵌入式與Linux那些事】回復“電子書”領取,或者點擊右下角加QQ群,群里也有整理的相關資料。
4. 未來展望
1.接下來的時間准備下大論文的內容,之前投的第二篇小論文有了審稿意見,只是沒改而已,今年過年之前投出去吧。保證自己順利畢業!
2.補充下操作系統和計算機組成原理的知識。主要看下《深入理解計算機系統》 《現代操作系統》這兩本書把,每周把看過的東西總結下,照常輸出一篇博客。這部分是最主要的內容,把基礎打扎實了。
3.操作系統和計算機組成原理的知識形成博客專欄,堅持!
4.堅持鍛煉身體,每周視天氣情況而定,跑步2~3次,周末打打球。
5.期待入職大華,即將開啟一段新的旅程,充滿了未知和挑戰,要繼續加油鴨!
5. 總結
秋招結束了,今年感覺好難,好多公司縮招。在九月初有段時間,心情很低落,一直在懷疑自己。特別是投遞簡歷后,漫長的等待。每天都會查看好幾遍郵箱,生怕錯過了重要的通知。心情不好的時候,我就會去操場邊聽音樂邊跑步,特別喜歡大汗淋漓的感覺。跑完之后整個人的精神狀態會好很多。調整好心態,繼續看面經,刷題,總結基礎知識!
綜合考慮了下,最后選擇了浙江大華,主要原因是給了一個讓我無法拒絕的理由。自己也詢問了在里面的師兄師姐,他們說還可以,加班的話沒有網上說的那么可怕。自己提前做完的話,是可以走的。而且組內打個招呼,有急事也可以請假。加班一般到八點半,對於自己來說其實也可以接受(現在不加班的公司太少了)。至於雙休的話,是看部門,不忙的話雙休都有,忙的話大小周休息。個人還算比較滿意。
文中提到的資料都已經整理為PDF文檔,關注公眾號【嵌入式與Linux那些事】后“秋招大禮包”免費領取。
6. 致謝
剛開始拿到Offer后不知道該如何抉擇,父母那邊倒是沒有太大的問題,說哪里工作合適就去哪里。很感謝我的父母可以支持我。當時咨詢了發哥,逸珺哥,平哥,朱老師,豆豆姐等,還有在投遞簡歷前也請教了下肖遙哥。非常感謝這些前輩能給我建議!
2020年疫情在家期間,自己對於找一份什么樣的工作並沒有明確的規划。於是咨詢了發哥關於校招,職業發展的問題。發哥大晚上的手打了1000多字回復我,特別強調要重視校招,多和面試官聊天,把握機會。在職業發展規划上,發哥向我介紹了底層驅動是做什么的,在不同的公司扮演什么角色,以及未來的晉升通道等。應聘的時候,要多些自信,努力把握好人生的選擇點,在沒有做選擇前,不要把話說死,把方向定死。很多校招企業更看重的是可培養性,進入企業后都是按照一張白紙來培養的。
發哥:公眾號【嵌入式與Linux】。嵌入式Linux公眾號號主發哥,平時不僅分享技術文章,還會給嵌入式入門的同學們做職業分享和討論,當然了,也有籃球和曬娃。發哥技術也比較猛,開始的STC89C51,AVR,STM32,到現在的ARM7,ARM9,ARM11,從裸奔到嵌入式Linux和安卓(Android)系統。之前在一家大廠工作,后面辭掉高薪,出來創業。除了技術比較牛之外,還喜歡打籃球,有機會我要去深圳找他單挑。
投簡歷前,咨詢了下肖遙哥在校招中是選擇崗位還是選擇公司的問題。肖遙哥說,崗位重要,再好的公司如果做的不是你喜歡的擅長的,那么你可能在這家公司也不會長久,不管做那個方向,做那個行業,還是在一個方面要專注,堅持。
肖遙哥:公眾號【技術讓夢想更偉大】力爭原創,內容涵蓋嵌入式Linux、C/C++/Qt、算法、數據結構、職場感悟等方向。這里有學習路線、經驗心得、面試寶典、源碼解析、技術精選及經典資料等。號主李肖遙,一個認真做技術的職場老鳥,孵化編程,樂於分享。講原理,摳細節,究根源。用心寫好每一篇文章,專注每一個細節,期待與您一起成長。
在選擇Offer的時候也咨詢了下逸珺哥,待遇差不多的情況下,考慮公司發展前景以及地域,但要優先考慮公司行業以及前景。也要考慮以后定居等問題,比如是否能落戶,這個和以后孩子的教育也有些關系。但是要找到興趣,待遇,地點等各方面都能滿足的工作還是有點難度的。
逸珺哥:公眾號【嵌入式客棧】,號主逸珺,高級嵌入式軟件工程師,從事嵌入式軟硬件開發多年,主要分享Linux系統構建、Linux驅動開發、實戰信號處理算法(數字濾波器、譜分析等)、單片機技術、AIOT學習筆記等相關技術內容。
小平哥說,要注意下你應聘的職位和你進去從事的工作內容是否是一樣的。在公司如果從事的方向正好是公司的主要業務,你會學到更多的東西。考慮定居的問題,是干幾年回老家,還是找個宜居的城市呢?一線城市的壓力是會大一點,但是機會也會多一點。如果回老家或者周邊,公司的規模和待遇等就會比一線城市差一點。
小平哥:公眾號【txp玩Linux】。從事過linux應用和c++服務器開發;如果您不知如何准備面試、以及學習路線的迷茫等問題,都可以來找我,一一幫您解答,歡迎大家來“騷擾”我!
朱老師說,你擔心的地域問題和年齡問題都不是事,完全可以干幾年再跳走。而且,你要相信個人機緣就是最好的安排。這種問題沒有標准答案,紫光存在不確定性,對於目前的來說,還是先落袋為安吧。杭州也是個不錯的城市,工作機會也比較多,完全可以支持你未來三到五年的發展。芯片原廠也不一定是最好的,第一份工作只要在質量上沒有問題,后面還是容易跳槽的。
豆豆姐,第一份工作,跟對人很重要。大公司有成熟的培養體系。剛開始工作,左右對比也很正常。工作本身,無論哪個崗位都能歷練自己。不是賺到,就是學到,關乎己心。工作無非也是借境修心。自己私下仔細一想,不管是工作還是生活,確實是這么個道理,很贊!
下一篇文章將會分享小米,兆易創新等公司的面經總結,歡迎關注我的公眾號,第一時間獲取更新。
養成習慣,先贊后看!如果覺得寫的不錯,歡迎關注,點贊,在看,謝謝!