JAVA 基礎(chǔ)的總結(jié)

前言:最近感冒的不太想去面試,在家就對(duì)Java se的基礎(chǔ)做了一些小總結(jié)

1.JDK和JRE的區(qū)別

一 基礎(chǔ)知識(shí)

答:JDK是java語(yǔ)言開(kāi)發(fā)工具包,包含JRE和開(kāi)發(fā)工具(javac.exe等);JRE是java語(yǔ)言的運(yùn)行環(huán)境,包含JVM和核心類庫(kù);JVM是java虛擬機(jī),保證了java的跨平臺(tái)性。

2.JVM跨平臺(tái)嗎?

答:JVM不具有跨平臺(tái)性,不同的操作系統(tǒng)所對(duì)應(yīng)的JVM不一樣。正是因?yàn)镴VM的不跨平臺(tái),才能夠使java語(yǔ)言具有跨平臺(tái)性。

3.保留字是什么?

答:保留字是還未使用的關(guān)鍵字,可能在java以后的版本中使用。有g(shù)oto和const。

4.java語(yǔ)言的特點(diǎn)?

答:完全面向?qū)ο螅缙脚_(tái)性,開(kāi)源,簡(jiǎn)單易學(xué),安全可靠,高性能,分布式處理,多線程,健壯性,多態(tài)。

5.main是關(guān)鍵字嗎?

答:不是的。main是主函數(shù)的名字,能夠被虛擬機(jī)識(shí)別,是程序執(zhí)行的入口。

6.path和classpath的區(qū)別?

答:path環(huán)境變量配置的是可執(zhí)行文件.exe的執(zhí)行路徑;能夠在不同盤(pán)符下訪問(wèn)path路徑下的可執(zhí)行文件。Classpath配置的java語(yǔ)言編譯后生成的字節(jié)碼文件的執(zhí)行路徑。

7.計(jì)算機(jī)最基本的存儲(chǔ)單位是:字節(jié)(byte)

計(jì)算機(jī)能直接識(shí)別的進(jìn)制是:二進(jìn)制

8進(jìn)行運(yùn)算的時(shí),變量和常量有什么區(qū)別?

答:變量在運(yùn)算過(guò)程中的值是變化的,可以被多次賦值。常量則是固定的。

9標(biāo)識(shí)符的組成?以及命名規(guī)則?

答:標(biāo)識(shí)符有26個(gè)字母的大小寫(xiě),0到9,_和$組成。

命名規(guī)則:不能使用關(guān)鍵字,不能數(shù)字開(kāi)頭,嚴(yán)格區(qū)分大小寫(xiě),要見(jiàn)名知義。

函數(shù)名和變量名如果是多個(gè)單詞組成,第一個(gè)單詞的首字母小寫(xiě),其余首字母大寫(xiě)。

類名和接口名如果是多個(gè)單詞組成,首字母全部大寫(xiě)。

包名全部小寫(xiě)。

常量名全部大寫(xiě),如果是多個(gè)單詞,用_隔開(kāi)。

10.變量數(shù)據(jù)類型分為哪幾種?如何使用變量?

答:基本數(shù)據(jù)類型:整形:包括byte、short、int、long。浮點(diǎn)型:包括float、doble。

字符型;char;布爾型:boolean。

引用數(shù)據(jù)類型:數(shù)組、類、接口。

變量需要先定義,再賦值,才能使用。

11.常量分為哪幾種?

答:自定義常量和字面值常量。自定義常量是我們自己通過(guò)final修飾定義的常量。字面值常量包括整數(shù)、小數(shù)、布爾、字符、字符串。

12.byte的范圍多少?char的范圍多少?

答:byte范圍-128到127。char范圍0到65535.

13. ASCII碼表中字符'0', 'a' , 'A'分別對(duì)應(yīng)int類型的值是多少.

答:0在表中對(duì)應(yīng)的值是48,a對(duì)應(yīng)的是97;A對(duì)應(yīng)的是65.

14.long是8個(gè)字節(jié),float是4個(gè)字節(jié),為什么long比f(wàn)loat小?

答:底層采用的運(yùn)算規(guī)則不一樣。

15.以取值范圍的大小排列數(shù)據(jù)的基本類型.

答:double>float>long>int>char>short>byte

16.+=、-=、這些運(yùn)算符內(nèi)隱含了強(qiáng)制類型轉(zhuǎn)換。

17.++和—的使用?

答:?jiǎn)为?dú)使用的時(shí)候,在前在后都一樣。

參與運(yùn)算的時(shí)候,在前是先自加或者自減,然后再用這個(gè)結(jié)果參與運(yùn)算。在后是先參與運(yùn)算,再進(jìn)行自加或者自減。

18.邏輯或" | "和 短路或" || "有什么區(qū)別?

答:|不管前面的結(jié)果是真是假后面的都會(huì)運(yùn)算,||前面為真后面的不參與運(yùn)算。但是結(jié)果是一樣的。

19.邏輯與"&"和 短路與"&&"由什么區(qū)別?

答:&不管前面的結(jié)果是真是假后面的都會(huì)運(yùn)算,&&前面為假后面的不參與運(yùn)算。但是結(jié)果是一樣的。

20.Math.round原理是什么?

答:先加0.5,然后再取floor值。

21.生成隨機(jī)數(shù)的方法?

答:第一種:Random類中的方法;第二種Math.random()方法,生成的是0.0和1.0范圍直接的小數(shù)。

22.if…else..和三元表達(dá)的區(qū)別

答:能用三元表達(dá)式寫(xiě)的就能用if語(yǔ)句寫(xiě),但是能用if語(yǔ)句寫(xiě)的,三元表達(dá)式不一定能寫(xiě)。三元表達(dá)式必須要有一個(gè)結(jié)果。

23.while、do while、for的區(qū)別?

答:do while語(yǔ)句是先性后判斷,while和for先判斷后執(zhí)行。

for循環(huán)結(jié)束后,其中定義的初始化條件不能再使用。

24.if和switch區(qū)別?

答:if?1.?對(duì)具體的值進(jìn)行判斷,?2.?對(duì)區(qū)間判斷,3.?對(duì)運(yùn)算結(jié)果是boolean類型的表達(dá)式進(jìn)行判斷。

switch:?1.?對(duì)具體的值進(jìn)行判斷。2.?值的個(gè)數(shù)通常是固定的

25.switch語(yǔ)句的表達(dá)式可以放什么?

答:byte、short、int、char。JDK1.5以后可以使用枚舉,1.7之后可以使用String。

26.死循環(huán)的兩種寫(xiě)法.

答:while(true)和for(;;)

27.break和continue的區(qū)別

答:

ch語(yǔ)句中。Continue是提前結(jié)束本次循環(huán),進(jìn)入下次循環(huán)。Return是結(jié)束方法。

28.switch中break可以省略嗎?default可以省略嗎?

答:break在最后一個(gè)可以省略,其他的不要省略。Default可以省略。

29:方法重載和方法重寫(xiě)的區(qū)別?

答:方法重載是在同一個(gè)類中出現(xiàn)同名方法,參數(shù)列表不同,與返回值類型無(wú)關(guān)。

方法重寫(xiě)是在子父類間,子類出現(xiàn)和父類聲明完全相同的方法時(shí),就成為方法重寫(xiě)。重寫(xiě)要求返回值必須相同或者有子父類關(guān)系。

30.方法的注意事項(xiàng):

答:要明確方法的返回值類型,明確方法的參數(shù)列表。

31.方法的調(diào)用?

答:有返回值時(shí)可以單獨(dú)調(diào)用,但是沒(méi)有意義;也可以放在輸出語(yǔ)句中;可以賦值給變量。無(wú)返回值直接調(diào)用即可。

32.數(shù)組的定義格式?

答:int[] arr =newint[5];int arr[]= new int[5];

int[] arr = newint[]{1,5,6,7,…} int[] arr = {23,6,8,9…}

二維數(shù)組

String[][] arr = new String[3][];

Syso(arr[0])打印的結(jié)果是null。

33.數(shù)組的默認(rèn)值?

答;整形的默認(rèn)值是0,引用數(shù)據(jù)類型是null;boolean型的是false。

34.棧內(nèi)存和堆內(nèi)存?

答:棧內(nèi)存用于存儲(chǔ)局部變量和代碼的執(zhí)行,堆內(nèi)存中都是new出來(lái)的。

35.數(shù)組和集合的區(qū)別:

(1)長(zhǎng)度區(qū)別:數(shù)組長(zhǎng)度是固定的;集合長(zhǎng)度可變。

(2)存儲(chǔ)內(nèi)容:一個(gè)數(shù)組只能存儲(chǔ)同一種數(shù)據(jù)類型的元素;集合可以存儲(chǔ)不同數(shù)據(jù)類型的元素。

(3)數(shù)據(jù)類型:數(shù)組能夠存儲(chǔ)基本數(shù)據(jù)類型,也能夠存儲(chǔ)引用數(shù)據(jù)類型;集合只能存儲(chǔ)引用數(shù)組類型。

36.數(shù)組和集合的轉(zhuǎn)換?

答:數(shù)組轉(zhuǎn)為集合:Arrays.asList(數(shù)組),轉(zhuǎn)為集合后不能添加、刪除元素。但是可以修改元素。把基本類型的數(shù)組轉(zhuǎn)為集合,把這個(gè)數(shù)組作為對(duì)象存入集合中。

集合轉(zhuǎn)為數(shù)組:list.toArray().

二、面向?qū)ο?/p>

37.局部變量和成員變量的區(qū)別:

(1)定義位置不同:成員變量定義在類中方法外,局部變量定義在方法內(nèi)。

(2)作用范圍不同:成員變量在整個(gè)類中有效,局部變量在所在的方法有效。

(3)內(nèi)存位置不同:成員變量隨著對(duì)象的創(chuàng)建存放在堆內(nèi)存中,局部變量存放在棧內(nèi)存中。

(4)初始化值不同:成員變量是有默認(rèn)的初始化的值的;局部變量不賦值不能用。

(5)生命周期不同:成員變量隨著對(duì)象的存在而存在,隨著對(duì)象的消失而消失;局部變量隨著方法的調(diào)用而存在,方法調(diào)用完畢而消失。

38.變量的使用順序?

答:就近原則。先在局部找,局部找不到在本類中找,本類找不到就去父類找,找不到就編譯失敗。

39.類和對(duì)象的關(guān)系?

答:類是具有相同或相似一類事物的抽象;對(duì)象是類的實(shí)例化。

40.java描述事物最基本的單位?

答:類

41.什么叫面向?qū)ο螅?/p>

答:面向?qū)ο笫且环N思想,它是基于面向過(guò)程的,強(qiáng)調(diào)的是具備功能的對(duì)象,讓對(duì)象調(diào)用方法解決問(wèn)題。在開(kāi)發(fā)中,要完成特定的功能就去尋找相應(yīng)的對(duì)象,如果找不到就創(chuàng)建對(duì)象,使用對(duì)象,維護(hù)完善對(duì)象。

自己舉例說(shuō)明:廚師做飯,女朋友洗衣服。。。。。

思想特點(diǎn):1.讓復(fù)雜的事情簡(jiǎn)單化;2,更符合人類的思維需求;3.角色從執(zhí)行者到指揮者。

三大特征:封裝,繼承,多態(tài)。

42.什么是封裝?封裝的原則?好處?

答:封裝就是把不需要對(duì)外暴露的狀態(tài)信息隱藏在對(duì)象內(nèi)部,不允許外部程序直接訪問(wèn)對(duì)象的信息,而是通過(guò)該類對(duì)外提供公共的訪問(wèn)方式對(duì)其訪問(wèn)和操作。

原則:(1)將不需要對(duì)外暴露的信息隱藏;(2)對(duì)外提供公共的訪問(wèn)方式。

好處:將變化隔離;提高了安全性;便于使用,提高了重用性。

43.封裝就是私有,對(duì)嗎?為什么?

答:private是封裝的一種體現(xiàn)形式。方法也是封裝。

44.Java中參數(shù)傳遞的問(wèn)題:

答:如果是基本數(shù)據(jù)類型,傳遞的參數(shù)要和形參的類型一致;如果是引用數(shù)據(jù)類型,那么傳遞的參數(shù)類型和形參的一致,或者是他的子類。

45.構(gòu)造方法,set方法都可以給成員變量賦值,這兩種賦值方式有什么區(qū)別?

答:構(gòu)造方法主要作用是用來(lái)給對(duì)象初始化,賦值只是他的兼職工作,也可以不用賦值。

Set方法只能用來(lái)賦值,在原有對(duì)象的基礎(chǔ)上賦值。

46.static關(guān)鍵字的特點(diǎn)?注意事項(xiàng)是什么?有什么好處和弊端?

答:(1)被static修飾的變量和方法隨著類的加載而加載(2)優(yōu)于對(duì)象存在(3)能夠被類名直接調(diào)用(4)資源共享。

注意事項(xiàng):靜態(tài)方法中不可以定義this、super關(guān)鍵字,因?yàn)殪o態(tài)優(yōu)先于對(duì)象存在,靜態(tài)只能覆蓋靜態(tài)。

好處:static能夠被類名直接調(diào)用,定義的是對(duì)象的共性內(nèi)容,不用每個(gè)對(duì)象單獨(dú)定義,節(jié)省空間。弊端:生命周期過(guò)長(zhǎng)。

47.類變量和實(shí)例變量的區(qū)別?

答:(1)所屬不同:類變量屬于類,是對(duì)象的共性內(nèi)容;實(shí)例變量屬于對(duì)象,是特性內(nèi)容。

(2)存儲(chǔ)位置不同:類變量隨著類的加載存儲(chǔ)于方法區(qū);實(shí)例變量隨著對(duì)象的創(chuàng)建存儲(chǔ)于堆內(nèi)存中。

(3)生命周期不同:類變量隨著類的加載而存在,隨著類的消失而消失;實(shí)例變量隨著對(duì)象的存在而存在,隨著對(duì)象的消失而消失。

(4)調(diào)用方式不同:類變量能夠被類名直接調(diào)用,有對(duì)象的時(shí)候也能被對(duì)象調(diào)用;實(shí)例變量只能被對(duì)象調(diào)用。

48.構(gòu)造方法能不能重載?

答:可以,在同一個(gè)類中,參數(shù)列表不同,與返回值無(wú)關(guān)。

49.靜態(tài)代碼塊和構(gòu)造代碼塊的區(qū)別?

答:(1)靜態(tài)代碼塊屬于類,給類進(jìn)行初始化,類一加載就會(huì)執(zhí)行,只執(zhí)行一次,經(jīng)常用于加載驅(qū)動(dòng)。

(2)構(gòu)造代碼塊給對(duì)象進(jìn)行統(tǒng)一初始化,每創(chuàng)建一次就會(huì)執(zhí)行一次。

50.什么是繼承?

答:當(dāng)多個(gè)類中有很多共性的內(nèi)容時(shí),我們可以把這些共性內(nèi)容抽取出來(lái)封裝成一個(gè)類,讓這些類與這個(gè)封裝的類產(chǎn)生關(guān)系。這種關(guān)系就是繼承。

51.繼承的的特點(diǎn)和好處,弊端?

答:特點(diǎn):java只支持單繼承,但是能夠多層次繼承;接口能夠單繼承,也能夠多繼承。

好處:(1)提高了代碼的復(fù)用性(2)提高了代碼的維護(hù)性(3)提高了代碼的擴(kuò)展性。(4)讓類與類產(chǎn)生了關(guān)系,是多態(tài)的前提。

弊端:增強(qiáng)了類與類的耦合性。

52.this和super的區(qū)別?

答:this代表對(duì)象的引用,super代表當(dāng)前對(duì)象父類的引用。

53.Super()和this()在構(gòu)造方法能同時(shí)使用嗎?

答 :不能,super調(diào)用的是父類的構(gòu)造,要放在構(gòu)造函數(shù)的第一行;this調(diào)用的是本類的構(gòu)造,也要放在第一行。

Super關(guān)鍵字和this關(guān)鍵字能否在構(gòu)造函數(shù)中共存?

答:能。

54.為什么每個(gè)構(gòu)造函數(shù)中第一行都有默認(rèn)的super()?

用于子類對(duì)象訪問(wèn)父類前,對(duì)父類數(shù)據(jù)進(jìn)行初始化。

55.為什么默認(rèn)的super()都是空參的呢?

因?yàn)镺bject類是所有類的父類,Object中只有一個(gè)空參構(gòu)造。

56.構(gòu)造方法的特點(diǎn)?

答:(1)方法名和類名相同(2)沒(méi)有返回值,連viod都沒(méi)有。(3)不用寫(xiě)return,可以有return;

57.this的作用?

答:(1)區(qū)別局部變量和成員變量(2)代表本類對(duì)象的引用(3)也可以用于構(gòu)造方法的調(diào)用。

58.子父類都有靜態(tài)代碼塊,構(gòu)造代碼塊,構(gòu)造方法的執(zhí)行順序?

答:父類的靜態(tài)代碼塊先執(zhí)行,再執(zhí)行子類中的靜態(tài)代碼塊;接著執(zhí)行父類的構(gòu)造代碼塊和父類的構(gòu)造方法,最后執(zhí)行子類的構(gòu)造代碼塊和構(gòu)造方法。

59.final修飾的變量的初始化時(shí)機(jī):

答:a.未被static關(guān)鍵字修飾

*可以顯示初始化

*可以在構(gòu)造方法中初始化

b.被static修飾

*可以顯示初始化

*可以在靜態(tài)代碼塊中初始化

*不能在構(gòu)造方法中初始化

60. final如果修飾局部變量,會(huì)發(fā)生什么事情?

答:基本類型,是值不能被改變,引用類型,是地址值不能被改變,對(duì)象中的屬性可以改變。

61.什么是多態(tài)?多態(tài)的體現(xiàn),前提,好處和弊端分別是什么?

答:同一事物在不同時(shí)刻表現(xiàn)出來(lái)的不同狀態(tài)。

體現(xiàn):父類引用指向子類對(duì)象,父類引用作為參數(shù)可以接收其子類對(duì)象,接口引用作為參數(shù)可以接收其實(shí)現(xiàn)類對(duì)象。

前提:(1)類與類之間要有關(guān)系,要么繼承,要么實(shí)現(xiàn)(2)要有方法重寫(xiě)(3)父類或者接口引用指向子類對(duì)象。

好處:(1)提高了代碼的維護(hù)性(2)提高了代碼的擴(kuò)展性,父類引用指向子類對(duì)象

弊端:父類引用只能調(diào)用父類的方法,不能調(diào)用子類特有的方法和屬性。

*向上轉(zhuǎn)型:父類或者父接口指向子類對(duì)象。

*向下轉(zhuǎn)型:把那個(gè)引用強(qiáng)制轉(zhuǎn)為子類對(duì)象。

62.多態(tài)中成員方法和變量的特點(diǎn)?

答:(1)一般方法:編譯看左邊,運(yùn)行看右邊。(2)靜態(tài)方法:編譯看左邊,運(yùn)行看左邊。(3)變量:編譯看左邊,運(yùn)行看左邊。

63.抽象類和抽象方法的特點(diǎn),有什么關(guān)系?

答:抽象類不能創(chuàng)建對(duì)象,需要子類繼承;抽象方法沒(méi)有方法體,需要子類去實(shí)現(xiàn)。抽象類不一定含有抽象方法,抽象方法一定在抽象類中。

64.抽象類中的抽象方法和非抽象方法的區(qū)別?

答:抽象方法要求子類必須重寫(xiě),完成相應(yīng)的功能;非抽象方法讓子類繼承,提高代碼的復(fù)用性。

65.abstract不能和哪些關(guān)鍵字共同存在?

答:private:私有的方法是不可見(jiàn)的,無(wú)法被復(fù)寫(xiě)

final:被final修飾的方法是最終方法,無(wú)法被復(fù)寫(xiě)

static:被static修飾的方法,要隨類加載到方法區(qū),由于抽象方法沒(méi)有方法體所以不能加載

66.final修飾的變量、方法、和類有什么特點(diǎn)?

答:final修飾的變量只能賦值一次,不能發(fā)生改變,如果修飾的基本類型,是其值不能發(fā)生改變,如果修飾的引用數(shù)據(jù)類型,是地址值不能發(fā)生改變;final修飾的方法不能被重寫(xiě);final修飾的類不能被繼承,也稱最終類。

67.final、finally、finalized的區(qū)別?

答:(1)final是一個(gè)關(guān)鍵字,是用來(lái)修飾類,成員變量,成員方法的,

它修飾的類不能被繼承,但是可以繼承其他類,

它修飾的成員變量是一個(gè)常量,只能賦值一次

它修飾的成員方法不能被子類重寫(xiě)

(2)finally是try-catch-finally語(yǔ)句的一個(gè)模塊,正常情況下里邊的代碼永遠(yuǎn)會(huì)執(zhí)行,一般是用來(lái)釋放資源的

(3)finalize是Object類中的方法,當(dāng)對(duì)象變成垃圾的時(shí)候,由GC(Java中的垃圾回收機(jī)制)來(lái)調(diào)用該類的finalize()方法回收垃圾。

68.接口中的成員的特點(diǎn)?

答:都是常量,public

static final ;方法都是抽象方法,public abstract;沒(méi)有構(gòu)造方法。

69、類與類、類與接口、接口與接口的關(guān)系?

答:類只能單繼承類,但是能夠多層次繼承;類實(shí)現(xiàn)接口,能同時(shí)實(shí)現(xiàn)多個(gè)接口,能在繼承類的同時(shí)實(shí)現(xiàn)接口;接口可以單繼承接口,也能多繼承。

70.接口和抽象類的區(qū)別?

(1)成員的特點(diǎn):抽象類可以有變量、常量、構(gòu)造方法、一般方法、抽象方法;接口有且只能有常量和抽象方法。

(2)關(guān)系特點(diǎn):類與類支持單繼承,不能多繼承,但是能夠多層次繼承,類與接口是實(shí)現(xiàn)關(guān)系,一個(gè)類能實(shí)現(xiàn)多個(gè)接口,一個(gè)類繼承類一個(gè)類的同時(shí)能實(shí)現(xiàn)多個(gè)接口;接口與接口之間能單繼承,也能多繼承;

(3)設(shè)計(jì)理念:抽象類定義的是該繼承體系的共性功能,是is a的關(guān)系。接口定義的是該體系的拓展功能,是like a的關(guān)系。

71.接口的思想特點(diǎn)?

(1)對(duì)外暴露的規(guī)則(2)接口是程序?qū)ν獾墓δ芡卣梗?)接口是用來(lái)多實(shí)現(xiàn)的(4)接口的出現(xiàn)降低了類與類之間的耦合性。

72.什么是內(nèi)部類,特點(diǎn)是什么?

答:在類中定義的類就是內(nèi)部類。特點(diǎn)(1)能夠直接訪問(wèn)所在類的成員,包括私有的。(2)外部類訪問(wèn)內(nèi)部類需要?jiǎng)?chuàng)建內(nèi)部類的對(duì)象。

73.成員內(nèi)部類是什么?

答:成員內(nèi)部類是定義在成員位置的類。能夠被私有、靜態(tài)修飾。

74.內(nèi)部類的方法如果訪問(wèn)局部變量,內(nèi)部類的成員變量,外部類的成員變量?

答:局部變量可以直接訪問(wèn);內(nèi)部類的成員變量this.;外部類的成員變量:外部類名.this.

75.局部?jī)?nèi)部類訪問(wèn)的局部變量為什么要用final修飾?

答:因?yàn)楫?dāng)調(diào)用這個(gè)方法時(shí),局部變量如果沒(méi)有用final修飾,他的生命周期和方法的生命周期是一樣的,當(dāng)方法彈棧,這個(gè)局部變量也會(huì)消失,那么如果局部?jī)?nèi)部類對(duì)象還沒(méi)有馬上消失想用這個(gè)局部變量,就沒(méi)有了,如果用final修飾會(huì)在類加載的時(shí)候進(jìn)入常量池,即使方法彈棧,常量池的常量還在,也可以繼續(xù)使用。但是JDK1.8以后取消了這個(gè)特性,會(huì)默認(rèn)加上final的。

76.什么是匿名內(nèi)部類?

答:匿名內(nèi)部類就是沒(méi)有名字的內(nèi)部類,是內(nèi)部類的簡(jiǎn)化形式。匿名內(nèi)部類必須繼承或?qū)崿F(xiàn)一個(gè)接口,在使用的時(shí)候直接用父類的名字創(chuàng)建一個(gè)子類對(duì)象并實(shí)現(xiàn)其中的方法,匿名內(nèi)部類的實(shí)質(zhì)是一個(gè)繼承了該類或者實(shí)現(xiàn)該接口的匿名的子類對(duì)象。

前提:必須繼承一個(gè)類或?qū)崿F(xiàn)一個(gè)接口。

規(guī)則:(1)不能是抽象的,因?yàn)樗谋举|(zhì)是一個(gè)子類對(duì)象。(2)不能定義構(gòu)造方法,因?yàn)闆](méi)有類名。

使用:(1)當(dāng)接口中的只有一個(gè)抽象方法時(shí),并對(duì)方法調(diào)用一次的時(shí)候(2)傳遞參數(shù)的時(shí)候,如果參數(shù)是接口或抽象類,其實(shí)需要的就是實(shí)現(xiàn)類對(duì)象或者子類對(duì)象,這個(gè)時(shí)候使用匿名內(nèi)部類。

77、匿名對(duì)象何時(shí)使用?

答:(1)當(dāng)對(duì)對(duì)象方法調(diào)用一次的時(shí)候(2)可以作為實(shí)際參數(shù)進(jìn)行傳遞。

78適配器模式?

當(dāng)一個(gè)接口有多個(gè)抽象方法時(shí),而我們只使用其中的一個(gè)或兩個(gè)方法時(shí),每次使用的時(shí)候我們都要重寫(xiě)這些方法,比較麻煩。我們可以定義一個(gè)類去實(shí)現(xiàn)這個(gè)接口,并重寫(xiě)里面的方法,只是方法體為空,并把這個(gè)類定義為抽象類,我們使用的時(shí)候繼承這個(gè)類重寫(xiě)需要的方法就就可以了。

79.四種權(quán)限修飾符的比較?

答:public的權(quán)限最大,同一類中,同一個(gè)包中,不同包中(子類),不同包中(無(wú)關(guān)類)都可以訪問(wèn)。給大家使用

Protected同一類中,同一個(gè)包中,不同包中(子類),可以訪問(wèn)。強(qiáng)調(diào)的是子類

默認(rèn)同一類中,同一個(gè)包中 可以訪問(wèn)。強(qiáng)調(diào)的是同一個(gè)包

Private同一類中訪問(wèn)。強(qiáng)調(diào)的是自己

80.package在第一行,只能有一個(gè);然后是import導(dǎo)包;最后是class。

81.代碼塊的分類:

局部代碼塊:讓變量盡早的消失,節(jié)約資源,提高效率。

構(gòu)造代碼塊:用于給對(duì)象初始化;

靜態(tài)代碼塊兒:給類進(jìn)行初始化,用于加載驅(qū)動(dòng)。

同步代碼塊:為了防止CPU高速切換出現(xiàn)安全問(wèn)題。

三、API

81.==和equals的區(qū)別?

答:“==”是比較運(yùn)算符,既能比較基本數(shù)據(jù)類型,又能比較引用數(shù)據(jù)類型?;緮?shù)據(jù)類型比較的是數(shù)值,引用數(shù)據(jù)類型比較的是地址值。

equals是一個(gè)方法,只能比較引用數(shù)據(jù)類型。所有的類都會(huì)繼承Object的equals方法。重寫(xiě)equals方法比較的是對(duì)象的內(nèi)容,如果沒(méi)有重寫(xiě)將調(diào)研Object的equals方法,比較的是地址值。

82.String str = null和String str =“”的區(qū)別?

答:String str = null只是聲明了引用,但是沒(méi)有創(chuàng)建對(duì)象,沒(méi)有為其開(kāi)辟空間,不能操作方法。String =“”是創(chuàng)建了一個(gè)長(zhǎng)度為0的字符串,并在內(nèi)存中分配了空間。

83.String s1= “abc”, String s2= new String(“abc”),s1==s2結(jié)果是什么?s1.equals(s2)結(jié)果是什么?

答:s1==s2結(jié)果為false。s1指向的常量池中的對(duì)象,s2指向的是堆內(nèi)存中的對(duì)象,兩者的地址值不同。s1.equals(s2)結(jié)果是true。String重寫(xiě)了equals方法,比較的是內(nèi)容。

84.String,StringBuffer、StringBuilder的區(qū)別?

答: String是一個(gè)特殊的引用數(shù)據(jù)類型,是一個(gè)長(zhǎng)度不可變的字符序列,沒(méi)有緩沖區(qū),一旦創(chuàng)建就不會(huì)發(fā)生變化了。即使重新賦值不是在原來(lái)對(duì)象的基礎(chǔ)上改變的,而是創(chuàng)建了一個(gè)新的對(duì)象,將引用指向這個(gè)新的對(duì)象,浪費(fèi)空間,效率比較低。

StringBuffer、StringBuilder是容器,是可變的字符串序列。StringBuffer是JDK1.0版本的,線程是安全的,效率比較低。StringBuilder是JDK1.5出現(xiàn)的,線程不安全,效率高。

85.StringBuilder的底層是什么?

答:底層是字符數(shù)組,原始長(zhǎng)度為16。通過(guò)append添加元素的時(shí)候,會(huì)自動(dòng)擴(kuò)容,擴(kuò)容規(guī)則:大字符串的長(zhǎng)度=小數(shù)組長(zhǎng)度*2+2.

86.為什么出現(xiàn)基本數(shù)據(jù)類型包裝類?

答:將基本數(shù)據(jù)類型封裝為對(duì)象的好處能在對(duì)象中封裝更多的功能操作數(shù)據(jù)。

87.String和int直接的轉(zhuǎn)換?

答:將int類型轉(zhuǎn)為String類型的方法:(1)基本數(shù)據(jù)類型+“”(2)Integer.toString(int num)(3)String.valueOf(inti)

將String轉(zhuǎn)為int:Integer.parseInt(String s)

88.基本數(shù)據(jù)類型包裝類的自動(dòng)拆裝箱是什么?

答:是JDK1.5版本出現(xiàn)的新特性,自動(dòng)裝箱就是把基本數(shù)據(jù)類型轉(zhuǎn)為為包裝類型。拆箱就是把包裝類轉(zhuǎn)換為基本數(shù)據(jù)類型。

89.Object類中的常見(jiàn)方法有哪些?

答:hashCode():返回值是int,是該對(duì)象的哈?,斨?。

equals():返回值是boolean,比較的是地址值。

toString():返回該對(duì)象的字符串表現(xiàn)形式。

getClass():返回值類型是Class。返回的是創(chuàng)建該對(duì)象所屬類對(duì)應(yīng)的字節(jié)碼文件。

這些方法都需要對(duì)象調(diào)用,在開(kāi)發(fā)的過(guò)程中要重寫(xiě)。

地址值的組成:類名@十六進(jìn)制的哈希值。

90.獲取當(dāng)前時(shí)間毫秒值有哪幾種方式?

答:(1)new Date().getTime();(2)System.currentTimeMillis()(3)Calendar.getInstance().getTimeInMillis()

91.正則表達(dá)式常用的;

\d數(shù)字:[0-9]

\w單詞字符:[a-zA-Z_0-9]

(X)表示分組

\\1表示和前面的相同

.任何字符

X?,一次或一次也沒(méi)有

X*,零次或多次

X+,一次或多次

X{n},恰好n次

X{n,},至少n次

X{n,m},至少n次,但是不超過(guò)m次

92.日歷類和日期類相互轉(zhuǎn)換:

Calendar c =Calendar.getInstance();c.setTime(date);c.getTime()

93.Date和String類型的轉(zhuǎn)換?

Date類型轉(zhuǎn)為String是格式化:format

String轉(zhuǎn)Date是解析;parse

三、集合

94.簡(jiǎn)述集合體系?

答:集合分為單列集合和雙列集合。

單列集合的頂層是Collection接口,包括List和Set集合。

(1.1)List集合的特點(diǎn)是元素可重復(fù),有序,有索引,能夠有角標(biāo)操作集合,有特有的迭代方式ListIterator。包括ArrayList、LinkedList和Vector。

ArrayList集合底層采用的是數(shù)組數(shù)據(jù)結(jié)構(gòu),查詢速度比較快,因?yàn)閿?shù)組有索引,在內(nèi)存中分配的空間是連續(xù)的,但是增刪比較慢。線程不同步,效率高。初始容量為10。

LinkedList集合的底層采用的是鏈表數(shù)據(jù)結(jié)構(gòu),增刪速度比較快,查詢速度比較慢。線程不同步。

Vector底層數(shù)據(jù)結(jié)構(gòu)也是數(shù)組數(shù)據(jù)結(jié)構(gòu),但是線程同步,效率低,特有取出元素的方式是枚舉。因?yàn)樾实?,逐步被ArrayList替代。

(1.2)Set集合的特點(diǎn)元素是無(wú)序的(存入和取出的順序不一致),元素不可以重復(fù)。包括HashSet和TreeSet。

HashSet的底層數(shù)據(jù)結(jié)構(gòu)是哈希表,線程不同步,效率高。保證元素的唯一性額有的依據(jù)是元素的hashCode和equals方法。如果hashCode不同,不調(diào)用equals方法。如果hashCode相同,才會(huì)調(diào)用equals方法判斷元素是否相同。

TreeSet的底層數(shù)據(jù)結(jié)構(gòu)是二叉樹(shù),線程不同步,效率高。能夠給元素進(jìn)行排序。保證元素唯一性的依據(jù)是compareTo和return0。排序的兩種方式:第一種元素自身實(shí)現(xiàn)Comparable接口,重寫(xiě)compareTo()方法。這種排序方式叫元素的自熱排序,也叫默認(rèn)排序。第二種是當(dāng)元素自身不具備比較性或者具備的比較性不是所需要的,這時(shí)就讓集合自身具備比較性,當(dāng)集合初始化時(shí)就有了比較性。定義一個(gè)比較器實(shí)現(xiàn)Comparator接口,重寫(xiě)compare方法,定義集合的時(shí)候?qū)⒈容^器作為參數(shù)傳遞給TreeSet的構(gòu)造函數(shù),這樣集合就具有了比較性。

(2)Map是雙列集合的頂層接口,該集合存儲(chǔ)的是鍵值對(duì),一對(duì)一對(duì)的往里存,而且要保證鍵的唯一性。包括Hashtable、HashMap、TreeMap。

Hashtable的底層數(shù)據(jù)結(jié)構(gòu)是哈希表,不可以存儲(chǔ)null鍵和null值,線程同步,效率低。JDK1.0.

HashMap的底層數(shù)據(jù)結(jié)構(gòu)是哈希表,可以存儲(chǔ)null鍵和null值,線程不同步,將Hashtable替代,JDK1.2效率高。保證鍵的唯一性的 依據(jù)是hashCode和equals方法。

TreeMap的底層數(shù)據(jù)結(jié)構(gòu)是二叉樹(shù),線程不安全,能夠給集合中的鍵排序。

95.什么時(shí)候使用什么集合?

答:(1)首先要看是單列還是雙列,是單列的話就用Collection,雙列就用Map。

(2)要是單列的話看元素是不是要求重復(fù),元素重復(fù)的話使用List,看查詢多還是增刪多,查詢多的話用ArrayList,增刪多的話用LinkedList,不確定的話用ArrayList。不重復(fù)的話使用Set,看是否要求排序,排序的話用TreeSet,不需要排序用HashSet。不確定的話用HashSet。

(3)要是雙列的話,看是否要求排序,要求排序用TreeMap,不要求排序用HashMap,不確定的話用HashMap。

96.Collection(單列)和(Map)雙列的區(qū)別?

答:Collection是單列集合,Map是雙列集合。Map的鍵是唯一的,Collection體系中的Set集合中的元素是唯一的。Map集合的數(shù)據(jù)結(jié)構(gòu)針對(duì)鍵有效,Collection的底層數(shù)據(jù)結(jié)構(gòu)針對(duì)元素有效。

100.遍歷集合的方式有哪些?

答:遍歷List集合的方式有普通for、增強(qiáng)for、迭代器Iterator、列表迭代器ListIterator。

遍歷Set集合的方式有增強(qiáng)for、迭代器Iterator。

遍歷map集合的方式有keySet(),entrySet()。然后通過(guò)增強(qiáng)for、迭代器Iterator遍歷。

101.用迭代器和增強(qiáng)for遍歷集合,能否用集合的方法操作集合?

答:不能,會(huì)出現(xiàn)并發(fā)修改異常,ConcurrentModificationException。

并發(fā)修改異常就是在用普通迭代器的時(shí)候用集合的方法增加、刪除元素??梢杂昧斜淼鳌?/p>

102.泛型是什么?有什么好處?

答:簡(jiǎn)單的說(shuō)一種標(biāo)簽,不確定的類型,用戶使用的時(shí)候確定類型,是JDK1.5出現(xiàn)的新特性,用于解決安全問(wèn)題,是一種類型安全機(jī)制。

好處:(1)將運(yùn)行時(shí)期會(huì)可能出現(xiàn)的異常轉(zhuǎn)移到編譯期(2)提高了安全性。(3)避免了強(qiáng)制類型轉(zhuǎn)換的麻煩。

103、上限和下限?

?super E:E、E的父類,固定下邊界。

?extends E:E、E的子類固定的上邊界。

104.字典排序,自然排序和比較器排序是什么?

答:字典排序按照字典上的順序排序。

自然排序是對(duì)強(qiáng)制對(duì)實(shí)現(xiàn)Comparable接口的類進(jìn)行排序,實(shí)現(xiàn)Comparable接口,重寫(xiě)compareTo()方法,根據(jù)返回值進(jìn)行排序。

比較器排序是實(shí)現(xiàn)Comparator方法,重寫(xiě)compare()方法,根據(jù)返回值進(jìn)行排序。

105.TreeSet的兩種排序方式有什么區(qū)別?

答:TreeSet的構(gòu)造方法中不傳參數(shù),會(huì)按照類的Comparable排序,沒(méi)有的話就會(huì)報(bào)錯(cuò)。TreeSet傳入比較器,會(huì)按照比較器排序。

106.Map有哪些取出元素的方式?原理是什么?

答:keySet():將Map集合中的鍵取出放在Set集合,然后通過(guò)遍歷Set集合取出里面的鍵,再用map的get(key)方法取出對(duì)應(yīng)的值。

entrySet()將Map集合中的鍵值對(duì)關(guān)系取出放在Set集合,然后通過(guò)遍歷Set集合取出里面的鍵值對(duì)關(guān)系,然后通過(guò)entry的getKey()和getValue()方法取出元素。

107.Collections和collection的區(qū)別?

答:Collections是用來(lái)操作集合的工具類,它是個(gè)類;collection是單列集合的頂層接口。

108:

*棧和隊(duì)列:

隊(duì)列結(jié)構(gòu):先進(jìn)先出的規(guī)則

棧結(jié)構(gòu):先進(jìn)后出規(guī)則

*鏈表和數(shù)組的區(qū)別:

數(shù)組:一塊連續(xù)的存儲(chǔ)區(qū)域

鏈表結(jié)構(gòu):每個(gè)元素指向下一個(gè)元素

四、異常

109.異常體系概述?

答:Throwable類

|--Error:無(wú)法通過(guò)處理解決的錯(cuò)誤

|--Exception:

|--編譯時(shí)異常:就是在編譯程序生成.class文件時(shí)產(chǎn)生的異常,這種異常必須處理,要么拋出,要么捕獲,否則編譯無(wú)法通過(guò)

|--運(yùn)行時(shí)異常:編譯時(shí)期不會(huì)出現(xiàn),只有在運(yùn)行時(shí)才產(chǎn)生,這種異常,可以處理,也可以不處理,可以聲明,也可以不聲明

110.異常處理有哪些方式?

答(1)捕獲處理try{}catch{}try{}catch{}finally{}try{}finally{}

(2)聲明拋出

111.運(yùn)行異常和編譯異常的區(qū)別?

答:所有的RumtimeException類及其子類的實(shí)例是運(yùn)行異常,其他異常時(shí)編譯異常。編譯異常必須顯式處理,否則會(huì)編譯失敗。運(yùn)行時(shí)異??梢圆惶幚?,可以通過(guò)編譯。

112.throw和throws的區(qū)別?

答:throws是在方法聲明后面,用來(lái)聲明異常,后面跟的異常類名;可以跟多個(gè)異常類名,用逗號(hào)隔開(kāi);表示拋出異常,需要由調(diào)用者處理。

Throw定義在方法體內(nèi),跟的異常對(duì)象名;只能跟一個(gè)異常對(duì)象。

113.子父類間異常的注意事項(xiàng)?

答:(1)子類繼承父類時(shí),父類方法拋出了異常,子類重寫(xiě)該方法時(shí)只能拋出相同的異?;蛘咴摦惓5淖宇悺?/p>

(2)如果父類拋出了多個(gè)異常,子類在重寫(xiě)方法時(shí)只能拋出相同的異?;蛘咚淖蛹?,不能拋出父類沒(méi)有的異常。

(3)如果父類沒(méi)有拋出異常,子類重寫(xiě)該方法時(shí)不能拋出異常。如果子類出現(xiàn)了異常,只能進(jìn)行try處理,不能拋出。

114.異常處理的注意事項(xiàng):

[if !supportLists](1)[endif]子類不能出現(xiàn)父類沒(méi)有的異常

[if !supportLists](2)[endif]如果父類沒(méi)有拋出異常,子類重寫(xiě)該方法時(shí)不能拋出異常。如果子類出現(xiàn)了異常,只能進(jìn)行try處理,不能拋出。

[if !supportLists](3)[endif]功能內(nèi)部如果出現(xiàn)異常,如果內(nèi)部可以處理,就用try。如果功能內(nèi)部處理不了,就必須聲明出來(lái),讓調(diào)用者處理。

116.JVM是如何處理異常的?

先自己處理,處理不了交給調(diào)用者處理。

五、IO

117.遞歸的注意事項(xiàng)?

答:1.遞歸必須要有出口,否則是死遞歸,造成棧內(nèi)存溢出。2.遞歸不能多層次調(diào)用,否則會(huì)造成棧內(nèi)存溢出。3.構(gòu)造方法不能遞歸調(diào)用。

117.路徑的分類?

答:分為相對(duì)路徑和絕對(duì)路徑。絕對(duì)路徑是相對(duì)盤(pán)符而言的;相對(duì)路徑相對(duì)的是工程。

118.集合的頂層是什么?IO的頂層是什么?

答:集合的頂層是接口。IO的頂層的是抽象類。

119.什么IO流?

用來(lái)在硬盤(pán)和內(nèi)存直接交換數(shù)據(jù)的。

120:簡(jiǎn)述IO的分類?

答:按照流向分輸入流和輸出流。

按照操作分為字節(jié)流和子字符流。

字節(jié)流能操作任意類型的文件,如果操作文本,可能會(huì)出現(xiàn)亂碼。分為字節(jié)輸出流和字節(jié)輸入流。

字符流只能操作純文本文件,分為字符輸入流和字符輸出流。

121.為什么read()方法返回值是int類型?

答:為了防止中間出現(xiàn)11111111(-1的反碼)這樣的數(shù)據(jù),后面的內(nèi)容就讀不到了。

122.字符流通往字節(jié)流的橋梁是什么?字節(jié)流通往字符的橋梁是什么?

答:字符流通往字節(jié)流的橋梁是OutputStreamWriter;字節(jié)流通往字符流的橋梁是InputstreamReader。

123.標(biāo)準(zhǔn)輸入流和輸出流是什么?

答:標(biāo)準(zhǔn)輸入流的是System.in。標(biāo)準(zhǔn)輸出流是System.out.

124.高效字符流的方法?

ReadLine()讀不到\r\n

newline()針對(duì)當(dāng)前操作系統(tǒng)換行

125.字節(jié)輸入流read()一次讀取的一個(gè)字節(jié),返回的字節(jié)的對(duì)應(yīng)的ASCII值。

126.字符緩沖流和字節(jié)緩沖流的緩沖區(qū)的默認(rèn)大小是多少?

答:字符緩沖流緩沖區(qū)默認(rèn)的大小是8192個(gè)字符,16kb。

字節(jié)緩沖流緩沖區(qū)默認(rèn)的大小是8192個(gè)字節(jié),8kb。

Writer的2kb。

127.close()和flush()的區(qū)別:

答:flush()方法是來(lái)刷新緩沖區(qū)的,刷新之后還可以再次寫(xiě)出。

Close()是用來(lái)關(guān)閉流釋放資源的,如果是帶緩沖區(qū)的流對(duì)象關(guān)閉流之前還會(huì)刷新緩沖區(qū),關(guān)閉之后無(wú)法寫(xiě)出。

六、網(wǎng)絡(luò)編程

128.什么是網(wǎng)絡(luò)編程?

答:網(wǎng)絡(luò)編程又叫套接字編程,Socket編程,就是用來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)互連的不同計(jì)算機(jī)上運(yùn)行程序之間可以進(jìn)行數(shù)據(jù)的交換。大白話來(lái)講:就是用java語(yǔ)言來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)上不同計(jì)算機(jī)的通信。

129.網(wǎng)絡(luò)編程的三要素?

答:IP地址、端口、協(xié)議。

IP的組成網(wǎng)關(guān)和主機(jī)地址。127.0.0.1回環(huán)地址255.255.255.255廣播地址

130.端口的范圍是什么?哪個(gè)范圍的端口不能用,為什么?

答:端口的范圍是0——65535.0——1024這個(gè)范圍的端口不能使用,因?yàn)橐呀?jīng)被系統(tǒng)占用或者作為保留端口。

131.TCP和UDP協(xié)議的區(qū)別?

答:TCP是面向有連接的,三次握手機(jī)制;傳輸?shù)臄?shù)據(jù)無(wú)大小限制;安全(可靠)協(xié)議;效率低;區(qū)分客戶端和服務(wù)器。

UDP是面向無(wú)連接的,發(fā)送的數(shù)據(jù)是通過(guò)數(shù)據(jù)報(bào)包的形式,不超過(guò)64k;不安全(可靠)協(xié)議,效率高;不區(qū)分客戶端和服務(wù)器。(叫發(fā)送端和接收端)

132.Socket通信的原理是是什么?

答:通信的兩端都有獨(dú)有的Socket,Socket通信就是使用TCP或者UDP協(xié)議通過(guò)IO流在兩個(gè)Socket間進(jìn)行通信。

七、多線程

133.繼承和線程?

進(jìn)程是一個(gè)正在執(zhí)行中的程序,每一個(gè)程序都至少有一個(gè)執(zhí)行順序,該順序是一個(gè)路徑,或者叫一個(gè)控制單元。

線程是進(jìn)程中的一個(gè)獨(dú)立的控制單元,線程在控制著進(jìn)程的執(zhí)行,是進(jìn)程的執(zhí)行路徑。

進(jìn)程:正在運(yùn)行的程序

線程:進(jìn)程的執(zhí)行單元,執(zhí)行路徑。

多線程:進(jìn)程有多條執(zhí)行路徑,每個(gè)執(zhí)行路徑就是線程。

134.多線程并發(fā)和多線程并行是什么呢?

答:兩個(gè)或者多個(gè)任務(wù)發(fā)送請(qǐng)求時(shí),CPU只能執(zhí)行一個(gè),就會(huì)安排這些任務(wù)交替執(zhí)行,由于CPU做著高速的切換,間隔的時(shí)間比較短,我們看起來(lái)像同時(shí)執(zhí)行的,這就是多線程并發(fā)。

并行是兩個(gè)或多個(gè)任務(wù)同時(shí)執(zhí)行,前提是多核CPU。

135.多線程的執(zhí)行原理?

答:CPU在做著高速的切換。

136.線程的執(zhí)行具有隨機(jī)性和延遲性。

137.線程的默認(rèn)命名規(guī)則?

答:Thread-編號(hào),編號(hào)是從0開(kāi)始的。

138.線程的優(yōu)先級(jí)的范圍是多少?默認(rèn)的優(yōu)先級(jí)是?

答:線程的優(yōu)先級(jí)范圍是1——10。默認(rèn)的優(yōu)先級(jí)是5.

139.Java程序的啟動(dòng)原理?

答:JVM啟動(dòng)一個(gè)主線程,再由主線程調(diào)用某個(gè)類的main方法。

140.Java程序是多線程的嗎?

答:是的,至少開(kāi)啟了一個(gè)主線程和負(fù)責(zé)垃圾回收的線程。

141.線程的優(yōu)先級(jí)越高,代表這個(gè)線程一定是第一個(gè)執(zhí)行的嗎?

答:不是的,線程的優(yōu)先級(jí)越高代表著在一定程度上讓該線程獲取更多的執(zhí)行機(jī)會(huì)。

142.線程的兩種實(shí)現(xiàn)方式的區(qū)別?

答:繼承Thread類:好處是:因?yàn)槭抢^承,代碼簡(jiǎn)單,能夠直接使用Thread類的方法。確定是:擴(kuò)展性比較差,因?yàn)槔^承了Thread類,不能再繼承其他的類。

實(shí)現(xiàn)Runnable接口:好處是擴(kuò)展性比較強(qiáng)。缺點(diǎn)時(shí):代碼比較冗余,因?yàn)椴皇抢^承Thread類,無(wú)法直接使用thread中的方法。

143.同步代碼塊和同步方法的鎖是誰(shuí)?

答;同步代碼塊的鎖可以是任意類型的對(duì)象;非靜態(tài)同步方法的鎖是this;靜態(tài)方法的鎖是該類的字節(jié)碼文件。

144.實(shí)現(xiàn)Runnable和Callable的區(qū)別?

答:實(shí)現(xiàn)Runnable接口的run方法沒(méi)有返回值,不能拋異常;而實(shí)現(xiàn)Callable接口的call方法可以拋異常,有返回值。

Runnable接口的實(shí)現(xiàn)類對(duì)象既可以作為參數(shù)傳遞給Thread的構(gòu)造方法,也可以用線程池submit的參數(shù);Callable接口的實(shí)現(xiàn)類對(duì)象只適應(yīng)于線程池。

145.線程的生命周期(線程的五種狀態(tài))是什么?

答:新建、就緒、運(yùn)行(運(yùn)行的時(shí)候可能阻塞)、死亡。

線程的六種狀態(tài):新建、就緒、運(yùn)行(運(yùn)行的時(shí)候可能阻塞或者等待)、死亡。

146.sleep和wait的區(qū)別?

答:(1)sleep是讓線程睡眠,必須給相應(yīng)的睡眠時(shí)間,不需要喚醒,時(shí)間到了會(huì)自動(dòng)醒來(lái),休眠時(shí)不放棄Cpu的執(zhí)行權(quán)。

(2)wait的是讓線程等待,可以傳參也可以不傳參,傳參是在指定的時(shí)間后等待,需要被喚醒。等待的時(shí)候放棄cpu的執(zhí)行權(quán)。

147.什么時(shí)候會(huì)出現(xiàn)安全性?

多線程,并發(fā),操作同一數(shù)據(jù)。

148.為什么wait()和notify()定義在Object中?

答:因?yàn)殒i對(duì)象可以是任意類型的對(duì)象。

149.什么情況下需要同步?

當(dāng)多線程并發(fā),有多段代碼同時(shí)執(zhí)行時(shí),我們希望某一段代碼執(zhí)行的過(guò)程中CPU不要切換到其他線程工作.這時(shí)就需要同步.

如果兩段代碼是同步的,那么同一時(shí)間只能執(zhí)行一段,在一段代碼沒(méi)執(zhí)行結(jié)束之前,不會(huì)執(zhí)行另外一段代碼.

八、模擬湯姆貓服務(wù)器

150.BS結(jié)構(gòu)和CS的區(qū)別?

答:CS結(jié)構(gòu)是指客戶端和服務(wù)器端,開(kāi)發(fā)比較容易,因?yàn)橛脩舻膽?yīng)用程序都在客戶端,降低了系統(tǒng)通壓力,但是維護(hù)比較困難。

BS結(jié)構(gòu)是指瀏覽器服務(wù)器端,開(kāi)發(fā)比較困難,因?yàn)閼?yīng)用程序基本都在服務(wù)器端,維護(hù)比較方便。

151.靜態(tài)資源和動(dòng)態(tài)資源是什么?

答:靜態(tài)資源是Web頁(yè)面給人們看到的數(shù)據(jù)是始終不變的,例如html。

動(dòng)態(tài)資源是Web頁(yè)面給人們看的數(shù)據(jù)是系統(tǒng)自動(dòng)生成的,隨時(shí)變化的。例如JSP/Servlet、ASP、PHP

在JAVA,動(dòng)態(tài)Web資源開(kāi)發(fā)技術(shù)通稱Javaweb。

152.常用的狀態(tài)碼你知道哪些?

答:200請(qǐng)求成功;404請(qǐng)求的資源不存在;500服務(wù)器發(fā)生未知的錯(cuò)誤。

153.GET請(qǐng)求和POST請(qǐng)求的區(qū)別?

答:GET請(qǐng)求會(huì)將請(qǐng)求信息置于地址欄,不安全,適合小數(shù)據(jù)的傳輸。

POST請(qǐng)求將請(qǐng)求信息置于請(qǐng)求體,相對(duì)安全,適合大數(shù)據(jù)的傳輸。

154.客戶端向服務(wù)器發(fā)送請(qǐng)求request,服務(wù)器對(duì)客戶端的請(qǐng)求做出響應(yīng)response。

http協(xié)議是互聯(lián)網(wǎng)的通用協(xié)議(規(guī)則),客戶端和服務(wù)端都要遵循這個(gè)協(xié)議。默認(rèn)端口號(hào)是80.

155.請(qǐng)求信息包括什么?響應(yīng)信息包括什么?

答:請(qǐng)求頭和請(qǐng)求體。請(qǐng)求頭又包括請(qǐng)求行和頭信息。

響應(yīng)信息包括響應(yīng)頭和響應(yīng)體。

九.?dāng)?shù)據(jù)庫(kù)

156.為什么要有數(shù)據(jù)庫(kù)?常見(jiàn)的數(shù)據(jù)你知道哪些?

答:為了永久存儲(chǔ)數(shù)據(jù),并且能夠操作數(shù)據(jù)。

MySQLSQL ServerOracle

157.數(shù)據(jù)庫(kù)的本質(zhì)是什么?

答;數(shù)據(jù)庫(kù)的本質(zhì)是一個(gè)文件系統(tǒng)。

158.數(shù)據(jù)庫(kù)以什么為單位存儲(chǔ)數(shù)據(jù)?

數(shù)據(jù)庫(kù)中以表為組織單位存儲(chǔ)數(shù)據(jù)。

159.常用的SQL語(yǔ)句?

createdatabase數(shù)據(jù)庫(kù)名;創(chuàng)建數(shù)據(jù)庫(kù)

show databases;查看所有數(shù)據(jù)庫(kù)

use數(shù)據(jù)庫(kù)名;使用指定數(shù)據(jù)庫(kù)

create table表名(創(chuàng)建表

列名1數(shù)據(jù)類型 約束,

列名2數(shù)據(jù)類型,

列名3數(shù)據(jù)類型,

...

列名n數(shù)據(jù)類型--不加,

insert into表名(列名1,列名2,.列名n)values(值1,值2...);添加數(shù)據(jù)

delete from表名where條件刪除指定條件的數(shù)據(jù)

update表名set字端1 =值1,字端2=值2where條件; 修改指定數(shù)據(jù)

select字段1,字段2,...from表名;按照表中的字段名查詢:

select * from表名;查詢表中所有字段

order by排序

group by分組:

160.聚合函數(shù)?

count、sum、max、min、avg

161.JDBC的核心功能是什么?

答:連接數(shù)據(jù)庫(kù);向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句;操作SQL語(yǔ)句的返回結(jié)果。

162.DBUtils能否創(chuàng)建數(shù)據(jù)庫(kù)和表?

答:不能,只能操作數(shù)據(jù)庫(kù)里面的數(shù)據(jù)。

163.SQL語(yǔ)言的分類?

答:SQL語(yǔ)言是JAVA操作數(shù)據(jù)庫(kù)的語(yǔ)言。分為DDL(Data

Definition Language)數(shù)據(jù)定義語(yǔ)言;DML(Data

manipulation Language)數(shù)據(jù)操作語(yǔ)言(增刪覆蓋);DCL(Data Control

Language)數(shù)據(jù)控制語(yǔ)言;DQL(Data Query Language)數(shù)據(jù)查詢語(yǔ)言。

164.SQL注入的問(wèn)題產(chǎn)生原因和解決方法?

答:SQL注入是因?yàn)榭蛻糨斎氲氖荢QL語(yǔ)句??梢允褂肞reparedStatement接口的子類對(duì)象。

165.連接池?

答:數(shù)據(jù)庫(kù)連接的建立和關(guān)閉都是極其消耗資源的。數(shù)據(jù)庫(kù)連接池的解決方案是當(dāng)應(yīng)用程序啟動(dòng)時(shí),系統(tǒng)主動(dòng)創(chuàng)建足夠的數(shù)據(jù)庫(kù)連接,并將這些連接組成一個(gè)連接池,每次使用的時(shí)候無(wú)序重新創(chuàng)建聯(lián)系,直接從連接池中取出已有的連接使用,使用完后不再關(guān)閉數(shù)據(jù)庫(kù)連接,而是直接歸還到連接池。通過(guò)連接池,將極大的提高了程序的運(yùn)行效率。

f?3?6"b

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

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,637評(píng)論 18 399
  • 、6一、基本知識(shí) 1.JDK和JRE的區(qū)別 答:JDK是java語(yǔ)言開(kāi)發(fā)工具包,包含JRE和開(kāi)發(fā)工具(javac....
    夢(mèng)游的沙師弟閱讀 1,369評(píng)論 0 4
  • 一:java概述:1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工...
    ZaneInTheSun閱讀 2,805評(píng)論 0 11
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,787評(píng)論 11 349
  • 今天星期六,因?yàn)榍迕鞴?jié)放假三天,所以補(bǔ)課,上星期一的課 今天很簡(jiǎn)單的一天 今天發(fā)現(xiàn)小胖這兩天情緒不對(duì),突然低落,我...
    陽(yáng)臺(tái)上的花死了閱讀 338評(píng)論 0 0

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