1 JAVA語言高級特性
(1)Java的數(shù)據(jù)結(jié)構(gòu)相關(guān)的類實現(xiàn)原理?LinkedList,ArrayList,HashMap,TreeMap
? ? ? ?比如,面試官先問你HashMap是不是有序的?
你肯定回答說,不是有序的。那面試官就會繼續(xù)問你,有沒有有順序的Map實現(xiàn)類?
你如果這個時候說不知道的話,那這個問題就到此結(jié)束了。如果你說有TreeMap和LinkedHashMap。
那么面試官接下來就可能會問你,TreeMap和LinkedHashMap是如何保證它的順序的?
(2)Java并發(fā)包當(dāng)中的類,它們都有哪些作用,以及它們的實現(xiàn)原理,這些類就是java.concurrent包下面的。與上面一樣,咱們也簡單的模擬一個并發(fā)包的連環(huán)炮。
比如面試官可能會先問你,如果想實現(xiàn)所有的線程一起等待某個事件的發(fā)生,當(dāng)某個事件發(fā)生時,所有線程一起開始往下執(zhí)行的話,有什么好的辦法嗎?
這個時候你可能會說可以用柵欄(Java的并發(fā)包中的CyclicBarrier),那么面試官就會繼續(xù)問你,你知道它的實現(xiàn)原理嗎?
如果你繼續(xù)回答的話,面試官可能會繼續(xù)問你,你還知道其它的實現(xiàn)方式嗎?
如果你還能說出很多種實現(xiàn)方式的話,那么繼續(xù)問你,你覺得這些方式里哪個方式更好?
如果你說出來某一個方式比較好的話,面試官依然可以繼續(xù)問你,那如果讓你來寫的話,你覺得還有比它更好的實現(xiàn)方式嗎?
如果你這個時候依然可以說出來你自己更好的實現(xiàn)方式,那么面試官肯定還會揪著這個繼續(xù)問你。
(3)IO包和NIO包中的內(nèi)容。這部分里面NIO會是重點,IO包大部分都會比較熟悉,因此可能會直接略過,直接問你NIO的內(nèi)容。
IO包和NIO包的內(nèi)容相對來說不是很多,首先NIO模型要熟悉,特別是其中的selector一定要非常清楚它的職責(zé)和實現(xiàn)原理。其實NIO的核心是IO線程池,一定要記住這個關(guān)鍵點。有的時候,面試官可能也會問你IO包的設(shè)計模式(裝飾器模式),為什么要這樣設(shè)計?
有的面試官還會問你有沒有更好的設(shè)計,這個時候如果你不知道請果斷說自己現(xiàn)在的水平有限,想不出來更好的設(shè)計,千萬不要信口開河,隨意YY。
3、額外的加分項
上面兩個階段基本上是必問的,還有一些加分項。這些加分項中,有些內(nèi)容面試官也會問你(比如TCP/IP協(xié)議、算法),但更多的是會先問你了解不了解,你了解的話再繼續(xù)聊,不了解的話就直接略過了,不至于因為這種問題而直接把你打入地獄。
下面LZ列舉一下這些加分項,如果可以的話,這些加分項還是要爭取一下的。
1、計算機系統(tǒng)原理。
2、網(wǎng)絡(luò)通信協(xié)議(TCP/IP,HTTP等)。
3、數(shù)據(jù)結(jié)構(gòu)與算法。
4、著名開源項目的源碼。
5、你自己有很棒的開源項目。
6、你的個人博客。
7、待評論區(qū)補充。
這幾項當(dāng)中,對于前1-3項,如果你之前就比較了解,只是由于時間問題忘記了的話,還是可以臨時抱佛腳一下的。至于后面4-6項,就需要你日常的積累了,不是一時半會兒能做到的。如果你平日里沒有積累,那么后面這三個加分項只能拋棄了。
4、與你職位相關(guān)的內(nèi)容
其實這最后一項是對前面三項的補充,你應(yīng)該盡量去主攻和你面試的職位相關(guān)的內(nèi)容。比如你面試一個實時計算的職位,那么你的算法最好要厲害,對于著名的實時計算開源項目要熟悉,最好閱讀過源碼,而且還要對分布式系統(tǒng)有一定的見解。
因此,這個第4部分沒有具體的內(nèi)容,只是提醒你,如果你很明確自己的面試職位,最好在面試前準(zhǔn)備的時候,盡量朝職位的需求方向靠攏,這樣成功的可能性更大。
鏈接??https://zhuanlan.zhihu.com/p/20838139