0 引言
在成功拿到阿里的實(shí)習(xí)offer之前稚字,我已經(jīng)有過兩次面試的經(jīng)歷,但最終都被GG了(后面作總結(jié)我會分析原因)沪袭。對于像我這樣向來自信甚至帶點(diǎn)小自負(fù)的人來說艇抠,是相當(dāng)受打擊的。好在兩次失敗的經(jīng)歷并不是只有壞處讯榕,最起碼下次面試的時(shí)候不會再怯場骤素,還有一點(diǎn)更重要的匙睹,通過這兩次面試,我大致摸清了阿里的整個(gè)面試流程以及套路济竹『勖剩客觀的講,面試除了自身的實(shí)力以外送浊,技巧性是相當(dāng)重要的梦谜,我相信,不管是一個(gè)技術(shù)再厲害的大牛罕袋,如果沒有對整個(gè)面試環(huán)節(jié)有一個(gè)大致方向性的把握改淑,對于面試官所要提問的內(nèi)容毫無準(zhǔn)備,誰也不敢保證說這個(gè)offer我肯定可以拿到浴讯。因此朵夏,我在這里分享下自己的經(jīng)驗(yàn),希望幫助更多人榆纽,在面試過程中可以少走一些彎路仰猖。
1 筆試
先來說一下筆試部分,對于阿里的筆試難度來說奈籽,以我曾經(jīng)做過的網(wǎng)易饥侵、蘑菇街筆試難度來比較的話,大致應(yīng)該是:阿里>蘑菇街>網(wǎng)易衣屏,當(dāng)然這里僅僅考慮了難度躏升,拋開了各個(gè)公司的評判標(biāo)準(zhǔn)。比如說狼忱,阿里的筆試你考60就給你過了膨疏,但是網(wǎng)易可能就要你考75。阿里的筆試題總共包括兩個(gè)部分钻弄,前面一部分是選擇題佃却,總共20道,時(shí)間是40分鐘窘俺。也就是說饲帅,40分鐘后,不管有沒有做完瘤泪,選擇題會自動進(jìn)行提交灶泵,然后你才可以繼續(xù)做第二部分。從我做下來的情況看对途,時(shí)間相當(dāng)?shù)泌s丘逸,基本上會來不及。題目內(nèi)容大多是一些智商題掀宋,概率論,操作系統(tǒng)、網(wǎng)絡(luò)等基礎(chǔ)題劲妙。給我的感覺是湃鹊,只要是技術(shù)面,選擇題都是從一個(gè)大的題庫中隨機(jī)抽取镣奋,而不是跟某個(gè)具體的崗位掛鉤币呵。比如一些概率題,會有考察貝葉斯公式的侨颈,一些智商題余赢,可能需要你用到簡單的動態(tài)規(guī)劃來推算。個(gè)人認(rèn)為哈垢,選擇題部分主要還是在考察一個(gè)人的基本功還有他的知識面妻柒。第二部分總共有三道大題,時(shí)間好像是兩個(gè)小時(shí)耘分,有點(diǎn)記不太清了举塔。一般情況下會考一道算法題楼誓,難度不會太大械馆,但是如果你沒做過這樣的題目,基本上還是做不出來射窒。我舉幾道筆試原題:
在一個(gè)數(shù)組中渴频,有若干個(gè)數(shù)芽丹,每個(gè)數(shù)字都出現(xiàn)兩次,也就是說數(shù)組中如果出現(xiàn)了一個(gè)2卜朗,那必定存在另一個(gè)2拔第,除了一個(gè)數(shù)僅僅出現(xiàn)了一次,如何在空間復(fù)雜度為O(1)的情況下找出這個(gè)數(shù)聊替。
這道題目如果你有做過楼肪,你會發(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)洋腮,一般會出現(xiàn)一道并發(fā)編程題,往往它會給你一個(gè)場景手形,讓你提供一個(gè)解決方案啥供,比如說設(shè)計(jì)一個(gè)活動搶購之類的程序。這些題目库糠,大多萬變不離其中伙狐,從最本質(zhì)上來說,它可能僅僅是讓你寫一個(gè)生產(chǎn)者消費(fèi)者模式或者是哲學(xué)家吃飯思考的問題瞬欧。
一般情況下贷屎,筆試部分選擇題做得不是很差,后面三道大題能做出兩道來基本上就過了艘虎。
2 面試
再來說下面試唉侄,在這里,我不想條條框框得把我面試到的問題都列出來顷帖,因?yàn)槟菢雍翢o意義美旧。問什么問題都是取決于interviewer個(gè)人的,沒有什么所謂的題庫贬墩,他想到問什么就問什么榴嗅,當(dāng)然也會根據(jù)你自身的實(shí)際情況來做提問。同時(shí)為了避免泛泛而談陶舞,我可能也會以幾個(gè)實(shí)際的面試題為例嗽测。
一般情況下,總共會有三輪技術(shù)面+HR面肿孵。如果你參加的是內(nèi)推唠粥,所有的都是電話面試。對于我來講停做,我更喜歡與面試官一對一面試晤愧,通過一些肢體語言和紙筆,有利于把一個(gè)問題更好得表達(dá)清楚蛉腌,我并不懼怕現(xiàn)場寫代碼官份。在這方面,網(wǎng)易做得就比較好烙丛,先通過一輪電話面試篩掉一部分人舅巷,然后再參加現(xiàn)場面試,對于外地過來的同學(xué)河咽,車票可以報(bào)銷钠右。如果你參加的是校招,通過了筆試忘蟹,一般會邀請你去一個(gè)酒店進(jìn)行面試飒房。
面試一般會讓你先做個(gè)自我介紹搁凸,這時(shí)候不要再去重復(fù)得介紹一些個(gè)人信息,面試官跟你面試的時(shí)候情屹,肯定是已經(jīng)拿到你的個(gè)人簡歷了坪仇,可以介紹一下自己平時(shí)經(jīng)常做的事情,自認(rèn)為比較擅長的或者自己喜歡的垃你,自我介紹一分鐘足矣,在這過程中喂很,應(yīng)該是讓面試官知道你擅長什么惜颇,從而引導(dǎo)面試官有針對性的提問。接下來會問一些項(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)來看,面試的問題都不會太難施戴。我可以大致給出面試的提問范圍:
1.關(guān)于java虛擬機(jī)反浓,你需要知道JVM的內(nèi)存結(jié)構(gòu),垃圾回收機(jī)制赞哗,內(nèi)存分配策略雷则,類的加載機(jī)制以及內(nèi)存模型。以上這些請參考周志明的《深入理解java虛擬機(jī)》肪笋。
2.熟悉java各個(gè)容器的實(shí)現(xiàn)月劈,例如HashMap、ConcurrencyHashMap等涂乌,最好去閱讀源碼艺栈,這次面試關(guān)于HashMap原理三個(gè)面試官問了我三次,重要程度不需多說了湾盒。
3.熟悉java并發(fā)編程湿右,尤其是java.concurrency包下的api,并發(fā)作為一塊高級內(nèi)容罚勾,對于很多人說毅人,很少接觸吭狡,也很難將其掌握。幸運(yùn)的是丈莺,面試官在這一塊都不會考得太深入划煮,推薦《java concurrency in practice》。
4.熟悉常用的數(shù)據(jù)結(jié)構(gòu)缔俄、算法弛秋。很多人認(rèn)為算法在實(shí)際項(xiàng)目中根本用不到,并且覺得算法太難俐载,就疏于學(xué)習(xí)蟹略。那為什么所有的大公司都喜歡考算法呢?尤其是像微軟遏佣、facebook這樣的巨頭挖炬?算法不僅需要必備的理論状婶,更需要親自動手意敛,有關(guān)算法的書籍更多,找一本適合的就可以了膛虫,題庫推薦leetcode碴倾。
5.其他還有像設(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á)到游刃有余薪棒。
3 總結(jié)
總體來說手蝎,大多數(shù)企業(yè)考慮到校招針對的是在校學(xué)生,面試都不會出現(xiàn)太難的題目俐芯。然而在如何學(xué)習(xí)這個(gè)問題柑船,筆者還是有話要說的,我見過很多人泼各,光看書或者視頻,忽略了實(shí)踐亏拉,最終的結(jié)果就是我能看懂代碼扣蜻,但是我不會寫。更有甚者及塘,拿著一本與自身水平不適應(yīng)的書例如《think in java》在那里啃莽使,導(dǎo)致自信心大受打擊,學(xué)習(xí)興趣驟減笙僚。武俠小說告訴我們芳肌,練一門與自身功力不相符的武功只會走火入魔。我在學(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)目雌团,我說基本沒有燃领。然后他以一種教育的口吻跟我說,你這樣會荒廢掉的锦援。我笑而不語猛蔽,如果非要用一張圖來描述我的表情的話,應(yīng)該是這樣的:
我剛才強(qiáng)調(diào)了實(shí)踐的意義雨涛,但是我認(rèn)為枢舶,如果你做過類似的項(xiàng)目已經(jīng)足夠得多懦胞,就不要再去做重復(fù)勞動。我無意去貶低在學(xué)校做的項(xiàng)目凉泄,但是事實(shí)就是如此躏尉,99%的學(xué)校里的項(xiàng)目只能算個(gè)Demo。試問后众,有誰考慮了代碼是否足夠Elegant胀糜?是否足夠Robust?是否足夠Security蒂誉?如果沒有教藻,那就遠(yuǎn)遠(yuǎn)達(dá)不到作為產(chǎn)品級別的工業(yè)強(qiáng)度!那么這樣的項(xiàng)目做得再多也是無用功右锨。
另外括堤,文章開頭談到我兩次失敗的經(jīng)歷,都是到了HR面绍移,有人說能面到HR悄窃,基本上就已經(jīng)過了。而我兩次都敗在了HR面上蹂窖,我甚至一度懷疑自己是不是情商有問題轧抗。在HR面的整個(gè)過程中,給人感覺還是比較輕松的瞬测,就跟平時(shí)聊天一樣横媚,基本上都是一些比較開放性的問題。但是一定要能夠說得通月趟,不能出現(xiàn)前后矛盾灯蝴,那面試官肯定以為你是在忽悠。另外狮斗,不要把自己的缺點(diǎn)說得太過直白绽乔,筆者就是因?yàn)槌粤诉@個(gè)虧。好了碳褒,作為一個(gè)HR面的loser折砸,我就不多說了。
最后沙峻,如果面試失敗也不要灰心睦授,面試很大一部分是有運(yùn)氣成分的,筆者不乏見過很多被BAT刷掉摔寨,最終去了微軟谷歌的去枷,你能說他們技術(shù)不夠強(qiáng)硬?重要的是每次面試后,都能做反思删顶、總結(jié)竖螃,吸取經(jīng)驗(yàn)教訓(xùn)。
如果你想學(xué)習(xí)Java工程化逗余、高性能及分布式特咆、高性能、深入淺出录粱。性能調(diào)優(yōu)腻格、Spring,MyBatis啥繁,Netty源碼分析和大數(shù)據(jù)等知識點(diǎn)可以來找我菜职。而現(xiàn)在我就有一個(gè)平臺可以提供給你們學(xué)習(xí),你想拿高薪的旗闽,想學(xué)習(xí)的酬核,想就業(yè)前景好的,想跟別人競爭能取得優(yōu)勢的适室,想進(jìn)阿里面試但擔(dān)心面試不過的愁茁,你都可以來,群號為:668395460
注:加群要求
1亭病、具有1-5工作經(jīng)驗(yàn)的,面對目前流行的技術(shù)不知從何下手嘶居,需要突破技術(shù)瓶頸的可以加罪帖。
2、在公司待久了邮屁,過得很安逸整袁,但跳槽時(shí)面試碰壁。需要在短時(shí)間內(nèi)進(jìn)修佑吝、跳槽拿高薪的可以加坐昙。
3、如果沒有工作經(jīng)驗(yàn)芋忿,但基礎(chǔ)非常扎實(shí)炸客,對java工作機(jī)制,常用設(shè)計(jì)思想戈钢,常用java開發(fā)框架掌握熟練的痹仙,可以加。
4殉了、覺得自己很牛B开仰,一般需求都能搞定。但是所學(xué)的知識點(diǎn)沒有系統(tǒng)化,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以加众弓。
5.阿里Java高級大牛直播講解知識點(diǎn)恩溅,分享知識,多年工作經(jīng)驗(yàn)的梳理和總結(jié)谓娃,帶著大家全面脚乡、科學(xué)地建立自己的技術(shù)體系和技術(shù)認(rèn)知!
6.小號加群一律不給過傻粘,謝謝每窖。