之前寫了一篇2016年9月Android崗面試經(jīng)歷-百度,洋洋灑灑寫了好多牵敷,本來打算把3次面試經(jīng)歷寫在一篇文章里的胡岔,之前那篇文章的字?jǐn)?shù)太多了,不如分成兩篇枷餐。如果這篇文章有讀者的話姐军,大家可以去看看前一篇文章。
網(wǎng)易面試
網(wǎng)易的面試在川大華西校區(qū)附近的一家酒店尖淘,這家酒店的檔次好像比百度那家要高一些奕锌。豬廠的接待的妹子真是形象氣質(zhì)俱佳,不像百度滿滿的”工程師文化“(一位面試官穿著拖鞋面我)村生,讓人一下子想去豬廠了惊暴。網(wǎng)易的候面區(qū)有零食,不過基本沒幾個(gè)同學(xué)有心情吃那里的零食趁桃,候面區(qū)的人很少辽话,氣氛有一些緊張和壓抑。
網(wǎng)易的面試效率極高卫病,3個(gè)小時(shí)內(nèi)就能決定你能不能入職網(wǎng)易油啤,一面之后15分鐘內(nèi)就會(huì)出二面的結(jié)果。二面后緊接著就是HR面蟀苛。不過我也只是聽說益咬,因?yàn)槲乙幻婢蛼炝恕#? - ! ) 一面的時(shí)候帜平,我把簡歷遞給面試官后幽告,面試官就讓我做了自我介紹,我就簡要地介紹了一下自己的技術(shù)經(jīng)歷裆甩。面試官著重看了一下我的簡歷冗锁,然后開始發(fā)問。
他問:我看你簡歷里對C++很熟嗤栓?那你說一下C++運(yùn)算符重載是如何實(shí)現(xiàn)的冻河?(好像是這個(gè)問題,我有些記不清的) 我當(dāng)時(shí)很郁悶茉帅,就說運(yùn)算重載跟函數(shù)重載差不多叨叙,只不過函數(shù)名換成了 operator 運(yùn)算符,我估計(jì)答得不對担敌。他不置可否摔敛,就問了下一個(gè)廷蓉。
他問:說一下C++的函數(shù)重載全封?我就說兩個(gè)函數(shù)的函數(shù)名相同马昙,但是參數(shù)的個(gè)數(shù)和參數(shù)的類型不同。他又追問函數(shù)重載是如何實(shí)現(xiàn)的刹悴? 我就回答:編譯器在編譯時(shí)根據(jù)函數(shù)名和函數(shù)參數(shù)類型生成的符號名是不相同的行楞,相當(dāng)于一個(gè)函數(shù)的改名,這樣最后相同的函數(shù)名實(shí)際上名字是不相同的土匀。
他問:C++如何引用C代碼子房?我說:用extern "C" { }。 他又追問:<strong>C++為什么要用extern "C"呢就轧,直接引用為什么不行呢证杭?</strong>我就被問住了,就支支吾吾說有些C++可以直接引用C妒御,我也不知道為什么解愤。
他問:C++模板的原理是怎樣的?其實(shí)我也不是很清楚乎莉,憑著我在C++ Primer Plus里面學(xué)過的一點(diǎn)皮毛說:編譯器在編譯時(shí)對模板里面的類型做了類型替換送讲,所以模板要放到頭文件里聲明。 面試官不太滿意惋啃,問:就這些哼鬓?我也就答不出更多了。
他問:有沒有用過C++的smart_ptr边灭?我老實(shí)說我沒用過智能指針异希。
他問:C++11的新特性都用過哪些?我當(dāng)時(shí)一下子想不出太多绒瘦,就一點(diǎn)點(diǎn)舉例子:lambda表達(dá)式宠互、auto關(guān)鍵字、override關(guān)鍵字椭坚、=delete用法予跌,當(dāng)時(shí)一下子只想出這么幾個(gè),估計(jì)在面試官心里嚴(yán)重減分善茎。
他問:有沒有在項(xiàng)目中寫過JNI券册?我的回答同百度面試經(jīng)歷里的那樣。
他問:TCP/IP協(xié)議棧還熟悉嗎垂涯?說一說吧烁焙。 這是我最想吐槽的一個(gè)問題,太寬泛也不知道從哪答起耕赘。就先說了說各個(gè)層次的協(xié)議骄蝇,然后主動(dòng)跟面試官說:這樣講太寬泛了,我都不知道從哪說起操骡。 面試官愣了一下下九火,就說:那你就講講TCP協(xié)議的流量控制吧赚窃。 我就講了一下滑動(dòng)窗口的機(jī)制。
他問:你平時(shí)都用過哪些設(shè)計(jì)模式岔激? 這個(gè)問題我也不知道從哪答起勒极,就慢慢列舉:觀察者模式、單例模式虑鼎、構(gòu)建者模式辱匿。其實(shí)其余的設(shè)計(jì)模式我也能說得出,只是沒在實(shí)戰(zhàn)中用過炫彩,不敢亂講匾七。 面試官看我只能說出這么幾個(gè)設(shè)計(jì)模式,心里估計(jì)又減分了江兢。
他問:我看你簡歷里對Linux也有一定了解乐尊? 我說:當(dāng)日常系統(tǒng)用過幾個(gè)月。 他追問:日常管理都用過哪些命令呢划址? 我就說:top扔嵌、grep那些,他笑了笑夺颤,沒有再追問痢缎。
他問:你在項(xiàng)目中怎樣進(jìn)行應(yīng)用的性能優(yōu)化呢?我就還是著重說了一下內(nèi)存方面的優(yōu)化世澜,回答同上一篇文章里提到的独旷。
他問:Android里面的binder了解嗎,說一下對它的理解寥裂? 我說:binder用于跨進(jìn)程通信嵌洼,AIDL的底層實(shí)現(xiàn)就是基于binder的。然后說了Binder通信機(jī)制主要有Binder Client封恰、Binder Server麻养、ServerManager這幾個(gè)模塊起作用,ServerManager起到一個(gè)類似路由的作用诺舔。當(dāng)時(shí)也只是草草講了講鳖昌,面試官好像難得點(diǎn)了點(diǎn)頭。
他問:Java程序的內(nèi)存結(jié)構(gòu)低飒? 我回答:程序計(jì)數(shù)器许昨、本地方法棧、堆褥赊、虛擬機(jī)棧糕档、方法區(qū)。他也沒說什么拌喉。
他問:Java的gc算法了解嗎速那?我就說是Mark&Sweep俐银,統(tǒng)計(jì)GC Roots是否能引用到對象上。生成一個(gè)引用圖琅坡,找出其中的連通分量標(biāo)記為可清除。等到gc發(fā)生的時(shí)候就清理這些對象残家。(后來想想我真想掐死自己榆俺,我自己心里很清楚引用鏈計(jì)數(shù)法,也清楚復(fù)制算法坞淮,新生代茴晋、老年代那些概念,這些我都做過功課回窘,但是面試的時(shí)候有點(diǎn)累诺擅,不像引申開講,估計(jì)面試官也覺得我就這樣了)
高能來了啡直,他問:你想干什么崗呢烁涌?我一下子暈了,跟他說是Android崗酒觅,他笑了笑撮执,就說面試結(jié)束了。只留我在原地目瞪口呆舷丹,整個(gè)面試半個(gè)小時(shí)不到抒钱。
網(wǎng)易面試總結(jié)
網(wǎng)易面試讓人很郁悶,Android的知識點(diǎn)沒有問多少颜凯,主要都圍繞著C++對我瘋狂輸出傷害谋币。也許我不該在簡歷里說我對C++熟悉吧。最后一面就掛了症概,我自己都搞不懂為什么掛了蕾额,算法題也沒有問,數(shù)據(jù)結(jié)構(gòu)也沒有問彼城,Java基礎(chǔ)不問凡简,一問就是gc算法。網(wǎng)易的面試官比較”任性“精肃,隨意出題秤涩,而且掛人的權(quán)力也很大,問的問題也很有深度司抱。
騰訊面試
騰訊的面試跟網(wǎng)易在一家酒店筐眷。技術(shù)崗和非技術(shù)崗都在同一家酒店面,騰訊的筆試刷人不多习柠,候面區(qū)很大匀谣,人很多照棋,有點(diǎn)鬧哄哄的感覺。我在候面區(qū)等了大概大半個(gè)小時(shí)接到面試通知武翎,就去了面試的房間烈炭。面試官先看了一下我的簡歷,估計(jì)也是對我所宣稱的”熟悉C++“很感興趣宝恶,一開口就開始問C++的問題符隙。
他問:C++11的新特性用過哪些?我的回答同網(wǎng)易那次垫毙。
他問:C++多態(tài)的實(shí)現(xiàn)原理霹疫?我回答:通過虛函數(shù)實(shí)現(xiàn)多態(tài)。內(nèi)存中的.rodata區(qū)有虛函數(shù)表综芥,聲明了虛函數(shù)的對象中會(huì)有一個(gè)虛函數(shù)表指針指向這個(gè)虛函數(shù)表丽蝎,虛函數(shù)表里面是函數(shù)指針指向?qū)嶋H的虛函數(shù)的實(shí)現(xiàn)胀屿。如果派生類里覆蓋了基類的虛函數(shù)止剖,則虛函數(shù)表里對應(yīng)的虛函數(shù)指針被重寫。
他問:C++中析構(gòu)函數(shù)的析構(gòu)順序策菜?我說:先調(diào)用這個(gè)類的析構(gòu)函數(shù)额各,在析構(gòu)函數(shù)中析構(gòu)它的成員栏笆,再析構(gòu)這個(gè)的派生部分,再調(diào)用基類的析構(gòu)函數(shù)臊泰,最后析構(gòu)掉基類部分蛉加。 不知道答得對不對。
他問:STL里面map和set的內(nèi)部實(shí)現(xiàn)呢缸逃?我就說是紅黑樹针饥,然后他又問,還有其他的容器呢需频?我就說了其他的容器我猜測的實(shí)現(xiàn)方式丁眼。(這一塊其實(shí)不是很清楚,強(qiáng)行裝逼 - - !)
他讓我手寫代碼昭殉,先寫了一個(gè)反轉(zhuǎn)字符串苞七,特意強(qiáng)調(diào)用C語言。我也沒傻到用C++的現(xiàn)成api挪丢。就寫了一個(gè)給他蹂风。
他讓我寫一個(gè)函數(shù)判斷一個(gè)樹是否是平衡二叉樹。我有點(diǎn)想哭乾蓬,各種細(xì)節(jié)不表惠啄,這一題雖然簡單,但是我沒整出來,面試官很寬容撵渡,就換到了下一題融柬。
他問了一個(gè)大數(shù)據(jù)處理的題,他問了從10億個(gè)數(shù)據(jù)中如何取出最大的1000個(gè)趋距。面試官人挺好的粒氧,特意提醒內(nèi)存裝不下。我就回答:10億條數(shù)據(jù)分成N個(gè)內(nèi)存剛好能裝下的部分节腐,然后用堆排序外盯。他問能不能進(jìn)一步優(yōu)化?我一下子沒想出來铜跑,就換到了下一題门怪。
接下來他看了一下我寫的應(yīng)用骡澈,稱贊了幾句后锅纺,就開始問我項(xiàng)目用到的庫,看到了項(xiàng)目里用到很多圖片后肋殴,特意問了一下這么多圖片是如何進(jìn)行性能優(yōu)化的囤锉,我的回答同百度面試。
接下來他試著操作了一下护锤,開始問我如何判斷用戶是否登錄的官地。我回答服務(wù)端生成一個(gè)token,客戶端保存這個(gè)token的烙懦。他追問用這個(gè)token登錄如何保證安全性驱入?我回答https。他又追問我對Https的了解氯析。我的回答同百度面試亏较。
接下來他又看了一下app,問我視頻播放是怎樣實(shí)現(xiàn)的掩缓。我答:公司沒那么多錢買帶寬雪情,用的是WebView內(nèi)嵌的優(yōu)酷的播放器。他繼續(xù)問應(yīng)用在哪個(gè)平臺發(fā)布的 (= =)你辣。我說應(yīng)用寶巡通,(我有點(diǎn)好奇我如果說放到其他平臺上他會(huì)追問什么)這個(gè)過程中有很多小插曲,比如他好幾次退不出視頻的播放舍哄,然后尷尬地說自己對Andriod不太熟悉宴凉。(我懷疑他是iOS工程師)。
他讓我寫代碼表悬,給定內(nèi)存上一段連續(xù)的數(shù)據(jù)跪解,判斷第N位是不是1。這個(gè)好寫,就是位操作叉讥,我當(dāng)時(shí)磨蹭了一會(huì)才寫出來窘行,可能是人不在狀態(tài)吧。
然后他就說面完了图仓,問我有沒有什么想問的罐盔,我就說,在校學(xué)生如果沒有項(xiàng)目如何提高救崔。他就說他還是很看重項(xiàng)目的惶看,如果一個(gè)學(xué)生真的對技術(shù)有熱情,會(huì)主動(dòng)做一些項(xiàng)目的六孵。
幾天后我接到騰訊的短信纬黎,通知我去參加二面。我想了半天劫窒,還是放棄了這一機(jī)會(huì)本今,難過了好久。
總結(jié)
面試其實(shí)是一個(gè)雙向了解的過程主巍。我們在了解企業(yè)的風(fēng)格冠息,在了解企業(yè)想要什么樣的人,企業(yè)也在考察我們是怎樣的人孕索。去面試的人不要在心理上把自己置于一個(gè)弱勢的地位逛艰,也不要把面試看做一場考試,好像面試官要使出各種招數(shù)把自己的破綻逼出來一樣搞旭,好的面試官會(huì)去積極發(fā)現(xiàn)我們的比較優(yōu)秀的一面散怖,甚至?xí)シe極引導(dǎo)我們。
當(dāng)我們面試的時(shí)候肄渗,應(yīng)該時(shí)刻記住坐在我對面的人不了解我镇眷。我大腦里串聯(lián)起來的知識結(jié)構(gòu)我知道它存在,但是坐在我對面的人卻不知道它存在恳啥。所以在回答面試官的問題的時(shí)候偏灿,不要點(diǎn)到即止,要勇于從深度和廣度上進(jìn)行拓展钝的,讓面試官看到的你的成體系的知識結(jié)構(gòu)是再好不過了翁垂。<strong>很多時(shí)候并不是你把面試官的問題答對了就能通過面試。</strong>
以誠相待是最省力的套路硝桩。不知道的問題不要強(qiáng)答沿猜,不確定的問題也不要答得那么堅(jiān)決,沒有寫過某種類型的代碼就是沒有寫過碗脊,不要因?yàn)閾?dān)心面試官掛你而欺騙面試官啼肩,面試官是很喜歡追問的,一追問就知道你說沒說實(shí)話。
積極準(zhǔn)備祈坠,認(rèn)真對待害碾。不要在簡歷上有錯(cuò)別字,一面的問題到了二面可能還會(huì)問赦拘。所以一面答不出來的問題回去了要好好查一查慌随。很多面試題也是老套路了,面試前要認(rèn)真準(zhǔn)備躺同,很多時(shí)候面試官問的題目都能事先命中阁猜。