目錄:
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í)例對象。