一線互聯(lián)網(wǎng)公司工作了幾年,我作為求職者參加了不少面試,也作為面試官面試了很多同學(xué),整理這份面試指南,一方面是幫助大家更好的準(zhǔn)備面試,有的放矢,另一方面也是對(duì)自己知識(shí)框架做一個(gè)體系化的梳理。
這篇文章梳理了Java核心技術(shù)常見(jiàn)面試題,整理了120道題目,包括Java基礎(chǔ)、集合框架、并發(fā)編程、NIO、反射等部分的內(nèi)容。
語(yǔ)法基礎(chǔ)
面向?qū)ο蟮奶卣饔心男┓矫妫?/p>
hashCode和equals方法的理解?
兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)?
深拷貝和淺拷貝區(qū)別?
&和&&的區(qū)別?
Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
用最有效率的方法計(jì)算2乘以8?
數(shù)組有沒(méi)有l(wèi)ength()方法?String有沒(méi)有l(wèi)ength()方法?
在Java中,如何跳出當(dāng)前的多重嵌套循環(huán)?
構(gòu)造器(constructor)是否可被重寫(override)?
當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?
重載(Overload)和重寫(Override)的區(qū)別。重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分?
為什么不能根據(jù)返回類型來(lái)區(qū)分重載?
抽象類(abstract class)和接口(interface)有什么異同?
闡述靜態(tài)變量和實(shí)例變量的區(qū)別?
靜態(tài)嵌套類(Static Nested Class)和內(nèi)部類(Inner Class)的不同?
接口是否可繼承(extends)接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可繼承具體類(concrete class)?
一個(gè)".Java"源文件中是否可以包含多個(gè)類(不是內(nèi)部類)?有什么限制?
Anonymous Inner Class(匿名內(nèi)部類)是否可以繼承其它類?是否可以實(shí)現(xiàn)接口?
內(nèi)部類可以引用它的包含類(外部類)的成員嗎?有沒(méi)有什么限制?
Java中是如何支持正則表達(dá)式操作的?
基本數(shù)據(jù)類型
String是基本數(shù)據(jù)類型嗎?
float f=3.4;是否正確?
int和Integer有什么區(qū)別?
是否可以繼承String類?為什么?
String和StringBuilder、StringBuffer的區(qū)別?
char 型變量中能不能存貯一個(gè)中文漢字,為什么?
String s = new String("xyz");創(chuàng)建了幾個(gè)字符串對(duì)象?
Java 中的final關(guān)鍵字有哪些用法?
如何實(shí)現(xiàn)字符串的反轉(zhuǎn)及替換?
什么時(shí)候用斷言(assert)?
集合框架
ArrayList和LinkedList有什么差別?
在哪種場(chǎng)景里應(yīng)當(dāng)用ArrayList(或LinkedList)?
有沒(méi)有有順序的Map實(shí)現(xiàn)類,如果有,他們是怎么保證有序的?
List,Set,Map三者的區(qū)別及總結(jié)?
HashMap 和 Hashtable 的區(qū)別?
HashSet 和 HashMap 區(qū)別?
HashMap 和 ConcurrentHashMap 的區(qū)別?
hashmap和hashtable和concurrenthashmap區(qū)別和比較?
HashSet如何檢查重復(fù)?
comparable 和 comparator的區(qū)別?
如何對(duì)Object的list排序?
如何實(shí)現(xiàn)數(shù)組與List的相互轉(zhuǎn)換?
如何求ArrayList集合的交集、并集、差集、去重復(fù)并集?
說(shuō)說(shuō)HashMap 的工作原理及代碼實(shí)現(xiàn)?
ConcurrentHashMap 的工作原理及代碼實(shí)現(xiàn)?
哪些集合類是線程安全的?
Iterator 怎么使用?有什么特點(diǎn)?
Collection和Collections的區(qū)別?
List、Map、Set三個(gè)接口存取元素時(shí),各有什么特點(diǎn)?
Collections工具類中的sort()方法如何比較元素?
TreeMap和TreeSet在排序時(shí)如何比較元素?
IO/NIO
IO和NIO的區(qū)別?
Java中有幾種類型的流?
如何用Java代碼列出一個(gè)目錄下所有的文件?
XML文檔定義有幾種形式?
解析XML文檔有哪幾種方式?
反射和動(dòng)態(tài)代理
什么是反射?
獲得一個(gè)類的類對(duì)象有哪些方式?
如何通過(guò)反射創(chuàng)建對(duì)象?
如何通過(guò)反射獲取和設(shè)置對(duì)象私有字段的值?
如何通過(guò)反射調(diào)用對(duì)象的方法?
動(dòng)態(tài)代理是什么?有哪些應(yīng)用?
什么是 Java 序列化?什么情況下需要序列化?
如何實(shí)現(xiàn)對(duì)象克???
怎么實(shí)現(xiàn)動(dòng)態(tài)代理?
動(dòng)態(tài)代理的不同實(shí)現(xiàn)方式相應(yīng)的優(yōu)缺點(diǎn)?
并發(fā)編程
并行和并發(fā)有什么區(qū)別?
舉例說(shuō)明同步和異步
ThreadLocal的原理是什么?
使用ThreadLocal有哪些注意事項(xiàng)?
Java中能創(chuàng)建volatile數(shù)組嗎?
volatile 能使得一個(gè)非原子操作變成原子操作嗎?
volatile的原理,作用,能代替鎖么?
Java中有哪些鎖?以及他們的區(qū)別?
JDK8中對(duì)HashMap做了怎樣的優(yōu)化?
多線程的幾種實(shí)現(xiàn)方式?
Thread類的sleep()方法和對(duì)象的wait()方法都可以讓線程暫停執(zhí)行,它們有什么區(qū)別?
線程的sleep()方法和yield()方法有什么區(qū)別?
sleep和sleep(0)的區(qū)別?
樂(lè)觀鎖,悲觀鎖有什么區(qū)別?
Lock與Synchronized的區(qū)別?
守護(hù)線程是什么?
說(shuō)一下 runnable 和 callable 有什么區(qū)別?
notify()和 notifyAll()有什么區(qū)別?
說(shuō)一下 synchronized 底層實(shí)現(xiàn)原理?
synchronized 和 volatile 的區(qū)別是什么?
synchronized 和 ReentrantLock 區(qū)別是什么?
當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的synchronized方法A之后,其它線程是否可進(jìn)入此對(duì)象的synchronized方法B?
多線程中 synchronized 鎖升級(jí)的原理是什么?
什么是死鎖?怎么防止死鎖?
說(shuō)一下 atomic 的原理?
線程池
線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系?
什么是線程池(thread pool)?
創(chuàng)建線程池有哪幾種方式?
線程池都有哪些狀態(tài)?
線程池中 submit() 和 execute() 方法有什么區(qū)別?
說(shuō)出與線程同步以及線程調(diào)度相關(guān)的方法?
啟動(dòng)一個(gè)線程是調(diào)用run()還是start()方法?
工具類Executors里面提供了哪些靜態(tài)工廠方法?
簡(jiǎn)述synchronized 和Java.util.concurrent.locks.Lock的異同?
異常
Error和Exception有什么區(qū)別?
運(yùn)行時(shí)異常與受檢異常有何異同?
列出一些你常見(jiàn)的運(yùn)行時(shí)異常?
闡述final、finally、finalize的區(qū)別。
throw 和 throws 的區(qū)別?
JDBC
闡述JDBC操作數(shù)據(jù)庫(kù)的步驟?
Statement和PreparedStatement有什么區(qū)別?哪個(gè)性能更好?
在進(jìn)行數(shù)據(jù)庫(kù)編程時(shí),連接池有什么作用?
JDBC中如何進(jìn)行事務(wù)處理?
JDBC能否處理Blob和Clob?
JDK特性
Lambda表達(dá)式有哪些應(yīng)用?
JDK 8的Fork/Join框架了解嗎?
List、Set、Map是否繼承自Collection接口?
需要上面java面試題答案的私信筆者“java”領(lǐng)取哦
另外喜歡這篇文章的可以給筆者點(diǎn)個(gè)贊,關(guān)注一下,每天都會(huì)分享Java相關(guān)文章!還有不定時(shí)的福利贈(zèng)送,包括整理的學(xué)習(xí)資料,面試題,源碼等~