Java 面試隨著時間的改變而改變。在過去的日子裡,當你知道 String 和 StringBuilder 的區別就能讓你直接進入第二輪面試,但是現在問題變得越來越高級,面試官問的問題也更深入。 在我初入職場的時候,類似於 Vector 與 Array 的區別、HashMap 與 Hashtable 的區別是最流行的問題,只需要記住它們,就能在面試中獲得更好的機會,但這種情形已經不復存在。如今,你將會被問到許多 Java 程式設計師都沒有看過的領域,如 NIO,[設計模式]"設計模式:可復用面向對象軟體的基礎"),成熟的單元測試,或者那些很難掌握的知識,如並發、算法、數據結構及編碼。
下面列出這份 Java 面試問題列表(答案在篇尾)
1) 什麼是線程?
2) 線程和進程有什麼區別?
3) 如何在Java中實現線程?
4) 用Runnable還是thread?
6) Thread 類中的start() 和 run() 方法有什麼區別?
7) Java中Runnable和Callable有什麼不同?
8) Java中CyclicBarrier 和 CountDownLatch有什麼不同?
9) Java內存模型是什麼?
10) Java中的volatile 變量是什麼?
11) 什麼是線程安全?Vector是一個線程安全類嗎?
12) Java中什麼是競態條件?
13) Java中如何停止一個線程?
14) 一個線程運行時發生異常會怎樣?
15) 如何在兩個線程間共享數據?
16) Java中notify 和 notifyAll有什麼區別?
17) 為什麼wait, notify 和 notifyAll這些方法不在thread類裡面?
18) 什麼是ThreadLocal變量?
19) 什麼是FutureTask?
20) Java中interrupted 和 isInterruptedd方法的區別?
21) 為什麼wait和notify方法要在同步塊中調用?
22) 為什麼你應該在循環中檢查等待條件?
23) Java中的同步集合與並發集合有什麼區別?
24) Java中堆和棧有什麼不同?
25) 什麼是線程池?為什麼要使用它?
26) 如何寫代碼來解決生產者消費者問題?
27) 如何避免死鎖?
28) Java中活鎖和死鎖有什麼區別?
29) 怎麼檢測一個線程是否擁有鎖?
30) 你如何在Java中獲取線程堆棧?
31) JVM中哪個參數是用來控制線程的棧堆棧小的
32) Java中synchronized 和 ReentrantLock 有什麼不同?
33) 有三個線程T1,T2,T3,怎麼確保它們按順序執行(確保main()方法所在的線程是Java程序最後結束的線程)?
34) Thread類中的yield方法有什麼作用?
35) Java中ConcurrentHashMap的並發度是什麼?
36) Java中Semaphore是什麼?
37)如果你提交任務時,線程池隊列已滿。會時發會生什麼?
38) Java線程池中submit() 和 execute()方法有什麼區別?
39) 什麼是阻塞式方法?
40) 你對線程優先級的理解是什麼?
41) 什麼是線程調度器(Thread Scheduler)和時間分片(Time Slicing)?
42) 在多線程中,什麼是上下文切換(context-switching)?
43) 如何在Java中創建Immutable對象?
44) Java中的ReadWriteLock是什麼?
45) 多線程中的忙循環是什麼?
46)volatile 變量和 atomic 變量有什麼不同?
47) 如果同步塊內的線程拋出異常會發生什麼?
48) 單例模式的雙檢鎖是什麼?
49) 如何在Java中創建線程安全的Singleton?
50) 寫出3條你遵循的多線程最佳實踐
51) 如何強制啟動一個線程?
52) Java中的fork join框架是什麼?
53) Java多線程中調用wait() 和 sleep()方法有什麼不同?
54) 什麼是Thread Group?為什麼不建議使用它?
55) 什麼是Java線程轉儲(Thread Dump),如何得到它?
56) 什麼是Java Timer類?如何創建一個有特定時間間隔的任務?
57) 什麼是原子操作?在Java Concurrency API中有哪些原子類(atomic classes)?
58) Java Concurrency API中的Lock接口(Lock interface)是什麼?對比同步它有什麼優勢?
59) 什麼是Executor框架?
60) Executors類是什麼?
61) 什麼是阻塞隊列?如何使用阻塞隊列來實現生產者-消費者模型?
62)什麼是Callable和Future?
63) 什麼是FutureTask?
64) 什麼是並發容器的實現?
65)用戶線程和守護線程有什麼區別?
66)有哪些不同的線程生命周期?
67)線程之間是如何通信的?
68)為什麼Thread類的sleep()和yield()方法是靜態的?
69)如何確保線程安全?
70)同步方法和同步塊,哪個是更好的選擇?
71)如何創建守護線程?
72)線程調度策略?
73) 在線程中你怎麼處理不可捕捉異常?
小夥伴們有興趣想了解內容和更多相關學習資料的請點讚收藏+評論轉發+關注我,後面會有很多乾貨。我有一些面試題、架構、設計類資料可以說是程式設計師面試必備!所有資料都整理到網盤了,需要的話歡迎下載!私信我回復【666】即可免費獲取