時(shí)隔十五天,我又來更新了!

二話不多說,請(qǐng)查收,整理好的120道面試題錦集:
(文末帶答案領(lǐng)取方式)
多線程、并發(fā)及線程的基礎(chǔ)問題
1)Java 中能創(chuàng)建 volatile 數(shù)組嗎?
2)volatile 能使得一個(gè)非原子操作變成原子操作嗎?
3)volatile 修飾符的有過什么實(shí)踐?
4)volatile 類型變量提供什么保證?
5) 10 個(gè)線程和 2 個(gè)線程的同步代碼,哪個(gè)更容易寫?
6)你是如何調(diào)用 wait()方法的?使用 if 塊還是循環(huán)?為什么?
7)什么是多線程環(huán)境下的偽共享(false sharing)?
有經(jīng)驗(yàn)程序員的 Java 面試題
8)什么是 Busy spin?我們?yōu)槭裁匆褂盟?/p>
9)Java 中怎么獲取一份線程 dump 文件?
10)Swing 是線程安全的?
11)什么是線程局部變量?
12)用 wait-notify 寫一段代碼來解決生產(chǎn)者-消費(fèi)者問題?
13) 用 Java 寫一個(gè)線程安全的單例模式(Singleton)?
14)Java 中 sleep 方法和 wait 方法的區(qū)別?
15)什么是不可變對(duì)象(immutable object)?Java 中怎么創(chuàng)建一個(gè)不可變對(duì)象?
16)我們能創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象嗎?
數(shù)據(jù)類型和 Java 基礎(chǔ)面試問題
17)Java 中應(yīng)該使用什么數(shù)據(jù)類型來代表價(jià)格?
18)怎么將 byte 轉(zhuǎn)換為 String?
19)Java 中怎樣將 bytes 轉(zhuǎn)換為 long 類型?
20)我們能將 int 強(qiáng)制轉(zhuǎn)換為 byte 類型的變量嗎?如果該值大于 byte 類型的范圍,將會(huì)出現(xiàn)什么現(xiàn)象?
21)存在兩個(gè)類,B 繼承 A,C 繼承 B,我們能將 B 轉(zhuǎn)換為 C 么?如 C = (C) B;
22)哪個(gè)類包含 clone 方法?是 Cloneable 還是 Object?
23)Java 中 ++ 操作符是線程安全的嗎?
24)a = a + b 與 a += b 的區(qū)別
25)我能在不進(jìn)行強(qiáng)制轉(zhuǎn)換的情況下將一個(gè) double 值賦值給 long 類型的變量嗎?
26)3*0.1 == 0.3 將會(huì)返回什么?true 還是 false?
27)int 和 Integer 哪個(gè)會(huì)占用更多的內(nèi)存?
28)為什么 Java 中的 String 是不可變的(Immutable)?
29)我們能在 Switch 中使用 String 嗎?
30)Java 中的構(gòu)造器鏈?zhǔn)鞘裁矗?/p>
JVM 底層 與 GC(Garbage Collection) 的面試問題
31)64 位 JVM 中,int 的長(zhǎng)度是多數(shù)?
32)Serial 與 Parallel GC之間的不同之處?
33)32 位和 64 位的 JVM,int 類型變量的長(zhǎng)度是多數(shù)?
34)Java 中 WeakReference 與 SoftReference的區(qū)別?
35)WeakHashMap 是怎么工作的?
36)JVM 選項(xiàng) -XX:+UseCompressedOops 有什么作用?為什么要使用?
37)怎樣通過 Java 程序來判斷 JVM 是 32 位 還是 64 位?
38)32 位 JVM 和 64 位 JVM 的最大堆內(nèi)存分別是多數(shù)?
39)JRE、JDK、JVM 及 JIT 之間有什么不同?
3 年工作經(jīng)驗(yàn)的 Java 面試題
40)解釋 Java 堆空間及 GC?
JVM 底層面試題及答案
41)你能保證 GC 執(zhí)行嗎?
42)怎么獲取 Java 程序使用的內(nèi)存?堆使用的百分比?
43)Java 中堆和棧有什么區(qū)別?
關(guān)于內(nèi)存的的面試問題和答案
Java 基本概念面試題
44)“a==b”和”a.equals(b)”有什么區(qū)別?
45)a.hashCode() 有什么用?與 a.equals(b) 有什么關(guān)系?
46)final、finalize 和 finally 的不同之處?
47)Java 中的編譯期常量是什么?使用它又什么風(fēng)險(xiǎn)?
Java 集合框架的面試題
這部分也包含數(shù)據(jù)結(jié)構(gòu)、算法及數(shù)組的面試問題
48) List、Set、Map 和 Queue 之間的區(qū)別
49)poll() 方法和 remove() 方法的區(qū)別?
50)Java 中 LinkedHashMap 和 PriorityQueue 的區(qū)別是什么?
51)ArrayList 與 LinkedList 的不區(qū)別?
52)用哪兩種方式來實(shí)現(xiàn)集合的排序?
53)Java 中怎么打印數(shù)組?
54)Java 中的 LinkedList 是單向鏈表還是雙向鏈表?
55)Java 中的 TreeMap 是采用什么樹實(shí)現(xiàn)的?
56) Hashtable 與 HashMap 有什么不同之處?
57)Java 中的 HashSet,內(nèi)部是如何工作的?
58)寫一段代碼在遍歷 ArrayList 時(shí)移除一個(gè)元素?
59)我們能自己寫一個(gè)容器類,然后使用 for-each 循環(huán)碼?
60)ArrayList 和 HashMap 的默認(rèn)大小是多數(shù)?
61)有沒有可能兩個(gè)不相等的對(duì)象有有相同的 hashcode?
62)兩個(gè)相同的對(duì)象會(huì)有不同的的 hash code 嗎?
63)我們可以在 hashcode() 中使用隨機(jī)數(shù)字嗎?
64)Java 中,Comparator 與 Comparable 有什么不同?
65)為什么在重寫 equals 方法的時(shí)候需要重寫 hashCode 方法?
Java IO 和 NIO 的面試題
IO 是 Java 面試中一個(gè)非常重要的點(diǎn)。你應(yīng)該很好掌握 Java IO,NIO,NIO2 以及與操作系統(tǒng),磁盤 IO 相關(guān)的基礎(chǔ)知識(shí)。下面是 Java IO 中經(jīng)常問的問題。
66)在我 Java 程序中,我有三個(gè) socket,我需要多少個(gè)線程來處理?
67)Java 中怎么創(chuàng)建 ByteBuffer?
68)Java 中,怎么讀寫 ByteBuffer ?
69)Java 采用的是大端還是小端?
70)ByteBuffer 中的字節(jié)序是什么?
71)Java 中,直接緩沖區(qū)與非直接緩沖器有什么區(qū)別?
72)Java 中的內(nèi)存映射緩存區(qū)是什么?
73)socket 選項(xiàng) TCP NO DELAY 是指什么?
74)TCP 協(xié)議與 UDP 協(xié)議有什么區(qū)別?
75)Java 中,ByteBuffer 與 StringBuffer有什么區(qū)別?
Java 最佳實(shí)踐的面試問題
包含 Java 中各個(gè)部分的最佳實(shí)踐,如集合,字符串,IO,多線程,錯(cuò)誤和異常處理,設(shè)計(jì)模式等等。
76)Java 中,編寫多線程程序的時(shí)候你會(huì)遵循哪些最佳實(shí)踐?
77)說出幾點(diǎn) Java 中使用 Collections 的最佳實(shí)踐
78)說出至少 5 點(diǎn)在 Java 中使用線程的最佳實(shí)踐。
79)說出 5 條 IO 的最佳實(shí)踐
80)列出 5 個(gè)應(yīng)該遵循的 JDBC 最佳實(shí)踐
81)說出幾條 Java 中方法重載的最佳實(shí)踐?
82)在多線程環(huán)境下,SimpleDateFormat 是線程安全的嗎?
83)Java 中如何格式化一個(gè)日期?如格式化為 ddMMyyyy 的形式?
84)Java 中,怎么在格式化的日期中顯示時(shí)區(qū)?
85)Java 中 java.util.Date 與 java.sql.Date 有什么區(qū)別?
86)Java 中,如何計(jì)算兩個(gè)日期之間的差距?
87)Java 中,如何將字符串 YYYYMMDD 轉(zhuǎn)換為日期?
單元測(cè)試 JUnit 面試題
89)如何測(cè)試靜態(tài)方法?
90)怎么利用 JUnit 來測(cè)試一個(gè)方法的異常?
91)你使用過哪個(gè)單元測(cè)試庫(kù)來測(cè)試你的 Java 程序?
92)@Before 和 @BeforeClass 有什么區(qū)別?
編程和代碼相關(guān)的面試題
93)怎么檢查一個(gè)字符串只包含數(shù)字?
94)Java 中如何利用泛型寫一個(gè) LRU 緩存?
95)寫一段 Java 程序?qū)?byte 轉(zhuǎn)換為 long?
95)在不使用 StringBuffer 的前提下,怎么反轉(zhuǎn)一個(gè)字符串?
97)Java 中,怎么獲取一個(gè)文件中單詞出現(xiàn)的最高頻率?
98)如何檢查出兩個(gè)給定的字符串是反序的?
99)Java 中,怎么打印出一個(gè)字符串的所有排列?
100)Java 中,怎樣才能打印出數(shù)組中的重復(fù)元素?
101)Java 中如何將字符串轉(zhuǎn)換為整數(shù)?
102)在沒有使用臨時(shí)變量的情況如何交換兩個(gè)整數(shù)變量的值?
關(guān)于 OOP 和設(shè)計(jì)模式的面試題
這部分包含 Java 面試過程中關(guān)于 SOLID 的設(shè)計(jì)原則,OOP 基礎(chǔ),如類,對(duì)象,接口,繼承,多態(tài),封裝,抽象以及更高級(jí)的一些概念,如組合、聚合及關(guān)聯(lián)。也包含了 GOF 設(shè)計(jì)模式的問題。
103)接口是什么?為什么要使用接口而不是直接使用具體類?
104)Java 中,抽象類與接口之間有什么不同?
105)除了單例模式,你在生產(chǎn)環(huán)境中還用過什么設(shè)計(jì)模式?
106)你能解釋一下里氏替換原則嗎?
107) 什么情況下會(huì)違反迪米特法則?為什么會(huì)有這個(gè)問題?
108)適配器模式是什么?什么時(shí)候使用?
109)什么是“依賴注入”和“控制反轉(zhuǎn)”?為什么有人使用?
110)抽象類是什么?它與接口有什么區(qū)別?你為什么要使用過抽象類?
111)構(gòu)造器注入和 setter 依賴注入,那種方式更好?
112)依賴注入和工程模式之間有什么不同?
113)適配器模式和裝飾器模式有什么區(qū)別?
114)適配器模式和代理模式之前有什么不同?
115)什么是模板方法模式?
116)什么時(shí)候使用訪問者模式?
117)什么時(shí)候使用組合模式?
118)繼承和組合之間有什么不同?
119)描述 Java 中的重載和重寫?
120)Java 中,嵌套公共靜態(tài)類與頂級(jí)類有什么不同?
121) OOP 中的 組合、聚合和關(guān)聯(lián)有什么區(qū)別?
122)給我一個(gè)符合開閉原則的設(shè)計(jì)模式的例子?
123)抽象工廠模式和原型模式之間的區(qū)別?
124)什么時(shí)候使用享元模式?
答案獲取方式
加群即可獲取 群號(hào):923116658
點(diǎn)擊鏈接加入群聊【Java架構(gòu)解析】:https://jq.qq.com/?_wv=1027&k=5e1QsXb