小米面經-技術崗(編程小白如何進階)
先介紹下背景,我本科專業是硬件轉軟件方面,所以一開始算法基礎比較差,沒有做過系統設計,為了能得到好的面試機會,我一直都有努力準備,還在網上關註了各種能提高編程能力的攻略,我覺得打好基礎的前提是要找到優質的學習資源,這樣才能事半功倍,切忌在網上搜一些質量參差不齊的題去練習,有的連答案都不知道對不對,更別提對面試有幫助了。
我對比了幾家刷題的網站,最後選了Lintcode(http://www.lintcode.com/)。題目基本上涵蓋了所有IT公司面試會面到的算法題,推薦給想刷題的小夥伴們,建議用這個網站的夥伴們好好利用它的篩選功能,這樣做你的知識結構能得到系統的梳理,按照難度、還有算法數據結構的類別來源去做,還有按照公司的分類。這些標簽都清晰的標在每道題上,一目了然,話說一個IT屬性的刷題網站界面做的這麽美觀我也是很服氣。
扯遠了,接下來說說我當時是怎麽去小米面試的,作為一個米粉,給小米投遞簡歷的時候還是小小激動了下,沒想到第二天下午就收到了面試短信。
一面面試官看起來比較好說話,簡單自我介紹了一下,就開始問項目經歷中的細節,我覺得他問的很細,之前有面經上說小米會對項目經歷深挖,幸好我有做準備,看來項目經歷他們很重視啊。然後是寫代碼,矩形裏寫滿了數字,給一個寫了1的點,返回周圍用1能聯通區域的大小。我是用樹做的。還有一道題是兩個已序數組A,B,將兩個數組進行歸並,並將結果存放在數組B中,B足夠大。例如A={1,3,5},B={2,3,5},結果B={1,2,3,4,5,6}。這一題比較簡單。感覺一面溝通的挺順暢的。
沒多久接到了二面通知,我是比較愛糾結的一個人,通過一面反而又高興又患得患失,怕進不了小米,畢竟技術崗,而且我是後面自學提高的,不過後來想想自己這麽久以來刷的題也不是白刷的。二面的題目大概是這樣的,一個數組中有100w個整數,這些整數的範圍時1~99999,要求打印出重復的數字。這道題我當時沒答出來。然後是一道二分查找的題,在一定精度內求根號n,n>=1。
三面印象最深的是在白板上寫代碼,感覺很緊張,因為一舉一動都有人在看。三面太緊張了,忘了題目的細節了。。就記得問了鏈表的各種經典問題判斷環相交結點等,然後是判斷一個不規則多邊形一個點是在多邊形內還是外。還問了操作系統線程狀態圖線程進程區別虛擬內存cpu調度cache替換算法等。計算機網絡OSITCP/IP三次握手四次握手,我答了之後面試官又反復追問我,問的很細。
能到三面我已經很開心了,總體感覺,小米的技術崗很重視算法和思路。技術崗我投了很多,面試也參加了好幾波,之前一直在刷的Lintcode給了我很大的信心,面試時看到考察的題和知識點自己熟悉,那感覺超級棒,建議大家刷題還是要貴精不貴多,優質的算法題吃透一道可以頂你做很多道題了,那題要怎麽吃透呢?我的辦法可能比較笨,但是很有效!!就是對比優質的答案,去看自己差在哪裏,思考怎麽改進。為了找到好答案我也是搜羅了好久,最後一直反復用的就是下面這個這個查參考答案的網站了(http://www.jiuzhang.com/solutions),除了比較全以外,還因為它每道題代碼行數都是最少的,簡潔易懂,畢竟你如果代碼寫得太復雜了相信面試官也不會想和你共事的。裏面有一些答案真的不錯,我都直接當模板套到各種題目中,比如quick sort的答案。
因為我之前也參考了很多前輩的面經,所以也把自己記得的題寫下來分享給有需要的人,怕自己忘記求職路上做的努力,記錄下我的刷題和編程進階之路哈哈,攢人品攢人品!
小米面經-技術崗(編程小白如何進階)