整理了一天一夜的java面試題

1.開發中都用到了那些設計模式?用在什麼場合? 
每個模式都描述了一個在我們的環境中不斷出現的問題,然後描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重複相同的工作。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。 
2. 說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法 
Session Facade Pattern:使用SessionBean訪問EntityBean 
  Message Facade Pattern:實現異步調用 
  EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問 
  Data Transfer Object Factory:通過DTO Factory簡化EntityBean數據提供特性 
  Generic Attribute Access:通過AttibuteAccess接口簡化EntityBean數據提供特性 
  Business Interface:通過遠程(本地)接口和Bean類實現相同接口規範業務邏輯一致性 
  EJB架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍越龐大則越能體現良好設計的重要性。 
3. j2ee常用的設計模式?說明工廠模式。 
Java中的23種設計模式: 

  Factory(工廠模式),   Builder(建造模式),       Factory Method(工廠方法模式), 
  Prototype(原始模型模式),Singleton(單例模式),     Facade(門面模式), 
  Adapter(適配器模式),    Bridge(橋樑模式),        Composite(合成模式), 
  Decorator(裝飾模式),    Flyweight(享元模式),     Proxy(代理模式), 
  Command(命令模式),      Interpreter(解釋器模式), Visitor(訪問者模式), 
  Iterator(迭代子模式),   Mediator(調停者模式),    Memento(備忘錄模式), 
  Observer(觀察者模式),   State(狀態模式),         Strategy(策略模式), 
  Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式) 

  工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。 
4. 概述MVC體系結構。 
答:MVC包括三類對象,model是應用對象,view是視圖,controller是控制器,它定義用戶界面對用戶輸入的響應方式。 
在MVC體系中,模型通常被稱爲"業務邏輯",是真正完成任務的代碼,視圖就是使用界面,反映數據的變化。控制器控制着模型和視圖之間的交互過程,它決定着向用戶返回怎樣的視圖、檢查通過界面輸入的信息以及選擇處理輸入信息的模型 
在MVC中,表示層和邏輯層分離,各部分可相互獨立進行開發,便於開發和維護,提高了開發效率。 
5. 寫一段Jdbc連Oracle的程序,並實現數據查詢. 
package hello.ant; 
import java.sql.*; 

public class  jdbc { 
String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl"; 
String theUser="admin"; 
String thePw="manager"; 
Connection c=null; 
Statement conn; 
ResultSet rs=null; 

public jdbc() { 
  try{ 
   Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
      c = DriverManager.getConnection(dbUrl,theUser,thePw); 
   conn=c.createStatement(); 
  }catch(Exception e){ 
   e.printStackTrace(); 
  } 


public boolean executeUpdate(String sql) { 
  try { 
   conn.executeUpdate(sql); 
   return true; 
  } catch (SQLException e) { 
   e.printStackTrace(); 
   return false; 
  } 


public ResultSet executeQuery(String sql) { 
  rs=null; 
  try { 
   rs=conn.executeQuery(sql); 
  } catch (SQLException e) { 
   e.printStackTrace(); 
  } 
  return rs; 


public void close() { 
  try { 
   conn.close(); 
   c.close(); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 


public static void main(String[] args) { 
  ResultSet rs; 
  jdbc conn = new jdbc(); 
  rs=conn.executeQuery("select * from test"); 
  try { 
   while (rs.next()) { 
    System.out.println(rs.getString("id")); 
    System.out.println(rs.getString("name")); 
   } 
  }catch(Exception e) { 
   e.printStackTrace(); 
  } 



6. 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組件 
7. 你在項目中用到了xml技術的哪些方面?如何實現的? 
用到了數據存貯,信息配置兩方面。在做數據交換平臺時,將不同數據源的數據組裝成XML文件,然後將XML文件壓縮打包加密後通過網絡傳送給接收者,接收解密與解壓縮後再同XML文件中還原相關信息進行處理。在做軟件配置時,利用XML可以很方便的進行,軟件的各種配置參數都存貯在XML文件中。 
8. Class.forName的作用?爲什麼要用? 
調用該訪問返回一個以字符串指定類名的類的對象。 
9. Servlet執行時一般實現哪幾個方法? 
public void init(ServletConfig config) 
  public ServletConfig getServletConfig() 
  public String getServletInfo() 
  public void service(ServletRequest request,ServletResponse response) 
  public void destroy() 
10. Request對象的主要方法 
setAttribute(String name,Object):設置名字爲name的request的參數值 
  getAttribute(String name):返回由name指定的屬性值 
  getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例 
  getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組 
  getCharacterEncoding():返回請求中的字符編碼方式 
  getContentLength():返回請求的Body的長度 
  getHeader(String name):獲得HTTP協議定義的文件頭信息 
  getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的實例 
  getHeaderNames():返回所以request Header的名字,結果是一個枚舉的實例 
  getInputStream():返回請求的輸入流,用於獲得請求中的數據 
  getMethod():獲得客戶端向服務器端傳送數據的方法 
  getParameter(String name):獲得客戶端傳送給服務器端的有name指定的參數值 
  getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例 
  getParameterValues(String name):獲得有name指定的參數的所有值 
  getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱 
  getQueryString():獲得查詢字符串 
  getRequestURI():獲取發出請求字符串的客戶端地址 
  getRemoteAddr():獲取客戶端的IP地址 
  getRemoteHost():獲取客戶端的名字 
  getSession([Boolean create]):返回和請求相關Session 
  getServerName():獲取服務器的名字 
  getServletPath():獲取客戶端所請求的腳本文件的路徑 
  getServerPort():獲取服務器的端口號 
  removeAttribute(String name):刪除請求中的一個屬性 
11. 四種會話跟蹤技術 
會話作用域ServletsJSP 頁面描述 

  page否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面 
  request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由於 forward 指令和 include 動作的關係) 
  session是是代表與用於某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求 
  application是是代表與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域 
12. JSP和Servlet有哪些相同點和不同點,他們之間的聯繫是什麼? 
JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。Servlet和 JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裏分離開來。而JSP的情況是Java和HTML 可以組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。 

13. servlet的生命週期 
web容器加載servlet,生命週期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。 
14. 什麼情況下調用doGet()和doPost()? 
Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()。 
15. Servlet的基本架構 
public class ServletName extends HttpServlet { 
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws 
      ServletException, IOException  { 
  } 
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws 
      ServletException, IOException  { 
  } 

16. JAVA SERVLET API中forward() 與redirect()的區別? 
前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,儘量使用forward()方法,並且,這樣也有助於隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。 
17. 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實例 
18. 兩種跳轉方式分別是什麼?有什麼區別? 
有兩種,分別爲: 
  <jsp:include page="included.jsp" flush="true"> 
  <jsp:forward page= "nextpage.jsp"/> 
  前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面。執行完後還會回來,相當於函數調用。並且可以帶參數.後者完全轉向新頁面,不會再回來。相當於go to 語句。 
19. JSP中動態INCLUDE與靜態INCLUDE的區別? 
動態INCLUDE用jsp:include動作實現。<jsp:include page="included.jsp" flush="true" />它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數 
  靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面:<%@ include file="included.htm" %> 
20. jsp有哪些動作?作用分別是什麼? 
JSP共有以下6種基本動作: 
  jsp:include:在頁面被請求的時候引入一個文件。 
  jsp:useBean:尋找或者實例化一個JavaBean。 
  jsp:setProperty:設置JavaBean的屬性。 
  jsp:getProperty:輸出某個JavaBean的屬性。 
  jsp:forward:把請求轉到一個新的頁面。 
  jsp:plugin:根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記 
21. jsp有哪些內置對象?作用分別是什麼? 
JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應): 
  request 用戶端請求,此請求會包含來自GET/POST請求的參數 
  response 網頁傳回用戶端的迴應 
  pageContext 網頁的屬性是在這裏管理 
  session 與請求有關的會話期 
  application servlet正在執行的內容 
  out 用來傳送回應的輸出 
  config servlet的構架部件 
  page JSP網頁本身 
  exception 針對錯誤網頁,未捕捉的例外 
22. 啓動一個線程是用run()還是start()? 
啓動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run()方法可以產生必須退出的標誌來停止一個線程。 
23. 說出一些常用的類,包,接口,請各舉5個 
常用的類:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer 
常用的包:java.lang  java.awt  java.io  java.util  java.sql 
常用的接口:Remote  List  Map  Runnable Serializable ActionListener 
24. List、Map、Set三個接口,存取元素時,各有什麼特點? 
List 以特定次序來持有元素,可有重複元素。Set 無法擁有重複元素,內部排序。Map 保存key-value值,value可多值。 
25. 什麼是java序列化,如何實現java序列化? 
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操作時所引發的問題。 

  序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個 ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。 
26. 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收 
對於GC來說,當程序員創建對象時,GC就開始監控這個對象的地址、大小以及使用情況。通常,GC採用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些對象爲"不可達"時,GC就有責任回收這些內存空間。可以。程序員可以手動執行System.gc(),通知GC運行,但是Java語言規範並不保證GC一定會執行。 
27. java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類? 
字節流,字符流。字節流繼承於InputStream OutputStream,字符流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是爲了提高性能和使用方便。 
28. JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以拋出異常嗎? 
ava通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的接口。在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語句。 
29. 排序都有哪幾種方法?請列舉 
排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序) 
30. 你所知道的集合類都有哪些?主要方法? 
最常用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。 
31. heap和stack有什麼區別 
棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。堆是棧的一個組成元素 
32. 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算法都大概一樣,所以性能不會有很大的差異 
33. 說出ArrayList,Vector, LinkedList的存儲性能和特性 
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較 ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。 
34. 運行時異常與一般異常有何異同 
異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。 
35. int 和 Integer 有什麼區別 
Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。 
  Int是java的原始數據類型,Integer是java爲int提供的wapper。Java爲每個原始類型提供了封裝類。 
  原始類型封裝類: 
  boolean : Boolean 
  char : Character 
  byte : Byte 
  short : Short 
  int : Integer 
  long : Long 
  float : Float 
  double : Double 

  引用類型和原始類型的行爲完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值爲 null,而原始類型實例變量的缺省值與它們的類型有關 
36. String是最基本的數據類型嗎 
不是,基本數據類型包括byte、int、char、long、float、double、boolean和short。 
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。爲了提高效率節省空間,我們應該用StringBuffer類 
37. 面向對象的特徵有哪些方面 
主要有以下四方面: 
  1.抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。 
  2.繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類可以從它的基類那裏繼承方法和實例變量,並且類可以修改或增加新的方法使之更適合特殊的需要。 
  3.封裝:封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。 
  4. 多態性:多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行爲共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。 
38. 談談final, finally, finalize的區別 
final—修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作爲父類被繼承。因此一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明爲final的方法也同樣只能使用,不能重載 
  finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話) 
  finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的 
39. 抽象類與接口? 
抽象類與接口都用於抽象,但是抽象類(JAVA中)可以有自己的部分實現,而接口則完全是一個標識(同時有多實現的功能)。 
  JAVA類實現序例化的方法是實現java.io.Serializable接口 
  Collection框架中實現比較要實現Comparable 接口和 Comparator 接口 
40. GC是什麼? 爲什麼要有GC 
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法 
41. char型變量中能不能存貯一箇中文漢字?爲什麼? 
是能夠定義成爲一箇中文的,因爲java中以unicode編碼,一個char佔16個字節,所以放一箇中文是沒問題的 
42. ArrayList和Vector的區別,HashMap和Hashtable的區別 
就ArrayList與Vector主要從二方面來說: 
  1、同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的 
  2、數據增長:當需要增長時,Vector默認增長爲原來一倍,而ArrayList卻是原來的一半 
  就HashMap與HashTable主要從三方面來說: 
  1、歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現 
  2、同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的 
  3、值:只有HashMap可以讓你將空值作爲一個表的條目的key或value 
43. 當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞 
是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的 
44. 兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對 
不對,有相同的hash code 
45. try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後 
會執行,在return前執行 
46. 是否可以繼承String類 
String類是final類故不可以繼承 
47. 接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class) 
接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數 
48. abstract class和interface有什麼區別 
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的所有抽象方法提供實現,否則它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類可以在類中實現這些方法 
  接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作爲引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口 
49. List, Set, Map是否繼承自Collection接口 
List,Set是,Map不是 
50. String s = new String("xyz");創建了幾個String Object 
"xyz"本身作爲字符常量,在彙編語言中應該作爲常量放在數據段,Java有一個類似數據段的constant pool保存這個常量,在classloader加載這個類的時候就把"xyz"和這個類的其他一些信息放在constant   pool  new   String("xyz")根據常量"xyz"在heap上創建String對象所以,一共兩個對象 
51. 前幾天面試的時候遇到了一個很好的sql語句題.雖然不是很難,但如果沒實際做過項目,做起來還是有點難度的.特與大家分享.. 
題目大概意思是:有下面這樣一個方法,在此方法在被調用,在沒有數據更新時沒有進行判斷.請修改... public boolean xx() 

  String sql; 
  sql = "update user set name=?"; 
try{ 
  PreparedStatement ps = cn.prepareStatement(sql); 
  ps.setString(1,xxx); 
  ps.executeUpdate(); 
}catch(Exception e){ 
return false; 

return true; 

參考答案 
int n=ps.executeUpdate(); 
if(n==0){ 
return false; 

52. 什麼情況下調用doGet()和doPost()? 
  答:Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()。 
53 orward和redirect的區別 

  forward: an internal transfer in servlet 
  redirect: 重定向,有2次request,第2次request將丟失第一次的attributs/parameters等 

54. J2EE是技術還是平臺還是框架? 
J2EE本身是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。 

J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。 
55.作用域public,private,protected,以及不寫時的區別 
  答:區別如下: 
  作用域       當前類      同一package      子孫類       其他package 
  public         √            √             √              √ 
  protected      √            √             √              × 
  friendly       √            √             ×              × 
  private        √            ×             ×              × 
  不寫時默認爲friendly 
56、&和&&的區別 
  答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and) 
57、Collection 和 Collections的區別 
答:Collection是集合類的上級接口,繼承與他的接口主要有Set 和List. 
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作 
58.Math.round(11.5)等於多少? Math.round(-11.5)等於多少 
  答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數最接近的長整數,參數加1/2後求其floor 
59、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class) 
  答:接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數 
60、float型float f=3.4是否正確? 
  答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4; float f = 3.4f; 
61、運行時異常與一般異常有何異同 
  答:異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。 
61、一個".java"源文件中是否可以包括多個類(不是內部類)?有什麼限制? 
  答:可以。必須只有一個類名與文件名相同。 
62、在JAVA中,如何跳出當前的多重嵌套循環? 
  答:用break; return 方法。 
63、說出一些常用的類,包,接口,請各舉5個 
  答:常用的類:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer 
  常用的包:java.lang  java.awt  java.io  java.util  java.sql 
  常用的接口:Remote  List  Map  Runnable Serializable ActionListener 
64、sleep() 和 wait() 有什麼區別? 
  答:sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。 
  wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。 
65、C/S 與 B/S 區別: 
  答:有如下八個方面的不同: 
  1.硬件環境不同: 
  C/S 一般建立在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再通過專門服務器提供連接和數據交換服務. 
  B/S 建立在廣域網之上的, 不必是專門的網絡硬件環境,例與電話上網, 租用設備. 信息自己管理. 有比C/S更強的適應範圍, 一般只要有操作系統和瀏覽器就行 
2.對安全要求不同 
  C/S 一般面向相對固定的用戶羣, 對信息安全的控制能力很強. 一般高度機密的信息系統採用C/S 結構適宜. 可以通過B/S發佈部分可公開信息. 
  B/S 建立在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。 
  3.對程序架構不同 
  C/S 程序可以更加註重流程, 可以對權限多層次校驗, 對系統運行速度可以較少考慮. 
  B/S 對安全以及訪問速度的多重的考慮, 建立在需要更加優化的基礎之上. 比C/S有更高的要求 B/S結構的程序架構是發展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網絡的構件搭建的系統. SUN 和IBM推的JavaBean 構件技術等,使 B/S更加成熟. 
 3.對程序架構不同 
  C/S 程序可以更加註重流程, 可以對權限多層次校驗, 對系統運行速度可以較少考慮. 
  B/S 對安全以及訪問速度的多重的考慮, 建立在需要更加優化的基礎之上. 比C/S有更高的要求 B/S結構的程序架構是發展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網絡的構件搭建的系統. SUN 和IBM推的JavaBean 構件技術等,使 B/S更加成熟. 
  4.軟件重用不同 
  C/S 程序可以不可避免的整體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好. 
  B/S 對的多重結構,要求構件相對獨立的功能. 能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在牆上的石頭桌子 
  5.系統維護不同  
  C/S 程序由於整體性, 必須整體考察, 處理出現的問題以及系統升級. 升級難. 可能是再做一個全新的系統 
  B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.用戶從網上自己下載安裝就可以實現升級. 
  6.處理問題不同 
  C/S 程序可以處理用戶面固定, 並且在相同區域, 安全要求高需求, 與操作系統相關. 應該都是相同的系統 
  B/S 建立在廣域網上, 面向不同的用戶羣, 分散地域, 這是C/S無法作到的. 與操作系統平臺關係最小. 
  7.用戶接口不同 
  C/S 多是建立的Window平臺上,表現方法有限,對程序員普遍要求較高 
  B/S 建立在瀏覽器上, 有更加豐富和生動的表現方式與用戶交流. 並且大部分難度減低,減低開發成本. 
  8.信息流不同 
  C/S 程序一般是典型的中央集權的機械式處理, 交互性相對低 
  B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心
[上一篇] [下一篇]   (sln87 的分類目錄 [我的圖書館])
發表評論
暱稱:sln87
發送評論時內容自動複製到剪切板 
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章