




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、有關Java的一般問題1. 什么是JVM?為什么稱Java為跨平臺的編程語言?Java虛擬機(Java Virtual Machine)是可以執行Java字節碼的虛擬機,每個Java源文件將被編譯成字節碼文件,然后在JVM中執行。Java之所以被設計成可以在任意的平臺運行,而不需要重寫或者在不同的平臺下重新編譯,這些都要歸功于Java虛擬機(JVM),因為JVM非常了解特定的指令的長度以及底層硬件平臺的特殊性。2. JDK和JRE之間的差異是什么?Java運行環境(Java Runtime Enviroment) 是運行Java程序的基本的Java虛擬機,包括執行applet的瀏覽器插件。JD
2、K (Java Development Kit) 是為了開發,編譯和執行Java應用程序,針對Java的全功能的軟件開發包,包含了JRE,編譯器和工具(比如說 JavaDoc和Java Debugger)。3. “static” 關鍵字是什么意思?在Java里可以 override private 或 static 的方法嗎? keyword mean ? Can you override private or static method in Java ?static 關鍵字表示,訪問這個成員變量或方法時,不必獲取它屬于的類的實例。Java 里的 static 方法不能被 override,
3、因為 override 的機制是運行時(runtime)的動態綁定,而 static 方法是在編譯時靜態綁定的。static 方法并不與任何類的具體實例有關,因此無法應用繼承的概念。4. 在靜態方法里可以訪問非靜態變量嗎?Java中的 static 變量歸相應的類所有,它的值對于類的所有實例都是相同的。static 變量是在 JVM 加載類的時候初始化的。如果代碼試圖訪問非靜態的變量,而且不是通過類的實例去訪問,編譯器會報錯,因為這些非靜態變量還沒有被創建呢,并且它們沒有與實例相關聯。 頂5. Java 支持哪些數據類型?什么是 Autoboxing 和 Unboxing?Java語言支持的8
4、個基本數據類型如下: byte short int long float double boolean charAutoboxing 是指在基本數據類型和對應的包裝(wrapper)類之間Java 編譯器所做的自動轉換。例如,編譯器將 int 轉換為Integer,將double 轉換為Double,等等。逆向的轉換稱為 unboxing。6. 在Java中什么是方法的Override(覆蓋) 和 Overload(重載)?Java中方法的 overload 發生的條件是,同一個類里,有兩個或以上的方法名稱完全相同,但參數列表不同。另一方面,方法的 override 是指,子類重定義了父類里的
5、同一個方法。Override 的方法必須方法名、參數列表和返回類型都完全相同。Override 的方法不會限制原方法的訪問權限。7.Java中構造函數、構造函數重載的概念和拷貝構造函數當類的對象被創建的時候,調用它的構造函數。每個類都有一個構造函數。如果程序員沒有為類編寫構造函數,Java編譯器自動為類創建一個缺省的構造函數。構造函數重載和Java中函數重載類似,可以為同一個類創建不同的構造函數,每個構造函數必須擁有唯一的參數列表。Java與C+不同,它不支持拷貝構造函數,但是區別僅僅是,如果你沒有編寫類的拷貝構造函數,Java不會自動創建它。8.Java支持多繼承嗎?Java不支持多繼承,每
6、個類只允許繼承一個類,但是可以實現多個接口。9.接口和抽象類有什么不同?Java同時提供和支持抽象類和接口,它們的實現有一些共同的特點,也有如下不同: 接口中所有的方法默認都是抽象的,而抽象類可以同時包含抽象和非抽象的方法。 一個類可以實現多個接口,但它只能繼承一個抽象類。 一個類要實現某個接口,必須實現這個接口聲明的所有方法。而一個類不需要實現抽象父類中聲明的所有方法,不過,這時候這個類也必須聲明為抽象類。 抽象類可以實現接口,而且不需要實現接口中的方法。 接口中聲明的變量默認是final的,而抽象類可以包含非final的變量。 接口中的成員默認是public的,而抽象類的成員可以是priv
7、ate,protected,或public的。 接口是絕對抽象的,不可實例化,抽象類也不可以實例化,但可以在main方法中觸發實例化(注:通過匿名類實現)。也可以查閱Abstract class and Interface differences for JDK 8。10.傳引用和傳值當對象通過傳值調用時,傳遞的是這個對象的一個拷貝。因此,即使函數修改這個對象,也不會影響原對象的值。當對象通過傳引用調用時,對象本身沒有被傳遞,而傳遞的是對象的一個引用。因此,外部函數對這個對象的修改,也會反映到任何出現這個對象的地方。 Java 線程11. 進程與線程的區別 ?進程是一個程序的執行(即正在運行的
8、程序), 然而線程是在進程中獨立的執行序列. 一個進程可以包含很多線程. 線程有時被稱為輕量級的進程.12. 說下創建線程的不同方式. 你傾向于哪種方式并說明原因 ?有三種創建線程的方式: 繼承Thread類. 實現Runnable接口. 通過Executor框架創建線程池.首選方式是實現Runnable接口, 因為它不需要繼承Thread類. 當你的程序設計需要多繼承時, 使用接口會有所幫助. 另外, 線程池效率是很高的, 并且實施起來也很簡單.13. 解釋下可用的線程狀態.在執行期間, 線程會處于以下狀態中的一種: Runnable: 線程已準備就緒, 但沒有立即運行. Running:
9、處理器正在執行的線程代碼. Waiting: 處于阻塞狀態的線程, 等待外部某種處理的結束. Sleeping: 被強制休眠的線程. Blocked on I/O: 等待I/O操作的完成. Blocked on Synchronization: 等待取得線程鎖. Dead: 線程已經執行結束.14. 同步方法與同步塊的區別 ?在Java程序中, 每個對象都擁有一個鎖. 線程可以通過使用synchronized關鍵字來獲取一個對象上的鎖. synchronized關鍵字可以用于方法級別(粗粒度鎖)或代碼塊級別(細粒度鎖).15. 在監視器中的線程同步是怎樣發生的? 你可以使用哪些級別的同步 ?J
10、VM使用結合了監視器的鎖. 監視器是一個守護者, 它看管一個同步代碼的序列, 并且確保在一個時刻只能有一個線程執行同步代碼片段. 每個監視器關聯著一個對象引用. 只能得到鎖的線程才可以執行同步代碼.16. 什么是死鎖 ?當兩個進程相互等待對方執行完畢時, 其結果是它們會永遠等待下去.17. 怎樣確保N個線程訪問N個資源時不會發生死鎖 ?使用N個線程時一個非常簡單的避免死鎖的方法是為所有的鎖排序, 并強制每個線程也按那種方式排序. 這樣, 如果所有線程以相同的順序鎖定和解鎖互斥資源就不會發生死鎖了.Java Collections18. Java Collections框架的基本接口 ?Java
11、 Collections 框架提供了一系列支持對象集合操作的設計良好的接口和類. Java Collections框架中最基礎的接口是: Collection, 表示一組對象(元素). Set, 包含非重復元素的集合. List, 包含非重復元素的有序集合. Map, 包含非重復鍵的鍵值對的對象.19. 為什么Collection沒有繼承Cloneable和Serializable接口 ?Collection接口描述的是由元素組成的對象組. Collection的每一個具體實現可以選擇自己的方式來管理元素. 一些集合允許存在重復鍵, 另一些則不允許.當處理實際實現時復制和序列化的語義和效果才會
12、起作用. 因此, 集合類的具體實現應該決定它們將怎樣被復制和序列化.20. 什么是Iterator(疊代器) ?Iterator接口提供了許多能夠疊代集合的方法.每個java集合(Collection)都含有一個返回Iterator實例的iterator方法. 疊代器在疊代過程中能夠移除底層集合中的元素.21. Iterator 和ListIterator之間的不同 ?它們之間的不同如下: Iterator能夠遍歷Set和List集合, 而ListIterator只能用來遍歷List. Iterator只能正向遍歷集合, 而ListIterator可以雙向遍歷List. ListIterato
13、r實現了Iterator接口并提供了額外的功能, 例如添加元素, 替換元素, 取得上一個或上一個元素索引, 等等.22. fail-fast與fail-safe的區別?Iterator的fail_safe特性是對底層集合的拷貝進行操作, 因此對集合的任何改變都不會有影響. java.util包下的所有集合類是fail-fast的, 但java.util.concurrent包下的集合類是fail-safe的. fail-fast疊代器會拋出ConcurrentModificationException, 而fail-safe疊代器不會拋出這種異常.23. Java中的 HashMap 是怎么工
14、作的?Java 中的 HashMap 是用來存儲鍵值對的。HashMap需要一個 hash 函數,它使用hashCode和equals 方法,來進行 collection 中元素的保存和查找。調用 put 方法時,HashMap會計算鍵(key)的 hash 值,然后將鍵值對存到 collection 的適當索引下。如果鍵已經存在,那么相應的值會更新。HashMap的重要特征主要有它的容量,裝載因子(load factor)和容量擴充(threshold resizing)。24. hashCode() 和 equals() 方法重要性何在 ?Java中的HashMap使用hashCode和e
15、quals方法來確定鍵值對的索引。根據鍵去查詢對應的值時,同樣會用到這兩個方法。如果這兩個方法沒有正確實現,兩個不同的鍵可能會產生相同的 hash 值,因此會被 collection 認為是相同的。并且,這兩個方法在檢測重復時也會用到。因此,這兩個方法都要正確實現,對HashMap的正確性和效率都至關重要。25.HashMap與HashTable之間有哪些不同?HashMap、HashTable這兩個類都實現了Map接口,因此有些非常相似的特征,但他們在以下特性中又有所不同: HashMap的key與value都允許null值的存在,而HashTable則既不允許key為null,也不允許va
16、lue為null。 HashTable是線程同步的,而HashMap則不是。因此,在單線程環境下HashMap是首選,而HashTable更適合在多線程環境下使用。 HashMap提供了它鍵的set集合,因此Java程序可以通過set進行迭代。因此,HashMap是快速失敗的。另一方面,HashTable提供了它鍵的枚舉。 HashTable類被當做遺留類(譯者注:Java遺留類說明)26.Array與ArrayList間有什么不同?與ArrayList相比你什么時候會用Array?Array與ArrayList類在以下特性中有所區別: Arrays可以包含基礎數據類型或者對象,而ArrayL
17、ist只能包含對象。 Arrays有固定長度,而ArrayList長度則是動態的。 ArrayList類提供了更多的方法和特性,比如addAll,removeAll,iterator,等等 對于一個基礎數據類型的list,集合框架使用了自動裝箱去減少編碼的工作。但針對固定長度的的基礎數據類型,這種方法會使得它們變得更慢。27.ArrayList與LinkedList間有什么不同?ArrayList、LinkedList這兩個類都實現了List接口,但他們以下特性中又有所不同: ArrayList是基于索引的數據結構,底層由Array支持實現。它提供了以時間復雜度為O(1)的性能隨機訪問它的元素
18、,另一方面,LinkedList以元素列表的方式來存儲它的數據,每一個元素與它前一個和后一個元素都是相連的。對元素查詢操作的時間復雜度為O(n). 對元素的插入、添加、移除操作,與ArrayList相比,LinkedList更快,因為,當一個元素被添加到集合內部的任意位置時,LinkedList不需要重新調整數組大小或者更新索引。 LinkedList比ArrayList消耗更多的內存,因為LinkedList中每一個節點都存儲了兩個引用,一個是它前一個元素,一個是它后一個元素也可以查看我們的文章ArrayList vs. LinkedList28. Comparable 和 Comparat
19、or 接口分別是什么 ? 列出它們的區別。Java 提供的Comparable接口,其中只包含一個方法,就是compareTo。這個方法會比較兩個對象,從而得出它們的順序關系。具體來說,它會返回一個負整數,零,或一個正整數,分別表示傳入的對象小于,等于或大于已有的對象。Java 提供的Comparator接口,包含兩個方法,compare和pare 方法比較兩個參數,得出它們的順序關系。它會返回一個負整數,零,或一個正整數,分別表示第一個參數小于,等于或大于已有的對象。equals 方法有1個參數,它用來確定參數對象是否等于這個 camparator。這個方法僅在要比較的對
20、象也是一個 comparator,同時它的序關系與這個 comparator 相同時,才會返回 true。29.Java Priority Queue是什么?PriorityQueue是一個基于優先級堆的無界隊列,它的元素都以他們的自然順序有序排列。在它創建的時候,我們可以可以提供一個比較器(Comparator)來負責PriorityQueue中元素的排序。PriorityQueue不允許null元素,不允許不提供自然排序的對象,也不允許沒有任何關聯Comparator的對象。最后,PriorityQueue不是線程安全的,在執行入隊和出隊操作它需要O(log(n)的時間復雜度。30. 關于
21、Big-O符號你了解些什么?你能針對不同數據結構舉些例子嗎?Big-O符號簡單描述了,在一種數據結構中隨著元素的不斷增加,在最壞的情況下,一個算法的擴展或者執行能有多好。Big-O符號還可以用來描述其他的行為,比如內存消耗。由于collection集合下的類實際上都是數據結構,我們通常用Big-O符號來選擇基于時間、內存、性能前提下的最好實現去使用。Big-O符號能就大量數據的性能給出一個很好的指示。31. 如何權衡有序數組和無序數組 ?有序數組最關鍵的優勢在于搜索的時間復雜度為 O(log n),而無序數組的時間復雜度是 O (n)。有序數組的劣勢就在于插入操作的時間復雜度為 O(n),因為
22、較高值的元素需要挪動位置騰出空間給新元素。與之不同的是,無序數組的插入操作的時間復雜度為 O(1)。32. 有哪些關于 Java 集合框架的最佳實踐? 基于應用的需求來選擇使用正確類型的集合,這對性能來說是非常重要的。例如,如果元素的大小是固定的,并且知道優先級,我們將會使用一個Array,而不是ArrayList。 一些集合類允許我們指定他們的初始容量。因此,如果我們知道存儲數據的大概數值,就可以避免重散列或者大小的調整。 總是使用泛型來保證類型安全,可靠性和健壯性。同時,使用泛型還可以避免運行時的ClassCastException。 在 Map 中使用 Java Development
23、Kit (JDK) 提供的不可變類作為一個 key,這樣可以避免hashCode的實現和我們自定義類的 equals 方法。 應該依照接口而不是實現來編程。 返回零長度的集合或者數組,而不是返回一個 null ,這樣可以防止底層集合是空的。33. Enumeration 和 Iterator 接口有什么不同 ?Enumeration跟 Iterator 相比較快兩倍,而且占用更少的內存。但是,Iterator相對于 Enumeration 更安全,因為其他線程不能修改當前迭代器遍歷的集合對象。同時,Iterators 允許調用者從底層集合中移除元素,這些 Enumerations 都沒法完成。
24、34. HashSet 和TreeSet 有什么不同?HashSet是用一個 hash 表來實現的,因此,它的元素是無序的。添加,刪除和 HashSet 包括的方法的持續時間復雜度是 O(1)。另一個方面,TreeSet 是用一個樹形結構實現的,因此,它是有序的。添加,刪除和 TreeSet 包含的方法的持續時間復雜度是 O(logn)。垃圾回收器35. Java中垃圾回收的目的是什么, 它什么時候被使用 ?垃圾回收用于識別和丟棄程序不再需要的對象, 以便回收和復用資源.36. System.gc() 和Runtime.gc()方法用途?這些方法用于提醒JVM開始垃圾回收. 然而開始垃圾回收的
25、時機是由JVM決定的.37. finalize()什么時候被調用 ? 它的目的是什么 ?finallize方法是在釋放該對象內存前由gc(垃圾回收器)調用. 通常建議在這個方法中釋放該對象持有的資源.38.如果一個對象的引用被設置為null, gc會立即釋放該對象的內存么?不會, 這個對象將會在下一次gc循環中被回收.39. Java堆的結構是什么 ? 堆中的Perm Gen(全稱是Permanent Generation)空間是什么 ?JVM有一個運行時數據區,即堆(heap).所有的類實例和數組的內存都是從堆中分配的. 它在JVM啟動時被創建. 對象所占用的堆內存會被一個稱為垃圾回收器的自
26、動內存管理系統收回.堆內存中包含活的和死的對象. 活的對象可以被程序訪問并且不會被垃圾回收. 死的對象是那些不會被程序訪問的, 但還沒有被垃圾回收器收回的對象. 這種對象會占用堆內存空間直到最終被垃圾回收器收回.40. Serial 垃圾回收器與 Throughput 垃圾回收器區別 ?Throughput垃圾回收器使用并行版本的新生代回收器, 它用于中到大型數據集的應用. 另一方面, Serial回收器通常足以應對大多數的小應用(在現代處理器上不會超過約100MB的堆內存).41. 什么時候對象會被回收 ?當當前程序無法訪問到某個對象時,該對象將被回收.42. 垃圾回收發生在指定的JVM區域
27、 ?垃圾回收在 PermGen 里發生。如果 PermGen滿了或是到了瓶頸,就會觸發完全回收。如果仔細 觀察垃圾回收過程,會發現PermGen最后也被回收了. 這就是為什么要設置合理的PermGen大小以避免完全垃圾回收. 可以看看這篇文章Java 8: PermGen to Metaspace.異常處理43. Java中的兩種異常是什么?它們之間的區別?Java有兩種類型的異常:checked與unchecked(檢查與未檢查) 異常. 如果unchecked異??赡軙诜椒ɑ驑嬙旌瘮档膱绦袝r被拋出從而蔓延到方法或構造函數的外部, 它們也不需要要在方法或構造函數中聲明throws子句. 然
28、而, checked異常必須通過方法或構造函數的throws子句聲明. 關于java異常處理的建議請參考這里Java exception handling.44. Java中異常與錯誤的區別?Exception和Error都是Throwable類的子類.Exception用于用戶程序需要捕獲的異常條件.Error定義了用戶程序不可預見的異常45. throw與throws的區別 ?關鍵字throw用于在程序中顯式地拋出一個異常. 相反, throws子句用于指出在該方法中沒有處理的異常. 每個方法必須顯式指明哪些異常沒有處理, 以便該方法的調用者可以預防可能發生的異常. 最后, 多個異常用逗號
29、分隔.45. 異常處理中finally語句塊的重要性?不管程序是否發生了異常, finally語句塊都會被執行. 甚至當沒有catch聲明但拋出了一個異常時, finally語句塊也會被執行. 最后要說一點: finally語句塊通常用于釋放資源, 如I/O緩沖區, 數據庫連接等等.46. 異常被處理后異常對象會發生什么?異常對象會在下次gc執行時被回收.47. 怎樣區分finally語句塊與finalize()方法?不管是否拋出異常finally語句塊都會被執行, 它通常用于釋放程序持有的資源. finalize是Object類中的一個protected方法, 當一個對象被gc回收前它會被j
30、vm調用.Java Applets48. 什么是 Applet ?一個 Java Applet 可以包含在 HTML 頁面中并且可以在啟用 Java 客戶端的瀏覽器中運行。Applets 可以用來創建動態和交互式的 web 應用程序。49. Applet 生命周期的說明一個 Applet 可能會經歷以下的幾個狀態: Init: 每次加載的時候都進行初始化 Start: 開始執行一個 applet Stop: 停止執行一個 applet Destroy: 卸載 applet 之前執行最后的清理50. 當 applet 加載的時候會發生什么?首先,會創建一個 applet 的控制類的實例。然后,a
31、pplet 初始化,最后 applet 開始運行。51. Applet和Java應用程序有什么不同?Applets需要一個支持Java的瀏覽器, 但是Java應用程序可以被單獨執行。但是,他們都需要一個Java虛擬機,JVM。還有, 一個Java應用程序需要一個main方法與特定的簽名,來確保啟動. Java applets并不需要這樣一些東西。最后, Java Applet通常使用嚴格的安全策略,而Java應用程序通常使用較寬松的安全策略。52.什么是強加給Java Applet限制?這主要是由于安全原因,以下限制強加在Java小程序: Applet無法加載庫或定義本地方法。 Applet
32、通常無法讀取或執行主機的文件。 Applet無法讀取某些系統屬性。 除非連接來自主機否則不能進行網絡連接。 Applet程序不能啟動主機上執行它的任何程序。53. 什么是不可信的Applet ?不受信任的Applet是那些Java Applet不能訪問或執行本地系統的文件的程序。默認情況下,所有下載的Applet被認為是不可信的。54. 通過文件系統加載的小程序在加載了互聯網和Applet之間的區別是什么 ?關于其中一個applet被加載在互聯網的情況下,applet是由applet類加載器加載并須受該applet安全管理器執行的限制。關于其中一個applet是從客戶端的本地磁盤加載的情況下,
33、applet是由文件系統加載器加載的。通過文件系統加載的applet允許讀取文件,寫入文件并加載在客戶端上。還有,通過文件系統加載applet允許執行,最后,通過文件系統加載的applet不管是否通過字節碼驗證都可加載。55. 什么是applet類加載器,它提供了什么?當在互聯網上加載applet,該applet是由applet的類加載器加載的。類加載器強制執行Java命名空間的層次結構。此外,類加載器保證這是在來自本地文件系統的類中唯一的命名空間,以及在每個網絡源中唯一的命名空間。當瀏覽器在網絡上加載applet,applet的類被放置在私人的和applet起始地址有關的命名空間中。那么,那
34、些類加載器加載的類就會通過校驗。這個校驗會檢查類文件是否符合Java語言規范。除此之外,校驗器會確保沒有堆棧溢出或者向下溢出,參數的所有字節碼指令也是正確的。56. 什么是applet安全管理,它提供什么?applet安全管理是對Java applet做了限制的機制。瀏覽器只能有一個安全管理器。安全管理器在啟動的時候建立,之后它不能被取代,重載,重寫或者延長。Swing57. Choice和List之間的區別是什么?Choice是一種緊湊的方式展示,必須要拉下,是為了讓用戶能夠看到所有的可選選項列表。Choice只能選中一個選項。List是以幾個List選項是可見的方式展示的。List支持選中
35、一個或多個List選項。58. 什么是布局管理器?布局管理器是用來組織容器內的組件。59. Scrollbar和JScrollPane 的區別是什么?Scrollbar是一個組件,但不是一個容器,而ScrollPane是一個容器。ScrollPane處理它自身的事件并執行它自己的滑動。60. 哪些Swing方法是線程安全?只有3個方法是線程安全的:repaint, revalidate, 和invalidate。61. 說出3個支持繪圖的子類。Canvas,Frame,Panel, 和Applet類都支持繪圖。62. 什么是裁剪?裁剪是指在有限的區域和圖形類進行繪圖操作。63. MenuIte
36、m和CheckboxMenuItem的區別是什么?CheckboxMenuItem類繼承了MenuItem類,并支持選中或者取消菜單選項。64. BorderLayout的元素是怎樣組織的?BorderLayout的元素都是在有序地分布在邊緣部分(東,南,西,北)和容器的中心。65. GridBagLayout的元素是怎樣組織的?GridBagLayout的元素根據網格組織的。元素具有不同的尺寸,并且可以占據一行或列的網格。因此,行和列可以有不同的尺寸。66. Window和Frame有什么區別?Frame類是繼承Window類,并定義了一些主要的帶菜單欄的應用程序窗口。67. 裁剪和重畫之間
37、的關系?當窗口被AWT繪圖線程重畫,它設置了裁剪區域到窗口中請求重畫的區域。68. 事件監聽器接口和事件適配器類之間是什么關系?事件監聽器接口定義了一個特定事件的事件處理程序所必須實現的一些方法。事件適配器提供了一個事件偵聽器接口的默認實現。69. 一個GUI組件怎么處理自己的事件?GUI組件可以通過實現相應的事件監聽器接口和添加它自己作為本身的事件偵聽器來處理自己的事件。70. Java布局管理器提供超過傳統的窗口系統的什么樣的優勢?Java使用布局管理器以一致的方式來布局組件,跨所有窗口平臺。由于布局管理器不綁定絕對化的尺寸和位置,所以它們能夠容納不同窗口系統的平臺具體差異。71. Jav
38、a為所有Swing組件使用的設計模式是什么?Java為所有Swing組件使用的設計模式是是 模型視圖控制器(MVC)模式。JDBC72. 什么是 JDBC ?JDBC是一個抽象層,允許用戶在不同數據庫間進行選擇。JDBC使開發人員能夠在Java中編寫數據庫應用程序,而不必讓自己關心一個特定的數據庫的底層細節。73. 解釋JDBC中驅動的作用。JDBC驅動提供了 對 JDBC API 所提供的抽象類 的 數據庫供應商的特定實現。每個驅動必須提供java.sql包的以下的類實現:Connection,Statement,PreparedStatement,CallableStatement,Res
39、ultSet和Driver。74.Class.forName 方法的目的是什么?此方法用于加載驅動程序,以建立與數據庫的連接。75.與Statement相比PreparedStatement的優點?PreparedStatement是預編譯的,因此它有更好的性能。另外,PreparedStatement可以被不同輸入值的查詢重用。76. CallableStatement的用途 ? 指出用于創建CallableStatement的方法.CallableStatement用于執行存儲過程。存儲過程由數據庫保存并提供。存儲過程可以根據用戶的輸入返回結果。強烈建議使用存儲過程,因為它提供了安全性和模
40、塊化。準備CallableStatement的方法如下:CallableStament.prepareCall();77. 連接池是什么 ?打開和關閉數據庫連接時與數據庫的交互需要付出很高的代價. 特別是當數據庫客戶端增長時,這個代價是相當高的,并且消耗了很多資源。數據庫連接池中的連接在應用服務器啟動時被創建并在池中進行管理。一個連接請求由池中的數據庫連接提供。當連接結束后,請求會被放回池中以供以后重用。遠程方法調用 (RMI)78. 什么是RMI ?Java遠程方法調用(RMI)是一個Java API,它執行的面向對象的等價遠程過程調用(RPC)的方法,包括了直接傳輸序列化的Java類和分布
41、式垃圾收集的支持。 遠程方法調用(RMI),也可以看作是一個遠程運行的對象上激活的方法的過程。RMI提供位置透明性,因為用戶認為一個方法是在本地運行的對象上執行。RMI Tips here.79. 什么是RMI的體系結構的基本原理?RMI的架構最重要的原則是將行為的定義和行為的實施分別對待。 RMI允許定義的行為和實現行為保持獨立,并在獨立的JVM中運行的代碼。80. RMI的體系結構層是什么?RMI的結構主要分為以下幾層: 樁(Stub)和框架(Skeleton)層:該層位于開發者視圖的下面。該層是負責攔截客戶端請求接口的方法并重定向這些請求到遠程RMI服務上。 遠程引用層:架構的第二層是處
42、理從客戶端到服務器的遠程對象引用的解析。該層解析并管理從客戶端到遠程服務對象的引用。該連接是一對一(單播)連接的。 傳輸層:該層主要負責連接參與服務的兩個JVM。它基于通過網絡連接的機子的TCP/IP,提供了基本的連通性,以及一些防火墻的滲透策略。81. 在RMI中遠程接口的作用是什么?遠程接口用于識別那些不是來自本地機子接口但可以被調用的方法。所有對象都是必須直接或間接實現該接口的遠程對象。實現該遠程接口之前應該聲明其遠程接口,為每個遠程對象定義構造方法,并在所有遠程接口中為每個遠程方法提供實現。82. java.rmi.Naming 類扮演的角色 ?java.rmi.Naming類提供了存
43、儲和獲取已注冊的遠程對象. Naming類中的每個方法都需要一個URL格式的String作為參數的名稱.83. RMI中的綁定是什么意思 ?綁定是關聯或注冊一個遠程對象的名字的過程, 這個名字可以在以后用到, 用于查找與它綁定的遠程對象. 遠程對象可以通過Naming類中的bind或rebind方法與一個名字相關聯.84. Naming 類中的bind與rebind方法的區別 ?bind方法的綁定主要用于將特定的名字綁定到一個遠程對象, 但rebind方法的綁定用于將特定的名字重新綁定到一個新的遠程對象. 如果這個名字已經綁定過了, 使用rebind這個綁定會被替換.85. 運行RMI 程序的
44、步驟?為了使RMI程序正常運行需要以下步驟: 編譯所有源文件. 用rmic生成stub. 啟動rmiregistry. 啟動RMIServer. 運行客戶端程序.86.RMI中stub的角色 ?遠程對象的stub作為遠程對象在本地程序中的表示或代理. 調用者調用本地stub的一個方法, 這個方法會在遠程對象上執行.當一個stub的方法被調用時, 它經歷了以下步驟: 初始化與運行遠程對象的遠程JVM的連接. 將參數編碼并傳遞給遠程JVM. 等待方法調用與執行的結果. 解碼返回值或異常(如果執行失敗). 將返回值返回給調用者.87. 什么是DGC?它是如何工作的?DGC代表的是分布式垃圾收集。遠程
45、方法調用(RMI)使用的是DGC自動垃圾收集機制。由于RMI涉及到跨JVM的遠程引用,垃圾回收就會相當困難。DGC使用相關的計數算法為遠程對象提供自動存儲管理。88. 在RMI中使用RMISecurityManager的目的是什么?在RMI應用程序中可以使用RMISecurityManager提供安全管理器來下載代碼。如果安全管理器沒有設置好,RMI的類加載器不會從遠程端下載任何類。89. 解釋編組和解組。當一個應用程序要通過網絡來傳送內存對象到另一臺主機,或者保留它到存儲器,內存表達法會將其轉換到合適的格式。這個過程就叫做編組,而恢復操作就叫解組。90. 解釋序列化和反序列化。Java提供了
46、一個機制,是指一個對象可以被表示為字節序列,包括對象的數據,以及對象類型的信息和存儲在對象中的數據類型。因此,序列化可以看做是平面化對象為了存儲到磁盤中,方便后面讀取和重新配置的一種方式。反序列化是一種從平面化狀態到活躍狀態的一種轉換對象的逆過程。Servlets91. 什么是Servlet?servlet是用來處理客戶端請求并生成動態web內容的Java程序語言類。Servlets大多是用來處理或者存儲HTML表單提交的數據,提供動態內容和管理那些不在HTTP無狀態協議中的狀態信息。92. 解釋一個Servlet的架構.核心抽象概念肯定是所有servlet必須實現javax.servlet.
47、Servlet 接口。 每個 servlet 必須直接或者間接實現這個接口, 也可以繼承于 javax.servlet.GenericServlet 或者javax.servlet.http.HTTPServlet。最后想提的是,每個 servlet 能夠使用多線程服務多個請求。93. 一個 Applet 和 一個 Servlet 區別是什么 ?一個 Applet 是一個跑在客戶機器的 網頁瀏覽器 里面的 客戶端java程序。相反,一個 servlet 是跑在網頁服務器的服務的容器。一個applet 能使用用戶界面class, 而一個 servlet 不能夠有一個用戶界面。相反,一個servl
48、et 等待客戶端的 HTTP 請求并為每一個請求生成一個響應。94. GenericServlet 和 HttpServlet 的區別是什么 ?GenericServlet 是一個實現了Servlet 和 ServletConfig 接口的通用的協議無關的servlet . 那些繼承于GenericServlet 類的 servlet 將重寫 service 方法 。最后想提的是,為了給Web用戶開發一個使用HTTP協議服務的HTTP servlet, 你的servlet 必須改為繼承于 HttpServlet 。查看Servlet的示例 。95.解釋一個Servlet的生命周期.對每一個客戶
49、端的請求,這個Servlet引擎加載servlet和調用它的init方法,以便在servlet初始化。然后, Servlet對象處理所有從客戶端來的后續請求,通過為每個請求單獨調用服務的方法。最后,該servlet調用服務器的destroy方法。96 .doGet()和doPost()之間的區別是什么?doGet: GET方法附加請求的URL的名稱 - 值對。因此,存在客戶端的請求字符數量的限制。此外,該請求的參數值為可見,因此,如果有敏感信息不能采用這種方式。doPost: POST方法克服了GET請求的限制,將發送請求的值置于body里。此外,發送值的數量沒有限制。最后,通過POST請求傳
50、遞的敏感信息是不可見的97. web應用是什么 ?web應用是web服務的延伸. 主要有兩種類型:面向視覺的和面向服務的. 面向視覺型的應用通過編輯語言來動態展示交互頁面. 面向應用的則提供了后端的service.總的來說,就是一堆置于servers URL明明空間下的servlets.98. 什么是服務端包含 (SSI) ?服務端包含是服務端的一種簡單腳本語言,主要應用在Web方面,置于servlet標簽中. 最常用的地方就是在網頁中引入一個或多個文件. 當瀏覽器加載頁面時,使用servlet產生的超文本替換其標簽.99. 什么是 Servlet 鏈?Servlet 鏈是指將上一個servl
51、et的結果傳到下一個.第二個的結構又可以傳到第三個. 最后的servlet負責將響應回復給客戶端.100. 如何知道請求 servlet的客戶端信息 ?ServletRequest類可以獲取客戶端的IP地址或主機名. getRemoteAddr()獲取IP getRemoteHost()獲取主機名. 示例如下here.101. Http response的結構是什么 ?HTTP response 包括了三個部分: Status Code: 描述了這次回應的狀況. 它可以用來檢查這次請求是否成功完成. 一旦請求失敗了, 這個status code可以用來尋找原因. 如果你的 servlet 沒有
52、返回一個status code, 默認就會返回成功的status code, HttpServletResponse.SC_OK. HTTP Headers: 它包含了response的更多信息.舉個例子,headers可以反應response的訪問date/time, 或者是用于將實體安全地傳送到用戶的編碼形式。可以閱讀how to retrieve headers in Servlet here. Body: 它是response的具體內容. 可能包括HTML內容,比如圖片。Body包括了緊接Header發送的HTTP事務消息數據字節。102. 什么是cookie?session和cook
53、ie之間的區別是什么?Cookie是Web服務器發送到瀏覽器的一小塊信息,瀏覽器為每個Web服務器在本地文件中存儲cookie。 在以后的請求里, 瀏覽器對特定的Web服務器,將request和所有特定的Web服務器的cookie一起發送。Session和Cookie之間的區別如下: Session無論在客戶端瀏覽器的設置都可以工作??蛻舳丝梢赃x擇禁用cookies。然而,Session仍然可以工作,因為客戶端沒有能力在服務器端禁用Session。 Session和cookie也t有不同的信息存儲量。 HTTP會話能夠存儲任何Java對象,而一個cookie只能保存String對象。103.瀏覽器和servlet通過什么協議通信 ?HTTP協議.104. 什么是HTTP通道 ?通道是指使用 HTTP或 HTTPS 封裝其它的網絡協議. HTTP包裝了其他的網絡通信協議. 其它
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肝癌的治療和預防方案講課件
- 教育科技的新寵虛擬與增強現實的融合教學
- 教育與社會經濟發展關系的深度解析及政策建議
- 學生心理健康對教學效果的積極影響
- 閩西職業技術學院《系統空間設計課程設計》2023-2024學年第二學期期末試卷
- 2024年度浙江省二級建造師之二建市政工程實務押題練習試題A卷含答案
- 麗江文化旅游學院《橋梁健康監測》2023-2024學年第二學期期末試卷
- 廣東郵電職業技術學院《外國民族音樂I》2023-2024學年第二學期期末試卷
- 河北建材職業技術學院《中西醫結合內科學1》2023-2024學年第二學期期末試卷
- 遼寧鐵道職業技術學院《食品工藝實驗》2023-2024學年第二學期期末試卷
- 水電站機電設備拆除施工方案
- 防溺水幼兒園安全教育課件
- 全球半導體制造類EDA行業白皮書-沙利文-2024
- 理論力學(周衍柏第三版)思考題+習題答案
- 拜占庭歷史與文化知到智慧樹章節測試課后答案2024年秋南開大學
- 2024-2030年中國LNG加氣站行業十三五規劃及項目可行性分析報告
- 腳手架安全事故案例及總結
- 國家開放大學國開電大《學前兒童游戲指導》形考任務1-4答案
- 2024年-2025年農作物植保員職業技能考試題庫(含答案)
- 物理-2025年中考終極押題猜想(廣州專用)(解析版)
- 【MOOC】機械設計-華中科技大學 中國大學慕課MOOC答案
評論
0/150
提交評論