我的目的是總結(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ī)提問(wèn)
而你需要做的,就是充分、再充分的去總結(jié)自己做過(guò)的項(xiàng)目(尤其是最近的一兩個(gè)項(xiàng)目),挖掘出一個(gè)甚至N個(gè)亮點(diǎn),以備于到時(shí)候可以讓面試官產(chǎn)生眼前一亮的感覺(jué)。
如果項(xiàng)目沒(méi)有亮點(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)
附一:常見(jiàn)套路
1)Java的數(shù)據(jù)結(jié)構(gòu)相關(guān)的類實(shí)現(xiàn)原理,LinkedList,ArrayList,HashMap,TreeMap
HashMap是不是有序的?
不是有序的
有沒(méi)有有順序的Map實(shí)現(xiàn)類
有TreeMap和LinkedHashMap
TreeMap和LinkedHashMap是如何保證它的順序的
它們兩個(gè)哪個(gè)的有序?qū)崿F(xiàn)比較好
還有沒(méi)有比它更好或者更高效的實(shí)現(xiàn)方式
如果你還能說(shuō)出來(lái)的話,那么就你所說(shuō)的實(shí)現(xiàn)方式肯定依然可以問(wèn)你很多問(wèn)題
2)Java并發(fā)包當(dāng)中的類,它們都有哪些作用,以及它們的實(shí)現(xiàn)原理,這些類就是java.concurrent包下面的
比如面試官可能會(huì)先問(wèn)你,如果想實(shí)現(xiàn)所有的線程一起等待某個(gè)事件的發(fā)生,當(dāng)某個(gè)事件發(fā)生時(shí),所有線程一起開始往下執(zhí)行的話,有什么好的辦法嗎?
這個(gè)時(shí)候你可能會(huì)說(shuō)可以用柵欄(Java的并發(fā)包中的CyclicBarrier),那么面試官就會(huì)繼續(xù)問(wèn)你,你知道它的實(shí)現(xiàn)原理嗎?
如果你繼續(xù)回答的話,面試官可能會(huì)繼續(xù)問(wèn)你,你還知道其它的實(shí)現(xiàn)方式嗎?
如果你還能說(shuō)出很多種實(shí)現(xiàn)方式的話,那么繼續(xù)問(wèn)你,你覺(jué)得這些方式里哪個(gè)方式更好?
如果你說(shuō)出來(lái)某一個(gè)方式比較好的話,面試官依然可以繼續(xù)問(wèn)你,那如果讓你來(lái)寫的話,你覺(jué)得還有比它更好的實(shí)現(xiàn)方式嗎?
如果你這個(gè)時(shí)候依然可以說(shuō)出來(lái)你自己更好的實(shí)現(xiàn)方式,那么面試官肯定還會(huì)揪著這個(gè)繼續(xù)問(wèn)你。
為什么說(shuō)面試的時(shí)候要引導(dǎo)面試官,原因就在這了。因?yàn)槊嬖嚬俚奶釂?wèn)很多時(shí)候都是有跡可循的,你如果抓住了他的軌跡,能夠猜到他下面很可能會(huì)問(wèn)什么,那你在回答的時(shí)候就可以往你想要談的方向去說(shuō)。這樣面試時(shí)就會(huì)顯得更加從容,更加的游刃有余。
3)IO包和NIO包中的內(nèi)容。這部分里面NIO會(huì)是重點(diǎn),IO包大部分都會(huì)比較熟悉,因此可能會(huì)直接略過(guò),直接問(wèn)你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ì)問(wèn)你IO包的設(shè)計(jì)模式(裝飾器模式),為什么要這樣設(shè)計(jì)?
有的面試官還會(huì)問(wèn)你有沒(méi)有更好的設(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)炮。
面試官可以先問(wèn)你什么時(shí)候一個(gè)對(duì)象會(huì)被GC?
接著繼續(xù)問(wèn)你為什么要在這種時(shí)候?qū)ο蟛艜?huì)被GC?
接著繼續(xù)問(wèn)你GC策略都有哪些分類?
你如果說(shuō)出來(lái)了,繼續(xù)問(wèn)你這些策略分別都有什么優(yōu)劣勢(shì)?都適用于什么場(chǎng)景?
你繼續(xù)說(shuō)出來(lái)了以后,給你舉個(gè)實(shí)際的場(chǎng)景,讓你選擇一個(gè)GC策略?
你如果選出來(lái)了,繼續(xù)問(wèn)你,為什么要選擇這個(gè)策略?
下面是關(guān)于類加載機(jī)制的簡(jiǎn)單連環(huán)炮。
首先肯定是先問(wèn)你Java的類加載器都有哪些?
回答了這些以后,可能會(huì)問(wèn)你每個(gè)類加載器都加載哪些類?
說(shuō)完以后,可能會(huì)問(wèn)你這些類加載之間的父子關(guān)系是怎樣的?
你在回答的時(shí)候可能會(huì)提到雙親委派模型,那么可以繼續(xù)問(wèn)你什么是雙親委派模型?
你解釋完了以后,可能會(huì)繼續(xù)問(wèn)你,為什么Java的類加載器要使用雙親委派模型?
你回答完以后,可能會(huì)繼續(xù)問(wèn)你如何自定義自己的類加載器,自己的類加載器和Java自帶的類加載器關(guān)系如何處理?
再來(lái)一個(gè)關(guān)于內(nèi)存的連環(huán)炮。
首先肯定就是問(wèn)你內(nèi)存分為哪幾部分,這些部分分別都存儲(chǔ)哪些數(shù)據(jù)?
然后繼續(xù)問(wèn)你一個(gè)對(duì)象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的?
接著可能會(huì)問(wèn)你,內(nèi)存的哪些部分會(huì)參與GC的回收?
完事以后,可能還會(huì)問(wèn)你Java的內(nèi)存模型是怎么設(shè)計(jì)的?
你回答了以后,還會(huì)繼續(xù)問(wèn)你為什么要這么設(shè)計(jì)?
問(wèn)完以后,還可能會(huì)讓你結(jié)合內(nèi)存模型的設(shè)計(jì)談?wù)剉olatile關(guān)鍵字的作用?
你在談的時(shí)候,肯定會(huì)提到可見(jiàn)性,那么接著可見(jiàn)性這三個(gè)字,還可以繼續(xù)問(wèn)你并發(fā)的內(nèi)容。
基本上Java語(yǔ)言本身以及語(yǔ)言稍微高級(jí)點(diǎn)的內(nèi)容就是以上部分,如果你能把以上四部分了解的非常透徹,那基本上Java這部分就沒(méi)啥問(wèn)題了,因?yàn)楣庖陨系膬?nèi)容就夠你跟面試官聊很久了。你聊這些聊得久了,自然問(wèn)你其它問(wèn)題的時(shí)間就會(huì)短點(diǎn)。