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