javaSe基礎總結

、6一、基本知識

1.?JDK和JRE的區別

答:JDK是java語言開發工具包,包含JRE和開發工具(javac.exe等);JRE是java語言的運行環境,包含JVM和核心類庫;JVM是java虛擬機,保證了java的跨平臺性。

2.?JVM跨平臺嗎?

答:JVM不具有跨平臺性,不同的操作系統所對應的JVM不一樣。正是因為JVM的不跨平臺,才能夠使java語言具有跨平臺性。

3.保留字是什么?

答:保留字是還未使用的關鍵字,可能在java以后的版本中使用。有goto和const。

4.?java語言的特點?

答:完全面向對象,跨平臺性,開源,簡單易學,安全可靠,高性能,分布式處理,多線程,健壯性,多態。

5.?main是關鍵字嗎?

答:不是的。main是主函數的名字,能夠被虛擬機識別,是程序執行的入口。

6.?path和classpath的區別?

答:path環境變量配置的是可執行文件.exe的執行路徑;能夠在不同盤符下訪問path路徑下的可執行文件。Classpath配置的java語言編譯后生成的字節碼文件的執行路徑。

7.計算機最基本的存儲單位是:字節(byte)

計算機能直接識別的進制是:二進制

8進行運算的時,變量和常量有什么區別?

答:變量在運算過程中的值是變化的,可以被多次賦值。常量則是固定的。

9標識符的組成?以及命名規則?

答:標識符有26個字母的大小寫,0到9,_和$組成。

命名規則:不能使用關鍵字,不能數字開頭,嚴格區分大小寫,要見名知義。

函數名和變量名如果是多個單詞組成,第一個單詞的首字母小寫,其余首字母大寫。

類名和接口名如果是多個單詞組成,首字母全部大寫。

包名全部小寫。

常量名全部大寫,如果是多個單詞,用_隔開。

10.變量數據類型分為哪幾種?如何使用變量?

答:基本數據類型:整形:包括byte、short、int、long。浮點型:包括float、doble。

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

引用數據類型:數組、類、接口。

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

11.常量分為哪幾種?

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

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

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

13. ASCII碼表中 字符 '0' ?, 'a' , 'A' 分別對應int類型的值是多少.

答:0在表中對應的值是48,a對應的是97;A對應的是65.

14.long是8個字節,float是4個字節,為什么long 比 float小?

答:底層采用的運算規則不一樣。

15.以取值范圍的大小排列數據的基本類型.

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

16.+=、-=、這些運算符內隱含了強制類型轉換。

17.++和—的使用?

答:單獨使用的時候,在前在后都一樣。

參與運算的時候,在前是先自加或者自減,然后再用這個結果參與運算。在后是先參與運算,再進行自加或者自減。

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

答:|不管前面的結果是真是假后面的都會運算,||前面為真后面的不參與運算。但是結果是一樣的。

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

答:&不管前面的結果是真是假后面的都會運算,&&前面為假后面的不參與運算。但是結果是一樣的。

20.Math.round原理是什么?

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

21.生成隨機數的方法?

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

22.if…else..和三元表達的區別

答:能用三元表達式寫的就能用if語句寫,但是能用if語句寫的,三元表達式不一定能寫。三元表達式必須要有一個結果。

23.while、do while 、for的區別?

答:do while語句是先性后判斷,while和for先判斷后執行。

for循環結束后,其中定義的初始化條件不能再使用。

24.if和switch區別?

答:if1.對具體的值進行判斷。2.對區間判斷。3.對運算結果是boolean類型的表達式進行判斷。

switch: 1.對具體的值進行判斷。2.值的個數通常是固定的

25.switch語句的表達式可以放什么?

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

26.死循環的兩種寫法.

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

27.break和continue的區別

答:break是完全跳出循環,不再執行循環體的代碼。也可以用在switch語句中。Continue是提前結束本次循環,進入下次循環。Return是結束方法。

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

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

29:方法重載和方法重寫的區別?

答:方法重載是在同一個類中出現同名方法,參數列表不同,與返回值類型無關。

方法重寫是在子父類間,子類出現和父類聲明完全相同的方法時,就成為方法重寫。重寫要求返回值必須相同或者有子父類關系。

30.方法的注意事項:

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

31.方法的調用?

答:有返回值時可以單獨調用,但是沒有意義;也可以放在輸出語句中;可以賦值給變量。無返回值直接調用即可。

32.數組的定義格式?

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

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

二維數組

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

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

33.數組的默認值?

答;整形的默認值是0,引用數據類型是null;boolean型的是false。

34.棧內存和堆內存?

答:棧內存用于存儲局部變量和代碼的執行,堆內存中都是new出來的。

35.數組和集合的區別:

(1)長度區別:數組長度是固定的;集合長度可變。

(2)存儲內容:一個數組只能存儲同一種數據類型的元素;集合可以存儲不同數據類型的元素。

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

36.數組和集合的轉換?

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

集合轉為數組:list.toArray().

二、面向對象

37.局部變量和成員變量的區別:

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

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

(3)內存位置不同:成員變量隨著對象的創建存放在堆內存中,局部變量存放在棧內存中。

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

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

38.變量的使用順序?

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

39.類和對象的關系?

答:類是具有相同或相似一類事物的抽象;對象是類的實例化。

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

答:類

41.什么叫面向對象?

答:面向對象是一種思想,它是基于面向過程的,強調的是具備功能的對象,讓對象調用方法解決問題。在開發中,要完成特定的功能就去尋找相應的對象,如果找不到就創建對象,使用對象,維護完善對象。

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

思想特點:1.讓復雜的事情簡單化;2,更符合人類的思維需求;3.角色從執行者到指揮者。

三大特征:封裝,繼承,多態。

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

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

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

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

43.封裝就是私有,對嗎?為什么?

答:private是封裝的一種體現形式。方法也是封裝。

44.Java中參數傳遞的問題:

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

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

答:構造方法主要作用是用來給對象初始化,賦值只是他的兼職工作,也可以不用賦值。

Set方法只能用來賦值,在原有對象的基礎上賦值。

46.static關鍵字的特點?注意事項是什么?有什么好處和弊端?

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

注意事項:靜態方法中不可以定義this、super關鍵字,因為靜態優先于對象存在,靜態只能覆蓋靜態。

好處:static能夠被類名直接調用,定義的是對象的共性內容,不用每個對象單獨定義,節省空間。弊端:生命周期過長。

47.類變量和實例變量的區別?

答:(1)所屬不同:類變量屬于類,是對象的共性內容;實例變量屬于對象,是特性內容。

(2)存儲位置不同:類變量隨著類的加載存儲于方法區;實例變量隨著對象的創建存儲于堆內存中。

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

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

48.構造方法能不能重載?

答:可以,在同一個類中,參數列表不同,與返回值無關。

49.靜態代碼塊和構造代碼塊的區別?

答:(1)靜態代碼塊屬于類,給類進行初始化,類一加載就會執行,只執行一次,經常用于加載驅動。

(2)構造代碼塊給對象進行統一初始化,每創建一次就會執行一次。

50.什么是繼承?

答:當多個類中有很多共性的內容時,我們可以把這些共性內容抽取出來封裝成一個類,讓這些類與這個封裝的類產生關系。這種關系就是繼承。

51.繼承的的特點和好處,弊端?

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

好處:(1)提高了代碼的復用性(2)提高了代碼的維護性(3)提高了代碼的擴展性。(4)讓類與類產生了關系,是多態的前提。

弊端:增強了類與類的耦合性。

52.this和super 的區別?

答:this代表對象的引用,super代表當前對象父類的引用。

53.Super()和this()在構造方法能同時使用嗎?

答:不能,super調用的是父類的構造,要放在構造函數的第一行;this調用的是本類的構造,也要放在第一行。

Super關鍵字和this關鍵字能否在構造函數中共存?

答:能。

54.為什么每個構造函數中第一行都有默認的super()?

用于子類對象訪問父類前,對父類數據進行初始化。

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

因為Object類是所有 類的父類,Object中只有一個空參構造。

56.構造方法的特點?

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

57.this的作用?

答:(1)區別局部變量和成員變量(2)代表本類對象的引用(3)也可以用于構造方法的調用。

58.子父類都有靜態代碼塊,構造代碼塊,構造方法的執行順序?

答:父類的靜態代碼塊先執行,再執行子類中的靜態代碼塊;接著執行父類的構造代碼塊和父類的構造方法,最后執行子類的構造代碼塊和構造方法。

59.final修飾的變量的初始化時機:

答:a.未被static關鍵字修飾

* 可以顯示初始化

* 可以在構造方法中初始化

b.被static修飾

* 可以顯示初始化

* 可以在靜態代碼塊中初始化

* 不能在構造方法中初始化

60. final如果修飾局部變量,會發生什么事情?

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

61.什么是多態?多態的體現,前提,好處和弊端分別是什么?

答:同一事物在不同時刻表現出來的不同狀態。

體現:父類引用指向子類對象,父類引用作為參數可以接收其子類對象,接口引用作為參數可以接收其實現類對象。

前提:(1)類與類之間要有關系,要么繼承,要么實現(2)要有方法重寫(3)父類或者接口引用指向子類對象。

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

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

*向上轉型:父類或者父接口指向子類對象。

*向下轉型:把那個引用強制轉為子類對象。

62.多態中成員方法和變量的特點?

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

63.抽象類和抽象方法的特點,有什么關系?

答:抽象類不能創建對象,需要子類繼承;抽象方法沒有方法體,需要子類去實現。抽象類不一定含有抽象方法,抽象方法一定在抽象類中。

64.抽象類中的抽象方法和非抽象方法的區別?

答:抽象方法要求子類必須重寫,完成相應的功能;非抽象方法讓子類繼承,提高代碼的復用性。

65.abstract不能和哪些關鍵字共同存在?

答:private:私有的方法是不可見的,無法被復寫

final:被final修飾的方法是最終方法,無法被復寫

static:被static修飾的方法,要隨類加載到方法區,由于抽象方法沒有方法體所以不能加載

66.final修飾的變量、方法、和類有什么特點?

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

67.final、finally、finalized的區別?

答:(1)final是一個關鍵字,是用來修飾類,成員變量,成員方法的,

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

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

它修飾的成員方法不能被子類重寫

(2)finally是 try-catch-finally語句的一個模塊,正常情況下里邊的代碼永遠會執行,一般是用來釋放資源的

(3)finalize是Object類中的方法,當對象變成垃圾的時候,由GC(Java中的垃圾回收機制)來調用該類的finalize()方法回收垃圾。

68.接口中的成員的特點?

答:都是常量,public static final ;方法都是抽象方法,public abstract;沒有構造方法。

69、類與類、類與接口、接口與接口的關系?

答:類只能單繼承類,但是能夠多層次繼承;類實現接口,能同時實現多個接口,能在繼承類的同時實現接口;接口可以單繼承接口,也能多繼承。

70.接口和抽象類的區別?

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

(2)關系特點:類與類支持單繼承,不能多繼承,但是能夠多層次繼承,類與接口是實現關系,一個類能實現多個接口,一個類繼承類一個類的同時能實現多個接口;接口與接口之間能單繼承,也能多繼承;

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

71.接口的思想特點?

(1)對外暴露的規則(2)接口是程序對外的功能拓展(3)接口是用來多實現的(4)接口的出現降低了類與類之間的耦合性。

72.什么是內部類,特點是什么?

答:在類中定義的類就是內部類。特點(1)能夠直接訪問所在類的成員,包括私有的。(2)外部類訪問內部類需要創建內部類的對象。

73.成員內部類是什么?

答:成員內部類是定義在成員位置的類。能夠被私有、靜態修飾。

74.內部類的方法如果訪問局部變量,內部類的成員變量,外部類的成員變量?

答:局部變量可以直接訪問;內部類的成員變量this. ??;外部類的成員變量:外部類名.this.

75.局部內部類訪問的局部變量為什么要用final修飾?

答:因為當調用這個方法時,局部變量如果沒有用final修飾,他的生命周期和方法的生命周期是一樣的,當方法彈棧,這個局部變量也會消失,那么如果局部內部類對象還沒有馬上消失想用這個局部變量,就沒有了,如果用final修飾會在類加載的時候進入常量池,即使方法彈棧,常量池的常量還在,也可以繼續使用。但是JDK1.8以后取消了這個特性,會默認加上final的。

76.什么是匿名內部類?

答:匿名內部類就是沒有名字的內部類,是內部類的簡化形式。匿名內部類必須繼承或實現一個接口,在使用的時候直接用父類的名字創建一個子類對象并實現其中的方法,匿名內部類的實質是一個繼承了該類或者實現該接口的匿名的子類對象。

前提:必須繼承一個類或實現一個接口。

規則:(1)不能是抽象的,因為它的本質是一個子類對象。(2)不能定義構造方法,因為沒有類名。

使用:(1)當接口中的只有一個抽象方法時,并對方法調用一次的時候(2)傳遞參數的時候,如果參數是接口或抽象類,其實需要的就是實現類對象或者子類對象,這個時候使用匿名內部類。

77、匿名對象何時使用?

答:(1)當對對象方法調用一次的時候(2)可以作為實際參數進行傳遞。

78適配器模式?

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

79.四種權限修飾符的比較?

答:public的權限最大,同一類中,同一個包中,不同包中(子類),不同包中(無關類)都可以訪問。給大家使用

Protected同一類中,同一個包中,不同包中(子類),可以訪問。強調的是子類

默認同一類中,同一個包中可以訪問。強調的是同一個包

Private ??同一類中訪問。強調的是自己

80.package在第一行,只能有一個;然后是import導包;最后是class。

81.代碼塊的分類:

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

構造代碼塊:用于給對象初始化;

靜態代碼塊兒:給類進行初始化,用于加載驅動。

同步代碼塊:為了防止CPU高速切換出現安全問題。

三、API

81.==和equals的區別?

答:“==”是比較運算符,既能比較基本數據類型,又能比較引用數據類型。基本數據類型比較的是數值,引用數據類型比較的是地址值。

equals是一個方法,只能比較引用數據類型。所有的類都會繼承Object的equals方法。重寫equals方法比較的是對象的內容,如果沒有重寫將調研Object的equals方法,比較的是地址值。

82.String str = null 和String str = “”的區別?

答:String str = null只是聲明了引用,但是沒有創建對象,沒有為其開辟空間,不能操作方法。String = “”是創建了一個長度為0的字符串,并在內存中分配了空間。

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

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

84.String,StringBuffer、StringBuilder的區別?

答: String是一個特殊的引用數據類型,是一個長度不可變的字符序列,沒有緩沖區,一旦創建就不會發生變化了。即使重新賦值不是在原來對象的基礎上改變的,而是創建了一個新的對象,將引用指向這個新的對象,浪費空間,效率比較低。

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

85.StringBuilder的底層是什么?

答:底層是字符數組,原始長度為16。通過append添加元素的時候,會自動擴容,擴容規則:大字符串的長度= 小數組長度*2+2.

86.為什么出現基本數據類型包裝類?

答:將基本數據類型封裝為對象的好處能在對象中封裝更多的功能操作數據。

87.String 和int直接的轉換?

答:將int類型轉為String類型的方法:(1)基本數據類型+“”(2)Integer.toString(int num)(3)String.valueOf(int ?i)

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

88.基本數據類型包裝類的自動拆裝箱是什么?

答:是JDK1.5版本出現的新特性,自動裝箱就是把基本數據類型轉為為包裝類型。拆箱就是把包裝類轉換為基本數據類型。

89.Object類中的常見方法有哪些?

答:hashCode():返回值是int,是該對象的哈希瑪值。

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

toString():返回該對象的字符串表現形式。

getClass():返回值類型是Class。返回的是創建該對象所屬類對應的字節碼文件。

這些方法都需要對象調用,在開發的過程中要重寫。

地址值的組成:類名@十六進制的哈希值。

90.獲取當前時間毫秒值有哪幾種方式?

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

91.正則表達式常用的;

\d 數字:[0-9]

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

(X)表示分組

\\1表示和前面的相同

.任何字符

X? ,一次或一次也沒有

X* ,零次或多次

X+ ,一次或多次

X{n} ,恰好 n 次

X{n,} ,至少 n 次

X{n,m} ,至少 n 次,但是不超過 m 次

92.日歷類和日期類相互轉換:

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

93.Date和String類型的轉換?

Date類型轉為String 是格式化:format

String轉Date是解析;parse

三、集合

94.簡述集合體系?

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

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

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

ArrayList集合底層采用的是數組數據結構,查詢速度比較快,因為數組有索引,在內存中分配的空間是連續的,但是增刪比較慢。線程不同步,效率高。初始容量為10。

LinkedList集合的底層采用的是鏈表數據結構,增刪速度比較快,查詢速度比較慢。線程不同步。

Vector底層數據結構也是數組數據結構,但是線程同步,效率低,特有取出元素的方式是枚舉。因為效率低,逐步被ArrayList替代。

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

HashSet的底層數據結構是哈希表,線程不同步,效率高。保證元素的唯一性額有的依據是元素的hashCode和equals方法。如果hashCode不同,不調用equals方法。如果hashCode相同,才會調用equals方法判斷元素是否相同。

TreeSet的底層數據結構是二叉樹,線程不同步,效率高。能夠給元素進行排序。保證元素唯一性的依據是compareTo和return0。排序的兩種方式:第一種元素自身實現Comparable接口,重寫compareTo()方法。這種排序方式叫元素的自熱排序,也叫默認排序。第二種是當元素自身不具備比較性或者具備的比較性不是所需要的,這時就讓集合自身具備比較性,當集合初始化時就有了比較性。定義一個比較器實現Comparator接口,重寫compare方法,定義集合的時候將比較器作為參數傳遞給TreeSet的構造函數,這樣集合就具有了比較性。

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

Hashtable的底層數據結構是哈希表,不可以存儲null鍵和null值,線程同步,效率低。JDK1.0.

HashMap的底層數據結構是哈希表,可以存儲null鍵和null值,線程不同步,將Hashtable替代,JDK1.2效率高。保證鍵的唯一性的 依據是hashCode和equals方法。

TreeMap的底層數據結構是二叉樹,線程不安全,能夠給集合中的鍵排序。

95.什么時候使用什么集合?

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

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

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

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

答:Collection是單列集合,Map是雙列集合。Map的鍵是唯一的,Collection體系中的Set集合中的元素是唯一的。Map集合的數據結構針對鍵有效,Collection的底層數據結構針對元素有效。

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

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

遍歷Set集合的方式有增強for、迭代器Iterator。

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

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

答:不能,會出現并發修改異常,ConcurrentModificationException。

并發修改異常就是在用普通迭代器的時候用集合的方法增加、刪除元素。可以用列表迭代器。

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

答:簡單的說一種標簽,不確定的類型,用戶使用的時候確定類型,是JDK1.5出現的新特性,用于解決安全問題,是一種類型安全機制。

好處:(1)將運行時期會可能出現的異常轉移到編譯期(2)提高了安全性。(3)避免了強制類型轉換的麻煩。

103、上限和下限?

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

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

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

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

自然排序是對強制對實現Comparable接口的類進行排序,實現Comparable接口,重寫compareTo()方法,根據返回值進行排序。

比較器排序是實現Comparator方法,重寫compare()方法,根據返回值進行排序。

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

答:TreeSet的構造方法中不傳參數,會按照類的Comparable排序,沒有的話就會報錯。TreeSet傳入比較器,會按照比較器排序。

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

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

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

107.Collections 和 collection的區別?

答:Collections是用來操作集合的工具類,它是個類;collection是單列集合的頂層接口。

108:

*棧和隊列:

隊列結構:先進先出的規則

棧結構:先進后出規則

*鏈表和數組的區別:

數組:一塊連續的存儲區域

鏈表結構:每個元素指向下一個元素

四、異常

109.異常體系概述?

答:Throwable類

|--Error:無法通過處理解決的錯誤

|--Exception:

|--編譯時異常:就是在編譯程序生成.class文件時產生的異常,這種異常必須處理,要么拋出,要么捕獲,否則編譯無法通過

|--運行時異常:編譯時期不會出現,只有在運行時才產生,這種異常,可以處理,也可以不處理,可以聲明,也可以不聲明

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

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

(2)聲明拋出

111.運行異常和編譯異常的區別?

答:所有的RumtimeException類及其子類的實例是運行異常,其他異常時編譯異常。編譯異常必須顯式處理,否則會編譯失敗。運行時異常可以不處理,可以通過編譯。

112.throw和throws的區別?

答:throws是在方法聲明后面,用來聲明異常,后面跟的異常類名;可以跟多個異常類名,用逗號隔開;表示拋出異常,需要由調用者處理。

Throw定義在方法體內,跟的異常對象名;只能跟一個異常對象。

113.子父類間異常的注意事項?

答:(1)子類繼承父類時,父類方法拋出了異常,子類重寫該方法時只能拋出相同的異常或者該異常的子類。

(2)如果父類拋出了多個異常,子類在重寫方法時只能拋出相同的異常或者他的子集,不能拋出父類沒有的異常。

(3)如果父類沒有拋出異常,子類重寫該方法時不能拋出異常。如果子類出現了異常,只能進行try處理,不能拋出。

114.異常處理的注意事項:

(1)子類不能出現父類沒有的異常

(2)如果父類沒有拋出異常,子類重寫該方法時不能拋出異常。如果子類出現了異常,只能進行try處理,不能拋出。

(3)功能內部如果出現異常,如果內部可以處理,就用try。如果功能內部處理不了,就必須聲明出來,讓調用者處理。

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

先自己處理,處理不了交給調用者處理。

五、IO

117.遞歸的注意事項?

答:1.遞歸必須要有出口,否則是死遞歸,造成棧內存溢出。2.遞歸不能多層次調用,否則會造成棧內存溢出。3.構造方法不能遞歸調用。

117.路徑的分類?

答:分為相對路徑和絕對路徑。絕對路徑是相對盤符而言的;相對路徑相對的是工程。

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

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

119.什么IO流?

用來在硬盤和內存直接交換數據的。

120:簡述IO的分類?

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

按照操作分為字節流和子字符流。

字節流能操作任意類型的文件,如果操作文本,可能會出現亂碼。分為字節輸出流和字節輸入流。

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

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

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

122.字符流通往字節流的橋梁是什么?字節流通往字符的橋梁是什么?

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

123.標準輸入流和輸出流是什么?

答:標準輸入流的是System.in。標準輸出流是System.out.

124.高效字符流的方法?

ReadLine()讀不到\r\n

newline()針對當前操作系統換行

125.字節輸入流read()一次讀取的一個字節,返回的字節的對應的ASCII值。

126.字符緩沖流和字節緩沖流的緩沖區的默認大小是多少?

答:字符緩沖流緩沖區默認的大小是8192個字符,16kb。

字節緩沖流緩沖區默認的大小是8192個字節,8kb。

Writer的2kb。

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

答:flush()方法是來刷新緩沖區的,刷新之后還可以再次寫出。

Close()是用來關閉流釋放資源的,如果是帶緩沖區的流對象關閉流之前還會刷新緩沖區,關閉之后無法寫出。

六、網絡編程

128.什么是網絡編程?

答:網絡編程又叫套接字編程,Socket編程,就是用來實現網絡互連的不同計算機上運行程序之間可以進行數據的交換。大白話來講:就是用java語言來實現網絡上不同計算機的通信。

129.網絡編程的三要素?

答:IP地址、端口、協議。

IP的組成網關和主機地址。127.0.0.1回環地址 ??255.255.255.255廣播地址

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

答:端口的范圍是0——65535. ??0——1024這個范圍的端口不能使用,因為已經被系統占用或者作為保留端口。

131.TCP和UDP協議的區別?

答:TCP是面向有連接的,三次握手機制;傳輸的數據無大小限制;安全(可靠)協議;效率低;區分客戶端和服務器。

UDP是面向無連接的,發送的數據是通過數據報包的形式,不超過64k;不安全(可靠)協議,效率高;不區分客戶端和服務器。(叫發送端和接收端)

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

答:通信的兩端都有獨有的Socket,Socket通信就是使用TCP或者UDP協議通過IO流在兩個Socket間進行通信。

七、多線程

133.繼承和線程?

進程是一個正在執行中的程序,每一個程序都至少有一個執行順序,該順序是一個路徑,或者叫一個控制單元。

線程是進程中的一個獨立的控制單元,線程在控制著進程的執行,是進程的執行路徑。

進程:正在運行的程序

線程:進程的執行單元,執行路徑。

多線程:進程有多條執行路徑,每個執行路徑就是線程。

134.多線程并發和多線程并行是什么呢?

答:兩個或者多個任務發送請求時,CPU只能執行一個,就會安排這些任務交替執行,由于CPU做著高速的切換,間隔的時間比較短,我們看起來像同時執行的,這就是多線程并發。

并行是兩個或多個任務同時執行,前提是多核CPU。

135.多線程的執行原理?

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

136. 線程的執行具有隨機性和延遲性。

137.線程的默認命名規則?

答:Thread-編號,編號是從0開始的。

138.線程的優先級的范圍是多少?默認的優先級是?

答:線程的優先級范圍是1——10。默認的優先級是5.

139.Java程序的啟動原理?

答:JVM啟動一個主線程,再由主線程調用某個類的main方法。

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

答:是的,至少開啟了一個主線程和負責垃圾回收的線程。

141.線程的優先級越高,代表這個線程一定是第一個執行的嗎?

答:不是的,線程的優先級越高代表著在一定程度上讓該線程獲取更多的執行機會。

142.線程的兩種實現 方式的區別?

答:繼承Thread類:好處是:因為是繼承,代碼簡單,能夠直接使用Thread類的方法。確定是:擴展性比較差,因為繼承了Thread類,不能再繼承其他的類。

實現Runnable接口:好處是擴展性比較強。缺點時:代碼比較冗余,因為不是繼承Thread類,無法直接使用thread中的方法。

143.同步代碼塊和同步方法的鎖是誰?

答;同步代碼塊的鎖可以是任意類型的對象;非靜態同步方法的鎖是this;靜態方法的鎖是該類的字節碼文件。

144.實現Runnable和Callable的區別?

答:實現Runnable接口的run方法沒有返回值,不能拋異常;而實現Callable接口的call方法可以拋異常,有返回值。

Runnable接口的實現類對象既可以作為參數傳遞給Thread的構造方法,也可以用線程池submit的參數;Callable接口的實現類對象只適應于線程池。

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

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

線程的六種狀態:新建、就緒、運行(運行的時候可能阻塞或者等待)、死亡。

146.sleep和wait的區別?

答:(1)sleep是讓線程睡眠,必須給相應的睡眠時間,不需要喚醒,時間到了會自動醒來,休眠時不放棄Cpu的執行權。

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

147.什么時候會出現安全性?

多線程,并發,操作同一數據。

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

答:因為鎖對象可以是任意類型的對象。

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

當多線程并發, 有多段代碼同時執行時, 我們希望某一段代碼執行的過程中CPU不要切換到其他線程工作. 這時就需要同步.

如果兩段代碼是同步的, 那么同一時間只能執行一段, 在一段代碼沒執行結束之前, 不會執行另外一段代碼.

八、模擬湯姆貓服務器

150.BS結構和CS的區別?

答:CS結構是指客戶端和服務器端,開發比較容易,因為用戶的應用程序都在客戶端,降低了系統通壓力,但是維護比較困難。

BS結構是指瀏覽器服務器端,開發比較困難,因為應用程序基本都在服務器端,維護比較方便。

151. 靜態資源和動態資源是什么?

答:靜態資源是Web頁面給人們看到的數據是始終不變的,例如html。

動態資源是Web頁面給人們看的數據是系統自動生成的,隨時變化的。例如JSP/Servlet、ASP、PHP

在JAVA,動態Web資源開發技術通稱Javaweb。

152.常用的狀態碼你知道哪些?

答:200 ?請求成功;404 ?請求的資源不存在;500 ?服務器發生未知的錯誤。

153.GET請求和POST請求的區別?

答:GET請求會將請求信息置于地址欄,不安全,適合小數據的傳輸。

POST請求將請求信息置于請求體,相對安全,適合大數據的傳輸。

154.客戶端向服務器發送請求request,服務器對客戶端的請求做出響應response。

http協議是互聯網的通用協議(規則),客戶端和服務端都要遵循這個協議。默認端口號是80.

155.請求信息包括什么?響應信息包括什么?

答:請求頭和請求體。請求頭又包括請求行和頭信息。

響應信息包括響應頭和響應體。

九.數據庫

156.為什么要有數據庫?常見的數據你知道哪些?

答:為了永久存儲數據,并且能夠操作數據。

MySQLSQL ServerOracle

157.數據庫的本質是什么?

答;數據庫的本質是一個文件系統。

158.數據庫以什么為單位存儲數據?

數據庫中以表為組織單位存儲數據。

159.常用的SQL語句?

create ?database 數據庫名; ????創建數據庫

show databases; ???????????????查看所有數據庫

use 數據庫名; ????????????????使用指定數據庫

create table 表名( ???????????創建表

列名1 ?數據類型 約束,

列名2 ?數據類型,

列名3 ?數據類型,

...

列名n ?數據類型 ???--不加,

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

delete from 表名 where 條件刪除指定條件的數據

update 表名 set 字端1 = 值1,字端2=值2 ?where 條件; 修改指定數據

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

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

order by ??排序

group by ??分組:

160.聚合函數?

count、sum、max、min、avg

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

答:連接數據庫;向數據庫發送SQL語句;操作SQL語句的返回結果。

162.DBUtils能否創建數據庫和表?

答:不能,只能操作數據庫里面的數據。

163.SQL語言的分類?

答:SQL語言是JAVA操作數據庫的語言。分為DDL(Data Definition Language)數據定義語言;DML(Data manipulation Language)數據操作語言(增刪覆蓋);DCL(Data Control Language)數據控制語言;DQL(Data Query Language)數據查詢語言。

164.SQL注入的問題產生原因和解決方法?

答:SQL注入是因為客戶輸入的是SQL語句。可以使用PreparedStatement接口的子類對象。

165.連接池?

答:數據庫連接的建立和關閉都是極其消耗資源的。數據庫連接池的解決方案是當應用程序啟動時,系統主動創建足夠的數據庫連接,并將這些連接組成一個連接池,每次使用的時候無序重新創建聯系,直接從連接池中取出已有的連接使用,使用完后不再關閉數據庫連接,而是直接歸還到連接池。通過連接池,將極大的提高了程序的運行效率。

1、面向對象的理解

面向對象是基于面向過程的。在開發過程中,要完成特定的功能就去找相應的對象,如果找不到就創建相應的對象,使用對象,維護完善對象。

2、面向對象和面向過程的區別

面向過程強調的是功能行為;

面向對象將功能封裝成對象,強調的是具備功能的對象

3、abstract與哪些關鍵字不能共存為什么

private:私有的方法是不可見的,無法被復寫

final:被final修飾的方法是最終方法,無法被復寫

static:被static修飾的方法,要隨類

加載到方法區,由于抽象方法沒有方法體所以不能加載

4、static的特點

隨著類的加載而加載;優先于對象存在;被所有對象所共享;可以直接被類名所調用。

靜態方法只能訪問靜態成員,非靜態方法既可以訪問靜態也可訪問非靜態

靜態方法中不可以定義this、super關鍵字,因為靜態優先于對象存在,所以靜態方法中不可以出現this;

5、類與類、類與接口、接口與接口的關系

繼承,繼承或實現,繼承

6、final、finally、finalize的區別

final:可以修飾類、方法和變量,被final修飾的類無法被繼承,方法無法被復寫,變量為常量只能賦值一次

finally:異常處理trycatch時使用,可以添加也可以不添加,用于執行一些必須執行的代碼,如關閉資源等

finalize:Object類中的方法,其中定義了對象要被垃圾收集器回收之前要做的相關的清理工作

7、什么是多態,多態的好處和弊端

多態可以理解為事物存在的多種體現形態。父類的引用指向了自己的子類對象;父類的引用也可以接收自己子類的對象。

好處:提高了代碼的擴展性

弊端:父類的引用只能訪問父類中有的成員(父類引用無法調用子類中特有的方法)

8、wait()和sleep()的區別

(1)wait是Object類中的方法,sleep是Thread類中的方法

(2)sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。

(3)wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用

(4)sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常

9、網絡編程的三要素

(1)IP:網絡中設備的標識

(2)端口:用于標識設備中接收數據的網絡應用程序具體是哪一個,有效端口0~65535,0~1024為系統端口及保留端口

(3)傳輸協議:UDP和TCP協議,信息通訊的規則

10、UDP和TCP的區別

UDP:不需要建立連接,是不可靠協議,將數據及源和目的封裝到數據報中,每個數據報限制在64k以內,發送數據較少,速度快

TCP:通過三次握手建立連接通路,是可靠協議,可進行大量的數據傳輸,效率較低

11、什么是暴力反射

我們知道java的特性之一就是封裝,將對象的屬性和具體實現隱藏起來,只對外提供公共方法訪問,private修飾的內部屬性和方法對我們是不可見的。

我們通過正常的方法是無法獲取以及修改的,可是通過反射卻可以強制獲取并做一些修改,這就破壞了封裝性,這就是所謂的暴力反射

12、反射獲取字節碼對象方式、創建對象的兩種方式

獲取字節碼方式三種:

(1)類名.class,例如:System.class

(2)對象.getClass(),例如:new Date().getClass();

(3)Class.forName("類名"),例如:Class.forName("java.util.Date");

創建對象的兩種方式:

(1)直接用字節碼創建對象,只能調用默認的構造方法:字節碼.newInstance();

(2)獲取構造方法Constructor,然后調用構造方法創建,可以通過參數不同調用不同的構造方式

13、怎么理解反射,反射的應用

反射就是把Java類中的各種成分映射成相應的Java類。

一般情況下我們要解決某個問題,先找到相關的類,創建該類的對象,然后通過該對象調用對應的方法來解決問題。

反射是一個正好相反的過程,開始可能并沒有類可以解決這個問題,而我們卻先用一個當時可能并不存在的方法解決了這個問題,后來才有的這個類。

這其實就是框架的原理,現有的框架再有的解決問題的類。框架描述了整體,制訂了功能方法的規范,具體的實現之后按照這個規范編寫。這些都需要靠反射來完成。

使用框架有良好的擴展性,某部分功能的優化不需要涉及程序整體,只需要修改特定的部分就好了,然后通過配置文件,獲取對應的類名,就可以了。

14、對匿名內部類的理解

匿名內部類其實是內部類的簡寫形式。

內部類是定義在類中的類,就好比我們人類,我們人類都有心臟,而心臟又有自己獨特組成,可以把心臟也抽象成一個類。

這個心臟類就是人類的內部類。如果要研究某一種心臟疾病,需要一個實例時,我們不需要知道這個患病的心臟到底是誰的,那找到的這個就是匿名的。

匿名內部類必須要繼承一個類或實現一個接口,在使用時直接父類或接口的名稱創建了一個子類對象并實現其中的方法,匿名內部類其實是一個匿名的子類對象。

15、IO體系

字節流InputStream/OutputStream

|--FileInputStream/FileOutputStream:文件字節流,用于文件的讀寫操作

|--BufferedInputStream/BufferedOutputStream:加緩沖區的字節流,用于提高效率

字符流Reader/Writer

|--FileReader/FileWriter:文件字符流,用于文本文件的讀寫操作

|--BufferedReader/BufferedWrite:加緩沖區的字符流,用于提高效率

轉換流InputStreamReader/OutputStreamWriter:是字節流和字符流之間的橋梁

配置文件Properties

16、集合體系

|--Collection

|--List:元素是有序的,元素允許重復,因為該集合體系都具有索引

|--ArrayList:底層數據結構是數組,查詢速度快,增刪操作較慢,線程不同步

|--LinkedList:底層數據結構是鏈表,查詢效率較低,增刪操作快,線程不同步

|--Vector:功能同ArrayList類似,底層也是數組,不同是線程是同步的,效率較低

|--Set:元素是無序的,元素不允許重復,底層用到了Map

|--HashSet:底層hash表,存儲的對象最好復寫hashCode和equals方法,保證元素不會重復

|--TreeSet:底層二叉樹,存儲的對象具備比較性,有兩種方法

|--Map:數據是以鍵值對的形式存儲的,有的元素存在映射關系就可以使用該集合,元素不允許重復

|--HashMap:允許有null鍵或值,線程不同步

|--TreeMap

|--HashTable:類似HashMap,不允許有null鍵或值,線程同步

17、線程的創建方式,進程線程的理解繼承Thread或實現Runnable

兩種:進程是一個執行中的程序,每一個程序都至少有一個執行順序,該順序是一個路徑,或者叫一個控制單元。

線程是進程中的一個獨立的控制單元,線程在控制著進程的執行。

18、局部變量和成員變量區別

成員變量:作用于整個類中,隨對象存儲在堆內存中,生命周期跟對象一樣

局部變量:作用于方法或語句中,方法或語句結束則生命周期結束,存放在棧內存中。

19、同步函數與同步代碼塊的區別

它們的作用都是封裝多條操作共享數據的語句,只能讓一個線程都執行完,在執行過程中,其他線程不可參與進來。

同步代碼塊:位置比較靈活,封裝了操作共享數據的語句,多個線程中只有持有鎖的才可以操作共享數據,需要指定一個對象作為鎖

同步方法:聲明方法時加synchronized關鍵字修飾,同步函數使用的鎖是this,持有鎖的線程調用這個方法時其他線程無法調用。

20、數組和集合的區別

數組可以存儲基本數據類型和對象,它是一個線性的序列,可以快速的訪問其中的元素。數組創建之后,容量就固定了,而且在其生命周期里是不能改變的

集合只用于存儲對象,集合的長度是可變的,集合可以存儲不同類型的對象。集合的長度并不是固定的,可以便捷的添加刪除。能夠更加便捷的操作元素,功能更加強大

21、StringBuffer和StringBuilder的區別

StringBuffer是線程安全的,StringBuilder是線程不安全的,所以效率比起來StringBuilder要比StringBuffer快。

一般單線程的程序使用StringBuilder比較好,多線程的情況下可以自己加鎖,也可以直接使用StringBuffer

22、String和StringBuffer區別

String對象一經創建就不會發生變化了,即便是賦新值也不是在原對象的基礎上改變,而是創建一個新的字符串對象,將引用指向這個新的對象,會造成空間的浪費,效率較低

StringBuffer只創建一個對象,是在同一個實例的基礎之上追加,效率更高,當需要用到String的時候toString就可以了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,717評論 18 399
  • 前言:最近感冒的不太想去面試,在家就對Java se的基礎做了一些小總結 1.JDK和JRE的區別 一 基礎知識 ...
    AntCode閱讀 1,137評論 0 1
  • 一:java概述:1,JDK:Java Development Kit,java的開發和運行環境,java的開發工...
    ZaneInTheSun閱讀 2,674評論 0 11
  • 生命里有很多事和人自己不曾遇見,五天四晚的三峽游輪之旅讓我感受到了生活的絢爛。 我們乘坐的“凱娜號”游輪是美國...
    飛馳的風閱讀 582評論 4 2
  • 有故事的背影 今天周五,馬上周末了上午路過通州西上園附近遇到這兩位女孩我問女孩兒能不能拍攝幾張背影并請她們伸出5跟...
    修車師傅老胡閱讀 270評論 0 0