之前實(shí)習(xí)的時(shí)候就想著寫一篇面經(jīng)除师,后來忙就給忘了沛膳,現(xiàn)在找完工作了,也是該靜下心總結(jié)一下走過的路程了汛聚,我全盤托出锹安,奉上這篇誠意之作,希望能給未來找工作的人一點(diǎn)指引和總結(jié)倚舀, 也希望能使大家少走點(diǎn)彎路 叹哭, 如果能耐心讀完,相信對你會(huì)找到你需要的東西痕貌。
先說一下LZ的基本情況风罩,LZ是四川某985學(xué)校通信專業(yè)的研究生(非計(jì)算機(jī)),大學(xué)階段也就學(xué)了C語言舵稠,根本沒想過最后要成為碼農(nóng)超升。大四才開始學(xué)java,研一下開始學(xué)android哺徊,所以LZ覺得自己開始就是一個(gè)小白室琢,慢慢成長起來的。
一落追、心態(tài)
心態(tài)很重要盈滴!
心態(tài)很重要!
心態(tài)很重要轿钠!
重要的事情說三遍巢钓,這一點(diǎn)我覺得是必須放到前面來講。
找工作之前疗垛,有一點(diǎn)你必須清楚症汹,就是找工作是一件看緣分的事情,不是你很牛逼继谚,你就一定能進(jìn)你想進(jìn)的公司,都是有一個(gè)概率在那阵幸。如果你基礎(chǔ)好花履,項(xiàng)目經(jīng)驗(yàn)足,同時(shí)準(zhǔn)備充分挚赊,那么你拿到offer的概率就會(huì)比較高诡壁;相反,如果你準(zhǔn)備不充分荠割,基礎(chǔ)也不好妹卿,那么你拿到offer的概率就會(huì)比較低旺矾,但是你可以多投幾家公司,這樣拿到offer的幾率就要大一點(diǎn)夺克,因?yàn)槟憧傆羞\(yùn)氣好的時(shí)候箕宙。所以,不要懼怕面試铺纽,剛開始失敗了沒什么的柬帕,多投多嘗試,面多了你就自然能成面霸了狡门。得失心也不要太重陷寝,最后每個(gè)人都會(huì)有offer的。
還有一個(gè)對待工作的心態(tài)其馏,有些人可能覺得自己沒有動(dòng)力去找一個(gè)好工作凤跑。其實(shí)你需要明白一件事情,你讀了十幾二十年的書叛复,為的是什么仔引,最后不就是為了找到一個(gè)好工作么。現(xiàn)在到了關(guān)鍵時(shí)刻致扯,你為何不努力一把呢肤寝,為什么不給自己一個(gè)好的未來呢,去一個(gè)自己不滿意的公司工作抖僵,你甘心嗎?
想清楚這一點(diǎn)鲤看,我相信大多數(shù)人都會(huì)有一股干勁了,因?yàn)長Z剛剛準(zhǔn)備開始找實(shí)習(xí)的時(shí)候耍群,BAT這種公司想都不敢想义桂,覺得能進(jìn)個(gè)二線公司就很不錯(cuò)了,后來發(fā)現(xiàn)自己不逼自己一把蹈垢,你真不知道自己有多大能耐慷吊,所以請對找工作保持積極與十二分的熱情,也請認(rèn)真對待每一次筆試面試曹抬。
二溉瓶、基礎(chǔ)
基礎(chǔ)這東西,各個(gè)公司都很看重谤民,尤其是BAT這種大公司堰酿,他們看中人的潛力,他們舍得花精力去培養(yǎng)张足,所以基礎(chǔ)是重中之重触创。之前很多人問我,項(xiàng)目經(jīng)歷少怎么辦为牍,那就去打牢基礎(chǔ)哼绑,當(dāng)你的基礎(chǔ)好的發(fā)指的時(shí)候岩馍,你的其他東西都不重要了。
基礎(chǔ)無外乎幾部分:語言(C/C++或java)抖韩,操作系統(tǒng)蛀恩,TCP/IP,數(shù)據(jù)結(jié)構(gòu)與算法帽蝶,再加上你所熟悉的領(lǐng)域赦肋。這里面其實(shí)有很多東西,各大面試寶典都有列舉励稳。
在這只列舉了Android客戶端所需要的和我面試中所遇到的知識點(diǎn)佃乘,盡量做到全面,如果你掌握了以下知識點(diǎn)驹尼,去面android客戶端應(yīng)該得心應(yīng)手趣避。
后文有介紹個(gè)大BAT面經(jīng),面過的公司有:CVTE新翎、騰訊程帕、阿里、百度地啰、網(wǎng)易愁拭、蘑菇街、小米亏吝,往下翻哦岭埠。
J2SE基礎(chǔ)
1. 九種基本數(shù)據(jù)類型的大小,以及他們的封裝類蔚鸥。
2. Switch能否用string做參數(shù)惜论?
3. equals與==的區(qū)別。
4. Object有哪些公用方法止喷?
5. Java的四種引用馆类,強(qiáng)弱軟虛,用到的場景弹谁。
6. Hashcode的作用乾巧。
7. ArrayList、LinkedList预愤、Vector的區(qū)別沟于。
8. String、StringBuffer與StringBuilder的區(qū)別鳖粟。
9. Map社裆、Set拙绊、List向图、Queue泳秀、Stack的特點(diǎn)與用法。
10. HashMap和HashTable的區(qū)別榄攀。
11. HashMap和ConcurrentHashMap的區(qū)別嗜傅,HashMap的底層源碼。
12. TreeMap檩赢、HashMap吕嘀、LindedHashMap的區(qū)別。
13. Collection包結(jié)構(gòu)贞瞒,與Collections的區(qū)別偶房。
14. try catch finally,try里有return军浆,finally還執(zhí)行么棕洋?
15. Excption與Error包結(jié)構(gòu)。OOM你遇到過哪些情況乒融,SOF你遇到過哪些情況掰盘。
16. Java面向?qū)ο蟮娜齻€(gè)特征與含義。
17. Override和Overload的含義去區(qū)別赞季。
18. Interface與abstract類的區(qū)別愧捕。
19. Static class 與non static class的區(qū)別。
20. java多態(tài)的實(shí)現(xiàn)原理申钩。
21. 實(shí)現(xiàn)多線程的兩種方法:Thread與Runable次绘。
22. 線程同步的方法:sychronized、lock典蜕、reentrantLock等断盛。
23. 鎖的等級:方法鎖、對象鎖愉舔、類鎖钢猛。
24. 寫出生產(chǎn)者消費(fèi)者模式。
25. ThreadLocal的設(shè)計(jì)理念與作用轩缤。
26. ThreadPool用法與優(yōu)勢命迈。
27. Concurrent包里的其他東西:ArrayBlockingQueue、CountDownLatch等等火的。
28. wait()和sleep()的區(qū)別壶愤。
29. foreach與正常for循環(huán)效率對比。
30. Java IO與NIO馏鹤。
31. 反射的作用于原理征椒。
32. 泛型常用特點(diǎn),List<String>能否轉(zhuǎn)為List<Object>湃累。
33. 解析XML的幾種方式的原理與特點(diǎn):DOM勃救、SAX碍讨、PULL。
34. Java與C++對比蒙秒。
35. Java1.7與1.8新特性勃黍。
36. 設(shè)計(jì)模式:單例、工廠晕讲、適配器覆获、責(zé)任鏈、觀察者等等瓢省。
37. JNI的使用弄息。
Java里有很多很雜的東西,有時(shí)候需要你閱讀源碼勤婚,大多數(shù)可能書里面講的不是太清楚疑枯,需要你在網(wǎng)上尋找答案。
推薦書籍:《java核心技術(shù)卷I》《Thinking in java》《java并發(fā)編程》《effictive java》《大話設(shè)計(jì)模式》
JVM
1. 內(nèi)存模型以及分區(qū)蛔六,需要詳細(xì)到每個(gè)區(qū)放什么荆永。
2. 堆里面的分區(qū):Eden,survival from to国章,老年代具钥,各自的特點(diǎn)。
3. 對象創(chuàng)建方法液兽,對象的內(nèi)存分配骂删,對象的訪問定位。
4. GC的兩種判定方法:引用計(jì)數(shù)與引用鏈四啰。
5. GC的三種收集方法:標(biāo)記清除宁玫、標(biāo)記整理、復(fù)制算法的原理與特點(diǎn)柑晒,分別用在什么地方欧瘪,如果讓你優(yōu)化收集方法,有什么思路匙赞?
6. GC收集器有哪些佛掖?CMS收集器與G1收集器的特點(diǎn)。
7. Minor GC與Full GC分別在什么時(shí)候發(fā)生涌庭?
8. 幾種常用的內(nèi)存調(diào)試工具:jmap芥被、jstack、jconsole坐榆。
9. 類加載的五個(gè)過程:加載拴魄、驗(yàn)證、準(zhǔn)備、解析匹中、初始化蚀狰。
10. 雙親委派模型:Bootstrap ClassLoader、Extension ClassLoader职员、ApplicationClassLoader。
11. 分派:靜態(tài)分派與動(dòng)態(tài)分派跛溉。
JVM過去過來就問了這么些問題焊切,沒怎么變,內(nèi)存模型和GC算法這塊問得比較多芳室,可以在網(wǎng)上多找?guī)灼┛蛠砜纯础?/p>
推薦書籍:《深入理解java虛擬機(jī)》
操作系統(tǒng)
1. 進(jìn)程和線程的區(qū)別专肪。
2. 死鎖的必要條件,怎么處理死鎖堪侯。
3. Window內(nèi)存管理方式:段存儲(chǔ)嚎尤,頁存儲(chǔ),段頁存儲(chǔ)伍宦。
4. 進(jìn)程的幾種狀態(tài)芽死。
5. IPC幾種通信方式。
6. 什么是虛擬內(nèi)存次洼。
7. 虛擬地址关贵、邏輯地址、線性地址卖毁、物理地址的區(qū)別揖曾。
因?yàn)槭亲鯽ndroid的這一塊問得比較少一點(diǎn),還有可能上我簡歷上沒有寫操作系統(tǒng)的原因亥啦。
推薦書籍:《深入理解現(xiàn)代操作系統(tǒng)》
TCP/IP
1. OSI與TCP/IP各層的結(jié)構(gòu)與功能炭剪,都有哪些協(xié)議。
2. TCP與UDP的區(qū)別翔脱。
3. TCP報(bào)文結(jié)構(gòu)奴拦。
4. TCP的三次握手與四次揮手過程,各個(gè)狀態(tài)名稱與含義届吁,TIMEWAIT的作用粱坤。
5. TCP擁塞控制。
6. TCP滑動(dòng)窗口與回退N針協(xié)議瓷产。
7. Http的報(bào)文結(jié)構(gòu)站玄。
8. Http的狀態(tài)碼含義。
9. Http request的幾種類型濒旦。
10. Http1.1和Http1.0的區(qū)別
11. Http怎么處理長連接株旷。
12. Cookie與Session的作用于原理。
13. 電腦上訪問一個(gè)網(wǎng)頁,整個(gè)過程是怎么樣的:DNS晾剖、HTTP锉矢、TCP、OSPF齿尽、IP沽损、ARP。
14. Ping的整個(gè)過程循头。ICMP報(bào)文是什么绵估。
15. C/S模式下使用socket通信,幾個(gè)關(guān)鍵函數(shù)卡骂。
16. IP地址分類国裳。
17. 路由器與交換機(jī)區(qū)別。
網(wǎng)絡(luò)其實(shí)大體分為兩塊全跨,一個(gè)TCP協(xié)議缝左,一個(gè)HTTP協(xié)議,只要把這兩塊以及相關(guān)協(xié)議搞清楚浓若,一般問題不大渺杉。
推薦書籍:《TCP/IP協(xié)議族》
數(shù)據(jù)結(jié)構(gòu)與算法
1. 鏈表與數(shù)組。
2. 隊(duì)列和棧挪钓,出棧與入棧少办。
3. 鏈表的刪除、插入诵原、反向英妓。
4. 字符串操作。
5. Hash表的hash函數(shù)绍赛,沖突解決方法有哪些蔓纠。
6. 各種排序:冒泡、選擇吗蚌、插入腿倚、希爾、歸并蚯妇、快排敷燎、堆排、桶排箩言、基數(shù)的原理硬贯、平均時(shí)間復(fù)雜度、最壞時(shí)間復(fù)雜度陨收、空間復(fù)雜度饭豹、是否穩(wěn)定鸵赖。
7. 快排的partition函數(shù)與歸并的Merge函數(shù)。
8. 對冒泡與快排的改進(jìn)拄衰。
9. 二分查找它褪,與變種二分查找。
10. 二叉樹翘悉、B+樹茫打、AVL樹、紅黑樹妖混、哈夫曼樹老赤。
11. 二叉樹的前中后續(xù)遍歷:遞歸與非遞歸寫法,層序遍歷算法源葫。
12. 圖的BFS與DFS算法,最小生成樹prim算法與最短路徑Dijkstra算法砖瞧。
13. KMP算法息堂。
14. 排列組合問題。
15. 動(dòng)態(tài)規(guī)劃块促、貪心算法荣堰、分治算法。(一般不會(huì)問到)
16. 大數(shù)據(jù)處理:類似10億條數(shù)據(jù)找出最大的1000個(gè)數(shù).........等等
算法的話其實(shí)是個(gè)重點(diǎn)竭翠,因?yàn)樽詈蠖际且銓懘a振坚,所以算法還是需要花不少時(shí)間準(zhǔn)備,這里有太多算法題斋扰,寫不全渡八,我的建議是沒事多在OJ上刷刷題(牛客網(wǎng)传货、leetcode等)屎鳍,劍指offer上的算法要能理解并自己寫出來,編程之美也推薦看一看问裕。
推薦書籍:《大話數(shù)據(jù)結(jié)構(gòu)》《劍指offer》《編程之美》
Android
1. Activity與Fragment的生命周期逮壁。
2. Acitivty的四中啟動(dòng)模式與特點(diǎn)。
3. Activity緩存方法粮宛。
4. Service的生命周期窥淆,兩種啟動(dòng)方法,有什么區(qū)別巍杈。
5. 怎么保證service不被殺死忧饭。
6. 廣播的兩種注冊方法,有什么區(qū)別筷畦。
7. Intent的使用方法眷昆,可以傳遞哪些數(shù)據(jù)類型。
8. ContentProvider使用方法。
9. Thread亚斋、AsycTask作媚、IntentService的使用場景與特點(diǎn)。
10. 五種布局: FrameLayout 帅刊、 LinearLayout 纸泡、 AbsoluteLayout 、 RelativeLayout 赖瞒、TableLayout 各自特點(diǎn)及繪制效率對比干跛。
11. Android的數(shù)據(jù)存儲(chǔ)形式。
12. Sqlite的基本操作勘纯。
13. Android中的MVC模式论咏。
14. Merge、ViewStub的作用袍嬉。
15. Json有什么優(yōu)劣勢境蔼。
16. 動(dòng)畫有哪兩類,各有什么特點(diǎn)伺通?
17. Handler箍土、Loop消息隊(duì)列模型,各部分的作用罐监。
18. 怎樣退出終止App吴藻。
19. Asset目錄與res目錄的區(qū)別。
20. Android怎么加速啟動(dòng)Activity弓柱。
21. Android內(nèi)存優(yōu)化方法:ListView優(yōu)化沟堡,及時(shí)關(guān)閉資源,圖片緩存等等矢空。
22. Android中弱引用與軟引用的應(yīng)用場景弦叶。
23. Bitmap的四中屬性,與每種屬性隊(duì)形的大小妇多。
24. View與View Group分類伤哺。自定義View過程:onMeasure()、onLayout()者祖、onDraw()立莉。
25. Touch事件分發(fā)機(jī)制。
26. Android長連接七问,怎么處理心跳機(jī)制蜓耻。
27. Zygote的啟動(dòng)過程。
28. Android IPC:Binder原理械巡。
29. 你用過什么框架刹淌,是否看過源碼饶氏,是否知道底層原理。
30. Android5.0有勾、6.0新特性疹启。
Android的話,多是一些項(xiàng)目中的實(shí)踐蔼卡,使用多了喊崖,自然就知道了,還有就是多逛逛一些名人的博客雇逞,書上能講到的東西不多荤懂。另外android底層的東西,有時(shí)間的話可以多了解一下塘砸,加分項(xiàng)节仿。
推薦書籍:《瘋狂android講義》《深入理解android》其他綜合性的書籍也需要閱讀,推薦:《程序員面試筆試寶典》《程序員面試金典》掉蔬。
我私藏了一些熱門面試題廊宪,需要更多面試題的可以加入月亮私人的QQ群架構(gòu)華山論劍:836442475【點(diǎn)擊進(jìn)入領(lǐng)取】
三、 項(xiàng)目
關(guān)于項(xiàng)目眉踱,這部分每個(gè)人的所做的項(xiàng)目不同挤忙,所以不能具體的講霜威。項(xiàng)目不再與好與不好谈喳,在于你會(huì)不會(huì)包裝,有時(shí)候一個(gè)很low的項(xiàng)目也能包裝成比較高大上的項(xiàng)目戈泼,多用一些專業(yè)名詞婿禽,突出關(guān)鍵字,能使面試官能比較容易抓住重點(diǎn)大猛。在聊項(xiàng)目的過程中扭倾,其實(shí)你的整個(gè)介紹應(yīng)該是有一個(gè)大體的邏輯,這個(gè)時(shí)候是在考驗(yàn)?zāi)愕谋磉_(dá)與敘述能力挽绩,所以好好準(zhǔn)備很重要膛壹。
面試官喜歡問的問題無非就幾個(gè)點(diǎn):
1. XXX(某個(gè)比較重要的點(diǎn))是怎么實(shí)現(xiàn)的?2. 你在項(xiàng)目中遇到的最大的困難是什么唉堪,怎么解決的模聋?3. 項(xiàng)目某個(gè)部分考慮的不夠全面,如果XXXX唠亚,你怎么優(yōu)化链方?4. XXX(一個(gè)新功能)需要實(shí)現(xiàn),你有什么思路灶搜?
其實(shí)你應(yīng)該能夠預(yù)料到面試官要問的地方祟蚀,請?zhí)崆皽?zhǔn)備好工窍,如果被問到?jīng)]有準(zhǔn)備到的地方,也不要緊張前酿,一定要說出自己的想法患雏,對不對都不是關(guān)鍵,主要是有自己的想法薪者,另外纵苛,你應(yīng)該對你的項(xiàng)目整體框架和你做的部分足夠熟悉。
四言津、 其他
你應(yīng)該問的問題
面試?yán)锕ト耍詈竺嫱曛笠话忝嬖嚬俣紩?huì)問你,你有沒有什么要問他的悬槽。其實(shí)這個(gè)問題是有考究的怀吻,問好了其實(shí)是有加分的,一般不要問薪資初婆,主要應(yīng)該是:關(guān)于公司的蓬坡、技術(shù)和自身成長的。
以下是我常問的幾個(gè)問題磅叛,如果需要可以參考:
1. 貴公司一向以XXX著稱屑咳,能不能說明一下公司這方面的特點(diǎn)?
2. 貴公司XXX業(yè)務(wù)發(fā)展很好弊琴,這是公司發(fā)展的重點(diǎn)么兆龙?
3. 對技術(shù)和業(yè)務(wù)怎么看?
4. 貴公司一般的團(tuán)隊(duì)是多大敲董,幾個(gè)人負(fù)責(zé)一個(gè)產(chǎn)品或者業(yè)務(wù)紫皇?
5. 貴公司的開發(fā)中是否會(huì)使用到一些最新技術(shù)?
6. 對新人有沒有什么培訓(xùn)腋寨,會(huì)不會(huì)安排導(dǎo)師聪铺?
7. 對Full Stack怎么看?
8. 你覺得我有哪些需要提高的地方萄窜?
知識面
除了基礎(chǔ)外铃剔,你還應(yīng)該對其他領(lǐng)域的知識有多少有所涉獵。對于你所熟悉的領(lǐng)域查刻,你需要多了解一點(diǎn)新技術(shù)與科技前沿键兜,你才能和面試官談笑風(fēng)生。
軟實(shí)力
什么是軟實(shí)力赖阻,就是你的人際交往蝶押、靈活應(yīng)變能力,在面試過程中火欧,良好的禮節(jié)棋电、流暢的表達(dá)茎截、積極的交流其實(shí)都是非常重要的。很多公司可能不光看你的技術(shù)水平怎么樣赶盔,而更看重的是你這個(gè)人怎么樣的企锌。所以在面試過程中,請保持誠信于未、積極撕攒、樂觀、幽默烘浦,這樣更容易得到公司青睞抖坪。
很多時(shí)候我們都會(huì)遇到一個(gè)情況,就是面試官的問題我不會(huì)闷叉,這時(shí)候大多數(shù)情況下不要馬上說我不會(huì)擦俐,要懂得牽引,例如面試官問我C++的多態(tài)原理握侧,我不懂蚯瞧,但我知道java的,哪我可以向面試官解釋說我知道java的品擎,類似的這種可以往相關(guān)的地方遷移(但是需要注意的是一定不要不懂裝懂埋合,被拆穿了是很尷尬的),意思就是你要盡可能的展示自己萄传,表現(xiàn)出你的主動(dòng)性甚颂,向面試官推銷自己。
還有就是遇到智力題的時(shí)候盲再,不要什么都不說西设,面試官其實(shí)不是在看你的答案瓣铣,而是在看你的邏輯思維答朋,你只要說出你自己的見解,有一定的思考過程就行棠笑。
五梦碗、 面經(jīng)
LZ應(yīng)聘的職位都是android客戶端開發(fā)。
面經(jīng)其實(shí)說來話長蓖救,包括實(shí)習(xí)的話面過的公司有:CVTE洪规、騰訊、阿里循捺、百度斩例、網(wǎng)易、蘑菇街从橘、小米念赶。最早得追溯到到今年3月份础钠,那時(shí)候剛過完年,然后阿里的實(shí)習(xí)內(nèi)推就開始了叉谜,我基本都沒什么準(zhǔn)備旗吁,就突如其來的接到了人生中第一個(gè)面試電話。
阿里實(shí)習(xí)內(nèi)推一面:
電話面試停局, 由于是第一次面試很钓,所以非常緊張,項(xiàng)目都沒怎么說清楚董栽。然后面試官就開始問項(xiàng)目細(xì)節(jié)了码倦,這里我關(guān)于一個(gè)項(xiàng)目細(xì)節(jié)和面試官有不同的看法,面試官說我這樣做有問題锭碳,然后我說我們確實(shí)是這樣做的叹洲,并沒有出什么錯(cuò),差點(diǎn)和面試官吵起來工禾,最后我還是妥協(xié)了运提。然后問了我一個(gè)怎么對傳輸?shù)臄?shù)據(jù)加密,我答的很挫闻葵,然后面試官就開始鄙視我:你這個(gè)基礎(chǔ)不好民泵,那個(gè)基礎(chǔ)不好,那你說說你還有其他什么優(yōu)勢沒槽畔?Blabla緊張的說了一些…………只面了30分鐘不到栈妆,然后妥妥的就掛了。
經(jīng)過這次面試突然感覺人生的艱辛厢钧,幾天后我們教研室的其他同學(xué)陸續(xù)開始了面試鳞尔,他們都很順利,其中我的室友(單程車票)很順利的拿到了offer早直,他是個(gè)大神寥假,然后我就壓力無比的大。制定了整套復(fù)習(xí)計(jì)劃霞扬,從早上9點(diǎn)看書看到晚上10點(diǎn)糕韧。
到了3月15號左右有CVTE面試,第一次面試是群面喻圃,比較坑萤彩,坐了一個(gè)小時(shí)的車過去群面了5分鐘,沒什么好說的斧拍。
CVTE實(shí)習(xí)面 :
在自我介紹和項(xiàng)目后雀扶,面試官開始問一些java基礎(chǔ),object有哪些方法肆汹?這個(gè)還能說了一些愚墓。問hashmap有多大窍侧,這個(gè)當(dāng)時(shí)一臉茫然,還sb的答了一個(gè)65535转绷。然后面試官讓我寫三分鐘內(nèi)寫一個(gè)二分查找伟件,當(dāng)時(shí)也是第一次手寫代碼,并且還計(jì)時(shí)议经,完全沒經(jīng)驗(yàn)斧账,最后超時(shí)寫了出來。中間又問了我一堆基礎(chǔ)煞肾,都答得不是很完整咧织。最后問我遇到過OOM的情況沒有,什么情況下會(huì)OOM籍救。這個(gè)也沒答出來习绢,然后又妥妥的掛了。
這次經(jīng)歷告訴我蝙昙,我是缺少面試經(jīng)驗(yàn)闪萄,和現(xiàn)場寫代碼的能力,基礎(chǔ)還需要多加強(qiáng)奇颠。所以我開始各種準(zhǔn)備败去,在一個(gè)月的時(shí)間里看了四本面試書(程序員面試寶典、java程序員面試寶典烈拒、程序員面試筆試寶典圆裕、劍指offer),把所有關(guān)于數(shù)據(jù)結(jié)構(gòu)和算法的東西用代碼寫了一遍荆几。
然后到了四月初吓妆,騰訊來了,我最開始還是非常向往騰訊的吨铸,但就當(dāng)時(shí)那個(gè)情況行拢,我對自己不報(bào)太大希望,覺得能進(jìn)BAT這樣的頂級公司是個(gè)奢侈的夢想焊傅。
騰訊的面試是在一個(gè)5星級酒店里面剂陡,逼格高大上狈涮,感覺問的東西也比較多狐胎,感覺喜歡問智力題,但是我沒遇到歌馍。
騰訊實(shí)習(xí):
1面:50分鐘左右握巢, 面試的時(shí)候還是有些緊張的,但是運(yùn)氣好松却,遇到了一個(gè)學(xué)校的師兄暴浦,他一直叫我不要緊張溅话。幾個(gè)比較關(guān)鍵的問題:死鎖的必要條件,怎么解決歌焦,java和c++比有什么優(yōu)勢飞几,java同步方法,activity生命周期独撇,中間讓我設(shè)計(jì)了個(gè)銀行排隊(duì)系統(tǒng)屑墨,我說了一堆。然后讓我寫了一個(gè)計(jì)算一個(gè)int里面二進(jìn)制有幾個(gè)1纷铣,然后我用最高效的方法(n=n&n-1)寫出來之后卵史,面試官有點(diǎn)意外,還說沒見過這么寫的搜立,讓我跟他解釋一下以躯。后面就是拉拉家常,問我對工作地點(diǎn)怎么看啄踊,讓我對比qq和微信忧设,一面出來之后,面試官讓我留意通知颠通,心想是過了见转,其實(shí)發(fā)揮的不怎么好。
就在會(huì)學(xué)校的路上蒜哀,都要到學(xué)校了斩箫,收到了騰訊二面的通知,下午3點(diǎn)撵儿。然后我又跑回去二面乘客。
2面:二面是一個(gè)很嚴(yán)肅的人,看上去就比較資深那種淀歇,一直都不笑易核,后面才知道是手機(jī)管家T4的專家。一開始就問我項(xiàng)目里浪默,心跳包是怎么設(shè)計(jì)的牡直,我項(xiàng)目里并沒有用心跳,然后只能跟他說沒做纳决,問我用json傳輸數(shù)據(jù)有什么不好(我只知道用哪想過有什么不好)碰逸。又問了http和socket的區(qū)別,兩個(gè)協(xié)議哪個(gè)更高效一點(diǎn)阔加,遇到過java內(nèi)存泄露沒有饵史,用過哪些調(diào)試java內(nèi)存工具,java四種引用。多數(shù)都是項(xiàng)目上的東西胳喷,基礎(chǔ)的東西沒問太多湃番,然后感覺自己答的不是很好,很多都不知道吭露,而且還答錯(cuò)了吠撮。其實(shí)我感覺我應(yīng)該是過不了的,但是最后我問問題的時(shí)候讲竿,我讓他評價(jià)下我的表現(xiàn)纬向,他說不好評價(jià),我自己說了一堆戴卜,說在學(xué)校里確實(shí)見識到的東西比較少逾条,很多東西沒考慮全面,然后他表示贊同投剥,和我探討了一番师脂,我覺得最后這個(gè)問題給我加了不少分。二面也面了50分鐘左右江锨。
回來后發(fā)現(xiàn)我的狀態(tài)一直沒變吃警,而他們二面完了的都到了HR面了,我以為我已經(jīng)掛定了啄育,后來在一天晚上12點(diǎn)的時(shí)候酌心,驚喜的收到了第二天HR面的短信,當(dāng)晚上幾乎高興得一晚上沒睡著覺挑豌。
3面(HR):就是hr面安券,也就面了十幾分鐘,聊聊天氓英,問問哪的人侯勉,未來什么打算的等等,基本不怎么掛人就不詳細(xì)寫了铝阐。
就這樣拿到了人生中第一個(gè)實(shí)習(xí)offer址貌。
后面找實(shí)習(xí)的心就放松了,沒有復(fù)習(xí)了徘键。然后到了5月5號练对,阿里來了。對阿里也只是想去面一面的心態(tài)了吹害,因?yàn)橐呀?jīng)有騰訊的offer了螟凭,就沒想太多。
阿里
實(shí)習(xí)1面:面過騰訊之后發(fā)現(xiàn)自己已經(jīng)比較淡定了赠制,面試得時(shí)候能夠比較好的交談了赂摆。這一面也遇到一個(gè)比較好的面試官挟憔,能很輕松的和他交流钟些。主要的問題是android的:activity的生命周期烟号、activity的四種啟動(dòng)模式(當(dāng)時(shí)忘了一些沒答全)、線性布局和相對布局政恍、多線程請求汪拥,java GC算法與GC方法,內(nèi)存模型篙耗,有一個(gè)比較特別的問題是問我微信的朋友圈怎么設(shè)計(jì)迫筑,然后我把思路跟他說了,其他的就是問了項(xiàng)目相關(guān)的了宗弯。還問了我一個(gè)覺得技術(shù)深度重要還是技術(shù)寬度重要脯燃,一面感覺還是比較基礎(chǔ)的。
實(shí)習(xí)2面:這一面就比較虐心蒙保,碰到一個(gè)阿里云的CTO辕棚,一上去項(xiàng)目看都不看,直接問我寫過多少行代碼邓厕,我說至少3逝嚎、4萬行,然后他讓我寫了兩個(gè)題:一個(gè)找素?cái)?shù)详恼,一個(gè)遞歸求階層补君,對我也算手下留情(他后來讓我同學(xué)寫AVL樹的插入算法,想想也是醉了)昧互。后面就各種基礎(chǔ)了挽铁,java的基礎(chǔ)挨個(gè)問了一遍,比較關(guān)鍵多線程實(shí)現(xiàn)敞掘,鎖的幾種等級等屿储,反射的用法,wait()和sleep()(討論這個(gè)的時(shí)候他把我說暈了)渐逃,Java還好够掠,多數(shù)能應(yīng)付,然后他就開始問c++的了茄菊。雖然是基礎(chǔ)疯潭,但是lz忘了差不多了,什么指針數(shù)組和數(shù)組指針面殖,虛函數(shù)竖哩,多態(tài)實(shí)現(xiàn)(這個(gè)我扯到j(luò)ava上了)等等,問了很多脊僚,很多都沒答上來相叁,然后他說我基礎(chǔ)不太好(我想說我簡歷上寫的了解C++遵绰,為什么要追著我問TT)。
就這樣出來了增淹,本來以為掛了椿访,后面被通知過了。同學(xué)都只有2面技術(shù)面虑润,我居然多了一面成玫,叫交叉面試,心想這下肯定完了拳喻。
實(shí)習(xí)3面:這一面遇到了后面我去實(shí)習(xí)時(shí)候的部門boss哭当,人非常好,來的時(shí)候走的時(shí)候都要和我握手冗澈,非常的平易近人钦勘。這一面還是問項(xiàng)目上的一些東西居多,基礎(chǔ)就問了個(gè)java多線程亚亲,各個(gè)排序的時(shí)間復(fù)雜度彻采、思想。技術(shù)問了半個(gè)小時(shí)朵栖,后面半個(gè)小時(shí)就開始各種聊人生了(@_@)颊亮,我家是哪的,父母干嘛的陨溅,中學(xué)怎么樣终惑,大學(xué)怎么樣,等等门扇,完全就不像是技術(shù)面嘛(后來才知道雹有,我一個(gè)同學(xué)一開始來就和他聊人生,還聊過了臼寄。再次感嘆找工作是看緣分吶)霸奕。
實(shí)習(xí)4面(HR) :阿里hr比騰訊hr面專業(yè),面了一個(gè)小時(shí)吉拳,把我的生活經(jīng)歷趴了一遍质帅,(問了類似你的優(yōu)缺點(diǎn),最讓你高興的一件事留攒,最讓你傷心的一件事煤惩,你的職業(yè)規(guī)劃,你的理想等等炼邀,這種魄揉,現(xiàn)在想不起來了)也沒什么特別好說的。
面完后第二天去圓桌簽offer拭宁,就這樣又拿到了阿里的實(shí)習(xí)offer洛退。
LZ后面衡量了杭州阿里B2B和廣州騰訊MIG瓣俯,最后選擇去了阿里,因?yàn)樵诳偛勘樱杏X大boss人比較好彩匕,發(fā)展前途可能不錯(cuò),而且留下來的幾率比較大摇零,而騰訊是一個(gè)分部門推掸,感覺可能不是很有前景(但是后來了解到其實(shí)廣州騰訊MIG發(fā)展前景非常好桶蝎,環(huán)境也非常和諧驻仅,我同學(xué)去實(shí)習(xí)的都留下來了。哎登渣,只能感嘆選擇是個(gè)大問題)噪服。在阿里實(shí)習(xí)的兩個(gè)月時(shí)間也挺愉快的,學(xué)到了不少東西胜茧,也認(rèn)識了很好的師兄和主管粘优,只因最后被擁抱了變化沒有拿到正式offer。
實(shí)習(xí)面經(jīng)就已經(jīng)寫完了呻顽,后面是正式找工作的經(jīng)歷雹顺,主要是內(nèi)推比較多:騰訊、網(wǎng)易廊遍、蘑菇街嬉愧、小米,校招就面了家百度喉前。
在阿里實(shí)習(xí)的時(shí)候没酣,面了網(wǎng)易和蘑菇街。
網(wǎng)易
內(nèi)推1面:?電話面卵迂,一天在里中午休息的時(shí)候面的裕便。這一面我面得很爛,由于在阿里實(shí)習(xí)见咒,面試官恰好也在阿里呆過偿衰,問了我在阿里學(xué)到了哪些東西,看過哪些框架改览,看過源碼沒有下翎,我支支吾吾說了一些,面試官不太滿意(我表示我都說不全啊恃疯,在阿里就來了不久漏设,哪那么多時(shí)間看源碼)。項(xiàng)目各種細(xì)節(jié)問一通之后今妄,開始問基礎(chǔ)郑口,Http報(bào)文結(jié)構(gòu)鸳碧,Handler、Looper模型犬性,ThreadLocal(這個(gè)LZ當(dāng)時(shí)沒答上來)瞻离,怎么使service不被殺死,android內(nèi)存優(yōu)化乒裆,自己實(shí)現(xiàn)線程隊(duì)列模型套利,問我怎么設(shè)計(jì)(這個(gè)當(dāng)時(shí)被前面的問題問蒙了,直接說不知道了)鹤耍,面了20+分鐘肉迫,感覺答得都不怎么好,然后面試官問我說還有沒有什么比較擅長的他沒有問道的稿黄,我就把a(bǔ)ndroid Framework里zygote的啟動(dòng)和Binder通信說了一遍(這里強(qiáng)行裝了一次逼)喊衫。
面完之后本以為掛定了,然后師姐跟我說居然過了杆怕,也是夠神奇族购,我覺得是我后面補(bǔ)充的內(nèi)容救了我。
內(nèi)推2面:二面是現(xiàn)場面陵珍,就在阿里濱江區(qū)的隔壁寝杖。時(shí)間是一天中午,吃了飯就到了隔壁互纯。面試官是個(gè)比較年輕人瑟幕,可能大不了我?guī)讱q,也是非常好說話伟姐,開始也是聊項(xiàng)目收苏,我把在阿里做的app和自己寫的小框架拿出來,他就指著上面各種問愤兵,這里怎么實(shí)現(xiàn)鹿霸,會(huì)有什么問題,你怎么解決秆乳,然后他描述了一個(gè)場景說懦鼠,兩個(gè)activity,前面的是個(gè)dialog activity屹堰,怎么在dialog activity存在的情況下改變后面的activity(lz答的用廣播)肛冶。android怎么解決緩存,要是內(nèi)存超了怎么辦扯键?然后扯到了JVM睦袖,GC判定算法與方法,哪個(gè)區(qū)域用什么GC算法荣刑,怎么改進(jìn)復(fù)制算法馅笙。然后是基礎(chǔ)伦乔,也像一面一樣問了一些,hashmap和concurrntHashmap的區(qū)別董习、泛型能否強(qiáng)制轉(zhuǎn)換烈和。然后是算法,問了快排和歸并的平均時(shí)間復(fù)雜度與最差時(shí)間復(fù)雜度皿淋,出了個(gè)算法題:怎么找到一個(gè)隨機(jī)數(shù)組的前50大數(shù)招刹、中間50大數(shù),(這個(gè)用最小堆和partition函數(shù))窝趣,復(fù)雜度是多少疯暑。
面完之后其實(shí)感覺還不錯(cuò),基本都打答上來了高帖,順利進(jìn)入三面缰儿。
內(nèi)推3面(HR):?hr面也是現(xiàn)場畦粮,也聊了很多散址,問我為什么要從阿里來網(wǎng)易,有什么打算宣赔,你看中網(wǎng)易的什么(主要是針對我是在阿里實(shí)習(xí)來問的预麸,我就講了一堆網(wǎng)易的優(yōu)勢),讓來杭州工作愿不愿意儒将。還跟我說了吏祸,這次內(nèi)推是優(yōu)中選優(yōu),有名額限制钩蚊,如果沒有通過贡翘,請繼續(xù)關(guān)注網(wǎng)易校招。
后面讓師姐查了下狀態(tài)砰逻,狀態(tài)顯示是三面已通過鸣驱。但是最后沒有收到offer,還是有點(diǎn)小失望蝠咆。
蘑菇街
內(nèi)推1面:?電話面踊东,也是在一個(gè)中午面的。18分鐘刚操,問了一些項(xiàng)目闸翅,主要是問基礎(chǔ)、問得非尘账基礎(chǔ):Arraylist與LinkedList區(qū)別坚冀,String與StringBuffer用法,HashMap與HashTable區(qū)別鉴逞,Synchronized用法等等等等(非臣悄常基礎(chǔ))联喘,這不一一列舉了,然后很順利的就過了辙纬。2面是在20天后了豁遭,也不知道蘑菇街出了什么岔子。
內(nèi)推2面 :也是電話面贺拣,CTO面試蓖谢,就整體聊了項(xiàng)目,我在項(xiàng)目中學(xué)到了什么譬涡,遇到什么困難怎么解決的闪幽,在阿里實(shí)習(xí)學(xué)到了哪些東西,有看過源碼么涡匀,我的優(yōu)缺點(diǎn)盯腌,我為什么選擇蘑菇街,我了解蘑菇街哪些東西陨瘩。最后答完感覺自己答得還行但是也沒有過梦湘,不知道為什么艘策。
小米
內(nèi)推1面:電話面,大概40分鐘,面試的時(shí)候那邊很吵檬姥,不過幸好面試官語速慢老玛,而且我答完一個(gè)問題后坦袍,面試官會(huì)和我交流哪里沒有答好匕争。沒有問項(xiàng)目,就問了基礎(chǔ)贯卦,問題也不多:HashMap刪除元素的方法资柔,for each和正常for的用在不同數(shù)據(jù)結(jié)構(gòu)(ArrayList、set撵割、hashmap)上的效率區(qū)別(LZ表示沒有看過源碼贿堰,不知道),static class和non-static class的區(qū)別睁枕,一個(gè)大文件幾個(gè)GB官边,怎么實(shí)現(xiàn)復(fù)制(這個(gè)也沒有答好)。然后問了兩個(gè)算法:之前一個(gè)出現(xiàn)過外遇,另一個(gè)是在git里面注簿,如果有n個(gè)分支,m次commit怎么找到任意兩個(gè)節(jié)點(diǎn)共同的那個(gè)父節(jié)點(diǎn)(這個(gè)當(dāng)時(shí)我想錯(cuò)了跳仿,想到二叉樹上去了诡渴,沒有答好)。然后讓兩個(gè)算法用代碼實(shí)現(xiàn),1個(gè)小時(shí)內(nèi)寫好email給他妄辩。
小米面了以后也杳無音信惑灵,估計(jì)也是要求很高,畢竟解決北京戶口眼耀。
其實(shí)在阿里實(shí)習(xí)的時(shí)候很早就開始投簡歷了英支,因?yàn)槌鋈?shí)習(xí)一段時(shí)間后,感覺還是很想留在成都(因?yàn)閘z是四川人)哮伟。騰訊我沒有參加校招面試干花,直接走的內(nèi)推流程。
騰訊
1面:電話面楞黄,7月20+號池凄,很水,就問了項(xiàng)目鬼廓,聊了可能有十多分鐘肿仑,然后面試官說,內(nèi)推沒有什么作用碎税,還是要走校招面試(我覺得他可能是有其他事情尤慰,想節(jié)省時(shí)間),你在實(shí)習(xí)不能回來蚣录,還是要現(xiàn)場面一次才行割择,然后就留了個(gè)電話讓我校招聯(lián)系他,這樣就完了萎河。2面是在我回學(xué)校后了。
2面:9月6號我回學(xué)校之后蕉饼,下午3點(diǎn)接到電話虐杯,讓我晚上7點(diǎn)去騰訊現(xiàn)場面的(我在想為何是在晚上,lz學(xué)校到騰訊要2個(gè)小時(shí)昧港,還讓不讓人回來了)擎椰,當(dāng)時(shí)緊張得要死,因?yàn)閯倧陌⒗锘貋聿痪么捶剩紱]怎么好好準(zhǔn)備基礎(chǔ)达舒,在地鐵上看了兩本基礎(chǔ)書,亞歷山大叹侄。面試是在騰訊里面巩搏,微信部門,面試官是個(gè)中年人(現(xiàn)在是LZ的主管)趾代,看起來還是比較沉穩(wěn)的那種贯底。也沒問基礎(chǔ)技術(shù)問題,就聊項(xiàng)目細(xì)節(jié)和一些可優(yōu)化的地方撒强,然后把lz的簡歷看了翻了一遍禽捆,問了一遍笙什,然后就是問我在阿里學(xué)到了什么,為什么當(dāng)時(shí)選擇了阿里(這時(shí)候肯定要各種跪舔芭呦搿)琐凭。然后后來他說他是做ios的,我在想難怪不問我基礎(chǔ)浊服。
面完了說一周之內(nèi)通知我結(jié)果淘正,也沒報(bào)太大希望,感覺并不太對口臼闻,因?yàn)楦悴欢疄槭裁词亲鰅os的來面我鸿吆。
兩天之后,在阿里HRG電話通知我擁抱變化之后述呐,幾乎同一時(shí)間惩淳,騰訊電話通知我拿到了成都o(jì)ffer,我只能感嘆太巧了(大概這大半輩子的運(yùn)氣都花光了)乓搬。
后來校招開始后思犁,只面了百度一家公司,百度確實(shí)比較重視基礎(chǔ)與算法进肯,看中技術(shù)激蹲。
百度
1面:大概1個(gè)小時(shí),又是個(gè)做ios的師兄面試我江掩,自然就只能聊項(xiàng)目了学辱,我給他展示了我做的app后,也問了些技術(shù)問題环形,緩存怎么做的策泣,內(nèi)存溢出怎么處理。然后兩個(gè)算法題:把一個(gè)數(shù)組中奇數(shù)放前面抬吟,偶數(shù)放后面萨咕,這個(gè)要求寫出來。另一個(gè)是3億條IP中火本,怎么找到次數(shù)出現(xiàn)最多的5000條IP危队。最后問了是否愿意去北京,對于技術(shù)的看法钙畔。
2面:50分鐘茫陆,寫個(gè)4個(gè)程序題:反轉(zhuǎn)鏈表、冒泡排序刃鳄、生產(chǎn)者消費(fèi)者盅弛,這三個(gè)都還好寫,很快的寫出來了,還有一個(gè)題是在一組排序數(shù)中挪鹏,給定一個(gè)數(shù)见秽,返回最接近且不大于這個(gè)數(shù)的位置,要求時(shí)間在O(logn)(這個(gè)想了一會(huì)讨盒,用二分查找解取,然后特殊處理了一下),最后他看不懂返顺,要我一步一步解釋禀苦。花了好一整子遂鹊,最后問了個(gè)java反射振乏,就讓我走了。百度果然是重視算法秉扑。
3面:這一面應(yīng)該是個(gè)技術(shù)高層慧邮,籠統(tǒng)的問了我一下項(xiàng)目的問題,然后問了幾個(gè)基礎(chǔ):java反射機(jī)制舟陆;android動(dòng)畫有哪些误澳,什么特點(diǎn)?TCP/IP層次架構(gòu)秦躯,每層的作用與協(xié)議忆谓;TCP擁塞控制;滑動(dòng)窗口是怎么設(shè)計(jì)的踱承,有什么好處倡缠;android的布局都有哪些。問完這些之后勾扭,然后就是有點(diǎn)類似于HR的聊天了:如果這次面試過了你覺得是因?yàn)槭裁丛蛘绷穑瑳]過呢?你覺得百度怎么樣妙色?你對技術(shù)路線什么打算?有些和前面重復(fù)的就不寫了慧耍。然后他讓我問他問題身辨,我就連續(xù)問了5、6個(gè)問題芍碧,最后愉快的走了煌珊。
百度這兩天給結(jié)果。
六泌豆、 寫在最后
關(guān)于選擇
LZ當(dāng)時(shí)實(shí)習(xí)的時(shí)候定庵,杭州阿里和廣州騰訊選擇去了阿里,但是卻因?yàn)閾肀ё兓瘺]有留下來,相反這邊在騰訊實(shí)習(xí)的同學(xué)卻很順利蔬浙。但是也是因?yàn)闆]有去廣州騰訊猪落,最后我能留在成都騰訊。選擇是一件非常重要的事情畴博,它決定著你的未來笨忌,但是也有一點(diǎn)你得知道:塞翁失馬焉知非福,現(xiàn)在看起來不太好的選擇俱病,不一定將來就好官疲,未來有太多未知數(shù)。
心懷感恩
其實(shí)一路走來亮隙,我也是在成長途凫,從最初的不自信,到了最后面試一切都比較冷靜與沉著溢吻。我一直相信维费,機(jī)會(huì)是留給有準(zhǔn)備的人,所以煤裙,請?zhí)嵩鐪?zhǔn)備掩完,越早越好。我很感激能有那么多人幫助我和肯定我硼砰,沒有最初騰訊的肯定且蓬,我肯定不會(huì)走的這么順利,所以我很感恩哪些讓我通過的人题翰,也感謝我們實(shí)驗(yàn)室的兄弟姐妹恶阴,給了我良好的學(xué)習(xí)成長環(huán)境,心懷感恩才能好運(yùn)常在豹障。
最后最后
針對于上面的面試題我總結(jié)出了互聯(lián)網(wǎng)公司java程序員面試涉及到的絕大部分面試題及答案做成了文檔和架構(gòu)視頻資料免費(fèi)分享給大家(包括Dubbo冯事、Redis、Netty血公、zookeeper昵仅、Spring cloud、分布式累魔、高并發(fā)等架構(gòu)技術(shù)資料)摔笤,希望能幫助到您面試前的復(fù)習(xí)且找到一個(gè)好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時(shí)間來學(xué)習(xí)垦写,也可以關(guān)注我一下以后會(huì)有更多干貨分享吕世。
資料領(lǐng)取方式:
轉(zhuǎn)發(fā)+點(diǎn)擊喜歡,加入我的私人QQ群架構(gòu)華山論劍:836442475【點(diǎn)擊進(jìn)入領(lǐng)取】
找工作其實(shí)就像是一場戰(zhàn)役梯投,前面我們經(jīng)歷了高考或者考研命辖,現(xiàn)在是找工作况毅,你不在這個(gè)時(shí)候搏一搏,怎么對得起你之前的努力尔艇。
不要擔(dān)心找不到好工作尔许,你要相信:天道酬勤!