這些基礎的java面試題,你都知道嗎?
最近收到好多正在找工作的同學的訴苦,辛辛苦苦準備了十多天,終于有了一個面試的機會,卻折在了“八大基本數據類型都有什么?”這種最基礎的問題上,因而痛失offer,錯失機會,真是太可惜了。

面試官的心思難以捉摸,鬼知道會問什么奇葩問題,可能很多同學都把精力用在了IOC,AOP,數據庫調優(yōu)以及各種框架原理的準備上,而忽略了那些最簡單,最基礎的問題。
有了前車之鑒,為了避免其他同學也遇到這種情況。UP特意整理了一些在面試中出現頻率比較高的Java基礎的問題,希望能幫助各位同學快速回憶起Java中基礎的知識點,順利拿到offer,找到自己滿意的工作。

以下總結的問題,全都來自Java300集,基礎不太扎實的同學,一定要再好好學一下哦~
1、什么是JVM?什么是JDK? 什么是JRE?
JVM :JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是整個java實現跨平臺的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執(zhí)行。
JRE:JRE是java runtime environment(java運行環(huán)境)的縮寫。光有JVM還不能讓class文件執(zhí)行,因為在解釋class的時候JVM需要調用解釋所需要的類庫lib。在JDK的安裝目錄里你可以找到jre目錄,里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和lib和起來就稱為jre。
JDK:JDK是java development kit(java開發(fā)工具包)的縮寫。每個學java的人都會先在機器上裝一個JDK,那 讓我們看一下JDK的安裝目錄。在目錄下面有六個文件夾、一個src類庫源碼壓縮包、和其他幾個聲明文件。其中,真正在運行java時起作用的是以下四個文件夾:bin、include、lib、jre。
現在我們可以看出這樣一個關系,JDK包含JRE,而JRE包含JVM。
JDK,JRE,JVM三者關系概括如下:
jdk是JAVA程序開發(fā)時用的開發(fā)工具包,其內部也有JRE運行環(huán)境JRE。JRE是JAVA程序運行時需要的運行環(huán)境,就是說如果你光是運行JAVA程序而不是去搞開發(fā)的話,只安裝JRE就能運行已經存在的JAVA程序了。JDk、JRE內部都包含JAVA虛擬機JVM,JAVA虛擬機內部包含許多應用程序的類的解釋器和類加載器等等。
2、Java三種注釋類型
1)單行注釋,采用“//”方式.只能注釋一行代碼。
2)多行注釋,采用“/*...*/”方式,可注釋多行代碼,其中不允許出現嵌套。
3)文檔注釋,采用“/**...*/”方式。
3、8種基本數據類型及其字節(jié)數

4、i++和++i的異同之處
共同點:
i++和++i都是變量自增1,都等價于i=i+1
如果i++,++i是一條單獨的語句,兩者沒有任何區(qū)別
i++和++i的使用僅僅針對變量。 5++和++5會報錯,因為5不是變量。
不同點:
如果i++,++i不是一條單獨的語句,他們就有區(qū)別。
i++ :先運算后增1。如:
++i : 先增1后運算。如:
5、if多分支語句和switch多分支語句的異同之處
相同之處:
都是分支語句,對超過一種的情況進行判斷處理。
不同之處:
switch更適合用于多分支情況,就是有很多種情況需要判斷處理,判斷條件類型單一,只有一個入口,在分支執(zhí)行完后(如果沒有break跳出),不加判斷地執(zhí)行下去;
而if—elseif---else多分枝主要適用于分支較少的分支結構,判斷類型不是單一,只要一個分支被執(zhí)行后,后邊的分支不再執(zhí)行。
switch為等值判斷(不允許比如>= <=),而if為等值和區(qū)間都可以,if的使用范圍大。
6、while和do-while循環(huán)的區(qū)別
while先判斷后執(zhí)行,第一次判斷為false,循環(huán)體一次都不執(zhí)行
do while先執(zhí)行 后判斷,最少執(zhí)行1次。
如果while循環(huán)第一次判斷為true, 則兩種循環(huán)沒有區(qū)別。
7、break和continue的作用
break:?結束當前循環(huán)并退出當前循環(huán)體。
break還可以退出switch語句
continue:?循環(huán)體中后續(xù)的語句不執(zhí)行,但是循環(huán)沒有結束,繼續(xù)進行循環(huán)條件的判斷(for循環(huán)還會i++)。continue只是結束本次循環(huán)。
8、類和對象的關系
類是對象的抽象,而對象是類的具體實例。類是抽象的,不占用內存,而對象是具體的,占用存儲空間。類是用于創(chuàng)建對象的藍圖,它是一個定義包括在特定類型的對象中的方法和變量的軟件模板。
類和對象好比圖紙和實物的關系,模具和鑄件的關系。
比如人類就是一個概念,人類具有身高,體重等屬性。人類可以做吃飯、說話等方法。
小明就是一個具體的人,也就是實例,他的屬性是具體的身高200cm,體重180kg,他做的方法是具體的吃了一碗白米飯,說了“12345”這樣一句話。
9、面向過程和面向對象的區(qū)別

比喻
面向過程是蛋炒飯,面向對象是蓋澆飯。蓋澆飯的好處就是“飯”“菜”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業(yè)術語就是“可維護性”比較好,“飯” 和“菜”的耦合度比較低。
區(qū)別
編程思路不同:面向過程以實現功能的函數開發(fā)為主,而面向對象要首先抽象出類、屬性及其方法,然后通過實例化類、執(zhí)行方法來完成功能。
封裝性:都具有封裝性,但是面向過程是封裝的是功能,而面向對象封裝的是數據和功能。
面向對象具有繼承性和多態(tài)性,而面向過程沒有繼承性和多態(tài)性,所以面向對象優(yōu)勢是明顯。
10、方法重載和方法重寫(覆蓋)的區(qū)別

以上這十道面試題UP認為還是很重要的,UP一共整理了600多道面試題,包括java的各個方面。光基礎部分就有300多,占了一半。所以,基礎很重要啊同學們。把基礎部分再好好學一下吧。

最近有準備面試的同學,抓緊時間好好準備一下了,有需要全部面試題的同學,可以留言,UP會私發(fā)給各位同學的。