在我身邊,有很多人習慣性地忽視基礎題目,特別是面試之前,都還覺得這些題目都好簡單,自己肯定能回答出來的。結果真的到了面試的時候,面試官問幾道最基礎的題目,他們反而是支支吾吾,說半天都組織不好語言。這是因為他們平時過於輕視基礎題,以至於真正需要用的時候反而有那種“只可意會不可言傳”的無奈感。
今天,我們就來看三道入門級別的面試題,看看你不看答案是否能自己組織語言回答得上來。
說說 Java語言有哪些特點儘量答出以下幾個關鍵詞:
1)簡單易學。Java有豐富的類庫,能夠透過靜態方法封裝,降低API的學習成本,提高工作效率。
2)面向物件。這個也是Java最重要的特性,java能夠使得程式耦合度更低,內聚性更高。
3)可靠安全。Java生態系統包括用於分析和報告安全性問題的各種工具。
4)與平臺無關。Java能夠跨平臺使用,Write Once Run AnyWhere。實際上就是對應作業系統上都有個虛擬機器作為一箇中間轉換。
5)支援多執行緒。Java可以採用多執行緒+協程方式實現更多的併發操作。
下面也是一道入門級面試題,面向過程與面向物件的區別,這裡最好的是搞過C或C++的同學,後面來搞Java了,這樣對面向過程和麵向物件程式設計的體會更深。
說說面向物件和麵向過程的區別1)從概念上來說。面向過程:字面意義上就是面向的是過程,先做什麼、在做什麼、最後做什麼,然後用函式把這些步驟一步一步地實現,在使用的時候一一呼叫則可。面向物件:字面意義上就是面向的是物件,是把構成問題的事務分解成各個物件,但是建立物件的目的也不是為了完成一個個步驟,而是為了描述某個事物在解決整個問題的過程中所發生的行為。
2)從效能上來說。面向過程效能較高,所以微控制器、嵌入式開發等一般採用面向過程開發。從效能上來說,面向物件比面向過程要低。
3)從可用性來說。面向物件有封裝、繼承、多型的特性,所以易維護、易複用、易擴充套件,可以設計出低耦合的系統。
擴充套件面試題:說說面向切面和麵向物件的區別。
下面還是一道入門面試題,每個面試題都不要掉以輕心,都是考驗基本功是否紮實。
說說方法過載和方法重寫的區別都是和方法有關係的,那Java中方法的簽名包含什麼呢?
要完整地描述一個方法,需要指出方法名以及引數型別,這就叫方法的簽名。
比如說String類中有4個稱為indexOf的公有方法:
indexOf(int)indexOf(int,int)indexOf(String)indexOf(String,int)
返回型別不是方法簽名的一部分,也就是說,不能有兩個名字相同、引數型別也相同卻有著不同型別返回值的方法。
public void say(String name){}public String say(String name){}
我們繼續聊方法的重寫與過載:
「方法的重寫(Override)」
從字面上看,重寫就是 重新寫一遍的意思。其實就是在子類中把父類本身有的方法重新寫一遍。子類繼承了父類原有的方法,但有時子類並不想原封不動地繼承父類中的某個方法,所以在方法名,引數列表,返回型別(除過子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下, 對方法體進行修改或重寫,這就是重寫。但要注意子類函式的訪問修飾許可權不能少於父類的。
public class Father { public static void main(String[] args) { Son s = new Son(); s.sayHello(); } public void sayHello() { System.out.println("Father say Hello"); }}class Son extends Father{ //Son重寫了Father的 sayHello方法 @Override public void sayHello() { System.out.println("Son say hello "); }}
總結:
1.發生在父類與子類之間 。
2.方法名,引數列表,返回型別(除過子類中方法的返回型別是父類中返回型別的子類)必須相同。
3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private) 。
4.重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。
「方法的過載(Overload)」
Java中允許同一個類中可以定義多個同名方法,只要形參列表(方法入參)不同就行。如果同一個類種包含了兩個或者多個以上方法的名稱相同,但是形參列表不同,則被稱之為方法過載。
在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同甚至是引數順序不同)則視為過載。同時,過載對返回型別沒有要求,可以相同也可以不同,但不能透過返回型別是否相同來判斷過載。
public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Father s = new Father(); s.sayHello(); s.sayHello("wintershii"); } public void sayHello() { System.out.println("Hello"); } public void sayHello(String name) { System.out.println("Hello" + " " + name); } public void sayHello(Long userId, String name) { sayHello("Hello" + " " + name); }}
總結:
方法過載要求兩同一不同:
1.同一個類中。
2.方法名相同。
3.引數列表不相同。
方法返回值、修飾符,與方法過載沒有任何關係。
不推薦使用以下方式:
public void sayHello(String name){}public void sayHello(String... name){}
因為這麼做實在是沒有太大的意義,並且容易降低程式的可讀性。
總結本文分享了三道入門級面試題,你都能回答上來嗎?你回答都是背的嗎還是自己真正理解的?
「稍微認真點、踏實點、努力點,發光是遲早的事」