歡迎小伙伴訂閱我的新專欄“Java高薪面試寶典”,在這里我將和大家分享在Java面試中常見的核心考點和技術,為大家的Java學習之路助一臂之力!

開胃菜譜
1、JDK、JRE、JVM是什么?
2、什么是面向物件
3、Java的資料型別有哪些?
4、解釋一下構造方法
5、如何理解方法的多載和重寫?
6、解釋this和super關鍵字
7、解釋字串三劍客(String、StringBuilder、StringBuffer)
8、equals和 == 的區別
9、解釋介面和抽象類
Hello,你好呀,我是灰小猿,一個超會寫bug的程式猿,
經過多方面的深思熟慮,我還是開了這樣一個專欄“Java高薪面試寶典”,聽著名字可能有些浮夸了,畢竟在坐的各位肯定都是技術領域的大佬呀,在這個專欄中,我想和大家分享一些在java面試中常見的一些面試問題,還有我們眾多Java程式猿經常容易忽略或者在開發中常常會用到的一些問題,包括技術和管理等眾多方面,
畢竟很多的面試都并不會讓你直接的去講述一個完整的專案的完成程序,而是對于在專案開發中經常會被程式員們忽略反而又比較重要的一些問題,甚至有時候還會拿一個看似很簡單的問題來讓我們交智商稅,但是很多時候呢,又恰恰是那些不太起眼的面試題,卻讓我們與心愛的offer失之交臂,
所以考慮了很久之后,還是想在這里出一個關于Java面試的專欄,來幫助大家解決和應對在面試中可能會遇到的那些坑,同時也是在對我自己在Java學習之路進行一個記錄和總結,
在進行完整的學習之前,我先來和大家分享開胃小菜,Java面試中常見的幾個小問題:
1、JDK、JRE、JVM是什么?
JDK:開發者提供的開發工具箱,是給程式開發者用的,它包括完整的jre、Java運行環境,還包括了其他供開發者使用的工具包,
JRE:運行時所必須的包依賴的環境都在jre中
JVM:當我們運行一個程式時,JVM負責將位元組碼轉換為特定機器代碼,JVM提供了記憶體管理、垃圾回收和安全機制等,他獨立于硬體和作業系統,正是java程式可以一次撰寫多處執行的原因,
2、什么是面向物件
封裝:封裝把一個物件的屬性私有化、同時提供一些可以被外界訪問的屬性的方法,
繼承:
-
java是多單繼承的,
-
子類擁有父類非private的屬性和方法
-
子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展
-
子類可以用自己的方式實作父類的方法
多型:父類的參考指向子類
3、Java的資料型別有哪些?
很多人都會在這個看似簡單的問題中入坑,一說到資料型別,很多人第一時間想到的就是int、char等型別,但是我們仔細看題就會發現,題中所問的問題是資料型別,而不是基本資料型別,
資料型別有兩種,分別是“基本資料型別”和“參考資料型別”
基本資料型別包括的內容如下表:
|
| byte | short | int | long | double | float | char | boolean |
| 位元組大小 | 1 | 2 | 4 | 8 | 8 | 4 | 2 | 1 |
| 占位大小 | 8 | 16 | 32 | 64 | 64 | 32 | 16 | 8 |
而參考資料型別包括的是三種:類、介面、陣列
那么在Java中為什么會有“基本資料型別”和“參考資料型別”?
原因是因為參考型別在堆里,基本型別在堆疊里,
堆疊空間小且連續,往往會被放在快取,參考型別的高速快取率高且要多一次解參考,
而且物件還要再多儲存一個物件頭,對基本資料型別來說空間浪費率太高,
4、解釋一下構造方法
構造方法有哪些規定?
-
構造方法名必須與類名一致
-
構造方法不舉辦任何回傳值型別、關鍵字void也不能加入
-
任何類都有構造方法,如果沒有顯示的定義,則系統會為該類定義一個默認的無參構造器
-
如果顯示的定義了構造器,系統就不會創建默認的不含引數的構造器了,
-
一個類中可以撰寫多個構造方法,構造方法之間構成多載關系,
5、如何理解方法的多載和重寫?
對于方法的多載和重寫,這是兩個非常容易混淆的概念,所以在這里做了一個表格的對比:
| 多載 | 重寫 |
|
|
以上是幾個在Java面試中常見的概念型面試題,接下來再和大家分享幾個對比類的面試題
6、解釋this和super關鍵字
在this和super關鍵字使用程序中有以下這些注意事項:
-
Super關鍵字用于從子類訪問父類的變數和構造方法,也包含構造方法
-
Super呼叫父類中的其他構造方法時,呼叫時要放在構造方法的首行
-
this關鍵字用于參考類的當前實體,this可以呼叫當前類的構造方法
-
this呼叫本類中的其他構造方法時,也要放在首行
-
this和super都不能用在static方法中
7、解釋字串三劍客(String、StringBuilder、StringBuffer)
|
| 可變性 | 執行緒安全 | 性能 |
| String | 由final修飾,不可變 | 安全的 | 進行改變時,重新指向 |
| StringBuilder | char[] value 可變 | 不安全 | 比StringBuffer有10%-15%的提升 |
| StringBuffer | char[] value 可變 | 加鎖、安全的 |
|
8、equals和 == 的區別
這個問題也是我們在開發時常用的兩個進行比較的方法,但是這兩種方法你真的了解嗎?
==:判斷兩個基本資料型別的值是不是相等,或兩個參考型別物件的地址是不是相等
equals():判斷是否用一個物件,更加靈活
接下來我們來看一個經典的面試題實體:
public static void main(String[] args) {
Integer x = new Integer(500);
Integer y = new Integer(500);
System.out.println(x == y);
Integer i = 128;
Integer j = 128;
System.out.println(i == j);
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
}
上面這個實體的運行結果如下:

第一個是false,原因是因為:x和y是兩個新的物件,所以這兩個物件的地址是不同的
而對于第二個和第三個,為什么第一個是false,而第二個是true呢?原因是因為integer在常量池中的存盤范圍是[-128、127],127在這個范圍之內,因此直接存盤于常量池中,128不在這范圍之內,所以會在堆中創建一個新的物件
9、解釋介面和抽象類
介面是對行為的抽象,他是抽象方法的集合
-
介面不用被實體化,所有成員默認被public static final所修飾
-
介面中所有的方法,要么是抽象方法、要么是靜態方法
-
抽象類和介面一樣不能被實體化
-
抽象類中可以有一個或多個抽象方法,也可以不含有抽象方法
-
抽象類是對共有方法實作或者共有成員變數的抽取,主要通過繼承的方式用于代碼重用
在這里需要注意的是:從Java8開始,介面增加了對default method方法的支持,
Java9之后增加了對private default method方法的支持,也就是說在java8中介面中的default方法和static方法都可以有方法體的
以上就是我和大家分享的幾個Java面試中常見的開胃小菜,其實從很多Java相關的面試中就可以看出,很多面試官更會注重于對Java基礎的考核,畢竟任何的Java高級技術都是建立在基礎框架之上的,之后我也會繼續在這個專欄和大家分享關于在Java面試中常見的核心考點,
覺得有用的小伙伴可以訂閱專欄,
灰小猿陪你一起進步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/245204.html
標籤:java

