經歷了兩週的面試,終於收到了幾個滿意的offer。換工做的過程是痛苦的,除了一天快馬加鞭地跑好幾家公司面試,剩下的時間基本就是背面試題了。想找到一份適合本身的面試題並不簡單,好比我找的是高級Java開發的職位。出於以前公司系統架構的設計,須要準備Java、spring、springboot、mysql、mybatis、mycat、zookeeper、dubbo、kafka、redis、網絡等面試題。我結合以前面試的20多家公司,以及從CSDN/簡書/掘金/公衆號等相關渠道蒐集到的面試題,從中整理出一些高頻的面試題庫,幫助你們更加省力從容的應付面試。更全的整理題庫,能夠經過搜索微信小程序【Java職場範兒】或掃描最下方小程序二維碼。輕輕鬆鬆地刷題。html
1、Java獲取Class文件的幾種方式?java
//1.經過Object類中的getClass()方法的。
public static void getClassObject_1() {
Person p = new Person();
Class clazz = p.getClass();
}
複製代碼
//2.任何數據類型都具有一個靜態的屬性.class來獲取其對應的Class對象
public static void getClassObject_1() {
Class clazz = Person.class;
}
複製代碼
//3.只要經過給定的類的字符串名稱就能夠獲取該類
public static void getClassObject_1() {
String className = "Person";
Class clazz = Class.forName(className);
}
複製代碼
2、如何獲取Class中的私有方法?mysql
Method method = e.getClass().getDeclaredMethod("私有方法名",String.class);
複製代碼
1、 HashMap和ConcurrentHashMap的原理(併發必問)程序員
HashMap: 1.7版本,使用一個Entry數組來存儲數據,用key的hashcode取模來決定key會被放到數組裏的位置,若是hashcode相同,或者hashcode取模後的結果相同(hash collision),那麼這些key會被定位到Entry數組的同一個格子裏,這些key會造成一個鏈表。在hashcode特別差的狀況下,比方說全部key的hashcode都相同,這個鏈表可能會很長,那麼put/get操做均可能須要遍歷這個鏈表。也就是說時間複雜度在最差狀況下會退化到O(n) 1.8版本,使用一個Node數組來存儲數據,但這個Node多是鏈表結構,也多是紅黑樹結構,若是插入的key的hashcode相同,那麼這些key也會被定位到Node數組的同一個格子裏。若是同一個格子裏的key不超過8個,使用鏈表結構存儲。若是超過了8個,那麼會調用treeifyBin函數,將鏈表轉換爲紅黑樹。那麼即便hashcode徹底相同,因爲紅黑樹的特色,查找某個特定元素,也只須要O(log n)的開銷。也就是說put/get的操做的時間複雜度最差只有O(log n)。 ConcurrentHashMap: 在多線程環境下,使用HashMap進行put操做時存在丟失數據的狀況,爲了不這種bug的隱患,強烈建議使用ConcurrentHashMap代替HashMap。 1.7版本,使用Segment + HashEntry方式進行實現。 面試
1.8版本,1.8中放棄了Segment臃腫的設計,取而代之的是採用Node + CAS + Synchronized來保證併發安全進行實現,結構以下:更詳細的內容請參考《Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析》redis
2、 常見的線程池及應用場景算法
3、 阻塞隊列spring
4、 線程池的處理流程 sql
5、Lock與synchronized 的區別 synchronized: 在資源競爭不是很激烈的狀況下,偶爾會有同步的情形下,synchronized是很合適的。緣由在於,編譯程序一般會盡量的進行優化synchronize,另外可讀性很是好,無論用沒用過5.0多線程包的程序員都能理解。 ReentrantLock: ReentrantLock提供了多樣化的同步,好比有時間限制的同步,能夠被Interrupt的同步(synchronized的同步是不能Interrupt的)等。在資源競爭不激烈的情形下,性能稍微比synchronized差點點。可是當同步很是激烈的時候,synchronized的性能一會兒能降低好幾十倍。而ReentrantLock確還能維持常態。小程序
1、 JVM內存分哪幾個區,每一個區的做用是什麼
Java虛擬機主要分爲如下一個區:
2、java中垃圾收集的方法有哪些?
3、java內存分配與回收策率以及Minor GC和Major GC
更多Java面試題請使用微信小程序搜索【Java職場範兒】或掃描下方二維碼。