天天看點

Java面試題系列(一)-面試題及解題思路Java面試題系列(一)-面試題及解題思路

Java面試題系列(一)-面試題及解題思路

前言:

不管看了多少知識,最終還是要面試的。刷刷面試題也算是一個好的複習方法

面試題不是我自己面試的,是我網上找的 原文連結

解答思路是我自己想的,也不是标準答案,而且有可能會錯。按我自己的了解給出涉及到的點

隻是給出我覺得回答中應該涉及到的點,而不是就這麼說

21題目前沒有回答上來

23,24,26,34,35,36也有必要再更新

1、面向對象的特征有哪些方面?

A:多态,繼承,封裝 (PS:我挺不喜歡被問這種問題,都不知道咋說)

2、通路修飾符public,private,protected,以及不寫(預設)時的差別?

修飾符 通路級别
public 公有成員,所有人可以通路
protected 受保護的成員,子類可見,以及同一包下的其他類可見
default 同一包下的其他類可見
private 僅該類自己可見

3、String 是最基本的資料類型嗎?

A:不是基本資料類型,Sring是一個被final修飾的類。String常用的方法, 8種基本資料類型,包裝類,自動裝箱拆箱

4、float f=3.4;是否正确?

A:不行,3.4是double類型,得float f = 3.4f;這樣寫。8基本資料類型的所占位數。8種資料類型的轉化

5、short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?

A 前者有問題,後者沒有問題。1是int型。 +=可以自動轉化。

6、Java有沒有goto?

A:Java沒有goto,但是goto是保留字。流程跳轉:if ,else, for, while, do-while, break, continue,代表情的break

7、int和Integer有什麼差別?

基本資料類型和包裝類,注意常量池 127

8、&和&&的差別?

都是與,前者是短路運算符。

與&或|非~,異或^

9、解釋記憶體中的棧(stack)、堆(heap)和靜态區(static area)的用法。

A: 虛拟機運作時記憶體劃分:程式計數器;虛拟機棧;本地方法棧; 堆;方法區(靜态區應該指的資格) 五個部分。 前三者是線程獨享,後面三者是線程共享;

堆:存儲Java執行個體對象 (new 出來的執行個體)

棧:存儲局部變量表(基本資料類型,對象引用)

方法區:類資訊,常量,運作時常量池,靜态變量,即時編譯器編譯後的代碼資料

最大的一塊區域是 堆

引申:垃圾回收 垃圾收集器

10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

A: 這個就相當于+0.5再取整。前者結果12,後者-11

11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

A:switch能夠作用在 byte,short,boolean,int上。1.7之後更新。也能夠作用在String上

12、用最有效率的方法計算2乘以8?

A: 1<<3向左移三位

13、數組有沒有length()方法?String有沒有length()方法?

A: String有length()方法; 數組有length屬性沒有length()方法 {這個問題挺沒意思的。完全不知道想考驗什麼?}

14、在Java中,如何跳出目前的多重嵌套循環?

A:使用break 這個是最常見的。還有帶标記的break和continue也可以。但是這種我看用的比較少。而且我個人實際上也沒用過

15、構造器(constructor)是否可被重寫(override)?

A:構造器用來new一個Java對象。隻能被重載(一個類有多個構造函數)。不能被重寫

16、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?

A:不對。兩個對象equals,hashcode一定相同。因為equals的基本條件就是hashcode相同。但是hashcode相同 。卻不一定equals。例如11%5的結果是1,6%5的結果也是1.但是6和11完全不同

引申:equals的5個特性:自反性,傳遞性,一緻性,對稱性,以及對于非空對象X,X.equals(null)的結果是false

17、是否可以繼承String類?

A: 不行,String是final修飾的。不能被繼承

引申:final,finally,finalize的差別。final在并發程式設計裡的作用

18、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,并可傳回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?

A:Java裡面全部都是值傳遞。沒有引用傳遞。一個對象傳遞給一個方法後,确實可以改變對應的屬性。但是這裡值傳遞指的是這個對象所指向記憶體位址不會被方法改變

19、String和StringBuilder、StringBuffer的差別?

A:String是final修飾的。每次改變都是建立個String對象

StringBuilder可以用append修改。也有一些好用的方法,例如反正,轉大小寫等

StringBuffer和StringBuilder一樣,不過方法用synchronized修飾,線程安全

20、重載(Overload)和重寫(Override)的差別。重載的方法能否根據傳回類型進行區分?

A:重載發生在一個類中,是方法名字相同。但是參數類型。或參數個數不同

重寫發生在父子類間。子類重寫父類的方法。方法名,傳回值類型,參數類型,參數個數相同。重寫方法體。子類重寫父類的方法。方法通路方位隻能比父類的小

重載是編譯是多态,重寫是運作時多态。

21、描述一下JVM加載class檔案的原理機制?

22、char 型變量中能不能存貯一個中文漢字,為什麼?

A:char占有兩個位元組,16位。應該能存的下吧

然後我剛才用idea試過了。原因哈Unicode編碼有關。具體的我先在也想不起來。

23、抽象類(abstract class)和接口(interface)有什麼異同?

這個問題有必要更新

A:現在接口和抽象類功能越來越接近了。要說不同還真有點不确定

修飾詞不同:前者是 abstract 後者是Interface。前者是繼承,後者是實作(可以實作多個方法)

内部方法的通路修飾不同:前者可以是大于private的就可以。 ~~ 後者隻能是public ~~ (我剛才在IEDA試了下JDK12。發現接口裡也能有private方法。但是必須寫方法體)

用法上:接口一般是用來定義規範的。抽象類用來占坑

24、靜态嵌套類(Static Nested Class)和内部類(Inner Class)的不同?

25、Java 中會存在記憶體洩漏嗎,請簡單描述。

A:記憶體洩露指的是一個不用的對象一直占有着記憶體。Java理由垃圾回收機制,理論上是不會有記憶體洩露的。那就是實際上有咯。eg:HashSet持有一個對象。對象被更改後。HashSet存儲的那個對象就不會被回收。

26、抽象的(abstract)方法是否可同時是靜态的(static),是否可同時是本地方法(native),是否可同時被synchronized修飾?

需要再更新

A:抽象方法需要子類重寫。不能是靜态的(看27題)。後面兩種不太了解。應該是可以嗎

27、闡述靜态變量和執行個體變量的差別。

A:靜态變量是屬于類的。所有執行個體公有。執行個體變量是每個對象自己的

引申到JVM中:靜态變量是類加載的時候初始化。執行個體變量是new對象(記憶體配置設定)的時候初始化

28、是否可以從一個靜态(static)方法内部發出對非靜态(non-static)方法的調用?

A:不行,同27,靜态的方法在類加載時候就初始化了。但是不能直接調用可以間接調用。通過先new一個對象,在通過那個對象調用非靜态方法

29、如何實作對象克隆?

A:實作Cloneable接口,重寫object的clone方法

引申:如何擷取一個對象:①直接new②clone③反序列化④反射

31、String s = new String(“xyz”);建立了幾個字元串對象?

A:一個或兩個;如果字元串常量池(方法區)有xyz,則生成一個字元串對象。如果沒有,想在字元串常量池生成一個,再堆中生成一個,一共兩個

32、接口是否可繼承(extends)接口?抽象類是否可實作(implements)接口?抽象類是否可繼承具體類(concrete class)?

A:接口可以擴充(extends)接口,抽象類可以實作接口,抽象類可以繼承具體的類

可以聯想抽象類和接口的具體作用。

33、一個".java"源檔案中是否可以包含多個類(不是内部類)?有什麼限制?

A:可以有多個類。但是隻有一個public類。檔案名就是這個public類

34、Anonymous Inner Class(匿名内部類)是否可以繼承其它類?是否可以實作接口?

待補充。内部類這一塊我雖然用的不算少。但是具體的很少深究

35、内部類可以引用它的包含類(外部類)的成員嗎?有沒有什麼限制?

待補充

36、Java 中的final關鍵字有哪些用法?

A:修飾類,類不能被繼承,修飾方法:方法不能被重寫。修飾對象,對象貝能修改。簡單說就是 絕後。隻要被final修飾了。就不能對齊做其他操作了

在并發中的作用有待補充

38、資料類型之間的轉換:

小的可以裝換成大的。

boolean 和編譯器有關。我覺得1位元組就夠了

byte 1位元組

short 2位元組

char 2位元組

int 4位元組

float 4位元組

long 8

double 8

39、如何實作字元串的反轉及替換?

A:StringBuilder有reserve方法。應該也有類似的方法{這個問題其實挺沒意思的。這種接口用的時候可以通過IEDA看有哪些方法。這哪記得方法名}