Java中高階面試題

項羽齊發表於2018-03-14

一.基礎知識:

1)集合類:List和Set比較,各自的子類比較(ArrayList,Vector,LinkedList;HashSet,TreeSet);

2)HashMap的底層實現,之後會問ConcurrentHashMap的底層實現;

3)如何實現HashMap順序儲存:可以參考LinkedHashMap的底層實現;

4)HashTable和ConcurrentHashMap的區別;

5)String,StringBuffer和StringBuilder的區別;

6)Object的方法有哪些:比如有wait方法,為什麼會有;

7)wait和sleep的區別,必須理解;

8)JVM的記憶體結構,JVM的演算法;

9)強引用,軟引用和弱引用的區別;

10)陣列在記憶體中如何分配;

11)用過哪些設計模式,手寫一個(除單例);

12)springmvc的核心是什麼,請求的流程是怎麼處理的,控制反轉怎麼實現的;

13)spring裡面的aop的原理是什麼;

14)mybatis如何處理結果集:反射,建議看看原始碼;

15)java的多型表現在哪裡;

16)介面有什麼用;

17)說說http,https協議;

18)tcp/ip協議簇;

19)osi五層網路協議;

20)tcp,udp區別;

21)用過哪些加密演算法:對稱加密,非對稱加密演算法;

22)說說tcp三次握手,四次揮手;

23)cookie和session的區別,分散式環境怎麼儲存使用者狀態;

24)git,svn區別;

25)請寫一段棧溢位、堆溢位的程式碼;

26)ThreadLocal可以用來共享資料嗎;

 

二.IO:

1)bio,nio,aio的區別;

2)nio框架:dubbo的實現原理;

3)京東內部的jsf是使用的什麼協議通訊:可參見dubbo的協議;

 

 

三.演算法:

1)java中常說的堆和棧,分別是什麼資料結構;另外,為什麼要分為堆和棧來儲存資料。

2)TreeMap如何插入資料:二叉樹的左旋,右旋,雙旋;

3)一個排序之後的陣列,插入資料,可以使用什麼方法?答:二分法;問:時間複雜度是多少?

4)平衡二叉樹的時間複雜度;

5)Hash演算法和二叉樹演算法分別什麼時候用;

6)圖的廣度優先演算法和深度優先演算法:詳見jvm中垃圾回收實現;

 

 

三.多執行緒相關:

1)說說阻塞佇列的實現:可以參考ArrayBlockingQueue的底層實現(鎖和同步都行);

2)程式通訊的方式:訊息佇列,共享記憶體,訊號量,socket通訊等;

3)用過併發包的哪些類;

4)什麼地方用了多執行緒;

5)Excutors可以產生哪些執行緒池;

6)為什麼要用執行緒池;

7)volatile關鍵字的用法:使多執行緒中的變數可見;

 

四.資料庫相關(mysql):

1)msyql優化經驗:

2)mysql的語句優化,使用什麼工具;

3)mysql的索引分類:B+,hash;什麼情況用什麼索引;

4)mysql的儲存引擎有哪些,區別是什麼;

5)說說事務的特性和隔離級別;

6)悲觀鎖和樂觀鎖的區別,怎麼實現;

 

 

五.mq:

1)mq的原理是什麼:有點大。。都可以說;

2)mq如何保證實時性;

3)mq的持久化是怎麼做的;

 

六.nosql相關(主要是redis):

1)redis和memcache的區別;

2)用redis做過什麼;

3)redis是如何持久化的:rdb和aof;

4)redis叢集如何同步;

5)redis的資料新增過程是怎樣的:雜湊槽;

6)redis的淘汰策略有哪些;

7)redis有哪些資料結構;

 

七.zookeeper:

1)zookeeper是什麼;

2)zookeeper哪裡用到;

3)zookeeper的選主過程;

4)zookeeper叢集之間如何通訊;

5)你們的zookeeper的節點加密是用的什麼方式;

6)分散式鎖的實現過程;

 

 

八.linux相關:

1)linux常用的命令有哪些;

2)如何獲取java程式的pid;

3)如何獲取某個程式的網路埠號;

4)如何實時列印日誌;

5)如何統計某個字串行數;

 

 

九.設計與思想:

1)重構過程式碼沒有?說說經驗;

2)一千萬的使用者實時排名如何實現;

3)五萬人併發搶票怎麼實現;

相關文章