1. 程式人生 > >您掌握這些Java中高級面試題了嗎?考驗你技術的時候到了。

您掌握這些Java中高級面試題了嗎?考驗你技術的時候到了。

mysql 為什麽 mvc 數組 基礎 代碼 string ren buffer

一. 基礎知識:

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)五萬人並發搶票怎麽實現;

您掌握這些Java中高級面試題了嗎?考驗你技術的時候到了。