Java基礎知識的小總結

一、  基本知識
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關鍵字,因爲靜態優先於對象存在,靜態只能覆蓋靜態。n
好處: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.爲什麼要有數據庫?常見的數據你知道哪些?
答:爲了永久存儲數據,並且能夠操作數據。
MySQL  SQL Server  Oracle


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.連接池?
答:數據庫連接的建立和關閉都是極其消耗資源的。數據庫連接池的解決方案是當應用程序啓動時,系統主動創建足夠的數據庫連接,並將這些連接組成一個連接池,每次使用的時候無序重新創建聯繫,直接從連接池中取出已有的連接使用,使用完後不再關閉數據庫連接,而是直接歸還到連接池。通過連接池,將極大的提高了程序的運行效率。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章