Java Web 面試題

一、Tomcat的優化經驗javascript

答:去掉對web.xml的監視,把JSP提早編輯成Servlet;有富餘物理內存的狀況下,加大Tomcat使用的JVM內存。html

 

二、什麼是Servlet?java

答:能夠從兩個方面去看Servlet:mysql

a、API:有一個接口servlet,它是servlet規範中定義的用來處理客戶端請求的程序須要實現的頂級接口。程序員

b、組件:服務器端用來處理客戶端請求的組件,須要在web.xml文件中進行配置。web

 

三、Servlet的生命週期,並說出Servlet和CGI的區別?算法

答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。sql

      這個生存期由javax.servlet.servlet接口中的init、service、destroy方法表達。數據庫

     web容器加載servlet,生命週期開始。經過調用servlet的init()方法進行servlet的初始化。經過調用service()方法實現windows

     根據請求的不一樣調用不一樣的do**()方法。結束服務,web容器調用servlet的destroy()方法。

     

區別:

Servlet處於服務器進程中,它經過多線程運行service()方法,一個實例能夠服務於多個請求,而且實例通常不會被銷燬;而

CGI對每一個請求都產生一個新的進程,服務完成後就銷燬,全部效率低於Servlet。

 

四、Servlet的基本架構

答:

複製代碼
public class ServletName extends HttpServlet
{
     //初始化方法
     public void init()
     {
       ……
     }
     //GET請求處理的方法
     public void doGet(HttpServletRequest request,HttpServletResponse response)
     {
        ……
     }
      //POST請求處理的方法
     public void doPost(HttpServletRequest request,HttpServletResponse response)
     {
         ……
     }
       //結束服務的方法
     public void destroy()
     {
         ……
     }
}
複製代碼

 

五、Servlet API中forware()和redirect()的區別?

答:

a、瀏覽器顯示

     重定向會改變URL地址,請求轉發不會改變URL地址。

b、資源共享

     重定向不能夠資源共享,請求轉發能夠。

c、功能

    重定向能夠用URL絕對路徑訪問其餘Web服務器的資源,而請求轉發只能在一個Web應用程序內進行資源轉發,即服務器內部的一種操做。

d、效率

    重定向效率低,至關於再一次請求;請求轉發效率相對較高,跳轉僅發生在服務器端。

 

六、什麼狀況下調用doGet()和doPost()?

答:默認狀況是調用doGet()方法,JSP頁面中的Form表單的method屬性設置爲post的時候,調用的爲doPost()方法;爲get的時候,調用deGet()方法。

 

七、request.getParameter()和request.getAttribute()的區別?

答:

a、request.getParameter()獲取的類型是String;

    request.getAttribute()獲取的類型是Object

b、request.getPrameter()獲取的是POST/GET傳遞的參數值和URL中的參數;

     request.getAttribute()獲取的是對象容器中的數據值/對象

c、request.setAttribute()和request.getAttribute()能夠發送、接收對象;

    request.getParamter()只能接收字符串,官方不開放request.setParamter()(也就是沒有這個方法)

    setAttribute()和getAttribute()的傳參原理:

    setAttribute()是應用服務器把這個對象放在該頁面所對應的一塊內存中去,當你的頁面服務器重定向到另一個頁面時,

    應用服務器會把這塊內存拷貝到另外一個頁面所對應的那塊內存中。這個就能夠經過getAttribute()獲取到相應的參數值或者對象。

 

八、JSP有哪些內置對象?做用分別是什麼?

答:JSP一共有9個內置對象:

request:負責獲得客戶端請求的信息,對應類型:javax.servlet.http.HttpServletRequest

response:負責向客戶端發出響應,對應類型:javax.servlet.http.HttpServletResponse

session:負責保存同一客戶端一次會話過程當中的一些信息,對應類型:javax.servlet.http.httpsession

out:負責管理對客戶端的輸出,對應類型:javax.serlvet.jsp.jspwriter

application:表示整個應用環境的信息,對應類型:javax.servlet.servletcontext

config:表示ServletConfig,對應類型:javax.servlet.servletconfig

exception:表示頁面中發生的異常,能夠經過它得到頁面異常信息,對應類型:java.lang.exception

pagecontext:表示這個JSP頁面上下文,對應類型:javax.servlet.jsp.pagecontext

page:表示當前JSP頁面自己。

 

九、JSP有哪些動做?做用分別是什麼?

答:JSP一共有如下6中基本動做

  JSP:include       (當頁面被請求的時候引入一個文件)

  JSP:forward      (將請求轉到另外一個頁面)

  JSP:useBean     (得到JavaBean的一個實例)

  JSP:setProperty (設置JavaBean的屬性)

  JSP:getProperty (得到JavaBean的屬性)

  JSP:plugin         (根據瀏覽器類型爲Java插件生成object或者embed兩種標記)

 

十、JSP經常使用指令有哪些?

答:page、include、taglib

a、page指令:定義頁面的一些屬性,經常使用屬性:

contentType="text/html;charset=utf-8";    向瀏覽器端輸出數據的編碼

pageEncoding="utf-8";                            JSP編譯成java文件時所用的編碼

session="true"                                        是否自動建立session

b、include指令:引入一個靜態的JSP頁面

c、taglib指令:引入一個標籤庫

 

十一、JSP中動態include和靜態include的區別?

答 : a、靜態include:語法:<%@ include file="文件名" %>,至關於複製,編輯時將對應的文件包含進來,當內容變化時,不會再一次對其編譯,不易維護。

        b、動態include:語法:<jsp:include page="文件名">,可以自動檢查被包含文件,當客戶端對JSP文件進行請求時,會從新將對應的文件包含進來,進行實時的更新。

 

十二、頁面間對象傳遞的方法?

答:request、session、application、cookie等。

 

1三、JSP和Servlet有哪些相同點和不一樣點,他們之間的聯繫是什麼?

答:JSP是Servlet的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類Servlet"。Servlet和JSP最主要的不一樣點在於,Servlet的應用邏輯是在java文件中,而且徹底從表示層中的HTML裏分離開來。而JSP的狀況是java和HTML能夠組合成一個擴展名爲.jsp的文件。JSP偏重於視圖,Servlet偏重於業務邏輯。

 

1四、 詳細描述MVC。

答:基於java的web應用系統採用MVC設計模型,即用Model(模型)、View(視圖)和Controller(控制)分離設計,這是目前web應用服務系統的主流設置方向。

      Model:處理業務邏輯的模塊。

      View:負責頁面顯示,顯示Model的處理結果給用戶,主要實現數據到頁面的轉換過程。

      Controller:負責每一個請求的分發,把Form數據傳遞給Model進行處理,處理完成後,把處理結果返回給相應的View顯示給用戶。

 

1五、MVC各個部分都有哪些技術實現?如何實現?

答:MVC是Model-View-Controller的簡寫。Model表明應用的業務邏輯(經過JavaBean、EJB組件實現),View是引用的表示面(由JSP產生),Controller是提供應用的處理過程機制

(通常是一個Servelt),經過這種設計模型把應用邏輯、處理過程和顯示邏輯分紅不一樣的組件來實現。這些組件能夠交互和重用。

 

1六、咱們在web應用開發過程當中常常遇到輸出某種編碼的字符,如iso-8859-1等,如何輸出一個某種編碼的字符串?

答:下面這個例子是將iso-8859-1轉換成utf-8編碼方式。

複製代碼
public String Translate(String str)
{
   String s="";
   try{
         s=new String(str.getBytes("iso-8859-1"),"UTF-8");
         s=str.trim();
   }catch(Exception e){
        System.err.println(e.getMessage());
    }
return s; }
複製代碼

 

1七、get和post的區別?

a、get是用來從服務器上獲取數據,而post是用來向服務器傳遞數據;

b、get將表單中數據按照variable=value的形式,添加到action所指向的URL後面,而且二者用"?"鏈接,變量之間用"&"鏈接;

而post是將表單中的數據放在form的數據體中,按照變量與值對應的方式,傳遞到action所指定的URL。

c、get是不安全的,由於在傳輸過程當中,數據是被放在請求的URL中;而post的全部操做對用戶來講都是不可見的。

d、get傳輸的數據量小,這主要應爲受url長度限制;而post能夠傳輸大量的數據,全部上傳文件只能用post提交。

e、get限制form表單的數據集必須爲ASCII字符;而post支持整個IS01 0646字符集。

f、get是form表單的默認方法。

 

1八、javascript經常使用的方面?

答:數據校驗、頁面特殊效果等。

 

1九、經常使用的web容器和開發工具?

答:容器:Tomcat、Weblogic

     工具:Eclipse、Jbuilder

 

20、JSP的四種範圍?

答:a、page是表明一個頁面相關的對象和屬性。一個頁面由一個編譯好的java servlet類(能夠帶有include指令,但不能夠帶有include動做)表示。這既包括servlet又包括編譯成servlet的jsp頁面。

      b、request是表明與web客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個web組件(因爲forware指令和include動做的關係)

      c、session是表明與用於某個web客戶機的一個用戶體驗相關的對象和屬性。一個web回話也能夠常常跨域多個客戶機請求。

      d、application是表明與整個web應用程序相關的對象和屬性。這實質上是跨域整個web應用程序,包括多個頁面、請求和回話的一個全局做用域。

 

2一、應用服務器有哪些?

答:BEA Weblogic Server、IBM WebSphere Application Server、Oracle9i Application Server、JBoss、Tomcat。

 

2二、幾種回話跟蹤技術?

答:cookie、url重寫、hidden表單隱藏域、session

 

2三、Servlet執行時通常實現哪幾個方法?

答:

複製代碼
public void init(ServletConfig config){}

public ServletConfig getServeltConfig(){}

public String ServletInfo(){}

public void service(HttpServletRequest request,HttpServletResponse response){} 

public void destroy(){}
複製代碼

 

2四、簡述HttpSession的做用、使用方法,可用代碼說明。

答:HttpSession中能夠跟蹤並存儲用戶信息,把值設置到屬性中,有兩個方法:setAttribute("變量/對象","變量/對象");getAttribute("變量/對象");例如:在一個方法中用session.setAttribute("username",username);在session中設置一個屬性名爲username的變量或者對象,而後能夠在同一個session範圍內使用session.getAttribute("username"); 來獲得username屬性或者對象。

 

2五、J2EE是什麼?

答:J2EE如今叫作Java EE:是(Java platform,Enterprice Edition 企業版)的簡稱。企業版本開發和部署服務器應用程序。

      J2EE是Sun公司提出的多層(multi-tiered)、分佈式(distributed)、基於組件(component-base)的企業級應用模型(Enterprice Application Model)。

      在這樣一個應用系統中,可按照功能劃分不一樣的組件,這些組件又可在不一樣的計算機上,而且處理不一樣的層次(tier)中。所屬層次包括客戶層(client tier)、web層和組件、business層和組件、企業信息系統(EIS)層。

 

2六、J2EE是技術、平臺仍是框架?

答:J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。

     J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。

 

2七、cookie和session的做用、區別、應用範圍。

答:a、cookie數據保存在客戶端,session數據保存在服務端。

     b、cookie不是很安全,別人能夠分析存放在本地的cookie並進行cookie欺騙,至關重要的數據,應該使用session保存到服務端。

     c、session會在必定時間內保持在服務器上,可是會佔用內存資源,當訪問的用戶過多,會加劇服務器的負載,考慮到減輕服務器的壓力,能夠將不重要的數據放在cookie中持久的保存。

     d、單個cookie保存的數據不能超過4k,不少瀏覽器都限制站點最多保存20個cookie。

 

2八、JSTL是什麼?優勢有哪些?

答:JSTL(JSP Standard Tag Library,JSP標準標籤庫)是一個不斷完善的開放源代碼的JSP標籤庫,由四個定製標記庫(core、format、xml、sql)和一對通用標記庫驗證器(ScriptFreeTLV和PermittedTaglibsTLV)組成。優勢有:

a、在應用程序服務器之間提供了一致的接口,最大程度的提升了web應用在各應用服務器之間的移植。

b、簡化了JSP和web應用程序的開發。

c、以一種統一的方式減小了JSP中scriptlet代碼數據,能夠達到沒有任何scriptlet代碼的代碼。在咱們公司的項目中是不容許任何scriptlet出如今JSP中。

d、容許JSP設計工具與web應用程序開發的進一步集成。相信不久就會有支持JSTL的IDE開發工具出現。

 

2九、J2EE的優越性主要表如今那些方面?

答:a、J2EE基於Java技術,與平臺無關。

      b、J2EE提供了一個優秀的企業級應用程序框架,對快速高質量的開發系統打下了基礎。

      c、J2EE提供至關專業的通用軟件服務。

     d、J2EE擁有開放標準,許多大型公司實現了該規範支持的應用服務器。如:BEA、IBM、Oracle等。

 

30、JSP頁面是如何被執行的?JSP執行效率比Servlet低嗎?

答:當客戶端向一個JSP頁面發出請求時,Web Container將JSP轉換成Servlet的源代碼(只是第一次請求時),而後編譯轉化後的Servlet並加載到內存中執行,執行的結果Response到客戶端。

JSP只在第一次執行的時候會轉化爲Servlet,之後的每次執行Web容器都是直接執行編譯後的Servlet,全部JSP和Servlet只有第一次執行的時候不同,JSP慢一點,之後的執行都是相同的。

 

3一、JSP如何處理運行時異常(run-time)exception?

答:但是使用頁面的errorPaga屬性捕捉沒有處理的運行時異常,而後自動轉向到一個錯誤處理頁面,代碼以下:

<%@page errorPage="錯誤頁面URL"%>

若是在頁面請求時出現運行時異常時,以上代碼會將代碼轉向到錯誤頁面,在錯誤頁面裏面,能夠經過如下代碼定義這個頁面是錯誤處理頁面:

<%@page isErrorPage="true"%>

這樣描述錯誤信息的Throwable對象就能夠在錯誤頁面裏面訪問到。

 

3二、若是JSP表單元素的值爲空,如何避免null出如今頁面上?

答:能夠寫一個簡單的函數對空值進行處理,判斷值是否爲空,若是爲空就返回空字符串。實例代碼以下:

複製代碼
<%!
   String blanknull(String e)
  {
      return (e==null)?"":s;
  }  
%>
<%
   <input type="text" name="username" value="<%=blanknull(username)%>"
%>
複製代碼

 

3三、如何避免JSP頁面自動生成session對象?爲何要這麼作?

 答:在默認狀況下,在對一個JSP頁面發出請求時,若是session尚未創建,那麼JSP頁面會自動爲請求建立一個session對象,可是session是比較消耗資源的,若是沒有必要保持和使用session,就不該該建立session,例如一些只用來宣傳產品的網頁,每每不必使用session來保存信息,能夠在JSP中使用page指令進行設置,避免JSP頁面爲每一個請求都自動建立session。實例代碼以下:

<%@page session="false"%>

 

3四、在servlet和JSP之間能共享session對象嗎?

答:Yes

HttpSession session=request.getsession(false);
session.getAttribute"變量名");   //獲取保存在session容器中的變量

 

3五、使用JSP鏈接數據庫鏈接緩衝池的最好的方法是什麼?

答:a、使用JDBC2.0中帶有此服務的Driver

      b、使用提供此服務的application server

 

3六、在JSP中如何寫文本文件?

答:使用PrintWriter對象:

複製代碼
<%@page improt="java.io.*"%>
<%
      String str="HelloWorld!";
      File file=new File("1.txt");
      file.createNewFile();
      try{
           FileOutPutStream fops=new FileOutPutStream(file);
           PrintWriter pw=new PrintWriter(fops);
           pw.println(str);
           pw.flush();
           pw.close();
}
%>
複製代碼

 

3七、JSP的缺點?

答:a、大多數的Servlet引擎不支持connection pooling。

      b、Servlet引擎沒有標準。

      c、JSP與其餘腳本語言的交互。

      d、不易對Java程序進行調試。

 

3八、在JSP頁面中如何刪除一個cookie?

答:

<%
     Cookie cookie=new Cookie("cookie名","cookie值");
     cookie.setMaxAge(0);
     cookie.setPath("/");
     response.addCookie(cookie);
%>

 

3九、如何實現servlet的單線程模式?

答:在JSP中使用page指令進行設置,具體代碼以下:

<%@page isThreadSafe="false"%>

 

40、HttpServlet類中主要方法有哪些?

 

4一、XML文檔定義有幾種形式?他們之間有何本質區別?解析XML文檔有哪幾種方式?

答:a、兩種形式:DTD、schema

     b、本質區別:schema自己是xml的,能夠被XML解析器解析(這也是從dtd上發展schema的根本目的。)

     c、有DOM、SAX、STAX等。

DOM:處理大型文件時性能降低的很是厲害。這個問題是由DOM的樹結構所形成的,這種結構佔用的內存較多,並且DOM必須在解析文件以前就把整個文檔裝入內存,適合對XML的隨機訪問;

SAX:是事件驅動型的XML解析方式。它順序讀取XML文件,不須要一次所有裝載這個XML文件。當遇到向文件開頭、文件結束或者標籤開頭、標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問。

STAX:Streaming API for XML

 

4二、你在項目中用到了XML技術的哪些方面?如何實現的?

答:用到了數據存儲、信息配置兩方面。

在作數據交換平臺時,將不能數據源的數據組裝成XML文件,而後將XML文件壓縮打包加密後經過網絡傳送給接受者,接收解密與解壓縮後再同XML文件中還原相關信息進行處理。

在作軟件配置時,利用XML能夠和方便的進行,軟件的各類配置參數都存儲在XML文件中。

 

4三、EL表達式的功能,爲何要用EL表達式?(Expression Language)

答:

功能:

a、從四個域對象中取出數據數據顯示。

b、取出請求參數數據顯示。

緣由:

在頁面中用jsp腳本和jsp表達式來獲取數據顯示比較麻煩

a、須要判斷

b、可能須要強轉

 

4四、JSTL的功能,爲何要用JSTL?(JavaServer Pages Standard Tag Library)

答:

功能:主要用於基本輸入輸出、流程控制、循環、XML文件剖析、數據庫查詢及國際化和文字格式標準化的應用等。

緣由:在jsp頁面作條件判斷或者循環操做並輸出時,比較費力。

 

4五、爲何要使用自定義標籤?MyTag如何實現?

答:

緣由:

a、不想在jsp中編寫java代碼

b、JSTL標籤庫不能知足實際項目的需求

實現的流程:

a、編寫標籤處理器類(SimpleTagSupport的實現類)

     重寫doTag()

b、編寫標籤庫文件(WEB-INF/xxx.tld)

     整個文件的定義:<short-name>  uri

     標籤的定義:<tag>

c、在jsp頁面中使用標籤:

    導入標籤庫(xxx.tld)

    使用標籤

 

4六、說說自動登陸功能的編碼實現?

答:a、登陸功能是用session實現的,就是向session對象中保存當前用戶的對象。

      b、自動功能是用cookie實現的,就是登陸時將用戶的信息保存爲持久cookie。

      c、下次訪問時,讀取請求中若是有用戶信息的cookie就能夠自動登陸。

 

4七、如何防止表單重複提交?

答:使用session技術:

a、在regist.jsp頁面中生成一個爲一個隨機值,將其保存到session中,同時將其保存爲表單的隱藏域的值。

b、在處理註冊的請求時,獲取session中的值,獲取請求參數的值,比較二者是否相同,若是相同說明不是重複提交,請求經過同時刪除session中保存的的值,若是不相同則是重複提交,不能經過。

 

4八、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):刪除請求中的一個屬性

 

4九、Tomcat根目錄下有哪些文件?

答:

a、config:配置文件存放路徑

b、webapps:項目部署的目錄

c、bin Tomcat運行須要的腳本與jar的目錄

d、lib:運行項目時所須要的jar的目錄

e、word:部署項目的緩存目錄

f、temp:臨時文件的存放目錄

g、logs:記錄日誌的目錄

 

50、什麼是Tomcat,怎樣啓動中止,配置文件,日誌文件的存儲?

答:Tomcat是一種web服務器,java編寫的web項目能夠部署在上面,用戶在客戶端請求時,都是將請求發到Tomcat上,Tomcat在將請求發到對應的項目上。

啓動Tomcat:

在windows下:進入bin目錄,雙擊startup.bat

在Linux下:cd進入bin目錄,sh startup.sh

在開發工具Eclipse下:右鍵選擇debug server或者run server

中止Tomcat:

在windows下:進入bin目錄,雙擊shutdown.bat

在Linux下:cd進入bin目錄,sh shutdown.sh

在開發工具Eclipse下:右鍵選擇stop server

配置文件在Tomcat的config目錄下

日誌文件在Tomcat的logs目錄下

 

5一、實例化servlet有幾種方式?

答:有兩種方式

a、第一次請求時,實例化servlet對象

b、在web.xml文件中,在servlet標籤中添加loadon-startup標籤,tomcat啓動時就會實例化servlet對象。

 

5二、JSP亂碼如何解決?

答:a、JSP頁面亂碼

     <%@page contentType="text/html;charset=utf-8" %>

     b、表單提交時出現亂碼

     request.setCharacterEncoding("utf-8");

     c、數據庫出現亂碼

     jdbc:mysql://localhost:3306:/user?useSSL=false&useUnicode=true&characterEncoding=utf-8;

     其實我通常的處理的方法就是配置一個過濾器對每一個JSP頁面進行字符集處理。

 

5三、session和application的區別?

答:a、二者的做用範圍不一樣

    session是用戶級別的,application是web應用程序級別的,是一個全局做用域。

    一個用戶一個session,每一個用戶的session不一樣,用戶所訪問的網站多個頁面共享同一個session。

    一個web應用程序一個application對象,每一個web應用程序的application對象不一樣,可是一個web應用程序的多個用戶之間共享一個application。

   b、生命週期不一樣

   session:用戶首次在網站中發出請求建立session,用戶註銷、離開網站或者關閉瀏覽器消亡。

   application:啓動web服務器建立,關閉web服務器銷燬。

 

5四、在Eclipse中調試時,怎樣查看一個變量的值?

答:在要查看的變量前先設置斷點,而後選中變量,右鍵選擇debug as →Java Application,打開debug視圖,這時在Variables窗口中能夠看到變量當前的值。

若是是局部變量,也能夠在局部變量窗口中查看。要知道一個方法被調用的方法調用鏈,能夠在方法棧中查看。

 

5五、大家公司使用的代碼配置管理工具是什麼?

答:除了說之前使用的CVS,如今新項目使用SVN了,還簡要說一下使用的過程,若是有可能,還說說倉庫的概念和如何使用鎖之類的細節。

 

5六、大家項目總金額多少,多少人開發,總共花了多少個月?

答:像巴巴運動網這種規模的項目,能夠說是四、5我的開發了四五個月,費用則是四五十萬。按每人每個月兩萬收入去計算就差很少了。

 

5七、什麼是重量級?什麼是輕量級?

答:輕量級是指它的建立和銷燬不須要消耗太多的資源,意味着能夠在程序中常常建立和銷燬session對象。

     重量級意味着不能隨意的建立和銷燬它的實例,會佔用太多的資源。

 

5八、如何從form表單中獲取checkbox的值?

答:能夠在頁面將checkbox的name屬性設置相同,value屬性取每一個條目的id,在後臺使用request.getParametervalues("name");獲取一組值。

 

5九、過濾器有哪些做用?

答:a、能夠驗證客戶是否來自可信的網絡

     b、能夠對客戶提交的數據進行重寫編碼

     c、能夠從系統裏得到配置的信息

     d、能夠過濾掉客戶某些不該該出現的詞彙

     e、驗證客戶是否登陸

     f、驗證客戶的瀏覽器是否支持當前的應用

     g、能夠記錄系統的日誌

 

60、過濾器的用法?(對客戶端的請求統一編碼和對客戶端進行驗證)

答:實現Filter接口,同時重寫Filter接口的三個方法:

     init(FilterConfig config)    用於獲取FilterConfig對象

    doFilter(ServletRequest request,ServeltResponse response,FilterChain chain)   進行過濾處理一些業務

    destroy()    銷燬Filter

 

6一、C/S與B/S的區別?

答:有以下8個方面的不一樣:

a、硬件環境的不一樣

  C/S:通常創建在專用的網絡上,小範圍裏的網絡環境,局域網之間再經過專門服務器提供鏈接和數據交換服務。
  B/S:創建在廣域網之上的,沒必要是專門的網絡硬件環境,有比C/S更強的適應範圍,通常只要有操做系統和瀏覽器就行。
b、對安全要求不一樣 
  C/S:通常面向相對固定的用戶羣,對信息安全的控制能力很強。通常高度機密的信息系統採用C/S結構適宜。
  B/S:創建在廣域網之上,對安全的控制能力相對弱,可能面向不可知的用戶。
c、對程序架構不一樣 
  C/S:程序能夠更加註重流程,能夠對權限多層次校驗,對系統運行速度能夠較少考慮。
  B/S:對安全以及訪問速度的多重的考慮,創建在須要更加優化的基礎之上。
d、軟件重用不一樣 
  C/S:程序能夠不可避免的總體性考慮,構件的重用性不如在B/S要求下的構件的重用性好.
  B/S:對的多重結構,要求構件相對獨立的功能。
e、系統維護不一樣  
  C/S:程序因爲總體性,必須總體考察,處理出現的問題以及系統升級。
  B/S:構件組成,方面構件個別的更換,實現系統的無縫升級。
f、處理問題不一樣 
  C/S:程序能夠處理用戶面固定,而且在相同區域,安全要求高需求,與操做系統相關。
  B/S:創建在廣域網上,面向不一樣的用戶羣,分散地域,這是C/S沒法做到的。 
g、用戶接口不一樣 
  C/S:可能是創建的Window平臺上,表現方法有限,對程序員廣泛要求較高。
  B/S:創建在瀏覽器上,有更加豐富和生動的表現方式與用戶交流;而且大部分難度減低,減低開發成本。
h、信息流不一樣 
  C/S:程序通常是典型的中央集權的機械式處理,交互性相對低。
  B/S:信息流向可變化,B-B B-C B-G等信息、流向的變化,更像交易中心。

 

6二、什麼是web容器?

答:給處於其中的應用程序組件(JSP、Servlet)提供一個環境,是JSP、Servlet直接跟容器中的變量交互,沒必要關注其餘系統問題。

主要有web服務器來實現。例如:tomcat、weblogic、sphere、JBoss等。該容器提供的接口嚴格遵照J2EE規範中的web application標準。

咱們把遵照以上標準的web服務器叫作J2EE的web容器。

 

6三、什麼是EJB容器?

答:Enterprice Java Bean容器。它提供給運行在其中的組件EJB各類管理功能。只要知足J2EE規範的EJB放入該容器,立刻就會被容器

進行高效率的管理。而且能夠經過現成的接口來得到系統級別的服務。例如:郵件服務、事務管理……

 

6四、開發中都用到了哪些設計模式?用在什麼場合?

答:每一個模式都描述了一個在咱們的環境中不斷出現的問題,而後描述了該問題的解決方案的核心。經過這種方式,你能夠無數次的使用

哪些已有的解決方案,無需再重複相同的工做。主要用到了MVC設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。

 

6五、說說你所熟悉的或據說過的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:經過AttributeAccess接口簡化EntityBean數據提供特性

Business Interface:經過遠程(本地)接口和Bean類實現相同接口規範業務邏輯一致性

EJB架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍餘越龐大,則越能體現良好設計的重要性。

 

6六、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 Responsibility(責任鏈模式)、

工廠模式:工廠模式是一種常常被使用到的模式,根據工廠模式實現的類能夠根據提供的數據生成一組類中某個類的實例,一般一組類中有一個公共的抽象父類而且實現了相同的方法,可是這些方法針對不一樣的數據進行了不一樣的操做。首先須要定義一個基類,該類的子類經過不一樣的方法實現了基類中的方法。而後定義一個工廠類,工廠類能夠根據條件生成不一樣的子類實例。當獲得子類的實例後,開發人員能夠調用基類中的方法而沒必要考慮到底返回的是哪個子類的實例。

 

6七、EJB2.0有哪些內容?分別用在什麼場合?EJB2.0和EJB2.1的區別?

答:規範內容包括Bean提供者,應用程序裝配者,EJB容器,EJB配置工具,EJB服務提供者,系統管理員。這裏面,EJB容器是EJB之全部可以運行的核心。

EJB容器管理着EJB的建立,撤消,激活,去活,與數據庫的鏈接等等重要的核心工做。

 

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組件。

  

6九、EJB的基本架構

複製代碼
//Remote Interface接口的代碼 
package Beans; 
import javax.ejb.EJBObject; 
import java.rmi.RemoteException; 
public interface Add extends EJBObject { 
//some method declare 
} 
//Home Interface接口的代碼 
package Beans; 
import java.rmi.RemoteException; 
import jaax.ejb.CreateException; 
import javax.ejb.EJBHome; 
public interface AddHome extends EJBHome { 
//some method declare 
} 
//EJB類的代碼 
package Beans; 
import java.rmi.RemoteException; 
import javax.ejb.SessionBean; 
import javx.ejb.SessionContext; 
public class AddBean Implements SessionBean { 
//some method declare 
} 
複製代碼

 

 70、存儲過程和函數的區別

答:存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或者其餘對象的任務,用戶能夠調用存儲過程,而函數一般是數據庫

已定義的方法,它接受參數並返回某種類型的值而且不涉及特定用戶表。

 

7一、什麼是事務?

答:事務時做爲一個邏輯單元執行的一系列操做,一個邏輯工做單元必須有四個屬性,稱爲ACID(原子性、一致性、隔離性和持久性)屬性,

只有這樣才能成爲一個事務:

原子性:事務必須是原子工做單元,對於其數據修改,要麼全都執行,要麼全都不執行。

一致性:事務在完成時,必須使全部的數據保持一致的狀態。在相關數據庫中,全部規則都必須應用於事務的修改,以保持全部數據的完整性。事務結束時,全部的內部數據結構(如B樹索引或雙向鏈表)都必須是正確的。

隔離性:由併發事務所作的修改必須與任何其餘併發事務所作的修改隔離。事務查看數據時數據所處的狀態,要麼是另外一併發事務修改它以前

的狀態,要麼是另外一併發事務修改它以後的狀態,事務不會查看中間狀態的數據。這稱爲可串行性,由於它可以從新裝載起始數據,而且重播

一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。

持久性:事務完成後,它對於系統的影響是永久性的。該修改即便出現系統故障也將一直保持。

 

7二、觸發器分爲事前觸發和過後觸發,兩種觸發有什麼區別?語句級觸發和行級觸發有什麼區別?

答:事前觸發運行於觸發事件發生以前,而過後觸發運行於觸發事件發生以後。一般事前觸發器能夠獲取事件以前和新的字段值。

語句級觸發能夠在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。

 

7三、EJB容器提供的服務

答:主要提供聲明週期管理、代碼產生、持續性管理、安全、事務管理、鎖和併發行管理等服務。

 

7四、EJB的三個角色和三個對象

答:角色:EJB角色主要包括Bean開發者、應用組裝者、部署者、系統管理員、EJB容器提供者、EJB服務器提供者。

     對象:Remote(Local)接口、Home(LocalHome)接口、Bean類

 

7五、EJB的幾種類型?

答:會話(Session) Bean,實體(Entity)Bean、消息驅動的(Message Driven)Bean

     會話Bean又可分爲有狀態(Stateful)和無狀態(Stateless)

     實體Bean可分爲Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種

 

7六、Bean實例的生命週期

答:對於Stateless Session Bean、Entity Bean、Message Driven Bean通常存在緩衝池管理,而對於Entity Bean和

Stateful Session Bean存在Cache管理,一般包含建立實例,設置上下文、建立EJB Object(create)、業務方法調用、

remove等過程,對於存在緩衝池管理的Bean,在create以後實例並不從內存清除,而是採用緩衝池機制不斷重用實例;

而對於存在Cache管理的Bean,則經過激活或去激活機制保持Bean的狀態並限制內存中實例數量。

 

 7七、激活機制

答:以Stateful Session Bean爲例:其Cache大小決定了內存中能夠同時存在的Bean實例的數量,根據MRU或NRU算法,

實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個EJB實例業務方法時,若是對應的EJB Object發現本身

沒有捆綁對應的Bean實例,則從其去激活Bean存儲中(經過序列化機制存儲實例)回覆(激活)此實例。狀態變遷前會

調用對應的EJB Active 和EJB Passivate方法。

 

 7八、remote接口和home接口的做用

答:remote接口中定義了業務方法,用於EJB用戶調用業務方法。

     home是EJB工廠用於建立、移除和查找EJB實例

 

7九、客服端調用EJB對象的幾個基本步驟

答:a、設置JNDI服務工廠以及JNDI服務地址系統屬性

   b、查找home接口

   c、從home接口調用create方法建立remote接口

   d、經過remote接口調用其業務方法

 

 

 轉發Darren丶阿新 的,供參考

相關文章
相關標籤/搜索