之前總結的面試題,一定要看完_第1頁
之前總結的面試題,一定要看完_第2頁
之前總結的面試題,一定要看完_第3頁
之前總結的面試題,一定要看完_第4頁
之前總結的面試題,一定要看完_第5頁
已閱讀5頁,還剩27頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、黑馬面試題1:定義map集合,并自定義對象,對map集合遍歷,打出key和value值2:定義一個類A,類中定義一個show方法,打印一句話,在定義一個TestA類,利用反射在TestA中創建A的對象,并調用show方法3:使用高效字符緩沖流復制文件4:把盤中的一個多層文件夾拷貝到D盤中。用高效的方法(要求寫思路,注釋,代碼)5:Integer泛型Map中存儲字符串6:開啟兩個線程每隔一段時間分別向一個共享數組中添加元素,每個線程添加3個即可。7:如何用反射去創建一個對象,有2種方式,盡量用代碼去體現8:編寫一個程序,把這個目錄里邊的所有的帶.java文件都拷貝到另一個目錄里邊,拷貝成功以后,

2、把后綴名是.java改成.txt9:創建多線程的方式有幾種?盡量用代碼去體現10:編寫程序,生成5個1至10之間的隨機整數,存入一個List集合,編寫方法對List集合進行排序(自定義排序算法,禁用Collections.sort方法和TreeSet),然后遍歷集合輸出11:23 9 -4 18 100 7" 要求對這串數字按照從小到大排序,生成一個數值有序的字符串。12: 編寫一個類,增加一個實例方法用于打印一條字符串。并使用反射手段創建該類的對象, 并調用該對象中的方法。13:編寫一個類A,增加一個實力方法showString,用于打印一條字符串,在編寫一個類TestA ,作為客

3、戶端,用鍵盤輸入一個字符串,改字符串就是類A的全名,使用反射機制創建該類的對象,并調用該對象中的方法showString14:寫一個線程類MyThread,該線程實現了Runnable接口,寫一個main方法,用for循環創建5個線程對象。需求如下: 利用線程類的構造函數輸出:"創建線程4"。(備注:當創建一個線程的時候,標記為1,再次創建一個線程的時候,標記為2,所以輸出的"創建線程4"就是創建的第四個線程) 在run方法中輸出:“線程X :計數Y”,當執行次數達到6次的時候,退出。(備注:其中“線程X”為第X個線程,“計數Y”為該線程的run方法執行

4、了多少次) 15: 求1000!的結果中包含多少個0?注:1000! = 1×2×3×4×5×.×999×100016:判斷101-200之間有多少個素數,并輸出所有素數。 程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數。17:遞歸刪除多級文件18:一道ArrayList集合創建添加元素并刪除abc24:取出一個字符串中字母出現的次數。如:字符串:"abcdekka27qoq" ,輸出格式為:a(2)b(1)k(2).19:有類似這樣的字符

5、串:“1.2,3.4,5.6,7.8,5.56,44.55”, 請按照要求,依次完成以下試題 以逗號作為分隔符,把已知的字符串分成一個String類型的數組, 數組中的每一個元素類似于“1.2","3.4"這樣的字符串; 把數組中的每一個元素以.作為分割,把.號左邊的元素作為key, 把.號右邊的元素作為value,封裝到Map中,map中的key和value都是Object類型; 把map中的key封裝到Set中,并且把set中的元素輸出; 把map中的value封裝到Collection中,把collection中的元素輸出。-考察知識篇-2:集合框架的概述、

6、arraylist的特點、map集合的特點、Collection集合下班有哪些類, 哪些類又有哪些特點、HashMap是Hashtable的區別?Collection: |-List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重復。 |-ArrayList:底層的數據結構是數組,線程不同步,ArrayList替代了Vector,查詢元素的速度非常快。 |-LinkedList:底層的數據結構是鏈表,線程不同步,增刪元素的速度非常快。 |-Vector:底層的數據結構就是數組,線程同步的,Vector無論查詢和增刪都巨慢。 |-Set:無序(存入和取出順序有可能不一致),

7、不可以存儲重復元素。必須保證元素唯一性。 |-HashSet:底層數據結構是哈希表,線程是不同步的。無序,高效; |-LinkedHashSet:有序,hashset的子類。 |-TreeSet:對Set集合中的元素的進行指定順序的排序。不同步。TreeSet底層的數據結構就是二叉樹。HashSet集合保證元素唯一性:通過元素的hashCode方法,和equals方法完成的。 當元素的hashCode值相同時,才繼續判斷元素的equals是否為true。 如果為true,那么視為相同元素,不存。如果為false,那么存儲。 先hashCode,再equals,從而提高對象比較的速度。對于Arr

8、ayList集合,判斷元素是否存在,或者刪元素底層依據都是equals方法。 對于HashSet集合,判斷元素是否存在,或者刪除元素,底層依據的是hashCode方法和equals方法。TreeSet集合排序有兩種方式,Comparable和Comparator區別: 1:讓元素自身具備比較性,需要元素對象實現Comparable接口,覆蓋compareTo方法。 2:讓集合自身具備比較性,需要定義一個實現了Comparator接口的比較器,并覆蓋compare方法,并將該類對象作為實際參數傳遞給TreeSet集合的構造函數。 第二種方式較為靈活。Map: |-Hashtable:底層是哈希表

9、數據結構,是線程同步的。不可以存儲null鍵,null值。 |-HashMap:底層是哈希表數據結構,是線程不同步的??梢源鎯ull鍵,null值。替代了Hashtable. |-TreeMap:底層是二叉樹結構,可以對map集合中的鍵進行指定順序的排序。想要獲取map中的所有元素: 原理:map中是沒有迭代器的,collection具備迭代器,只要將map集合轉成Set集合,可以使用迭代器了。之所以轉成set,是因為map集合具備著鍵的唯一性,其實set集合就來自于map,set集合底層其實用的就是map的方法。 把map集合轉成set的方法: Set keySet(); Set entr

10、ySet();/取的是鍵和值的映射關系。 Entry就是Map接口中的內部接口; 為什么要定義在map內部呢?entry是訪問鍵值關系的入口,是map的入口,訪問的是map中的鍵值對。-3:懶漢模式和餓漢模式的區別1、線程安全:餓漢式是線程安全的,可直接用于多線程,懶漢式是線程不安全的,用于多線程可能會被實例化多次,失去單例的作用。如果要把懶漢式用于多線程,一種是在getInstance方法上加同步,另一種是在使用該單例方法前后加雙鎖。2、資源加載:餓漢式在類創建的同時就實例化一個靜態對象出來,不管之后會不會使用這個單例,會占據一定的內存,相應的在調用時速度也會更快,而懶漢式顧名思義,會延遲加

11、載,在第一次使用該單例的時候才會實例化對象出來,第一次掉用時要初始化,如果要做的工作比較多,性能上會有些延遲。-4:進程和線程的關系,線程休眠的方法、Sleep和 wait方法有什么區別。同步與異步的區別、為什么wait(),notify(),notifyAll()等方法都定義在Object類中、因為這些方法的調用是依賴于鎖對象的,而同步代碼塊的鎖對象是任意鎖而Object代碼任意的對象,所以,定義在這里線程的生命周期:新建:創建線程對象就緒:有執行資格,沒有執行權。運行:有執行資格,有執行權阻塞:由于一些操作讓線程處于該狀態,沒有執行資格,沒有執行權而另一些操作卻可以把他激活,激活后處于就緒

12、狀態死亡:線程對象變成垃圾,等待回收進程:是正在運行的程序,是系統進行資源分配和調用的獨立單位每一個進程都有它自己的內存空間和系統資源線程:一個時間段執行多個任務是進程中的單個順序控制流,是一條執行路徑一個進程如果執行一條執行路徑,則稱為單線程程序如果執行多條執行路徑,則稱為多線程程序。線程依賴進程存在多線程不是提高程序執行速度,而是提高應用程序使用率程序的執行其實就是在搶CPU資源,CPU的執行權同步的原理:就是將部分操作功能數據的代碼進行加鎖。wait和sleep區別: 分析這兩個方法:從執行權和鎖上來分析: wait:可以指定時間也可以不指定時間。不指定時間,只能由對應的notify或n

13、otifyAll來喚醒。 sleep:必須指定時間,時間到自動從凍結狀態轉成運行狀態(臨時阻塞狀態)。 wait:線程會釋放執行權,而且線程會釋放鎖。 Sleep:線程會釋放執行權,但不是不釋放鎖。 說說對線程池的理解、run和start什么區別?程序啟動一個新線程成本比較高,因為涉及到要與操作系統進行交互,而使用線程池就可以很好的提高性能,尤其是當程序要創建大量生存期很短的線程是,更應使用線程池里的每一個線程代碼結束后,并不會死亡,而是再次回到線程池中成為空閑狀態,等待下一個對象來使用-5:匿名內部類理解匿名內部類其實就是一個匿名子類對象。想要定義匿名內部類:需要前提,內部類必須繼承一個類或

14、者實現接口。 匿名內部類的使用場景: 當函數的參數是接口類型引用時,如果接口中的方法不超過3個。可以通過匿名內部類來完成參數的傳遞。 其實就是在創建匿名內部類時,該類中的封裝的方法不要過多,最好兩個或者兩個以內。-6:抽象類的理解1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(可以描述類和方法,不可以描述變量)。 2:抽象方法只定義方法聲明,并不定義方法實現。 3:抽象類不可以被創建對象(實例化)。 4:只有通過子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后, 該子類才可以實例化。否則,該子類還是一個抽象類。 5: 抽象類只能單繼承。 -7:面向對象和面向過程

15、的區別,面向對象的三個特征: 封裝,繼承,多態封裝:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。將變化隔離;便于使用;提高重用性;安全性。封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問。 繼承:提高了代碼的復用性,讓類與類之間產生了關系,提供了另一個特征多態的前提。多 態:函數本身就具備多態性,某一種事物有不同的具體的體現。 父類引用或者接口的引用指向了自己的子類對象。/Animal a = new Cat(); 多態的好處:提高了程序的擴展性。 多態的弊端:當父類引用指向子類對象時,雖然提高了擴展性,但是只能訪問父類中具備的方法,不可以訪問子類中特有

16、的方法。(前期不能使用后期產生的功能,即訪問的局限性) 多態的前提: 1:必須要有關系,比如繼承、或者實現。 2:通常會有覆蓋操作。 -8:try.catch.finallytry后面+可能出現問題的代碼(里面代碼越少越好)可以一個try多個catch一旦try中出現問題,會拋出問題catch+捕獲異常名+異常處理(簡單提示),然后結束try繼續執行后面的語句在J7新特性中可以單個catch代碼塊捕獲多個異常(1,處理方式單一,符合開發要求2,多個異常必須平級關系)平級按先后順序,父類的異常要放到下面finally+設置代碼一定會運行的代碼RuntimeException及其子類,是運行時異常

17、。-9:對反射暴力反射的理解、反射的理解和應用、獲取字節碼的三種方式,以及主要用在什么什么地方、用反射創建對象的兩種方法?反射技術:其實就是動態加載一個指定的類,并獲取該類中的所有的內容。而且將字節碼文件封裝成對象,并將字節碼文件中的內容都封裝成對象,這樣便于操作這些成員。簡單說:反射技術可以對一個類進行解剖。 反射的好處:大大的增強了程序的擴展性。獲取這個Class對象,有三種方式: 1:通過每個對象都具備的方法getClass來獲取。弊端:必須要創建該類對象,才可以調用getClass方法。 2:每一個數據類型(基本數據類型和引用數據類型)都有一個靜態的屬性class。弊端:必須要先明確該

18、類。 前兩種方式不利于程序的擴展,因為都需要在程序使用具體的類來完成。 3:使用的Class類中的方法,靜態的forName方法。 指定什么類名,就獲取什么類字節碼文件對象,這種方式的擴展性最強,只要將類名的字符串傳入即可。 創建對象的兩種方式(其實就是對象在進行實例化時的初始化方式): 1,調用空參數的構造函數:使用了Class類中的newInstance()方法。 2,調用帶參數的構造函數:先要獲取指定參數列表的構造函數對象,然后通過該構造函數的對象的newInstance(實際參數) 進行對象的初始化。 / 私有方法不能直接訪問,因為權限不夠。非要訪問,可以通過暴力的方式。 method

19、.setAccessible(true);/一般很少用,因為私有就是隱藏起來,所以盡量不要訪問。 -10:什么是數組、數組和集合的區別、Collection 和 collections的區別、List和Set有什么區別、TreeSet怎樣保證元素的唯一性、迭代器的特點。Collection 和 Collections的區別: Collections是個java.util下的類,是針對集合類的一個工具類,提供一系列靜態方法,實現對集合的查找、排序、替換、線程安全化(將非同步的集合轉換成同步的)等操作。 Collection是個java.util下的接口,它是各種集合結構的父接口,繼承于它的接口主

20、要有Set和List,提供了關于集合的一些操作,如插入、刪除、判斷一個元素是否其成員、遍歷等。 -11:面向對象編程思想-12:訪問控制符公開:public 同類 同包 子類 不同包 所以人都可訪問默認:defualt 只向同包同類放開 同一個包中都能訪問私有:private 只有當前類可以訪問保護:protected 同包都能訪問,不同包的子類可以訪問-13:接口能繼承類嗎?接口和抽象類、說說接口和抽象類的特征和區別成員區別:抽象類 可以有變量,常量,有抽象方法和非抽象方法接口:只能是常量,和抽象方法關系的區別:類與類:單繼承,可以多層繼承類與接口:單實現或者多實現接口與接口:繼承關系,可以

21、多繼承設計理念的區別:抽象類被繼承體現的是"is a "的關系,是共性關系接口被實現體現的是“like a”的關系,擴展功能-14:介紹一下io、IO流的體系和理解、如何使用字節流的?什么時候會用到轉換流呢?IO流的flush和close方法的作用和區別、請說明字符流和字節流的區別在哪兒?readLine實現的機制是什么? bufw.flush();/僅對緩沖區進行刷新,可以讓數據到目的地中。刷新之后流對象還可以繼續使用。bufw.close();/關閉流對象,但是先刷新一次緩沖區,關閉之后流對象不能再使用1.讓流變成垃圾這樣就可以被系統回收2.通知系統去釋放該文件相關的資

22、源flush()是刷新流,把流中數據存進目標,close()是關閉流資源 /readLine底層原理還是read方法,先讀取字符將字符存入一個字符數組,讀取到換行標志:換行“n”,回車“r”或者回車后直接換行,就將字符數組轉成字符串返回包含改行內容的字符串,不包含任何終止符,如果已達到末尾,返回null字符流=字節流+編碼表-17:線程通信的理解、線程的狀態、為什么會有多線程的安全問題、多線程安全問題的解決辦法、創建線程有幾種方式,那種方式比較好,為什么、同步的前提、說說你對死鎖的理解同步的前提:必須是多線程。操作一個共享數據,該數據被多條語句操作同步:效率低,如果出現嵌套同步,就容易產生死鎖

23、死鎖:指倆個或者以上的線程在執行過程中,因為爭奪資源產生的一種互相等待現象run:僅僅是封裝了被線程執行的代碼,直接調用的普通方法,start:首先啟動了線程,然后由jvm去調用該線程的run()方法線程狀態: 新建:start() 運行:具備執行資格,同時具備執行權; 凍結:sleep(time),wait()notify()喚醒;線程釋放了執行權,同時釋放執行資格; 臨時阻塞狀態:線程具備cpu的執行資格,沒有cpu的執行權; 消亡:stop() 創建線程的第一種方式:繼承Thread ,由子類復寫run方法。第二種方式:實現一個接口Runnable 步驟: 1,定義類實現Runnable

24、接口。 2,覆蓋接口中的run方法(用于封裝線程要運行的代碼)。 3,通過Thread類創建線程對象; 4,將實現了Runnable接口的子類對象作為實際參數傳遞給Thread類中的構造函數。 為什么要傳遞呢?因為要讓線程對象明確要運行的run方法所屬的對象。 5,調用Thread對象的start方法。開啟線程,并運行Runnable接口子類中的run方法。 Ticket t = new Ticket(); 實現接口的好處:避免了java單繼承帶來的局限性,適合多個相同的代碼去處理同一個資源,把線程和程序代碼,數據有效分離,較好的體現了面向對象的設計思想。安全問題產生原因:多個線程操作一個擁有

25、多條語句的共享數據,產生數據混亂解決:加上同步 -18:StringBuffer和StringBuilder的區別StringBuilder和String對象都可以很方便的處理字符串,他們具備各自的特點,如下:String具有以下五個特點:1.String是引用類型,在堆上分配內存。2.String對象一旦生成,就不可改變(Immutable)。3.String提供了大量便捷的字符串操作函數。4.String運算時會產生一個新的實例。5.在程序中定義相等運算符(=)和(!=),可以方便比較String對象的值(而不是引用)。StringBuilder具有以下兩個特點:StringBuilder

26、對象是動態對象,允許擴充它所封裝的字符串中的字符數量。StringBuilder可以用于修改StringBuilder中的內容。由于String對象一旦聲稱,就不可改變,所以每次使用System.String類中的方法時,都需要在內存中創建一個新的字符串對象,這會分配新的空間給新的對象。如果對字符串執行重復修改,創建一個新的String對象導致 的系統開銷可能會非常昂貴。如果不創建新的對象,只是修改字符竄,則可以使用StringBuilder類。StringBuilder類型可以很好的解決字符串操作的性能問題,在它聲稱String對象之前,將不會產生任何String對象。StringBuffe

27、r是同步的,線程安全的StringBuilder是不同步的,線程非安全的,執行速度快-20:If 和 switch有什么區別,以及在什么時候使用Switch if:能判斷具體的值,區間和boolean類型表達式,switch:只能對具體的值進行判斷,值的個數是確定的,byte,short,int,char。if判斷是遍歷性的,代碼執行效率是不高的。而switch.case會生成一個跳轉表來指示實際的case分支的地址,而這個跳轉表的索引號與switch變量的值是相等的。在確切知道條件結果,并且結果有限下的條件下可以使用switch,如枚舉在不能確切表示結果的情況下,或者處理復雜的邏輯關系最好用

28、if.else,在使用switch時候一定要注意break的使用。switch語句特點: 1、switch語句選擇的類型只有四種:byte,short,int,char。 2、case與default沒有順序。先執行第一個case,沒有匹配的case執行default。 3、結束switch語句的兩種情況:遇到break,執行到switch語句結束。 4、如果匹配的case或者default沒有對應的break,那么程序會繼續向下執行,運行可以執行的語句,直到遇到break或者switch結尾結束。 5、進入switch語句后,執行順序是先執行case,然后從上到下,最后再執行default。

29、即使default放在case上面,執行順序也不變。-21:內省的作用InstroSpector->JavaBean->特殊的Java類內省(Introspector)是Java 語言對Bean類屬性、事件的一種缺省處理方法。例如類 A 中有屬性 name, 那我們可以通過 getName,setName 來得到其值或者設置新的值。通過 getName/setName 來訪問 name 屬性,這就是默認的規則。-22:講一講異常體系以及異常的處理原則。異常和錯誤的不同?final、finally、finanlize()的區別、編程中遇到過異常嗎,都遇到了哪些異常,請你簡述一下你遇到

30、的異常以及解決方案。throw和throws的區別throwable類中主要有Exception和error兩大子類,erro是不可處理的嚴重異常Exception中RuntimeException是運行異常,如角標越界,空指針異常是代碼出問題必須進行處理,否則運行出錯另一類是編譯異常,編譯時eclipse會提醒捕獲或者拋出final是修飾符,被final聲明的變量是常量,不能修改只能讀取,修飾方法不能被繼承finally異常處理時提供 finally 塊來執行任何清除操作,如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(一定會執行的語句)。 f

31、inalize是方法名,finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作在Object中定義,子類覆蓋他可以整理系統資源和其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。throw和throws的區別:throws針對那些沒有權限處理的異常進行拋出,在方法和類上拋出的是異常類名,可拋多個throw 是在方法內拋出的異常對象-23:readLine 是字節流的方法嗎?readLine方法是字符流BufferedReader類中的方法read方法是字節流InputStream的方法。-24:說一下拷貝一個MP3從C盤到D盤的思路-

32、25:什么情況下要用flush();flush刷新就是把緩沖區字符全部寫入到目的地中去,write和bufferedwritewrite只是將數據輸出到緩沖區,還沒有輸出到目的地。對于循環多次字符輸出流需要刷新。因為close()就是關閉流之前刷新流。只有write和bufferedwrite需要, 因為操作的文件大于1k,需要循環幾次才能寫入完畢,所以需要每次循環最后刷新一下。當循環一次就足夠時,只在最后需要close(),關閉留并且刷新。-26:成員變量局部變量以及靜態變量的區別?成員變量是作用于整個類的,成員變量有默認初始化值,只能被對象調用對象的建立而建立,存在于對象所在的堆內存中,隨

33、著對象的消失而消失局部變量只定義在局部范圍內,如:函數內,語句內等,只在所屬的區域有效,存在與棧內存中,作用的范圍結束,變量空間會自動釋放局部變量沒有默認初始化值,先定義,賦值后才能被使用在使用變量時需要遵循的原則為:就近原則 首先在局部范圍找,有就使用;接著在成員位置找靜態變量 靜態變量隨著類的加載而存在,隨著類的消失而消失,存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據??梢员粚ο笳{用,還可以被類名調用。成員變量也稱為實例變量。 靜態變量也稱為類變量。-27:裝飾設計模式和繼承有什么區別?什么是裝飾設計模式:當想要對已有的對象進行功能增強時,可以定義類,將已有對象傳入,基于已有

34、的功能,并提供加強功能。那么自定義的該類稱為裝飾類。裝飾類通常會通過構造方法接收被裝飾的對象。并基于被裝飾的對象的功能,提供更強的功能。/窮的時候吃飯簡簡單單的吃飯 class Personpublic void chiFan()System.out.println("吃飯");/富裕后吃飯 吃飯前來杯酒吃飯后來根煙 但是這中間的過程還是有吃飯class SuperPersonprivate Person p;public SuperPerson(Person p)this.p=p;public void superChiFan()/吃飯前來杯開胃酒增加食量System.o

35、ut.println("開胃酒");p.chiFan();/吃完飯后來根煙System.out.println("來根煙");public class PersonDemopublic static void main(String args)Person p=new Person();SuperPerson sp= new SuperPerson(p);sp.superChiFan();裝飾是構造函數參數傳遞進行增強如果為了某個功能而產生子類(繼承)那么那個體系是非常臃腫的裝飾模式比繼承要靈活。避免了繼承體系臃腫。而且降低了類于類之間的關系。裝飾類因為

36、增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。所以裝飾類和被裝飾類通常是都屬于一個體系中的。-28:代理是什么?動態代理的介紹。如何創建動態代理?你對動態代理和靜態代理的理解? 動態代理:本來應該自己做的事情,卻請了別人來做,被請的人就是代理對象。動態代理:在程序運行的過程中產生這個對象。*:而程序運行過程中產生對象其實就是反射,所以動態代理其實就是通過反射生成一個代理Proxy類中有一個方法可以創建動態代理對象,newProxyInstance(ClassLoader loader, Class<?> interfaces, InvocationHandler

37、h) 返回一個指定接口的代理類實例,該接口可以將方法調用指派到指定的調用處理程序。定義一個MyInvocationHandler實現InvocationHandler接口 靜態代理通常只代理一個類,動態代理是代理一個接口下的多個實現類。 靜態代理事先知道要代理的是什么,而動態代理不知道要代理什么東西,只有在運行時才知道。 動態代理是實現JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的業務類必須要實現接口,通過Proxy里的newProxyInstance得到代理對象。 還有一種動態代理CGLIB,代理的是類,不需要業務類繼承接口,通過派生的

38、子類來實現代理。通過在運行時,動態修改字節碼達到修改類的目的。-30:類加載器的使用、三大類加載器、委托機制的理解、動態代理反射有什么關系、加載器和反射什么關系類加載器:負責將.class文件加載到內存中,并為之生成對應的Class對象類加載器的組成:Bootstrap ClassLoader 根類加載器也稱為引導類加載器,負責Java核心類的加載,比如System,String等,在JDK中JRE的lib目錄下rt.jar文件Extension ClassLoader 擴展類加載器負責JRE的擴展目錄下中jar包的加載在JDK中JRE的lib目錄下ext目錄System ClassLoade

39、r 系統類加載器負責在JVM啟動時加載來自java命令的class文件,以及classpath環境變量所指定的jar包和類路徑。反射:Java反射機制是在運行狀態中,對于任意一個類,都能知道這個類的所以屬性和方法:對于一個對象都能調用他的任意屬性和方法,這種動態獲取信息以及動態調用對象的方法的功能成為java語言的反射機智。-32:銀行系統哪里用到了單例,問銀行卡上有賬號是不是單例-33:在枚舉種,可以使用抽象方法么?枚舉能繼承類嗎?說說枚舉和單利設計模式的區別、枚舉是否可以繼承類單例模式中是一個類只有一個實例,枚舉是一個類有多個實例,但不是無限個,而是有限個實例可以使用抽象方法,要定義為抽象

40、類,在創建實例時加入匿名內部類,不能,通過JDK5提供的枚舉來做枚舉lei,所有枚舉類都是Enum的子類可以實現接口,但不能繼承類,因為所有枚舉類都繼承自java.lang.Enum(由編譯器添加),同時java不支持多繼承。枚舉類的第一行上必須是枚舉項,最后一行枚舉項后面的分號 可以省略的,但是如果枚舉類有其他東西,這個分號就不能勝率。建議不要省略。枚舉類可以有構造器,但必須是private的,它默認的也是private的。枚舉類也可以有構造方法,但是枚舉項必須重寫該方法.-34:你還知道其他的設計模式么?分別介紹一下 -35:java的特點是什么? Java語言特點:1.可以跨平臺上運行,

41、只要這個平臺有JAVA虛擬機。2.面向對象編程面向對象編程的好處就是能夠在語言級別模擬現實世界的場景,簡化開發。3.簡單易用、安全可靠、使用率排第一4.java語言在一定程度上能夠稱為動態語言,由于反射機制,讓java能夠在運行時再獲取相應類型信息,大大減少開發的代碼量的同時。-37:staitc代碼塊、構造代碼塊、構造函數的作用與執行順序(還問了static代碼塊的使用與作用)、構造函數與一般函數的區別,靜態代碼塊特點-38:為什么內部類在局部位置上只能訪問局部中被final修飾的局部變量局部變量必需被final修飾,即聲明為最終類型。因為內部類的生命周期要比局部變量的時間長,局部變量時在棧

42、里面,隨著方法調用完畢而消失,內部類存儲在堆內存中,只有當對該類的引用消失時,內部類才會被系統垃圾處理器回收,也就是說內部類可能會調用到已經消失的屬性,因此內部類不能訪問方法中的局部變量。為了讓數據能繼續使用,就用final修飾,此時局部變量常駐在內存中直到 JVM退出,便能被內部類訪問。-39:重載與重寫區別方法重寫:在子類中,出現和父類一模一樣的方法聲明的現象方法重載:同一個類中,出現方法名相同,參數列表不同的現象方法重載能改變返回值類型,因為它和返回值類型無關Override:方法重載Overrload:方法重寫-40:|、&與|、&&的區別-41:接口能繼承類嗎

43、?能-43:int和Integer的不同;一個是基本數據類型一個是引用數據類型Integer i5 = 127;/java在編譯的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);兩個都是非new出來的Integer,如果數在-128到127之間,則是true,否則為falsejava在編譯Integer i2 = 128的時候,被翻譯成-> Integer i2 = Integer.valueOf(128);而valueOf()函數會對-128到127之間的數進行緩存int 是基本數據類型Integer是其包裝類-44:同步代碼塊和同步修飾符

44、有什么不同同步代碼快是要被同步的代碼同步修飾符是放在函數名或者方法上的synchronized 修飾的方法表示同一時間只能有一個線程進入到這個方法的方法塊里面其他的線程需要等待直到占用的那個線程離開這個方法-45:函數特點類名首字母大寫,具有封裝性,復用性,提高安全性,可以簡化代碼-46:數組排序有幾種-48:存儲了一個相同的鍵,大家都知道常用的map是不能存儲相同的鍵,我是想繼承hashMap改寫put的方法,無奈功底不夠,最后是找到了map中的子類 IdentityHashMap<K,V>可以存儲相同鍵。-49:名詞提煉法恰是就是提取對象的共性內容,描述就是對具體對象的抽象-52:什么時候定義靜態變量呢需要共享數據的時候-54:JDK1.5的新特性有哪些增強for循環: 高級for循環和傳統for循環的區別: 高級for循環在使用時,必須要明確被遍歷的目標。這個目標,可以是Collection集合或者數組,如果遍歷Collection集合,在遍歷過程中還需要對元素進行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論