單片機程序員的面試經驗

學識都 人氣:1.5W

需要掌握哪些技能

單片機程序員的面試經驗

● 需要了解並使用過幾款常見的單片機。

● 需要熟悉常見的硬件接口譬如 UART 、SPI 、I2C

● 需要了解一些傳感器相關的知識,譬如聲、光、磁、溫、慣性器件

● 需要能看懂 datasheet 讀懂芯片的操作規範,就是用代碼對傳感器的寄存器進行配置

● 能讀懂原理圖、看懂 PCB

● 會使用示波器、會分析電路

實際面試考什麼

● C語言基礎知識,算法水題

● 聊天,聊項目、聊如何實現的

工作中實際用什麼

我面試成功的機會都是來源於這些主要做單片機的公司,而且都是小公司,進入的團隊也小,做的東西也是兩三個人就可以搞定的事情。雖然我自認爲寫程序還可以,但是每次答算法水題都答不好,讓我着實比較鬱悶,雖然近期已經補充了不少相關知識了,但是我還是感覺如果一直做這些單片機嵌入式的項目,我可能永遠都用不到這些算法知識。

很早以前我就知道這些,計算機數據結構及算法之於單片機程序開發就是水月鏡花。而另外一種意義上的算法倒是很實用,比如早在我畢業之前就買過一本北航出的《嵌入式系統軟件設計中的常用算法》這本算是很使用的一本工具書,很多方法在實際的嵌入式軟件開發當中十分有效,我把這一類算法歸爲DSP,也就是數字信號處理,要處理單片機中的數據都是數字信號的數據,要對這些數據分析總結,處理之後是從傳感器得到的信息,之後再使用控制器或通訊器對外界進行反饋

一點點感悟

我從事單片機開發這些年就是用這些技術一點點的做着一個又一個的不靠譜的'項目,現在想想我一直在磨練自己的技術,然後絲毫沒有用在成型的產品上,那麼我做這些到底有什麼用呢?之前使用PIC單片機做的電能檢測器件可能小批量的生產了一些,但是遠沒有成爲一個值得我驕傲的產品。每一次我都是在找公司的原因,其實我真正的傾注了多少心血在這些產品上面呢?每一次我都是把做這些東西僅僅當作一個工作來做,雖然我的技術不斷的在進步,處理一些技術難點越來越遊刃有餘,但是我早已失去了當初在學校時的那份熱情。我開始在業餘學習一些其他的技術,只把手中做的工作當作是一份餬口的工作,我覺得自己做的東西是沒什麼技術含量的,而且有些東西是慢慢打磨的,我倒不如趁着現在大好年華投身更豐富的技術海洋之中。久而久之,當初的那份赤成之心早已不在,我變得只是追逐工資增長的不斷跳槽。而最近一年的嵌入式 Linux 工作經歷也確實讓我學習到了很多在操作系統下編程的技能,接觸了以前不曾用到的文件編程、網絡編程、也開始認真的研究計算機算法,現在我發現之前很多在單片機之下我迫切想使用的技術也不過如此。還記得我曾經想要自己打造一款實時操作系統。想要在單片機下實現多線程或是協程,有了操作系統這些反而是簡單的,沒有之前的程序寫的複雜了。而這些簡單的實現了之前在單片機上的複雜之後的事情,又有新的複雜的事情。有了多線程編程,要關注的同步和互斥的問題一點不比在單片機下要同時做很多事情簡單。

還有視音頻的流式傳輸,需要 buffer 的緩衝,處理起來也需要十分小心。而單片機開發更需要關注的是物理世界、電氣世界的各種特性,需要將模擬的連續的信號變成數字的離散的數據,實時性強、過程簡單的順序結構。

一點點建議

● 還是認清自己最重要,不要被過去從事的技術束縛住,其實我現在看到很多以前做軟件的人也在嘗試單片機硬件編程,直接面對物理世界的反饋是一種很奇妙的感覺,相比於抽象的要處理數據庫信息,處理真實世界的各種數據也許在某種意義上更加有趣,更加給人一種踏實的感覺。

● 每個人都可以不斷學習新的東西,作爲一個近二十年才普遍在人類社會興起的工種,我們有太多要學習和探索的事情要做,身邊少有工作二十年的工程師是因爲這個行業還沒有完全發展起來,因此絕對不要被別人軟件技術是青春飯的胡話給矇蔽。做一個堅持學習的人是值得別人尊敬的。

● 單片機程序員也是軟件工程師的一種,做的事情一樣有用而且有趣,做好了也能賺到不錯的薪水,在其他軟件程序員來說可能被看作是做硬件的,做底層的。但我理解的差別可能比寫 java 和 python 的區別差不多大吧。反正沒有一輩子不成長、不學習的軟件工程師,除非他們轉去做“管理”這樣“高端”的職位去了。