在成功拿到阿里的實(shí)習(xí)offer之前,我已經(jīng)有過兩次面試的經(jīng)歷,但最終都被GG了(后面作總結(jié)我會(huì)分析原因)。對于像我這樣向來自信甚至帶點(diǎn)小自負(fù)的人來說,是相當(dāng)受打擊的。好在兩次失敗的經(jīng)歷并不是只有壞處,最起碼下次面試的時(shí)候不會(huì)再怯場,還有一點(diǎn)更重要的,通過這兩次面試,我大致摸清了阿里的整個(gè)面試流程以及套路??陀^的講,面試除了自身的實(shí)力以外,技巧性是相當(dāng)重要的,我相信,不管是一個(gè)技術(shù)再厲害的大牛,如果沒有對整個(gè)面試環(huán)節(jié)有一個(gè)大致方向性的把握,對于面試官所要提問的內(nèi)容毫無準(zhǔn)備,誰也不敢保證說這個(gè)offer我肯定可以拿到。因此,我在這里分享下自己的經(jīng)驗(yàn),希望幫助更多人,在面試過程中可以少走一些彎路。
先來說一下筆試部分,對于阿里的筆試難度來說,以我曾經(jīng)做過的網(wǎng)易、蘑菇街筆試難度來比較的話,大致應(yīng)該是:阿里>蘑菇街>網(wǎng)易,當(dāng)然這里僅僅考慮了難度,拋開了各個(gè)公司的評判標(biāo)準(zhǔn)。比如說,阿里的筆試你考60就給你過了,但是網(wǎng)易可能就要你考75。阿里的筆試題總共包括兩個(gè)部分,前面一部分是選擇題,總共20道,時(shí)間是40分鐘。也就是說,40分鐘后,不管有沒有做完,選擇題會(huì)自動(dòng)進(jìn)行提交,然后你才可以繼續(xù)做第二部分。從我做下來的情況看,時(shí)間相當(dāng)?shù)泌s,基本上會(huì)來不及。題目內(nèi)容大多是一些智商題,概率論,操作系統(tǒng)、網(wǎng)絡(luò)等基礎(chǔ)題。給我的感覺是,只要是技術(shù)面,選擇題都是從一個(gè)大的題庫中隨機(jī)抽取,而不是跟某個(gè)具體的崗位掛鉤。比如一些概率題,會(huì)有考察貝葉斯公式的,一些智商題,可能需要你用到簡單的動(dòng)態(tài)規(guī)劃來推算。個(gè)人認(rèn)為,選擇題部分主要還是在考察一個(gè)人的基本功還有他的知識(shí)面。第二部分總共有三道大題,時(shí)間好像是兩個(gè)小時(shí),有點(diǎn)記不太清了。一般情況下會(huì)考一道算法題,難度不會(huì)太大,但是如果你沒做過這樣的題目,基本上還是做不出來。我舉幾道筆試原題:
在一個(gè)數(shù)組中,有若干個(gè)數(shù),每個(gè)數(shù)字都出現(xiàn)兩次,也就是說數(shù)組中如果出現(xiàn)了一個(gè)2,那必定存在另一個(gè)2,除了一個(gè)數(shù)僅僅出現(xiàn)了一次,如何在空間復(fù)雜度為O(1)的情況下找出這個(gè)數(shù)。
這道題目如果你有做過,你會(huì)發(fā)現(xiàn)解決問題的方式相當(dāng)巧妙。具體答案可以自行百度,這里不贅述。
從100個(gè)數(shù)中隨機(jī)抽取K個(gè)數(shù),要求K個(gè)數(shù)不能重復(fù)。
你也許可以馬上想到用暴力的解決辦法,如果重復(fù)了,那再次抽取,直到抽完K個(gè)數(shù)。這道題目也有巧妙的解決辦法,詳見《編程珠璣》隨機(jī)數(shù)那一章。
另外兩道題目,以我的經(jīng)驗(yàn),一般會(huì)出現(xiàn)一道并發(fā)編程題,往往它會(huì)給你一個(gè)場景,讓你提供一個(gè)解決方案,比如說設(shè)計(jì)一個(gè)活動(dòng)搶購之類的程序。這些題目,大多萬變不離其中,從最本質(zhì)上來說,它可能僅僅是讓你寫一個(gè)生產(chǎn)者消費(fèi)者模式或者是哲學(xué)家吃飯思考的問題。
一般情況下,筆試部分選擇題做得不是很差,后面三道大題能做出兩道來基本上就過了。
再來說下面試,在這里,我不想條條框框得把我面試到的問題都列出來,因?yàn)槟菢雍翢o意義。問什么問題都是取決于interviewer個(gè)人的,沒有什么所謂的題庫,他想到問什么就問什么,當(dāng)然也會(huì)根據(jù)你自身的實(shí)際情況來做提問。同時(shí)為了避免泛泛而談,我可能也會(huì)以幾個(gè)實(shí)際的面試題為例。
一般情況下,總共會(huì)有三輪技術(shù)面+HR面。如果你參加的是內(nèi)推,所有的都是電話面試。對于我來講,我更喜歡與面試官一對一面試,通過一些肢體語言和紙筆,有利于把一個(gè)問題更好得表達(dá)清楚,我并不懼怕現(xiàn)場寫代碼。在這方面,網(wǎng)易做得就比較好,先通過一輪電話面試篩掉一部分人,然后再參加現(xiàn)場面試,對于外地過來的同學(xué),車票可以報(bào)銷。如果你參加的是校招,通過了筆試,一般會(huì)邀請你去一個(gè)酒店進(jìn)行面試。
面試一般會(huì)讓你先做個(gè)自我介紹,這時(shí)候不要再去重復(fù)得介紹一些個(gè)人信息,面試官跟你面試的時(shí)候,肯定是已經(jīng)拿到你的個(gè)人簡歷了,可以介紹一下自己平時(shí)經(jīng)常做的事情,自認(rèn)為比較擅長的或者自己喜歡的,自我介紹一分鐘足矣,在這過程中,應(yīng)該是讓面試官知道你擅長什么,從而引導(dǎo)面試官有針對性的提問。接下來會(huì)問一些項(xiàng)目經(jīng)驗(yàn),你應(yīng)該是挑一些有一定的含金量,并且印象比較深刻的(面試前,有必要回顧下做過的項(xiàng)目)。大致可以按照這幾點(diǎn)來介紹:自己負(fù)責(zé)了哪個(gè)模塊;把這個(gè)模塊的大致流程介紹一遍;在做這個(gè)項(xiàng)目過程中碰到了哪些問題,最后是怎么解決的;最后就是對這個(gè)項(xiàng)目的收獲。介紹完項(xiàng)目經(jīng)驗(yàn)以后,面試官開始自由提問,以我多次面試的經(jīng)驗(yàn)來看,面試的問題都不會(huì)太難。我可以大致給出面試的提問范圍:
- 關(guān)于java虛擬機(jī),你需要知道JVM的內(nèi)存結(jié)構(gòu),垃圾回收機(jī)制,內(nèi)存分配策略,類的加載機(jī)制以及內(nèi)存模型。以上這些請參考周志明的《深入理解java虛擬機(jī)》。
- 熟悉java各個(gè)容器的實(shí)現(xiàn),例如HashMap、ConcurrencyHashMap等,最好去閱讀源碼,這次面試關(guān)于HashMap原理三個(gè)面試官問了我三次,重要程度不需多說了。
- 熟悉java并發(fā)編程,尤其是java.concurrency包下的api,并發(fā)作為一塊高級內(nèi)容,對于很多人說,很少接觸,也很難將其掌握。幸運(yùn)的是,面試官在這一塊都不會(huì)考得太深入,推薦《java concurrency in practice》。
- 熟悉常用的數(shù)據(jù)結(jié)構(gòu)、算法。很多人認(rèn)為算法在實(shí)際項(xiàng)目中根本用不到,并且覺得算法太難,就疏于學(xué)習(xí)。那為什么所有的大公司都喜歡考算法呢?尤其是像微軟、facebook這樣的巨頭?算法不僅需要必備的理論,更需要親自動(dòng)手,有關(guān)算法的書籍更多,找一本適合的就可以了,題庫推薦leetcode。
- 其他還有像設(shè)計(jì)模式、數(shù)據(jù)庫都很重要,這些東西并不是靠一兩個(gè)月就能掌握,還是需要平時(shí)多積累、總結(jié)。推薦《head first 設(shè)計(jì)模式》,如果有你認(rèn)為學(xué)習(xí)能力強(qiáng),可以直接看四人幫的《設(shè)計(jì)模式》,數(shù)據(jù)庫就不多說了。
在這里,我并不是想給出一個(gè)面試寶典一樣的東西。事實(shí)上,上面列出的東西,沒有兩到三年的時(shí)間學(xué)習(xí),根本掌握不了。要想成為一名技術(shù)大牛沒有捷徑。還是希望大家可以認(rèn)真踏實(shí)的學(xué)習(xí),一旦你真正掌握了這些,面對面試官的提問基本上可以達(dá)到游刃有余。
總體來說,大多數(shù)企業(yè)考慮到校招針對的是在校學(xué)生,面試都不會(huì)出現(xiàn)太難的題目。然而在如何學(xué)習(xí)這個(gè)問題,筆者還是有話要說的,我見過很多人,光看書或者視頻,忽略了實(shí)踐,最終的結(jié)果就是我能看懂代碼,但是我不會(huì)寫。更有甚者,拿著一本與自身水平不適應(yīng)的書例如《think in java》在那里啃,導(dǎo)致自信心大受打擊,學(xué)習(xí)興趣驟減。武俠小說告訴我們,練一門與自身功力不相符的武功只會(huì)走火入魔。我在學(xué)習(xí)馬克思主義的時(shí)候,對里面提出的思想觀點(diǎn)是相當(dāng)?shù)钟|的。但是有一點(diǎn)關(guān)于理論與實(shí)踐的辯證關(guān)系,我深表贊同:實(shí)踐是理論的基礎(chǔ),理論對實(shí)踐有反作用,理論和實(shí)踐是相輔相成的,缺一不可。我曾經(jīng)遇到一位長者,他目前的職位是產(chǎn)品經(jīng)理,問我在學(xué)校有沒有項(xiàng)目,我說基本沒有。然后他以一種教育的口吻跟我說,你這樣會(huì)荒廢掉的。我笑而不語,如果非要用一張圖來描述我的表情的話,應(yīng)該是這樣的:
我剛才強(qiáng)調(diào)了實(shí)踐的意義,但是我認(rèn)為,如果你做過類似的項(xiàng)目已經(jīng)足夠得多,就不要再去做重復(fù)勞動(dòng)。我無意去貶低在學(xué)校做的項(xiàng)目,但是事實(shí)就是如此,99%的學(xué)校里的項(xiàng)目只能算個(gè)Demo。試問,有誰考慮了代碼是否足夠Elegant?是否足夠Robust?是否足夠Sequrity?如果沒有,那就遠(yuǎn)遠(yuǎn)達(dá)不到作為產(chǎn)品級別的工業(yè)強(qiáng)度!那么這樣的項(xiàng)目做得再多也是無用功。
另外,文章開頭談到我兩次失敗的經(jīng)歷,都是到了HR面,有人說能面到HR,基本上就已經(jīng)過了。而我兩次都敗在了HR面上,我一度懷疑自己是不是情商有問題,后來我發(fā)現(xiàn)大多數(shù)的HR都是SB,你要問我為什么,我可以給出邏輯證明,period。
最后,如果面試失敗也不要灰心,面試很大一部分是有運(yùn)氣成分的,筆者不乏見過很多被BAT刷掉,最終去了微軟谷歌的,你能說他們技術(shù)不夠強(qiáng)硬?重要的是每次面試后,都能做反思、總結(jié),吸取經(jīng)驗(yàn)教訓(xùn)。
著作權(quán)歸作者所有
聯(lián)系客服