Java面試大綱及答案

答案只是我個人的理解或從網上查到的,沒有答案的或我理解不到位的,親們可以把答案寫在留言區,我一塊整理。。。

跳槽時時刻刻都在發生,但是我建議大家跳槽之前,先想清楚爲什麼要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的面試起來(期間也沒有準備充分),到底是因爲技術原因(影響自己的發展,偏移自己規劃的軌跡),還是錢給少了,不受重視。

準備不充分的面試,完全是浪費時間,更是對自己的不負責(如果title很高,當我沒說)。

今天給大家分享下chenssy在這次跳槽中整理的Java面試大綱,其中大部分都是面試過程中的面試題,可以對照這查漏補缺,當然了,這裏所列的肯定不可能覆蓋全部方式。

簡歷

JAVA面試簡歷要求,網上查查改改,不說讓面試官看一遍就能記住吧,但是最起碼也得有個好的印象。

自我介紹

自我介紹提前準備準備,對着鏡子或朋友練幾遍,效果肯定不一樣。

項目介紹

大部分情況,這是一場面試的開門題,面試官問這個問題,主要是考察你的概述能力和全局視野。有的人經常抱怨自己每天在堆業務,但沒有成長。事實上,很多情況下確實在堆業務,但並不是沒有成長的。並非做中間件或者技術架構纔是成長,例如我們的需求分析能力,溝通協作能力,產品思維能力,抽象建模能力等都是一個非常重要的硬實力。

好的,現在進入正文。

1、明確項目是做什麼的 

2、明確項目的價值。(爲什麼做這個項目,它解決了用戶什麼痛點,它帶來什麼價值?) 

3、明確項目的功能。(這個項目涉及哪些功能?) 

4、明確項目的技術。(這個項目用到哪些技術?)

 5、明確個人在項目中的位置和作用。(你在這個項目的承擔角色?) 

6、明確項目的整體架構。 

7、明確項目的優缺點,如果重新設計你會如何設計。 

8、明確項目的亮點。(這個項目有什麼亮點?) 

9、明確技術成長。(你通過這個項目有哪些技術成長?)

Java基礎

1、List 和 Set 的區別 

  • List,Set都是繼承自Collection接口
  • List特點:元素有放入順序,元素可重複。Set特點:元素無放入順序,元素不可重複,重複元素會覆蓋掉。(注意:元素雖然無放入順序,但是元素在set中的位置是由該元素的HashCode決定的,其位置其實是固定的,另外list可以通過下標來遍歷,也可以用迭代器,但是set只能用迭代,因爲他無序,無法用下標來取得想要的值。) 

2、HashSet 是如何保證不重複的?

https://blog.csdn.net/u010698072/article/details/52802179

3、HashMap 是線程安全的嗎,爲什麼不是線程安全的(最好畫圖說明多線程環境下不安全)?https://blog.csdn.net/eson_15/article/details/51543812

https://mp.weixin.qq.com/s?__biz=MzI2NjA3NTc4Ng==&mid=2652079766&idx=1&sn=879783e0b0ebf11bf1a5767933d4e61f&chksm=f1748d73c6030465fe6b9b3fa7fc816d4704c91bfe46cb287aefccee459153d3287172d91d23&scene=21#wechat_redirect

4、HashMap 的擴容過程 

https://blog.csdn.net/aichuanwendang/article/details/53317351

5、HashMap 1.7 與 1.8 的 區別,說明 1.8 做了哪些優化,如何優化的? 

https://blog.csdn.net/xs521860/article/details/59484291

https://www.cnblogs.com/stevenczp/p/7028071.html

6、final finally finalize 

  • final是一個修飾類、方法、變量的關鍵字。被final修飾的類,就意味着不能再派生出新的子類,不能作爲父類而被子類繼承。因此一個類不能既被abstract聲明,又被final聲明。將變量或方法聲明爲final,可以保證他們在使用的過程中不被修改。被聲明爲final的變量必須在聲明時給出變量的初始值,而在以後的引用中只能讀取。被final聲明的方法也同樣只能使用,不能重載。
  • finally是一個在try...catch 語句中最後使用的處理異常的語句塊,無論異常是否發生,都會執行finally塊的內容,所以在代碼邏輯中有需要無論發生什麼都必須執行的代碼,就可以放在finally塊中。比如關閉連接時用~
  • finallize()是一個java垃圾回收機制的一種方法。java技術允許使用finalize()方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統資源或者被執行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調用的。 

7、強引用 、軟引用、 弱引用、虛引用 

https://www.cnblogs.com/yw-ah/p/5830458.html

8、Java反射 

https://www.zhihu.com/question/24304289

http://www.sczyh30.com/posts/Java/java-reflection-1/#%E4%B8%80%E3%80%81%E5%9B%9E%E9%A1%BE%EF%BC%9A%E4%BB%80%E4%B9%88%E6%98%AF%E5%8F%8D%E5%B0%84%EF%BC%9F

9、Arrays.sort 實現原理和 Collection.sort 實現原理 

https://blog.csdn.net/u011410529/article/details/56668545?locationnum=6&fps=1

10、LinkedHashMap的應用 

https://blog.csdn.net/kiss_the_sun/article/details/7848920

https://blog.csdn.net/justloveyou_/article/details/71713781

11、cloneable接口實現原理

https://blog.csdn.net/u013916933/article/details/51590332

我經常用的類屬性複製方法:

BeanUtils.copyProperties(test,demo);//可以把test類與demo類中的相同屬性值賦值到demo中

12、異常分類以及處理機制 

https://blog.csdn.net/weixin_35813749/article/details/53607376

13、wait和sleep的區別 

https://blog.csdn.net/xyh269/article/details/52613507

14、數組在內存中如何分配

https://blog.csdn.net/lcl19970203/article/details/54428358

Java 併發

1、synchronized 的實現原理以及鎖優化? 

https://blog.csdn.net/shandian000/article/details/54927876

2、volatile 的實現原理? 

https://www.cnblogs.com/chenssy/p/6379280.html

3、Java 的信號燈? 

 https://blog.csdn.net/u011613354/article/details/51150248

4、synchronized 在靜態方法和普通方法的區別? 

synchronized修飾不加static的方法,鎖是加在單個對象上,不同的對象沒有競爭關係;修飾加了static的方法,鎖是加載類上,這個類所有的對象競爭一把鎖。https://www.cnblogs.com/guiqulai/articles/7342006.html

5、怎麼實現主線程等待所有子線程執行完畢在執行? 

https://blog.csdn.net/u011277123/article/details/54015755

6、CAS?CAS 有什麼缺陷,如何解決? 

所謂樂觀鎖就是,每次不加鎖而是假設沒有衝突而去完成某項操作,如果因爲衝突失敗就重試,直到成功爲止。樂觀鎖用到的機制就是CAS,Compare and Swap。

https://blog.csdn.net/ls5718/article/details/52563959

7、synchronized 和 lock 有什麼區別? 

  • Lock不是Java語言內置的,synchronized是Java語言關鍵字,因此是內置特性。Lock是一個類,通過這個類可以實現同步訪問;
  • Lock和synchronized有一點非常大的不同,採用synchronized不需要用戶去手動釋放鎖,當synchronized方法或者synchronized代碼塊執行完之後,系統會自動讓線程釋放對鎖的佔用;而Lock則必須要用戶去手動釋放鎖,如果沒有主動釋放鎖,就有可能導致出現死鎖現象。
  • Lock是一個接口,而synchronized是Java中的關鍵字,synchronized是內置的語言實現;
  • synchronized在發生異常時,會自動釋放線程佔有的鎖,因此不會導致死鎖現象發生;而Lock在發生異常時,如果沒有主動通過unLock()去釋放鎖,則很可能造成死鎖現象,因此使用Lock時需要在finally塊中釋放鎖;

  • 通過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到。

  • Lock可以提高多個線程進行讀操作的效率。

  • Lock可以讓等待鎖的線程響應中斷,而synchronized不行,使用synchronized時,等待的線程會一直等待下去,不能夠響應https://www.cnblogs.com/baizhanshi/p/6419268.html

8、Hashtable 是怎麼加鎖的 ? 

9、HashMap 的併發問題? 

https://www.cnblogs.com/binyue/p/3726403.html

10、ConcurrenHashMap 介紹?1.8 中爲什麼要用紅黑樹? 

  • ConcurrentHashMap是一個線程安全的Hash Table,它的主要功能是提供了一組和HashTable功能相同但是線程安全的方法。ConcurrentHashMap可以做到讀取數據不加鎖,並且其內部的結構可以讓其在進行寫操作的時候能夠將鎖的粒度保持地儘量地小,不用對整個ConcurrentHashMap加鎖。
  • ConcurrentHashMap將hash表分爲16段(默認值),諸如get,put,remove等常用操作只鎖當前需要用到的段。試想,原來 只能一個線程進入,現在卻能同時16個寫線程進入(寫線程才需要鎖定,而讀線程幾乎不受限制,之後會提到),併發性的提升是顯而易見的。
  • 只有在求size()和containsValue()等操作時才需要鎖定整個表。
https://blog.csdn.net/anig2014/article/details/39476801
  • java8不是用紅黑樹來管理hashmap,而是在hash值相同的情況下(且重複數量大於8),用紅黑樹來管理數據。 紅黑樹相當於排序數據。可以自動的使用二分法進行定位。性能較高。
https://blog.csdn.net/wushiwude/article/details/75331926

11、AQS 

http://www.cnblogs.com/waterystone/p/4920797.html

12、如何檢測死鎖?怎麼預防死鎖? 

https://blog.csdn.net/ls5718/article/details/51896159

13、Java 內存模型? 

https://blog.csdn.net/suifeng3051/article/details/52611310

https://blog.csdn.net/universe_ant/article/details/58585854

14、如何保證多線程下 i++ 結果正確? 

如果我遇到這種問題,一般會先想到添加volatile,但是查資料後,發現volatile解決不了這問題

https://www.cnblogs.com/zemliu/p/3298685.html

需要使用synchronized或者AtomicXX系列的包裝類,同時也會增加性能開銷

15、線程池的種類,區別和使用場景? --

https://www.cnblogs.com/sachen/p/7401959.html

16、分析線程池的實現原理和線程的調度過程? --

https://blog.csdn.net/he90227/article/details/52576452

17、線程池如何調優,最大數目如何確認? --

https://www.cnblogs.com/jianzh5/p/6437315.html

18、ThreadLocal原理,用的時候需要注意什麼? 

https://blog.csdn.net/sonny543/article/details/51336457

19、CountDownLatch 和 CyclicBarrier 的用法,以及相互之間的差別? 

https://blog.csdn.net/kjfcpua/article/details/7300286

20、LockSupport工具 

https://blog.csdn.net/congduan/article/details/48710129

21、Condition接口及其實現原理 

https://blog.csdn.net/fuyuwei2015/article/details/72602182

22、Fork/Join框架的理解 

https://blog.csdn.net/weixin_37509652/article/details/80310845

23、分段鎖的原理,鎖力度減小的思考 

https://blog.csdn.net/u010853261/article/details/54314486

24、阻塞隊列使用及實現原理

https://www.cnblogs.com/yjmyzz/p/BlockingQueue-in-java.html

Spring

1、BeanFactory 和 FactoryBean? 

BeanFactory是個Factory,也就是IOC容器或對象工廠,FactoryBean是個Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)來進行管理的。但對FactoryBean而言,這個Bean不是簡單的Bean,而是一個能生產或者修飾對象生成的工廠Bean,它的實現與設計模式中的工廠模式和修飾器模式類似

https://blog.csdn.net/qiesheng/article/details/72875315

2、Spring IOC 的理解,其初始化過程? 

https://www.cnblogs.com/chenjunjie12321/p/6124649.html

3、BeanFactory 和 ApplicationContext? 

4、Spring Bean 的生命週期,如何被管理的? 

5、Spring Bean 的加載過程是怎樣的? 

6、如果要你實現Spring AOP,請問怎麼實現? 

7、如果要你實現Spring IOC,你會注意哪些問題? 

8、Spring 是如何管理事務的,事務管理機制?

9、Spring 的不同事務傳播行爲有哪些,幹什麼用的? 

10、Spring 中用到了那些設計模式? 

11、Spring MVC 的工作原理? 

12、Spring 循環注入的原理? 

13、Spring AOP的理解,各個術語,他們是怎麼相互工作的? 

14、Spring 如何保證 Controller 併發的安全?

Netty

1、BIO、NIO和AIO 

2、Netty 的各大組件 

3、Netty的線程模型 

4、TCP 粘包/拆包的原因及解決方法 

5、瞭解哪幾種序列化協議?包括使用場景和如何去選擇 

6、Netty的零拷貝實現 

7、Netty的高性能表現在哪些方面

分佈式相關

1、Dubbo的底層實現原理和機制 

2、描述一個服務從發佈到被消費的詳細過程 

3、分佈式系統怎麼做服務治理 

4、接口的冪等性的概念 

5、消息中間件如何解決消息丟失問題 

6、Dubbo的服務請求失敗怎麼處理 

7、重連機制會不會造成錯誤 

8、對分佈式事務的理解 

9、如何實現負載均衡,有哪些算法可以實現? 

10、Zookeeper的用途,選舉的原理是什麼? 

11、數據的垂直拆分水平拆分。 

12、zookeeper原理和適用場景 

13、zookeeper watch機制 

14、redis/zk節點宕機如何處理 

15、分佈式集羣下如何做到唯一序列號 

16、如何做一個分佈式鎖 

17、用過哪些MQ,怎麼用的,和其他mq比較有什麼優缺點,MQ的連接是線程安全的嗎 

18、MQ系統的數據如何保證不丟失 

19、列舉出你能想到的數據庫分庫分表策略;分庫分表後,如何解決全表查詢的問題 

20、zookeeper的選舉策略 

21、全局ID

數據庫

1、mysql分頁有什麼優化 

2、悲觀鎖、樂觀鎖 

3、組合索引,最左原則 

4、mysql 的表鎖、行鎖 

5、mysql 性能優化 

6、mysql的索引分類:B樹、B+,hash;什麼情況用什麼索引 

7、事務的特性和隔離級別

緩存

1、Redis用過哪些數據數據,以及Redis底層怎麼實現 

2、Redis緩存穿透,緩存雪崩 

3、如何使用Redis來實現分佈式鎖 

4、Redis的併發競爭問題如何解決 

5、Redis持久化的幾種方式,優缺點是什麼,怎麼實現的 

6、Redis的緩存失效策略 

7、Redis集羣,高可用,原理 

8、Redis緩存分片 

9、Redis的數據淘汰策略

JVM

1、詳細jvm內存模型 

2、講講什麼情況下回出現內存溢出,內存泄漏?  

3、說說Java線程棧 

4、JVM 年輕代到年老代的晉升過程的判斷條件是什麼呢? 

5、JVM 出現 fullGC 很頻繁,怎麼去線上排查問題? 

6、類加載爲什麼要使用雙親委派模式,有沒有什麼場景是打破了這個模式? 

7、類的實例化順序 

8、JVM垃圾回收機制,何時觸發MinorGC等操作 

9、JVM 中一次完整的 GC 流程(從 ygc 到 fgc)是怎樣的 

10、各種回收器,各自優缺點,重點CMS、G1 

11、各種回收算法 

12、OOM錯誤,stackoverflow錯誤,permgen space錯誤






發佈了17 篇原創文章 · 獲贊 32 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章