我的目的是總結(jié)(濃縮两残,精簡(jiǎn)),借鑒以下這篇阿里的面經(jīng):阿里面試回來(lái)委刘,想和Java程序員談一談丧没, 十分感謝作者鹰椒。
面試準(zhǔn)備(不斷地去google相關(guān)的面試資料,現(xiàn)階段只能這樣了)
- 語(yǔ)言基礎(chǔ)和高級(jí)特性
- 集合框架
- ...
- 框架
- ssh
- spring
- spring boot
- 高級(jí)
- jvm
- 并發(fā)
- 分布式
- 其他
- 算法呕童,數(shù)據(jù)結(jié)構(gòu)
- 計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議
- 操作系統(tǒng)
- 項(xiàng)目經(jīng)驗(yàn)
講述自己的項(xiàng)目漆际,面試官隨機(jī)提問
而你需要做的,就是充分夺饲、再充分的去總結(jié)自己做過的項(xiàng)目(尤其是最近的一兩個(gè)項(xiàng)目)灿椅,挖掘出一個(gè)甚至N個(gè)亮點(diǎn),以備于到時(shí)候可以讓面試官產(chǎn)生眼前一亮的感覺钞支。
如果項(xiàng)目沒有亮點(diǎn)茫蛹,那就開始打造亮點(diǎn)。
目標(biāo)公司
- 結(jié)合職業(yè)發(fā)展方向
- 技術(shù)實(shí)力和氛圍
- 技術(shù)選型(人工智能領(lǐng)域烁挟,算法婴洼,數(shù)據(jù)結(jié)構(gòu))
面試策略,自身定位
先不要投你的意向公司撼嗓,先找?guī)讉€(gè)公司探探身價(jià)柬采。
還要學(xué)會(huì)引導(dǎo)面試官到自己擅長(zhǎng)的領(lǐng)域
不要在面試前刷題,不是一蹴而就的事情
坦誠(chéng),不會(huì)就說(shuō)不會(huì)
最后-相關(guān)書籍
- 大話設(shè)計(jì)模式
- 深入理解Java虛擬機(jī)
- Java并發(fā)編程實(shí)戰(zhàn)
附一:常見套路
1)Java的數(shù)據(jù)結(jié)構(gòu)相關(guān)的類實(shí)現(xiàn)原理且警,LinkedList粉捻,ArrayList,HashMap斑芜,TreeMap
HashMap是不是有序的肩刃?
不是有序的
有沒有有順序的Map實(shí)現(xiàn)類
有TreeMap和LinkedHashMap
TreeMap和LinkedHashMap是如何保證它的順序的
它們兩個(gè)哪個(gè)的有序?qū)崿F(xiàn)比較好
還有沒有比它更好或者更高效的實(shí)現(xiàn)方式
如果你還能說(shuō)出來(lái)的話,那么就你所說(shuō)的實(shí)現(xiàn)方式肯定依然可以問你很多問題
2)Java并發(fā)包當(dāng)中的類杏头,它們都有哪些作用盈包,以及它們的實(shí)現(xiàn)原理,這些類就是java.concurrent包下面的
比如面試官可能會(huì)先問你醇王,如果想實(shí)現(xiàn)所有的線程一起等待某個(gè)事件的發(fā)生呢燥,當(dāng)某個(gè)事件發(fā)生時(shí),所有線程一起開始往下執(zhí)行的話寓娩,有什么好的辦法嗎叛氨?
這個(gè)時(shí)候你可能會(huì)說(shuō)可以用柵欄(Java的并發(fā)包中的CyclicBarrier),那么面試官就會(huì)繼續(xù)問你棘伴,你知道它的實(shí)現(xiàn)原理嗎寞埠?
如果你繼續(xù)回答的話,面試官可能會(huì)繼續(xù)問你排嫌,你還知道其它的實(shí)現(xiàn)方式嗎畸裳?
如果你還能說(shuō)出很多種實(shí)現(xiàn)方式的話,那么繼續(xù)問你淳地,你覺得這些方式里哪個(gè)方式更好怖糊?
如果你說(shuō)出來(lái)某一個(gè)方式比較好的話帅容,面試官依然可以繼續(xù)問你,那如果讓你來(lái)寫的話伍伤,你覺得還有比它更好的實(shí)現(xiàn)方式嗎并徘?
如果你這個(gè)時(shí)候依然可以說(shuō)出來(lái)你自己更好的實(shí)現(xiàn)方式,那么面試官肯定還會(huì)揪著這個(gè)繼續(xù)問你扰魂。
為什么說(shuō)面試的時(shí)候要引導(dǎo)面試官麦乞,原因就在這了。因?yàn)槊嬖嚬俚奶釂柡芏鄷r(shí)候都是有跡可循的劝评,你如果抓住了他的軌跡姐直,能夠猜到他下面很可能會(huì)問什么,那你在回答的時(shí)候就可以往你想要談的方向去說(shuō)蒋畜。這樣面試時(shí)就會(huì)顯得更加從容声畏,更加的游刃有余。
3)IO包和NIO包中的內(nèi)容姻成。這部分里面NIO會(huì)是重點(diǎn)插龄,IO包大部分都會(huì)比較熟悉,因此可能會(huì)直接略過科展,直接問你NIO的內(nèi)容均牢。
IO包和NIO包的內(nèi)容相對(duì)來(lái)說(shuō)不是很多,首先NIO模型要熟悉才睹,特別是其中的selector一定要非常清楚它的職責(zé)和實(shí)現(xiàn)原理徘跪。其實(shí)NIO的核心是IO線程池,一定要記住這個(gè)關(guān)鍵點(diǎn)砂竖。有的時(shí)候真椿,面試官可能也會(huì)問你IO包的設(shè)計(jì)模式(裝飾器模式),為什么要這樣設(shè)計(jì)乎澄?
有的面試官還會(huì)問你有沒有更好的設(shè)計(jì),這個(gè)時(shí)候如果你不知道請(qǐng)果斷說(shuō)自己現(xiàn)在的水平有限测摔,想不出來(lái)更好的設(shè)計(jì)置济,千萬(wàn)不要信口開河,隨意YY锋八。
4)Java的虛擬機(jī)的內(nèi)容浙于。這部分主要包括三部分,GC挟纱、類加載機(jī)制羞酗,以及內(nèi)存。
一個(gè)GC部分簡(jiǎn)單的連環(huán)炮紊服。
面試官可以先問你什么時(shí)候一個(gè)對(duì)象會(huì)被GC檀轨?
接著繼續(xù)問你為什么要在這種時(shí)候?qū)ο蟛艜?huì)被GC胸竞?
接著繼續(xù)問你GC策略都有哪些分類?
你如果說(shuō)出來(lái)了参萄,繼續(xù)問你這些策略分別都有什么優(yōu)劣勢(shì)卫枝?都適用于什么場(chǎng)景?
你繼續(xù)說(shuō)出來(lái)了以后讹挎,給你舉個(gè)實(shí)際的場(chǎng)景校赤,讓你選擇一個(gè)GC策略?
你如果選出來(lái)了筒溃,繼續(xù)問你马篮,為什么要選擇這個(gè)策略?
下面是關(guān)于類加載機(jī)制的簡(jiǎn)單連環(huán)炮怜奖。
首先肯定是先問你Java的類加載器都有哪些积蔚?
回答了這些以后,可能會(huì)問你每個(gè)類加載器都加載哪些類烦周?
說(shuō)完以后尽爆,可能會(huì)問你這些類加載之間的父子關(guān)系是怎樣的?
你在回答的時(shí)候可能會(huì)提到雙親委派模型读慎,那么可以繼續(xù)問你什么是雙親委派模型漱贱?
你解釋完了以后,可能會(huì)繼續(xù)問你夭委,為什么Java的類加載器要使用雙親委派模型幅狮?
你回答完以后,可能會(huì)繼續(xù)問你如何自定義自己的類加載器株灸,自己的類加載器和Java自帶的類加載器關(guān)系如何處理崇摄?
再來(lái)一個(gè)關(guān)于內(nèi)存的連環(huán)炮掂僵。
首先肯定就是問你內(nèi)存分為哪幾部分挨约,這些部分分別都存儲(chǔ)哪些數(shù)據(jù)令境?
然后繼續(xù)問你一個(gè)對(duì)象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的鳞溉?
接著可能會(huì)問你辅肾,內(nèi)存的哪些部分會(huì)參與GC的回收讹开?
完事以后侠姑,可能還會(huì)問你Java的內(nèi)存模型是怎么設(shè)計(jì)的篷就?
你回答了以后汹粤,還會(huì)繼續(xù)問你為什么要這么設(shè)計(jì)命斧?
問完以后,還可能會(huì)讓你結(jié)合內(nèi)存模型的設(shè)計(jì)談?wù)剉olatile關(guān)鍵字的作用嘱兼?
你在談的時(shí)候国葬,肯定會(huì)提到可見性,那么接著可見性這三個(gè)字,還可以繼續(xù)問你并發(fā)的內(nèi)容汇四。
基本上Java語(yǔ)言本身以及語(yǔ)言稍微高級(jí)點(diǎn)的內(nèi)容就是以上部分接奈,如果你能把以上四部分了解的非常透徹,那基本上Java這部分就沒啥問題了船殉,因?yàn)楣庖陨系膬?nèi)容就夠你跟面試官聊很久了鲫趁。你聊這些聊得久了,自然問你其它問題的時(shí)間就會(huì)短點(diǎn)利虫。