我是如何準備技術面試的

Lastdays發表於2016-05-17

目前拿到的知名公司的offer是騰訊和新美大(大眾點評、美團)。一直想寫一篇面經分享給大家,但因為一些瑣碎的事情,就一直耽誤著。

今天就特意拿出一些時間去寫它。很多人都分享了很多的面經,而且還有好多面試題目在很多社群都有相關的資料。很多面試題也都有相關的解析,但是僅僅是刷這些面試題其實並不一定可以找到自己心儀的工作。下面就主要介紹下我是如何在面試前做準備工作的。

我經歷的一些面試

因為大三了,從今年3月份開始,自己開始找工作,開始也不明白該怎麼做,就簡單寫了一了一份簡歷,簡歷上就是一些自己相關的學習經歷。最開始的時候選擇了一些自己覺得可以的小公司,並且獲得了一些面試機會,第一次面試很緊張,不知道該跟面試官說什麼,不知道該如何去介紹自己,不知道該怎麼做,就是傻傻的一頓被問,正如你所想的,我不可能所有的問題答的都很好,因為基本上面試官是想到什麼就問什麼(他可能是準備好的問題,但是我真的覺得我的第一次面試是他想到什麼就問什麼)。

面試結束後,我就好好總結了下,然後又開始了第二家。這麼經歷了幾次就發現,自己不在那麼緊張了,自己開始佔據主動權,引領著面試官走。所以現在回憶一下,多面一些還是能增長很多經驗的。不管是你表達能力的提升,我所經歷的面試官人都非常好,開始可能會很緊張,但是後來感覺就像是在聊天,兩個志同道合的人聊著同一個話題,從這個聊天的過程當中也收穫了很多自己不知道的東西。

新美大面試經歷

美大的面試官一定要點個贊,其實面過以後會發現,不要很緊張什麼。美大的面試官很隨和具體的面試問題就不說了,基本上一面的時候還是很關注基礎的,然後最後的20分鐘左右都是聊一些經驗,我當時是說起了一個話題,因為開始的時候聊一些基礎,然後就是聊到我的專案中的圖片的動態快取方案,就一直在聊這個,最後又提起了元件化的開發方案,我們最後就是一直在聊這個話題。一面就最後接到通知就過了。

二面的時候,就是視訊面,在一個平臺上,可以視訊,並且我在那個平臺上寫的程式碼對方也是可以看見,給大家一個建議,別人看你寫程式碼你可能會很緊張,但是不要太慌張,我感覺正常發揮就好了,對方主要還是想看看的程式碼的風格怎麼樣?是不是很規範,註釋啊,還有一些變數的命名啊,這些是否很規範。另一個就是想看大家的處理能力,其實給你的題目都不是很難,都是一些簡單的基礎的東西,不會說讓你現場寫出一個什麼很麻煩的佈局,很牛的特效的。

這次面試大概經歷了一個小時左右,最後一部分時間還聊了很多生活上的事情。例如就是來到美大後準備想學一些什麼啊?你對美大哪一方面的技術很感興趣啊?就是這些,喜歡什麼就聊一些什麼就可以了。整體的兩輪面試還是學到很多東西的,畢竟現在在學校不知道外面的公司是什麼樣的,通過面試官還是能瞭解到外面很多東西的。

騰訊的面試經歷

騰訊的面試就是自己經歷了騰訊的筆試,然後一面,二面,最後HR面,然後等訊息,最後得到offer。筆試的話基本上就是一些基礎知識,像資料結構,計算機組成原理,作業系統,計算機網路這些。上課認真聽聽,筆試前刷一些題目問題還是不大的。

騰訊一面,主要就是聊一些基礎,我是去面移動客戶端,但是整個面試移動相關的問題很少,主要還是在圍繞著一些基礎再聊。如果你想拿到騰訊的offer,我覺得基礎是非常重要的。面試題的話,我覺得這個其實沒什麼可提的,因為這些題目都是不固定的,面試官主要還是在圍繞著你的簡歷再跟你聊,你的簡歷中寫到你的APP中涉及過下載,那麼網路必問,問什麼?我覺得TCP,HTTP都是值得問的。有一本書叫《程式設計師的自我修養》我覺得這本書有時間還是很需要去讀一下的。我見到過很多人吐槽說,我是去面iOS,面試我的竟然是一個Android的,從我個人的角度來看,無論是iOS,還是Android在很多的設計思想上面還是有很多相通的地方的。說出你的想法就可以了。我個人覺得思想還是很重要的。

騰訊二面給我最大的印象就是面試官說的一句話,挑一個你覺得可以的專案,然後我們聊一些東西。從這句話我感覺很多人都能夠感覺出來,二面主要還是聊你的,一定給有一個專案才行。並且好好去準備這個東西。同樣沒有什麼具體的問題,每個人的專案都不一樣,實現方案也不可能完全一樣。所以聊的東西也就不可能完全一樣。二面什麼太多的經驗,主要還是認真的去準備一個專案。

面試前的準備

這是我最想跟大家聊的東西,因為關於面試前的準備,或者是準備什麼還是很有必要重點分享下的。

很多人面試的時候不知道說什麼,同樣很多人都說要引領著面試官,不要被面試官引領。但是該怎麼做呢?難道我們不讓面試官說話?我們給面試官規定題目?這都是不現實的,對吧?但是通過一些準備,還是可以實現讓我們去給面試官”規定題目”的,怎麼做?舉一些簡單的例子

例如:你的簡歷當中寫到自己對Socket有一些瞭解,那麼很自然的就會聊到TCP,你提前好好準備下,你自己都是可以預知的,當面試官問聽到你Socket的時候,自然就會走到TCP上。如何準備?很多人上網上查了一些,TCP很經典的就是連線的三次握手,斷開時的四次揮手。你也簡單的查了一下三次握手什麼樣,四次揮手什麼樣,但是這僅僅就夠了嗎?我們為什麼不在往更深層去準備下呢?例如連線為什麼是三次,斷開為什麼是四次?連線如果兩次會發生什麼?三次握手中總共傳送了三個包,那麼僅僅就是做了三個作用嗎?更往深處可能會涉及到TCP的頭部結構,以及TCP連線,斷開時SYN,FIN,ACK的有效值設定又是什麼樣的?我相信你把這些都說出來肯定是會被加分的。當然你想很好的說出來不是說你面試前查查就可以了,肯定是需要去好好的去理解的。這也就是我說的面試前的準備,不要為了面試而面試,而是要為了面試而去學習,提升自己。

我可以再舉個簡單的例子,關於圖片快取這個東西,在iOS,Android中有很多動態的圖片快取解決方案。你的簡中如果寫到做過相關的操作,我覺得這個東西還是很值得去問的。明知道會被問,面試前肯定要好好準備下啊。準備的過程當中我覺得需要總結出自己的方案中優點有哪些,缺點有哪些,針對你的缺點你準備怎麼做,或者說你可以針對你知道的一些知名的開源庫是如何解決的,你有什麼可以借鑑的,這樣我感覺你肯定是要被加分的,最起碼你是閱讀過開源庫,並且認真的去思考過。

我就見過有人被問到如何做圖片快取的時候,他就簡單的說了一句通過URL下載圖片然後儲存起來,以便利用。這個話題當中有很多東西都是可以去值得聊的,就說這麼一句話,我覺得面試官不可能得到他想要的答案,他沒有得到答案,肯定是要去接著問你的。這個時候你就會顯著的很被動,接下來就是要被面試官引領著走了。有人會問有什麼可以聊的?

我舉一些簡單的例子,例如圖片的快取方案肯定是要涉及到圖片的下載問題,既然是下載,那麼下載進度資訊的回撥你怎麼做的?下載失敗怎麼辦?下載完成的回撥怎麼做的?下載肯定涉及到多執行緒的下載,那麼這些執行緒你是如果管理的?執行緒管理器的結構又是什麼樣的?甚至是一個URL下載連線正在被下載,另一個地方發起了一個相同URL的下載,這種情況我認為為了節省資源不應該在新開一個執行緒去下載,那麼這種情況你有做處理嗎?如何做的?其實有很多值得考慮的問題和值得去說的。做快取,你做的是磁碟快取啊?還是記憶體快取?還是兩者都有?是否支援磁碟空間大小的設定,圖片有效期的設定如何做的,圖片的清理工作,我相信無論在iOS還是Android那些知名的開源庫不可能就是簡單的有一個清理方案,肯定是支援部分清理,或者全部清理,部分清理的依據又是什麼?例如依據圖片的有效期來做清理,過了我們設定的有效期,這個時候我們就需要去清理掉這部分內容。另外如果如果所有快取檔案的總大小超過這一大小,則會按照檔案最後修改時間的逆序,以每次一半的遞迴來移除那些過早的檔案,直到快取的實際大小小於我們設定的最大使用空間。這些東西都是有很多值得去說的,當然你只要去感悟的越深,理解的越深,就會體會的越深,表達的就會越好。

剛剛提到的東西我覺得聊個20分鐘還是很容易的,因為這個裡面存在的東西和值得注意的地方太多了。準備好一個專案,找出你專案中的一個亮點,然後認真的去總結,並且看一些別人的方案,看看有哪些你沒有的,你沒有的就是你方案的缺陷,看看該怎麼解決。我覺得,缺陷還是很重要的,沒有什麼很完美的解決方案,方案好也僅僅是針對滿足了現在的所有業務需求而談的。針對你的業務需求,談出你的設計理念。專案不用多,認真的去總結一個就可以了。關鍵是很多人做了很多專案,但是卻沒有認真的去體會總結一個,做了也是白做,僅僅是程式碼熟練度增加了而已。

後話

不要為了面試而面試,要為了提高而學習,提高了自然也就能從容的面對知名公司的面試了。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

我是如何準備技術面試的 我是如何準備技術面試的

相關文章