java面試基礎(chǔ)

目錄:

1.面向?qū)ο蠛兔嫦蜻^程:

2.java語言的特點(diǎn):

3.jdk和jre的區(qū)別:

4.java和c++的區(qū)別:

5.字符常量和字符串常量區(qū)別:

6. 重寫和重載:

7.三大特征:

8.String、Stringbuilder和Stringbuffer

9. 自動拆箱和自動裝箱:

10.為什么java類中需要定義無參構(gòu)造器:

11.接口和抽象類:

12.成員變量和局部變量:

13.==和equals:??

14.為什么重寫了equals方法,需要重寫hashcode方法:

15.程序、進(jìn)程和線程:

16.線程的運(yùn)行狀態(tài):

17.final關(guān)鍵字:

18.異常:

19.finally不會執(zhí)行的情況:

20.io流:

21.深拷貝和淺拷貝:

22.數(shù)組轉(zhuǎn)集合、集合轉(zhuǎn)數(shù)組:

23.static關(guān)鍵字:

24.this關(guān)鍵字:

25.super關(guān)鍵字:

26.反射:

27.反射應(yīng)用場景:

28.集合:

29.arrylist和linkedlist:

30.線程創(chuàng)建方式:

31.java跨平臺原理:

32.多線程停止:

33.死鎖:

34.socket:

35.接口優(yōu)點(diǎn):

36.線程優(yōu)先級遵循原則:

37.jar包和war包:

38.java可變參數(shù):

39.類加載方式:

1.面向?qū)ο蠛兔嫦蜻^程:

? ? ? ? 面向?qū)ο螅阂驗(yàn)樾枰S護(hù)對象,所以需要消耗更多的內(nèi)存。并且因?yàn)橛袑ο蟮拇嬖?,所以更易維護(hù),更易擴(kuò)展和更易復(fù)用。

? ? ? ? 面向過程:因?yàn)椴恍枰獙?shí)例化對象,所以性能高。但不易維護(hù)、擴(kuò)展和復(fù)用。

2.java語言的特點(diǎn):

? ? ? ? 面向?qū)ο蟮娜筇匦裕豪^承、封裝和多態(tài)。

? ? ? ? 跨平臺、支持多線程和網(wǎng)絡(luò)編程。

3.jdk和jre的區(qū)別:

? ? ?jre翻譯過來就是java的運(yùn)行環(huán)境,主要包括java虛擬機(jī)、java類庫和java命令等。能編譯程序但無法創(chuàng)建程序。

? ? ?jdk包含了jre,并且還多了java編譯器javac,和javadoc工具,可以編譯和創(chuàng)建程序。

4.java和c++的區(qū)別:

? ? ? 相同點(diǎn):都是面向?qū)ο螅С址庋b、多態(tài)和繼承。

? ? ? 不同點(diǎn):java是單繼承,自動內(nèi)存管理。c++是多繼承,需要手動釋放資源。

5.字符常量和字符串常量區(qū)別:

? ? ? 字符常量用char表示,使用單引號,可以看作一個整型值參與運(yùn)算,占2個字符。

? ? ? 字符串常量:使用雙引號,占若干個字節(jié)。

6. 重寫和重載:

? ? ? 重寫:子類繼承父類的相同方法,方法名和傳參輸出這些需要一致,進(jìn)行方法體內(nèi)部的重寫。父類方法被static和final,private修飾時,無法被重寫。

? ? ? 重載:同一個類中方法名相同,但傳參個數(shù)或者傳參類型不一致。

7.三大特征:

? ? ?多態(tài):父類引用指向子類對象,編譯期間不確定,運(yùn)行期間才能確定。

? ? ?繼承:子類繼承父類,可以使用父類的方法,以便于進(jìn)行復(fù)用。

? ? ?封裝:把類的屬性進(jìn)行私有化,并對外提供屬性的方法。

8.String、Stringbuilder和Stringbuffer

? ? String:String類使用final修飾,所以String創(chuàng)建的對象不可改變,每當(dāng)進(jìn)行字符串拼接時,會重新創(chuàng)建對象,消耗內(nèi)存。

? ? Stringbuilder:線程不安全,但效率高。

? ? Stringbuffer:線程安全,但效率低。

9. 自動拆箱和自動裝箱:

? ? ? 自動裝箱:基本數(shù)據(jù)類型轉(zhuǎn)為引用類型。

? ? ? 自動拆箱:引用類型轉(zhuǎn)為基本數(shù)據(jù)類型。

10.為什么java類中需要定義無參構(gòu)造器:

? ? ? 當(dāng)使用super()方法來調(diào)用父類時,會默認(rèn)調(diào)用父類的無參構(gòu)造器,當(dāng)定義了有參構(gòu)造器時,沒有定義無參構(gòu)造器,調(diào)用super()方法會報(bào)錯。

11.接口和抽象類:

? ? ? 接口:不能擁有實(shí)例方法,只能定義靜態(tài)常量,一個類可以有多個接口,interface和implement

? ? ?抽象類:抽象類中可以有非抽象方法,可以有普通變量,只能單繼承。abstract和extents

12.成員變量和局部變量:

? ? ? 成員變量:定義在類中。

? ? ? 局部變量:定義在方法體中。

13.==和equals:??

? ? ? ==是比較對象的地址。

? ? ? equals如果對象沒有重寫equlas方法,則跟==相同,比較對象的地址,當(dāng)重寫了equals方法,則比較equals方法。

14.為什么重寫了equals方法,需要重寫hashcode方法:

? ? ?因?yàn)槭褂胔ashmap等方法時,需要使用對象的hashcode值,有可能你需要放入兩個內(nèi)容相同的對象,因?yàn)閔ashcode不一樣,導(dǎo)致識別成兩個對象。

15.程序、進(jìn)程和線程:

程序:可以運(yùn)行的文件。

進(jìn)程:程序的一次運(yùn)行過程。

線程:進(jìn)程的單位,一個進(jìn)程可能產(chǎn)生多個線程。

16.線程的運(yùn)行狀態(tài):

對象new出來新建狀態(tài)----調(diào)用start方法進(jìn)入可運(yùn)行狀態(tài)-----cup調(diào)用進(jìn)入運(yùn)行狀態(tài)------因?yàn)槟承┰蜻M(jìn)入阻塞狀態(tài)-----最后程序運(yùn)行完或異常等情況進(jìn)入死亡狀態(tài)

17.final關(guān)鍵字:

final關(guān)鍵字可以修飾類、方法和變量。

修飾類:無法被繼承。

修飾方法:無法重寫。

修飾變量:必須初始化且之后無法改變。

18.異常:

所有異常的父類:throwable。兩個重要子類:error和exception

error:程序無法處理的異常,例如虛擬機(jī)內(nèi)存溢出等。

exception:程序可以處理的異常。try catch finally

19.finally不會執(zhí)行的情況:

在進(jìn)入到try catch之前退出方法。

執(zhí)行system.exit().

關(guān)閉cpu

20.io流:

按流向分為輸入流和輸出流。

按操作單元:字節(jié)流和字符流。

21.深拷貝和淺拷貝:

淺拷貝:對值進(jìn)行拷貝,對對象的引用進(jìn)行拷貝。

深拷貝:對值進(jìn)行拷貝,對象先創(chuàng)建,再進(jìn)行拷貝。

22.數(shù)組轉(zhuǎn)集合、集合轉(zhuǎn)數(shù)組:

Arrays.asList();

Collection.toarry();

23.static關(guān)鍵字:

static修飾方法和成員變量時,屬于類,可以被類直接調(diào)用,而不需要創(chuàng)建對象。

static修飾代碼塊時,再執(zhí)行構(gòu)造方法前時會先執(zhí)行代碼塊內(nèi)容,且只初始化一次。

24.this關(guān)鍵字:

表示當(dāng)前對象。

25.super關(guān)鍵字:

用于子類訪問父類的方法和變量。

26.反射:

再運(yùn)行階段,可以動態(tài)的獲取類信息,并動態(tài)的調(diào)用對象。對任何一個類,可以知道該類的所有信息,對任何對象,可以調(diào)用所有屬性和方法。

優(yōu)點(diǎn):運(yùn)行期間動態(tài)加載類,提高靈活性。

缺點(diǎn):性能比直接創(chuàng)建對象低,并且動態(tài)創(chuàng)建對象,降低了程序的安全行。

27.反射應(yīng)用場景:

Spring的bean創(chuàng)建和aop的動態(tài)代理。

jdbc的連接數(shù)據(jù)庫驅(qū)動

28.集合:

集合分為collection和map。

collection分為:list和set。list有序且可重復(fù),set無序且不可重復(fù)。

map主要包括鍵值對,key,value。

29.arrylist和linkedlist:

arrylist底層使用數(shù)組,數(shù)組內(nèi)存中是一段連續(xù)內(nèi)存,所以查詢快,但操作慢。因?yàn)榈讓痈淖償?shù)組又要重寫創(chuàng)建數(shù)組。

linkedlist底層使用鏈表,所以操作快,但查詢慢。因?yàn)殒湵砜梢灾苯犹鎿Q值所以操作快,但查詢的話,會重頭到腳的查找,所以查詢慢。

30.線程創(chuàng)建方式:

繼承thread類。

實(shí)現(xiàn)runnable接口。重寫run方法。

實(shí)現(xiàn)callable接口,重寫call方法。

使用線程池。

31.java跨平臺原理:

因?yàn)閖vm,不同的操作系統(tǒng)對應(yīng)不同的jvm,將java程序編譯成.class文件放到對應(yīng)的jvm中,由jvm最后解析成對應(yīng)操作系統(tǒng)能識別的底層語言。

32.多線程停止:

sleep:等待一段時間,繼續(xù)運(yùn)行。

wait:等待一段時間,但需要喚醒操作。

yield:讓出當(dāng)前線程,讓同等級的線程先運(yùn)行。

join:加入其他線程,等其他線程運(yùn)行完后,自己再運(yùn)行。

33.死鎖:

多個線程因?yàn)楦偁庂Y源,又不釋放自己的資源,導(dǎo)致的一種相互等待的狀態(tài)。

解決方法:最好一個線程只鎖定一個對象,且需要鎖定其他對象時,先釋放自己已經(jīng)鎖定的對象。

34.socket:

socket套接字,封裝了tcp和ip的接口,網(wǎng)絡(luò)通訊就是socket通訊,主要進(jìn)行io數(shù)據(jù)傳輸操作。

35.接口優(yōu)點(diǎn):

解決了java單繼承的局限性。只定義方法不實(shí)現(xiàn),保證了安全行,且易擴(kuò)展,起到了規(guī)范的作用。

36.線程優(yōu)先級遵循原則:

子線程繼承父線程的優(yōu)先級,線程級別越高,越容易執(zhí)行。

37.jar包和war包:

jar包:可以簡單理解為java打的包,包含了class文件。

war包:可以簡單理解為web項(xiàng)目的包,不僅包括class文件,還有一堆配置文件和html等。

38.java可變參數(shù):

類型一樣,但參數(shù)個數(shù)一樣。

39.類加載方式:

new對象。

反射class.forname方法。

類加載器:loadclass來加載類,再調(diào)用newinstance方法來實(shí)例對象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容