2016年9月Android崗面試經歷-網易/騰訊
網易面試
網易的面試在川大華西校區附近的一家酒店,這家酒店的檔次好像比百度那家要高一些。豬廠的接待的妹子真是形象氣質俱佳,不像百度滿滿的”工程師文化“(一位面試官穿著拖鞋面我),讓人一下子想去豬廠了。網易的候面區有零食,不過基本沒幾個同學有心情吃那里的零食,候面區的人很少,氣氛有一些緊張和壓抑。
網易的面試效率極高,3個小時內就能決定你能不能入職網易,一面之后15分鐘內就會出二面的結果。二面后緊接著就是HR面。不過我也只是聽說,因為我一面就掛了。(- - ! ) 一面的時候,我把簡歷遞給面試官后,面試官就讓我做了自我介紹,我就簡要地介紹了一下自己的技術經歷。面試官著重看了一下我的簡歷,然后開始發問。
-
他問:我看你簡歷里對C++很熟?那你說一下C++運算符重載是如何實現的?(好像是這個問題,我有些記不清的) 我當時很郁悶,就說運算重載跟函數重載差不多,只不過函數名換成了 operator 運算符,我估計答得不對。他不置可否,就問了下一個。
-
他問:說一下C++的函數重載?我就說兩個函數的函數名相同,但是參數的個數和參數的類型不同。他又追問函數重載是如何實現的? 我就回答:編譯器在編譯時根據函數名和函數參數類型生成的符號名是不相同的,相當于一個函數的改名,這樣最后相同的函數名實際上名字是不相同的。
-
他問:C++如何引用C代碼?我說:用extern "C" { }。 他又追問: C++為什么要用extern "C"呢,直接引用為什么不行呢? 我就被問住了,就支支吾吾說有些C++可以直接引用C,我也不知道為什么。
-
他問:C++模板的原理是怎樣的?其實我也不是很清楚,憑著我在C++ Primer Plus里面學過的一點皮毛說:編譯器在編譯時對模板里面的類型做了類型替換,所以模板要放到頭文件里聲明。 面試官不太滿意,問:就這些?我也就答不出更多了。
-
他問:有沒有用過C++的smart_ptr?我老實說我沒用過智能指針。
-
他問:C++11的新特性都用過哪些?我當時一下子想不出太多,就一點點舉例子:lambda表達式、auto關鍵字、override關鍵字、=delete用法,當時一下子只想出這么幾個,估計在面試官心里嚴重減分。
-
他問:有沒有在項目中寫過JNI?我的回答同百度面試經歷里的那樣。
-
他問:TCP/IP協議棧還熟悉嗎?說一說吧。 這是我最想吐槽的一個問題,太寬泛也不知道從哪答起。就先說了說各個層次的協議,然后主動跟面試官說:這樣講太寬泛了,我都不知道從哪說起。 面試官愣了一下下,就說:那你就講講TCP協議的流量控制吧。 我就講了一下滑動窗口的機制。
-
他問:你平時都用過哪些設計模式? 這個問題我也不知道從哪答起,就慢慢列舉:觀察者模式、單例模式、構建者模式。其實其余的設計模式我也能說得出,只是沒在實戰中用過,不敢亂講。 面試官看我只能說出這么幾個設計模式,心里估計又減分了。
-
他問:我看你簡歷里對Linux也有一定了解? 我說:當日常系統用過幾個月。 他追問:日常管理都用過哪些命令呢? 我就說:top、grep那些,他笑了笑,沒有再追問。
-
他問:你在項目中怎樣進行應用的性能優化呢?我就還是著重說了一下內存方面的優化,回答同上一篇文章里提到的。
-
他問:Android里面的binder了解嗎,說一下對它的理解? 我說:binder用于跨進程通信,AIDL的底層實現就是基于binder的。然后說了Binder通信機制主要有Binder Client、Binder Server、ServerManager這幾個模塊起作用,ServerManager起到一個類似路由的作用。當時也只是草草講了講,面試官好像難得點了點頭。
-
他問:Java程序的內存結構? 我回答:程序計數器、本地方法棧、堆、虛擬機棧、方法區。他也沒說什么。
-
他問:Java的gc算法了解嗎?我就說是Mark&Sweep,統計GC Roots是否能引用到對象上。生成一個引用圖,找出其中的連通分量標記為可清除。等到gc發生的時候就清理這些對象。(后來想想我真想掐死自己,我自己心里很清楚引用鏈計數法,也清楚復制算法,新生代、老年代那些概念,這些我都做過功課,但是面試的時候有點累,不像引申開講,估計面試官也覺得我就這樣了)
-
高能來了,他問:你想干什么崗呢?我一下子暈了,跟他說是Android崗,他笑了笑,就說面試結束了。只留我在原地目瞪口呆,整個面試半個小時不到。
網易面試總結
網易面試讓人很郁悶,Android的知識點沒有問多少,主要都圍繞著C++對我瘋狂輸出傷害。也許我不該在簡歷里說我對C++熟悉吧。最后一面就掛了,我自己都搞不懂為什么掛了,算法題也沒有問,數據結構也沒有問,Java基礎不問,一問就是gc算法。網易的面試官比較”任性“,隨意出題,而且掛人的權力也很大,問的問題也很有深度。
騰訊面試
騰訊的面試跟網易在一家酒店。技術崗和非技術崗都在同一家酒店面,騰訊的筆試刷人不多,候面區很大,人很多,有點鬧哄哄的感覺。我在候面區等了大概大半個小時接到面試通知,就去了面試的房間。面試官先看了一下我的簡歷,估計也是對我所宣稱的”熟悉C++“很感興趣,一開口就開始問C++的問題。
-
他問:C++11的新特性用過哪些?我的回答同網易那次。
-
他問:C++多態的實現原理?我回答:通過虛函數實現多態。內存中的.rodata區有虛函數表,聲明了虛函數的對象中會有一個虛函數表指針指向這個虛函數表,虛函數表里面是函數指針指向實際的虛函數的實現。如果派生類里覆蓋了基類的虛函數,則虛函數表里對應的虛函數指針被重寫。
-
他問:C++中析構函數的析構順序?我說:先調用這個類的析構函數,在析構函數中析構它的成員,再析構這個的派生部分,再調用基類的析構函數,最后析構掉基類部分。 不知道答得對不對。
-
他問:STL里面map和set的內部實現呢?我就說是紅黑樹,然后他又問,還有其他的容器呢?我就說了其他的容器我猜測的實現方式。(這一塊其實不是很清楚,強行裝逼 - - !)
-
他讓我手寫代碼,先寫了一個反轉字符串,特意強調用C語言。我也沒傻到用C++的現成api。就寫了一個給他。
-
他讓我寫一個函數判斷一個樹是否是平衡二叉樹。我有點想哭,各種細節不表,這一題雖然簡單,但是我沒整出來,面試官很寬容,就換到了下一題。
-
他問了一個大數據處理的題,他問了從10億個數據中如何取出最大的1000個。面試官人挺好的,特意提醒內存裝不下。我就回答:10億條數據分成N個內存剛好能裝下的部分,然后用堆排序。他問能不能進一步優化?我一下子沒想出來,就換到了下一題。
接下來他看了一下我寫的應用,稱贊了幾句后,就開始問我項目用到的庫,看到了項目里用到很多圖片后,特意問了一下這么多圖片是如何進行性能優化的,我的回答同百度面試。
-
接下來他試著操作了一下,開始問我如何判斷用戶是否登錄的。我回答服務端生成一個token,客戶端保存這個token的。他追問用這個token登錄如何保證安全性?我回答https。他又追問我對Https的了解。我的回答同百度面試。
-
接下來他又看了一下app,問我視頻播放是怎樣實現的。我答:公司沒那么多錢買帶寬,用的是WebView內嵌的優酷的播放器。他繼續問應用在哪個平臺發布的 (= =)。我說應用寶,(我有點好奇我如果說放到其他平臺上他會追問什么)這個過程中有很多小插曲,比如他好幾次退不出視頻的播放,然后尷尬地說自己對Andriod不太熟悉。(我懷疑他是iOS工程師)。
-
他讓我寫代碼,給定內存上一段連續的數據,判斷第N位是不是1。這個好寫,就是位操作,我當時磨蹭了一會才寫出來,可能是人不在狀態吧。
-
然后他就說面完了,問我有沒有什么想問的,我就說,在校學生如果沒有項目如何提高。他就說他還是很看重項目的,如果一個學生真的對技術有熱情,會主動做一些項目的。
幾天后我接到騰訊的短信,通知我去參加二面。我想了半天,還是放棄了這一機會,難過了好久。
總結
-
面試其實是一個雙向了解的過程。我們在了解企業的風格,在了解企業想要什么樣的人,企業也在考察我們是怎樣的人。去面試的人不要在心理上把自己置于一個弱勢的地位,也不要把面試看做一場考試,好像面試官要使出各種招數把自己的破綻逼出來一樣,好的面試官會去積極發現我們的比較優秀的一面,甚至會去積極引導我們。
-
當我們面試的時候,應該時刻記住坐在我對面的人不了解我。我大腦里串聯起來的知識結構我知道它存在,但是坐在我對面的人卻不知道它存在。所以在回答面試官的問題的時候,不要點到即止,要勇于從深度和廣度上進行拓展,讓面試官看到的你的成體系的知識結構是再好不過了。 很多時候并不是你把面試官的問題答對了就能通過面試。
-
以誠相待是最省力的套路。不知道的問題不要強答,不確定的問題也不要答得那么堅決,沒有寫過某種類型的代碼就是沒有寫過,不要因為擔心面試官掛你而欺騙面試官,面試官是很喜歡追問的,一追問就知道你說沒說實話。
-
積極準備,認真對待。不要在簡歷上有錯別字,一面的問題到了二面可能還會問。所以一面答不出來的問題回去了要好好查一查。很多面試題也是老套路了,面試前要認真準備,很多時候面試官問的題目都能事先命中。
來自:http://www.jianshu.com/p/f8ccb3ce19b5