2018java多线程面试题_2018年最全Java面试通关秘籍汇总集!
此套面試題適用于Java開發的各個階段面試,不過更偏向初級和中級開發人員!由于每一個問題的答案不唯一且都可以在網上搜索到答案,這里只給出問題,不列出參考答案,有興趣的可以留言討論,也歡迎大家的補充!
一、基礎篇
1.1、Java基礎面向對象的特征:繼承、封裝和多態
繼承:子類繼承父類,關鍵字extend,子類可以繼承父類所有方法,但是只有子類存在的方法,父類卻不能調用。
封裝:使用private進行封裝,不讓外部直接訪問,訪問需要get,set方法
多態:簡單理解就是事物的多種形態。專業的術語說就是:同一個實現接口,使用不同的實例而執行不同的操作。重寫,重載等。
final, finally, finalize 的區別?
final:final是一個修飾詞,主要修飾常量,被它修飾的都是不可變的常量。
finally:finally是在try{}catch{}finally{}中執行的,主要意思是不論是否異常,都會執行finally其中的方法。
finalize:finalize是gc回收,每當使用,都會自動回收JVM的的對象。(如需深究,請查看強引用,弱引用等)
Exception、Error、運行時異常與一般異常有何異同
Exception:只運行時才會出現的異常,統稱為Exception。
Error:是系統啟動時報錯,這類就是Error。
運行時異常和一般異常的差別是:倆個雖然都是錯誤,但是一個是在jvm啟動好之后出現的,一個是在啟動且沒啟動成功而出現的。
請寫出5種常見到的runtime exceptionNullPointerException?-?空指針引用異常
ClassCastException?-?類型強制轉換異常。
IllegalArgumentException?-?傳遞非法參數異常。
ArithmeticException?-?算術運算異常
ArrayStoreException?-?向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException?-?下標越界異常
int 和 Integer 有什么區別,Integer的值緩存范圍
int:默認是+-21億。
Integer:是在int在包裝的對象。
Integer的緩存范圍在-128到127。
包裝類,裝箱和拆箱?
包裝類:把一個基本類型包裝成一個類,一個是可以使這個類型具有很多可以調用的方法。二個是Java向面像對象語言的靠近。
裝箱:將基本類型轉換成包裝類對象
拆箱:將包裝類轉換成基本類型對象
String、StringBuilder、StringBuffer?
String是一個字符串,且并不安全。且當你每拼接一個String類型的數據,都等于new了一次String,內存消耗大。
StringBuilder是一個類,但是不是線程安全的,但是效率高,如果只是用在拼接,適用于他。
StringBuffer和StringBuilder一樣,但是他是線程安全的,但是效率略微低一點。
重載和重寫的區別?
重載:重載用于當前類,如果有一個get()方法,然后再寫了一個get(int a);這就是重載。
重寫:用在父子繼承,當父類的方法被子類繼承,就需要重寫到子類。
抽象類和接口有什么區別
抽象類:抽象類使用abstract 關鍵字,有構造方法,可繼承, 不能用private,final修飾。
接口:接口使用interface關鍵字,接口的所有屬性和方法必需是公開的,且屬性都是公開靜態的常量。無構造方法,不可繼承,可實現。
說說反射的用途及實現
反射最重要的用途就是開發各種通用框架。因為他可以直接用“.”來調用屬性和方法來實現。
實現:
(1).Class.forName(className)
(2).類名.class
(3).this.getClass()。
說說自定義注解的場景及實現
HTTP請求的GET與POST方式的區別
get請求的話,是可以直接在瀏覽器看到請求參數。安全性低。
post請求的話,是不能自愛瀏覽器地址上看到請求參數。安全性高。
get傳送的數據量較小,不能大于2KB。post傳送的數據量較大,默認不受限制。
Session與Cookie區別
session存在服務端,比較安全,但是比較占用內存資源,cookie存在客戶端,安全性偏低,cookie單個最大存3k左右的數據。
列出自己常用的JDK包
java.awt.*
java.lang.*
java.sql.date
java.util.date
java.io.*
MVC設計思想
model,view,controller、
提高可視性。但是代碼會變得復雜。
equals與==的區別
equals是比較值。
==是比較值的地址。
hashCode和equals方法的區別與聯系
1.equal()相等的兩個對象他們的hashCode()肯定相等,也就是用equal()對比是絕對可靠的。
2.hashCode()相等的兩個對象他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。
什么是Java序列化和反序列化,如何實現Java序列化?或者請解釋Serializable 接口的作用
序列化:把Java對象轉換為字節序列的過程。
反序列化:把字節序列恢復為Java對象的過程。
實現方式:
用io流把封裝的數據傳遞給別人的接口,然后別人反序列化解析出對應的數據結構并保存。
Object類中常見的方法,為什么wait? notify會放在Object里邊?
Java的平臺無關性如何體現出來的
JDK和JRE的區別
Java 8有哪些新特性
1.2、Java常見集合List 和 Set 區別
Set和hashCode以及equals方法的聯系
List 和 Map 區別
Arraylist 與 LinkedList 區別
ArrayList 與 Vector 區別
HashMap 和 Hashtable 的區別
HashSet 和 HashMap 區別
HashMap 和 ConcurrentHashMap 的區別
HashMap 的工作原理及代碼實現,什么時候用到紅黑樹
多線程情況下HashMap死循環的問題
HashMap出現Hash DOS攻擊的問題
ConcurrentHashMap 的工作原理及代碼實現,如何統計所有的元素個數
手寫簡單的HashMap
看過那些Java集合類的源碼
1.3、進程和線程線程和進程的概念、并行和并發的概念
創建線程的方式及實現
進程間通信的方式
說說 CountDownLatch、CyclicBarrier 原理和區別
說說 Semaphore 原理
說說 Exchanger 原理
ThreadLocal 原理分析,ThreadLocal為什么會出現OOM,出現的深層次原理
講講線程池的實現原理
線程池的幾種實現方式
線程的生命周期,狀態是如何轉移的
1.4、鎖機制說說線程安全問題,什么是線程安全,如何保證線程安全
重入鎖的概念,重入鎖為什么可以防止死鎖
產生死鎖的四個條件(互斥、請求與保持、不剝奪、循環等待)
如何檢查死鎖(通過jConsole檢查死鎖)
volatile 實現原理(禁止指令重排、刷新內存)
synchronized 實現原理(對象監視器)
synchronized 與 lock 的區別
AQS同步隊列
CAS無鎖的概念、樂觀鎖和悲觀鎖
常見的原子操作類
什么是ABA問題,出現ABA問題JDK是如何解決的
樂觀鎖的業務場景及實現方式
Java 8并法包下常見的并發類
偏向鎖、輕量級鎖、重量級鎖、自旋鎖的概念
1.5、JVMJVM運行時內存區域劃分
內存溢出OOM和堆棧溢出SOE的示例及原因、如何排查與解決
如何判斷對象是否可以回收或存活
常見的GC回收算法及其含義
常見的JVM性能監控和故障處理工具類:jps、jstat、jmap、jinfo、jconsole等
JVM如何設置參數
JVM性能調優
類加載器、雙親委派模型、一個類的生命周期、類是如何加載到JVM中的
類加載的過程:加載、驗證、準備、解析、初始化
強引用、軟引用、弱引用、虛引用
Java內存模型JMM
1.6、設計模式常見的設計模式
設計模式的的六大原則及其含義
常見的單例模式以及各種實現方式的優缺點,哪一種最好,手寫常見的單利模式
設計模式在實際場景中的應用
Spring中用到了哪些設計模式
MyBatis中用到了哪些設計模式
關鍵字:
無
總結
以上是生活随笔為你收集整理的2018java多线程面试题_2018年最全Java面试通关秘籍汇总集!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 客户端与服务器之间的文件传输,客户端与服
- 下一篇: 哈希表的构造和查找算法