1. 數組有沒有length()這個方法? String有沒有length()這個方法?java
答:數組沒有length()這個方法,有length的屬性。程序員
String有length()這個方法。web
2. String s = new String("xyz");建立了幾個String Object?算法
答:兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。數據庫
3. abstract class和interface有什麼區別?編程
答:聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。設計模式
接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個 有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。 而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到 接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口.數組
4. ==和equals的區別?瀏覽器
答:==用於判斷兩個引用變量是否指向同一個對象實例.安全
equals用於判斷兩個值是否相等.
5. Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
答:Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
6. 接口與抽象類的區別
答: 抽象類中的非抽象方法能夠不被子類覆蓋,可是接口中的全部方法必須被子類實現
抽象類和子類之間是一種父子關係,如A是B;但接口和實現類之間沒有明顯的父子關係,而是一種功能性的關係。如A具備B的功能。
7. 接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
答:接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
8. java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
答: 字節流,字符流。字節流繼承於InputStream \ OutputStream,字符流繼承於InputStreamReader \ OutputStreamWriter。在java.io包中還有許多其餘的流,主要是爲了提升性能和使用方便。
9. 基本數據類型間的轉換
答: byte->short->int->long->float->double
char->int
詳細見<<java核心技術第一卷V6>>
10. String是最基本的數據類型嗎?
答:基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類。
11. int 和 Integer 有什麼區別
答:Java 提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。int是java的原始數據類型,Integer是java爲int提供的封裝類。Java爲每一個原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用類型和原始類型的行爲徹底不一樣,而且它們具備不一樣的語義。引用類型和原始類型具備不一樣的特徵和用法,它們包括:大小和速度問題,這種類型以哪一種 類型的數據結構存儲,當引用類型和原始類型用做某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值爲 null,而原始類型實例變量的缺省值與它們的類型有關。
12. String 和StringBuffer的區別
答:JAVA平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類提供 了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可使用StringBuffer。 典型地,你可使用StringBuffers來動態構造字符數據。
13. JSP的內置對象和JSP的標記
答:9種內置對象
request,response,pageContext,session,application,out,config,page,exception
14. JSP的內置對象及方法。
答:request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,而且提供了幾個用於獲取cookie, header, 和session數據的有用的方法。
response表示HttpServletResponse對象,並提供了幾個用於設置送回瀏覽器的響應的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各類範圍的名字空間、servlet相關的對象的API,而且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession對象。Session能夠存貯用戶的狀態信息
applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息
config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。
page表示從該頁面產生的一個servlet實例
15. JSP中頁面轉向的兩種方式,他們的區別
答: response.sendRedirect()和<jsp:forward>,前者不轉發請求,後者轉發請求
16. 對MVC的理解
答:MVC是一種設計模式,分別是模型(model),視圖(view),控制(controler)的簡稱。
在java B/S結構的應用中,咱們在數據模型用javaBean表示,用jsp處理用戶視圖,經過控制不一樣jsp頁面的調用和請求轉發
17. 介紹MVC模式,在什麼狀況下采起MVC模式?MVC模式的優勢是什麼?
答: MVC是一種設計模式,分別是模型(model),視圖(view),控制(controler)的簡稱。
在java B/S結構的應用中,咱們在數據模型用javaBean表示,用jsp處理用戶視圖,經過控制不一樣jsp頁面的調用和請求轉發。
在大中型項目中均可採用MVC。
優勢:
將model和view進行了分離,可以使網頁設計師和程序員可以獨立工做。
組件能夠增長程序的重用性,增長網站功能擴充的彈性
18. MVC的各個部分都有那些技術來實現?如何實現?
答:MVC是Model-View-Controller的簡寫。"Model" 表明的是應用的業務邏輯(經過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(通常是一個Servlet),經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重 用。
19. 靜態方法與靜態變量的使用
靜態方法能夠經過類名直接訪問,靜態變量在同一類的不一樣的實例之間共享。
20. Static Nested Class 和 Inner Class的不一樣。
Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。
21. Collection 和 Collections的區別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.。Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。
22. JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動做實現 <jsp:include page="included.jsp" flush="true" />它老是會檢查所含文件中的變化,適合用於包含動態頁面,而且能夠帶參數。
靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>
23. 靜態變量和實例變量的區別?
static i = 10; //常量
class A a; a.i =10;//可變
24. finally子句的執行時間
都會執行,除非在前面出現system.exit(0)
25. 談談final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示老是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。
26. try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?
會執行,在return前執行。
27. JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別表明什麼意義?在try塊中能夠拋出異常嗎?
Java經過面向對象的方法進行異常處理,把各類不一樣的異常進行分類,並提供了良好的接口。在Java中,每一個異常都是一個對象,它是Throwable 類或其它子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法能夠捕獲到這個異常並進行處理。Java的異 常處理是經過5個關鍵詞來實現的:try、catch、throw、throws和finally。通常狀況下是用try來執行一段程序,若是出現異常, 系統會拋出(throws)一個異常,這時候你能夠經過它的類型來捕捉(catch)它,或最後(finally)由缺省處理器來處理。
用try來指定一塊預防全部"異常"的程序。緊跟在try程序後面,應包含一個catch子句來指定你想要捕捉的"異常"的類型。
throw語句用來明確地拋出一個"異常"。
throws用來標明一個成員函數可能拋出的各類"異常"。
Finally爲確保一段代碼無論發生什麼"異常"都被執行一段代碼。
能夠在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另外一個try語句保護其餘代碼。每當遇到一個try語句,"異常"的框架就放到堆棧 上面,直到全部的try語句都完成。若是下一級的try語句沒有對某種"異常"進行處理,堆棧就會展開,直到遇到有處理這種"異常"的try語句。
28. 對數據庫進行操做時忽然中斷,如何保證數據的完整
用事務保證
29. public、protected、private的做用範圍
public 自已 子類 包內 其它
protect 自已 子類 包內
缺省 本身 包內
private 自已
30. 說出Servlet的生命週期,並說出Servlet和CGI的區別。
Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。
與cgi的區別在於servlet處於服務器進程中,它經過多線程方式運行其service方法,一個實例能夠服務於多個請求,而且其實例通常不會銷燬,而CGI對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於servlet。
31.如何現實servlet的單線程模式
<%@ page isThreadSafe="false"%>
32. servlet的生命週期
web容器加載servlet,生命週期開始。經過調用servlet的init()方法進行servlet的初始化。經過調用service()方法實 現,根據請求的不一樣調用不一樣的do***()方法。結束服務,web容器調用servlet的destroy()方法。
33. cookies和session的區別
cookies數據寫在客戶端。session的數據寫在服務器上,且在同一客戶的不一樣頁面間共享
34. JSP中鏈接數據庫的方法
1)直接和應用程序同樣經過jdbc鏈接
2)經過鏈接池鏈接
35. 多線程的暫停與啓動
線程的暫停的方法已經廢棄,但能夠用一個boolean值使線程空轉,從而達到暫停的目的。
若是要從暫停到運行,則改變該boolean值。
36.多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種,分別是synchronized,wait與notify
37.線程的基本概念、線程的基本狀態以及狀態之間的關係
線程指在程序執行過程當中,可以執行程序代碼的一個執行單位,每一個程序至少都有一個線程,也就是程序自己。
Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。
38. JavaBean的定義
javaBean是一種可重複使用、且跨平臺的軟件組件。分爲兩種:一種是圖形javaBean,另外一種是非圖形javaBean。
一般javaBean是一個public類,且必須有一個無參數的構造函數,具備getXXX和setXXX 方法。
39. 程序流程控制語句
if ...else
for
switch case
while
do ...while
40. &和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。
41. 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的一個實現。
最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap 就必須爲之提供外同步。
Hashtable和HashMap採用的hash/rehash算法都大概同樣,因此性能不會有很大的差別。
42. sleep() 和 wait() 有什麼區別?
sleep是線程類(Thread)的方法,致使此線程暫停執行指定時間,給執行機會給其餘線程,可是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法致使本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備得到對象鎖進入運行狀態。
43. Anonymous Inner Class (匿名內部類) 是否能夠extends(繼承)其它類,是否能夠implements(實現)interface(接口)?
能夠繼承其餘類或完成其餘接口,在swing編程中經常使用此方式。
44. 內部類能夠引用他包含類的成員嗎?有沒有什麼限制?
一個內部類對象能夠訪問建立它的外部類對象的內容
45.一個".java"源文件中是否能夠包括多個類(不是內部類)?有什麼限制?
能夠。必須只有一個類名與文件名相同。
46. Java有沒有goto?
java中的保留字,如今沒有在java中使用。
47. error和exception有什麼區別?
error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
48. 給我一個你最多見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
49. Java中的異常處理機制的簡單原理和應用。
當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包括2種狀況。一種是JAVA類庫內置的語義檢 查。例如數組下標越界,會引起IndexOutOfBoundsException;訪問null的對象時會引起 NullPointerException。另外一種狀況就是JAVA容許程序員擴展這種語義檢查,程序員能夠建立本身的異常,並自由選擇在什麼時候用 throw關鍵字引起異常。全部的異常都是java.lang.Thowable的子類。
50. List, Set, Map是否繼承自Collection接口?
List,Set是;Map不是
51. abstract的method是否可同時是static,是否可同時是 native ,是否可同時是synchronized?
都不能
52. 啓動一個線程是用run()仍是start()?
啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。
53.是否能夠繼承String類?
String類是final類故不能夠繼承。
54. 當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
55. 簡述synchronized和java.util.concurrent.locks.Lock的異同?
主要相同點:Lock能完成synchronized所實現的全部功能
主要不一樣點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock必定要求程序員手工釋放,而且必須在finally從句中釋放。
56. abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
57. 兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
不對,有相同的hash code。
58. 當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
59. 說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插 入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較 ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項即 可,因此插入速度較快。
60. 你所知道的集合類都有哪些?主要方法?
最經常使用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操做任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。
Map 提供了一個更通用的元素存儲方法。 Map 集合類用於存儲元素對(稱做"鍵"和"值"),其中每一個鍵映射到一個值。
61. 運行時異常與通常異常有何異同?
異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。
62. EJB是基於哪些技術實現的?並說出SessionBean和EntityBean的區別,StatefulBean和StatelessBean的區別。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基於JNDI、RMI、JAT等技術實現。
SessionBean在J2EE應用程序中被用來完成一些服務器端的業務操做,例如訪問數據庫、調用其餘EJB組件。EntityBean被用來表明應用系統中用到的數據。
對於客戶機,SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯。
對於客戶機,EntityBean是一種持久性對象,它表明一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體。
Session Bean 還能夠再細分爲 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean均可以將系統邏輯放在 method之中執行,不一樣的是 Stateful Session Bean 能夠記錄呼叫者的狀態,所以一般來講,一個使用者會有一個相對應的 Stateful Session Bean 的實體。Stateless Session Bean 雖然也是邏輯組件,可是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 並不會找尋特定的 Stateless Session Bean 的實體來執行這個 method。換言之,極可能數個使用者在執行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執行。從內存方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內存,然而 Stateful Session Bean 的優點卻在於他能夠維持使用者的狀態。
63. EJB與JAVA BEAN的區別?
Java Bean 是可複用的組件,對Java Bean並無嚴格的規範,理論上講,任何一個Java類均可以是一個Bean。但一般狀況下,因爲Java Bean是被容器所建立(如Tomcat)的,因此Java Bean應具備一個無參的構造器,另外,一般Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上至關於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 至關於DCOM,即分佈式組件。它是基於Java的遠程方法調用(RMI)技術的,因此EJB能夠被遠程訪問(跨進程、跨計算機)。但EJB必須被佈署在 諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是經過其容器訪問。EJB容器是EJB組件的代 理,EJB組件由容器所建立和管理。客戶經過容器來訪問真正的EJB組件。
64. EJB包括(SessionBean,EntityBean)說出他們的生命週期,及如何管理事務的?
SessionBean:Stateless Session Bean 的生命週期是由容器決定的,當客戶機發出請求要創建一個Bean的實例時,EJB容器不必定要建立一個新的Bean的實例供客戶機調用,而是隨便找一個現 有的實例提供給客戶機。當客戶機第一次調用一個Stateful Session Bean 時,容器必須當即在服務器中建立一個新的Bean實例,並關聯到客戶機上,之後此客戶機調用Stateful Session Bean 的方法時容器會把調用分派到與此客戶機相關聯的Bean實例。
EntityBean:Entity Beans能存活相對較長的時間,而且狀態是持續的。只要數據庫中的數據存在,Entity beans就一直存活。而不是按照應用程序或者服務進程來講的。即便EJB容器崩潰了,Entity beans也是存活的。Entity Beans生命週期可以被容器或者 Beans本身管理。
EJB經過如下技術管理實務:對象管理組織(OMG)的對象實務服務(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),開發組(X/Open)的XA接口。
65. EJB的角色和三個對象
一個完整的基於EJB的分佈式計算結構由六個角色組成,這六個角色能夠由不一樣的開發商提供,每一個角色所做的工做必須遵循Sun公司提供的EJB規範,以保 證彼此之間的兼容性。這六個角色分別是EJB組件開發者(Enterprise Bean Provider) 、應用組合者(Application Assembler)、部署者(Deployer)、EJB 服務器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系統管理員(System Administrator)
三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean類