關(guān)于Java面試,一般應(yīng)該會(huì)問到下面這些問題。
[編程工具]
你常用的編程工具有哪些?這個(gè)問題主要是考察你工作的專業(yè)性,你是不是具有大型項(xiàng)目的工作經(jīng)驗(yàn).
一般好的,Java的編程工具,你比如說,Eclipse, netbeans, Intelli J 等等。
[局部變量和類變量的區(qū)別]
這個(gè)問題主要是考察選手對(duì)于scope的概念?;卮疬@個(gè)問題,
就是局部變量是在方法里面定義的。這個(gè)變量只能在方法內(nèi)部才可以被調(diào)用。
類變量呢,可以在類的內(nèi)部,任何地方都可以被調(diào)用。類變量還可以添加一些修飾符,限制或者允許外部類調(diào)用。
[什么是繼承? ]
繼承就是說子類可以享有父類的一些定義。
[什么是封裝?]
封裝是通過類定義的方式,把一些方法和數(shù)據(jù)包裹起來(lái)。
[什么是多態(tài)?]
多態(tài)是指一個(gè)對(duì)象可以通過具體的引用類型來(lái)調(diào)用父類和子類的一些方法。
這三個(gè)問題主要是考察選手對(duì)于面向?qū)ο缶幊痰母拍睢?/p>
[ Overriding 和 overloading的區(qū)別]
這兩種方法在編程中會(huì)經(jīng)常用到。被問的可能性非常大。
Overriding主要用在子類要使用父類的一些方法定義。方法名必須相同,方法參數(shù)必須相同, 返回值類型必須相同。使用這種方法, 子類既可以調(diào)用父類的方法也可以添加自己個(gè)性化的實(shí)現(xiàn)。
Overloading主要用在方法這一層次上。具有同樣的方法名,不同的參數(shù)類型, 可能會(huì)返回不同的數(shù)據(jù)類型。
[接口和抽象的區(qū)別?]
這個(gè)問題在面向?qū)ο缶幊汤锩嬉彩墙?jīng)常被問到的一個(gè)問題。
在Java中,無(wú)法實(shí)現(xiàn)多類繼承,所以就引入了接口的概念。接口中,主要是類的聲明,沒有實(shí)現(xiàn)內(nèi)容。
抽象類中至少要含有一個(gè)抽象方法。這個(gè)抽象方法只有聲明沒有實(shí)現(xiàn)。抽象類的非抽象方法,需要有實(shí)現(xiàn)內(nèi)容。
[說一下訪問修飾符]
這也是面向?qū)ο缶幊汤锩娣浅V匾囊粋€(gè)概念。
private, protected, public。沒有修飾符,就是default。
private只能在本類內(nèi)部訪問。
protected在本類和子類中訪問。
public在其他類中都可訪問。
default在包內(nèi)可訪問。
[數(shù)組和數(shù)組列表的區(qū)別?]
[String, StringBuilder, StringBuffer的區(qū)別? ]
string不可修改。
string builder可修改,線程不安全的。
string buffer可修改,線程安全的。
[HashMap, HashTable 的區(qū)別? ]
都是字典類型。
hash map 是線程不安全的。
hash table 是線程安全的。
[Set 相關(guān)的問題]
Set里面的數(shù)據(jù)是唯一的。
sorted set是可排序的。
[Queue 相關(guān)的問題]
priority queue先進(jìn)先出。
[Map相關(guān)的問題]
有hash map, linked hash map, tree map.
[Tree相關(guān)的問題]
主要是二叉樹, 搜索二叉樹以及平衡二叉樹。
二叉樹是指只有左邊和右邊兩個(gè)節(jié)點(diǎn)的結(jié)構(gòu)。
搜索二叉樹是指左邊的節(jié)點(diǎn)永遠(yuǎn)比右邊的節(jié)點(diǎn)小。
平衡二叉樹是指左邊的高度與右邊的高度相差不超過1。
這是數(shù)據(jù)結(jié)構(gòu)相關(guān)的問題。
[final相關(guān)的問題]
final分別用在變量,類和方法上意味著什么。
final用在類上,這樣的類無(wú)法被繼承。
final用在變量上, 這樣的變量無(wú)法被修改。
final用在方法上,這樣的方法無(wú)法被overriding。
[Exception相關(guān)的問題]
一共有幾種exception?
out of index, io, illegal argument, etc.
他們的區(qū)別是什么?在什么時(shí)候用?
這樣的exception很多。顧名思義,在對(duì)應(yīng)的情況下使用對(duì)應(yīng)的exception。
Runtime exception和compile exception有什么區(qū)別?
run time exception,是在運(yùn)行過程中發(fā)生的exception。
compile exception,是指在程序編譯的時(shí)候,報(bào)出來(lái)的exception。
[線程相關(guān)的問題]
什么是線程?
線程是進(jìn)程的一個(gè)分支。
如何創(chuàng)建線程?
可以使用thread和 handler來(lái)創(chuàng)建線程。
如何在線程中間傳輸數(shù)據(jù)?
可以通過共享數(shù)據(jù)和線程變量。
解釋一下yield, wait, notify, notifyAll, sleep
yield是把線程從運(yùn)行狀態(tài),變?yōu)榭蛇\(yùn)行狀態(tài)。
wait是要求線程解鎖并放棄運(yùn)行狀態(tài),進(jìn)入等待隊(duì)列。
notify是用來(lái)從等待隊(duì)列里面喚醒一個(gè)線程。
notifyAll是用來(lái)從等待隊(duì)列里面喚醒所有線程。
sleep是暫停線程的執(zhí)行。當(dāng)前線程被喚醒后會(huì)進(jìn)入可運(yùn)行狀態(tài)。
解釋線程的生命狀態(tài)。
線程的生命狀態(tài),新創(chuàng)建,可運(yùn)行,正在運(yùn)行,不可運(yùn)行,終止。
如何實(shí)現(xiàn)線程的同步?線程同步有什么缺點(diǎn)?
通常使用synchronized 關(guān)鍵字來(lái)實(shí)現(xiàn)。缺點(diǎn)是降低了程序的執(zhí)行效率。
Volatile是干什么用的?
這個(gè)關(guān)鍵字是用來(lái)在主內(nèi)存上定義一個(gè)變量。而不是在線程的內(nèi)存上。主要用來(lái)做數(shù)據(jù)的共享。
[序列化是怎么回事]
序列化是指把一個(gè)對(duì)象寫入文件當(dāng)中。反序列化是指從文件返回一個(gè)對(duì)象。
如何來(lái)做序列化和反序列化?
可以使用objectoutputstream寫入和讀取。
好了,這個(gè)問題先說這些,歡迎關(guān)注丁哥開講,我們下次再見。