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看有哪些方法。這哪記得方法名}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章