標籤:java java面試試題
1. 運行時異常與一般異常有何異同?
解答:異常表示程式運行過程中可能出現的非正常狀態,運行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。
2.預存程序和函數的區別
解答:
從參數的返回情況來看:
如果返回多個參數值最好使用預存程序,如果只有一個傳回值的話可以使用函數。
從調用情況來看:
如果在SQL語句(DML或SELECT)中調用的話一定是儲存函數或儲存的封裝函數不可以是預存程序,但調用儲存函數的時候還有好多限制以及函數的純度等級的問題,如果是在過程化語句中調用的話,就要看你要實現什麼樣的功能。函數一般情況下是用來計算並返回一個計算結果而預存程序一般是用來完成特定的資料操作(比如修改、插入資料庫表或執行某些DDL語句等等),所以雖然他們的文法上很相似但使用者在使用他們的時候所需要完成的功能大部分情況下是不同的。
3.類有哪三個基本特性?各特性的優點?
解答:類具有封裝性、繼承性和多態性。
4.Collection 和 Collections的區別?
解答:Collection是java.util下的介面,它是各種集合的父介面,繼承於它的介面主要有Set 和List;Collections是個java.util下的類,是針對集合的協助類,提供一系列靜態方法實現對各種集合的搜尋、排序、安全執行緒化等操作。
5.HashMap與TreeMap的區別?
解答:HashMap通過hashcode對其內容進行快速尋找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
6.ArrayList和Vector的區別?
解答:同步性:Vector是安全執行緒的,也就是說是同步的,而ArrayList是線程不安全的,不是同步的;資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半。
7.HashMap和Hashtable的區別?
解答:HashMap是Hashtable的輕量級實現(非安全執行緒的實現),他們都實現了Map介面,主要區別
在於HashMap允許空(null)索引值(key),由於非安全執行緒,效率上高於Hashtable。HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。最大的不同是,Hastable的方法是synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供同步。
8.請說出ArrayList,Vector, LinkedList的儲存效能和特性
解答:ArrayList和Vector都是使用數組方式儲存資料,此數組元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(安全執行緒),通常效能上較ArrayList差,而LinkedList使用雙向鏈表實現儲存,按序號索引資料需要進行前向或後向遍曆,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。
9.列出自己常用的jdk包.
解答:JDK常用的package
java.lang: 這個是系統的基礎類,比如String等都是這裡面的,這個package是唯一一個可以不用import就可以使用的Package
java.io: 這裡面是所有輸入輸出有關的類,比如檔案操作等
java.net: 這裡面是與網路有關的類,比如URL,URLConnection等。
java.util : 這個是系統輔助類,特別是集合類Collection,List,Map等。
java.sql: 這個是資料庫操作的類,Connection, Statememt,ResultSet等
10.List、Map、Set三個介面儲存元素時各有什麼特點?
解答:
1)List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。使用者能夠使用索引(元素在List中的位置,類似於數組下標)來訪問List中的元素,這類似於Java的數組。
2)Set是一種不包含重複的元素的Collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素。
3)Map介面 :請注意,Map沒有繼承Collection介面,Map提供key到value的映射
11.abstract class和interface有什麼區別?
解答:聲明方法的存在而不去實現它的類被叫做抽象類別(abstract class),它用於要建立一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能建立abstract 類的執行個體。然而可以建立一個變數,其類型是一個抽象類別,並讓它指向具體子類的一個執行個體。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類別。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。介面(interface)是抽象類別的變體。新型多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,所有成員變數都是public static final的。一個類可以實現多個介面,當類實現介面時,必須實現介面的所有方法。抽象類別在Java語言中表示的是一種單繼承的關係,對於interface 來說則不然,並不要求interface的實現者和interface定義在概念本質上是一致的,僅僅是實現了interface定義的契約而已。;抽象類別中可以定義自己的成員變數,也可以包含非抽象的方法,而在介面中只能有靜態常量,所有方法必須是抽象的;實現抽象類別時可以只實現其中的部分方法,而要是實現一個介面的話就必須實現這個介面中的所有抽象方法。
12.JSP頁面之間傳遞參數的方法有哪些?
解答:
1)request
2)session
3)application
4)提交表單
5)超連結
6)隱藏表單
13.forward 和redirect的區別
解答:forward是容器中控制權的轉向,是伺服器請求資源,伺服器直接存取目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道伺服器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。 redirect就是服務端根據邏輯,發送一個狀態代碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,並且從瀏覽器的地址欄中可以看到跳轉後的連結地址。前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的連結;在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。
14.Java反射機制的作用?
解答:Java反射機制的作用是:
1)在運行時判斷任意一個對象所屬的類。
2)在運行時構造任意一個類的對象。
3)在運行時判斷任意一個類所具有的成員變數和方法。
4)在運行時調用任意一個對象的方法
15.你是怎麼理解java的泛型的?
解答: 在Java SE 1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現參數的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉換,而這種轉換是要求開發人員對實際參數類型可以預知的情況下進行的。對於強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在啟動並執行時候才出現異常,這是一個安全隱患。
泛型是Java SE 1.5的新特性,泛型的本質是參數化型別,也就是說所操作的資料類型被指定為一個參數。這種參數類型可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面、泛型方法。
泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高代碼的重用率。
16.AVA源檔案中是否可以包括多個類,有什麼限制
解答:一個java源檔案中可以包含多個類,每個源檔案中至多有一個public類,如果有的話,那麼源檔案的名字必須與之相同。如果源檔案中沒有public類,則源檔案用什麼名字都可以,但最好還是具有特定的意義,免得自己都不記得裡面寫的是什麼了。
17.請解釋分散式交易管理?
解答:分散式交易是指事務的參與者、支援事務的伺服器、資原始伺服器以及交易管理員分別位於不同的分布式系統的不同節點之上。為了實現分散式交易,需要使用下面將介紹的兩階段交易認可協議。 階段一:開始向事務涉及到的全部資源發送提交前資訊。此時,事務涉及到的資源還有最後一次機會來異常結束事務。如果任意一個資源決定異常結束事務,則整個事務取消,不會進行資源的更新。否則,事務將正常執行,除非發生災難性的失敗。為了防止會發生災難性的失敗,所有資源的更新都會寫入到日誌中。這些日誌是永久性的,因此,這些日誌會倖免遇難並且在失敗之後可以重新對所有資源進行更新。 階段二:只在階段一沒有異常結束的時候才會發生。此時,所有能被定位和單獨控制的資源管理員都將開始執行真正的資料更新。 在分散式交易兩階段交易認可協議中,有一個主交易管理員負責充當分散式交易協調器的角色。事務協調器負責整個事務並使之與網路中的其他交易管理員協同工作。 為了實現分散式交易,必須使用一種協議在分散式交易的各個參與者之間傳遞事務上下文資訊,IIOP便是這種協議。這就要求不同開發商開發的事務參與者必須支援一種標準協議,才能實現分布式的事務。
18.String, StringBuffer StringBuilder的區別。
解答:String的長度是不可變的; StringBuffer的長度是可變的,如果你對字串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法;安全執行緒; StringBuilder是從 JDK 5 開始,為StringBuffer該類補充了一個單個線程使用的等價類別;通常應該優先使用 StringBuilder 類,因為它支援所有相同的操作,但由於它不執行同步,所以速度更快。
19.請寫出5種常見到的runtime exception。
解答:
NullPointerException:當操作一個Null 參考時會出現此錯誤。
NumberFormatException:資料格式轉換出現問題時出現此異常。
ClassCastException:強制類型轉換類型不符時出現此異常。
ArrayIndexOutOfBoundsException:數組下標越界,當使用一個不存在的數組下標時出現此異常。
ArithmeticException:數學運行錯誤時出現此異常
20.數組有沒有length()這個方法?String有沒有length()這個方法?
解答:數組沒有length()方法 它有length屬性
String有length()方法。
21.在java中,List是個介面,那實現List介面的類有哪些,有什麼區別?
解答: ArrayList是使用數組方式儲存資料,此數組元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等記憶體操作,所以索引資料快而插入資料慢,
LinkedList使用雙向鏈表實現儲存,按序號索引資料需要進行前向或後向遍曆,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。
22.EJB包含哪3種bean
解答:session bean(會話bean), entity bean(實體bean), message bean(訊息bean)
23.hibernate中的java對象有幾種狀態,其相互關係如何(區別和相互轉換)。
解答:在Hibernate中,對象有三種狀態:臨時狀態、持久狀態和游離狀態。 臨時狀態:當new一個實體物件後,這個對象處於臨時狀態,即這個對象只是一個儲存臨時資料的記憶體地區,如果沒有變數引用這個對象,則會被jre記憶體回收機制回收。這個對象所儲存的資料與資料庫沒有任何關係,除非通過Session的save或者SaveOrUpdate把臨時對象與資料庫關聯,並把資料插入或者更新到資料庫,這個對象才轉換為持久對象;
持久狀態:持久化對象的執行個體在資料庫中有對應的記錄,並擁有一個持久化表示(ID)。對持久化對象進行delete操作後,資料庫中對應的記錄將被刪除,那麼持久化對象與資料庫記錄不再存在對應關係,持久化對象變成臨時狀態。
持久化對象被修改變更後,不會馬上同步到資料庫,直到資料庫事務提交。在同步之前,持久化對象是髒的(Dirty)。
游離狀態:當Session進行了Close、Clear或者evict後,持久化對象雖然擁有持久化標識符和與資料庫對應記錄一致的值,但是因為會話已經消失,對象不在持久化管理之內,所以處於游離狀態(也
叫:脫管狀態)。游離狀態的對象與臨時狀態物件是十分相似的,只是它還含有持久化標識。
24.error和exception有什麼區別?
解答:
error表示系統級的錯誤和程式不必處理的異常,是恢複不是不可能但很困難的情況下的一種嚴重問題;比如記憶體溢出,不可能指望程式能處理這樣的情況; exception表示需要捕捉或者需要程式進行處理的異常,是一種設計或實現問題;也就是說,它表示如果程式運行正常,從不會發生的情況。
25.描述JSP和Servlet的區別、共同點、各自應用的範圍
解答:JSP在本質上就是SERVLET,但是兩者的建立方式不一樣.Servlet完全是JAVA程式碼構成,擅長於流程式控制制和交易處理,通過Servlet來產生動態網頁很不直觀.JSP由HTML代碼和JSP標籤構成,可以方便地編寫動態網頁.因此在實際應用中採用Servlet來控制商務程序,而採用JSP來產生動態網頁.
26.在java語言中int 和 Integer 有什麼區別
解答:int是基礎資料型別 (Elementary Data Type),Integer是int的封裝類,屬於參考型別
27.簡述synchronized和java.util.concurrent.locks.Lock的異同?
解答:主要相同點:Lock能完成synchronized所實現的所有功能 主要不同點:Lock有比synchronized更精確的線程語義和更好的效能。synchronized會自動釋放鎖,而Lock一定要求程式員手工釋放,並且必須在finally從句中釋放。
Java面試題總結1(持續更新)