Java面試基礎篇

說明:面試題爲網絡上整理,答案爲自己簡寫,能力有限,面試參考。

基礎篇一

一.基礎知識:

1)集合類:List和Set比較,各自的子類比較(ArrayList,,LinkedList;HashSet,TreeSet);
1.1 List接口繼承自Collection接口,是有序的,集合中的元素可以重複,常用兩個實現子類爲ArrayList和LinkedList,
- 【Arraylist】基於數組實現,可以理解爲一種動態數組,查找速度快,增加和刪除操作慢,適用於查詢頻率高,增刪頻度低的情況;
- 【LinkedList】基於鏈表實現,查找速度慢,增加和刪除速度快。
- 1.2 Set — 擴展了Collection的集合,集合中的元素不可以重複,即任意的兩個元素e1和e2都有e1.equals(e2) == false。訪問集合中的元素只能根據元素本身來訪問。
- 【哈希表】HashSet:Set中訪問速度最快。原則上Set不能有重複的元素,但假設HashSet插入不同元素後,又將2個元素改成相同值也可以(這種屬於未定義行爲,即Set的各個實現可以自行處理這種情況,可以報異常也可以如HashSet般不聞不問,但是這種未定義行爲應儘量避免,而避免的方法就是使得插入的元素不可修改,也即使得元素爲不可變類,Map也有同樣問題);
-【平衡樹】TreeSet:實現了SortedSet,可以提供排序功能;

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

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

4)HashTable和ConcurrentHashMap的區別;

  • 相同點: Hashtable 和 ConcurrentHashMap都是線程安全的,可以在多線程環境中運行; key跟value都不能是null
    同爲線程安全,但是HashTable
  • 區別: 兩者主要是性能上的差異,Hashtable的所有操作都會鎖住整個對象,雖然能夠保證線程安全,但是性能較差; ConcurrentHashMap內部使用Segment數組,每個Segment類似於Hashtable,在“寫”線程或者部分特殊的“讀”線程中鎖住的是某個Segment對象,其它的線程能夠併發執行其它的Segment對象。

5)String,StringBuffer和StringBuilder的區別;

  • 【String】爲final類,申明的對象不可變,當申明一個對象String a = “a”時,該對象便不可更改,改變a實際上是創建一個新的對象,然後將a的指針指向新對象,但是原對象依舊存在,並未改變;
  • 【 StringBuffer】StringBuffer大部分方法都是synchronized,線程安全。

  • 【StringBuilder】非線程安全,效率高。

6)Object的方法有哪些:比如有wait方法,爲什麼會有;
hashcode();equals();wait();notify();notifyAll();finalize();gerClass();
wait()的作用是讓當前線程進入等待狀態,同時,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)五萬人併發搶票怎麼實現;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章