Java Web 面試題2

一、Servlet 的生命週期,並說出 Servlet 與 CGI 的區別

Web 容器加載 Servlet 並將其實例化後,Servlet 生命週期開始,容器運行其 init 方法進行 Servlet 的初始化,請求到達時運行其 service 方法,service 方法自動派遣,運行請求的 doXXX 方法(doGet、doPost),當服務器決定將實例銷燬的時候調用其 Destroy 方法。與 CGI 的區別在於,Servlet 處於服務器進程中,它經過多線程方式運行其 service 方法,一個實例能夠運行多個請求,而且其實例通常不會銷燬,而 CGI 對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於 Servlet。html

 

二、forward 與 redirect 的區別

forward 是控制權的轉向,是服務器請求資源,服務器直接請求目標地址的 URL,把那個 URL 的響應內容讀取過來,而後把這些內容再發給瀏覽器。瀏覽器不知道服務器發送的內容是哪兒來的,因此它的地址仍是原來的地址。redirect 就是服務器端根據邏輯,發送一個狀態碼,告訴瀏覽器去請求一個新的地址,瀏覽器地址欄上顯示的是新的請求地址。forward 更高效。有些狀況下,若是須要使用其它服務器上的資源,則必須使用 redirectjava

 

三、JSP 中動態 include 與靜態 include 的區別

動態 include 用 jsp:include 動做實現:<jsp:include page="test.jsjp" flush="true"/>,它老是檢查所包含文件中的變化,適用於包含動態頁面,而且能夠帶參數;靜態 include 用 include 僞代碼實現,它不會檢查所含文件的變化,適用於包含靜態頁面:<%@ include file="test.html" %>web

 

四、JSP 有哪些內置對象,做用是什麼

request:同 Servlet 裏的requestsql

response:同 Servlet 裏的response數據庫

session:同 request.getSession()編程

application:同 request.getServletContext後端

out:同 response.getWriter()設計模式

config:同 Servelt 的 init 方法裏的 ServletConfig 參數瀏覽器

page:表示該頁面產生的一個 Servlet 實例緩存

exception:針對錯誤網頁,未捕捉的除外

 

五、JSP 的經常使用指令

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

<%@ include file="test.html" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>

 

六、JSP 有哪些動做,分別是什麼

JSP 共有如下 6 種動做

jsp:include 在頁面被請求時引用一個文件

jsp:useBean 尋找或實例化一個 JavaBean

jsp:setProperty 設置 JavaBean 的屬性

jsjp:getProperty 輸出某個 JavaBean 的屬性

jsp:forward 轉發

jsp:plugin 根據瀏覽器類型爲 Java 插件生成 object 標記

 

七、GET 與 POST 的區別

form 中的 get 和 post 方法,在數據傳輸過程當中分別對應了 http 協議中的  GET 與 POST 方法。

GET 是用來從服務器上獲取數據,而 POST 是用來向服務器上傳數據

GET 將表單中數據按 variable=value 的形式,添加到 action 所指向的 URL 後面,二者使用「?」鏈接,而多個變量之間使用「&」鏈接;POST 是將表單中的數據放在 form 的數據體中,按照變量和值相對應的方式,傳遞到 action 所指向的 URL

GET 是不安全的,由於在傳輸過程,數據被放在請求的 URL 中;POST 的全部操做對用戶來講是不可見的

GET傳輸的數據量小,這主要是由於受 URL 長度限制;POST 能夠傳輸大量的數據,因此上傳文件只能使用 POST

GET 限制 form 表單的數據集必須爲 ASCII 字符,而 POST 支持整個 ISO10646 字符集

GET 是 form 的默認方法

 

八、經常使用的 web 容器和開發工具

最經常使用的容器:tomcat、weblogic

開發工具:eclipse、jbuilder、ItelliJ IDEA

 

九、Web Application 的基本目錄結構

webapps

    application

        jsp 頁面

        WEB-INF

            classes

            lib

            web.xml

            jsp 頁面

        META-INF

 

十、JSP 和 Servlet 有哪些相同點和不一樣點,它們之間的聯繫是什麼

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

 

十一、JSP 的四種數據共享範圍

pageContext 是表明與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Servlet 類(能夠帶有任何的 include 指令,沒有 include 動做)表示。這既包括 Servlet 又包括被編譯成 Servlet 的 JSP 頁面

Request 是代碼 web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 web 組件(因爲 forward 指令和 include 動做的關係)

Session 是表明與用於某個 web 客戶機的一個用戶體驗相關的對象和屬性。一個 web 會話能夠也常常或跨越多個客戶機請求

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

 

十二、對 MVC 的理解,MVC 有什麼優缺點,結合Struts,說明在一個 Web 應用中如何去使用

基於 Java 的 Web 應用系統採用 MVC 架構模式,即 model(模型)、view(視圖)、control(控制器)分離設計;這是目前 Web 應用服務系統的主流設計方向

MVC 設計模式:應用觀察者模式的框架模式

model:處理業務邏輯的模塊,每一種處理一個模塊(模型,操做數據的業務處理層,並獨立於表現層)

view:負責頁面顯示,顯示 model 處理結果給用戶,主要實現數據到頁面轉換過程(視圖,經過客戶端數據類型顯示數據,並回顯模型層的執行結果)

control:負責請求分發,把 form 數據傳遞給 model 處理,把處理結果的數據傳遞給 view 顯示(控制器,視圖層和模型層的橋樑,控制數據的流向,接受視圖發出的事件,並重繪視圖)

JSP + Servlet + JavaBean,以控制器爲核心,JSP 只負責顯示和收集數據,Servlet,鏈接視圖和模型,將視圖層數據發送給模型層,JavaBean,分爲業務類和數據實體,業務類處理業務數據,數據實體承載數據,基本上大多數的項目都是使用這種 MVC 的實現模式

 

1三、會話跟蹤技術

Cookie、URL 重寫、設置表單隱藏域

 

1四、過濾器有哪些做用

驗證客戶是否來自可信網絡

對客戶提交的數據進行從新編碼

過濾掉客戶的某些不該該出現的詞彙

驗證用戶是否能夠登陸

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

記錄系統日誌

 

1五、web.xml 的做用

用戶配置 web 應用的信息,如 listener、filter、Servlet

 

1六、經常使用的 JSTL 標籤

<c:if>

<c:choose>、<c:when>、<c:otherwise>

<c:forEach>

<c:set>

 

1七、中間件

中間件就是程序中可植入的,可重用的,與業務邏輯無關的各類組件

中間件是基礎軟件的一大類,屬於可複用軟件的範疇。顧名思義,中間件處於操做系統軟件與用戶的應用軟件的中間。中間件在操做系統、網絡和數據庫之上,應用軟件的下層,總的做用是爲處於本身上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效的開發和集成複雜的應用軟件

中間件是一種獨立的系統軟件或服務程序,分佈式應用軟件藉助這種軟件在不一樣的技術之間共享資源,中間件位於客戶機服務器的操做系統之上,管理計算資源和網絡通訊。

舉例:

RMI(Remote Method Invocation)遠程調用

Load Balancing 負載均衡,將訪問符合分散到各個服務器中

Treasparent Fail-over 透明的故障切換

Clustering 集羣,用多個小的服務器代替大型機

Back-end-Integration 後端集成,用現有的、新開發的系統如何去集成遺留的系統

Transaction 事務(全局事務:分佈式事務)(局部事務:在同一數據庫鏈接內的事務)

Dynamic Redeployment 動態從新部署,在不中止原系統的狀況下,部署新的系統

System Managerment 系統管理

Threading 多線程處理

Message-oriented Middleware 面向消息的中間件(異步的調用編程)

Component Life Cycle 組件的生命週期管理

Resource pooling 資源池

Security 安全

Caching 緩存

 

1八、如何輸出某種編碼的字符串

String str = new String("testABC".getBytes("iso-8859-1"), "utf-8");

 

1九、J2EE 是技術仍是平臺仍是框架

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

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

 

20、什麼是 ORM

對象關係映射(Object-Relational Mapping)是一種爲了解決面向對象與面向關係數據庫存在的互不匹配的技術,簡單說,ORM 是經過使用描述對象和數據庫之間映射的元數據,將 Java 程序中的對象自動持久化到關係數據庫中,本質上就是將數據從一種形式轉換到另外一種形式

 

2一、Hibernate 的 5 個核心接口

Configuration:配置 Hibernate,根據其啓動 Hibernate,建立 SessionFactory 對象

SessionFactory:初始化 Hibernate,充當數據存儲源的代理,建立 session 對象,SessionFactory 是線程安全的,意味着它的同一個實例能夠被應用的多個線程共享,是重量級、二級緩存

Session:負責保存、更新、刪除、加載和查詢對象,是線程不安全的,避免多個線程共享一個 session,是輕量級、一級緩存

Query 和 Criteria:執行數據庫的查詢

 

2二、Hibernate 是如何處理事務的

Hibernate 的事務其實是底層的 JDBC Transaction 的封裝或者是 JTA Transaction 的封裝,默認狀況下使用 JDBC Transaction

 

2三、Connection 類中有哪幾個事務處理方法

setAutoCommit(boolean autoCommint):設置是否自動提交事務,默認爲自動提交

commint():提交事務

rollback():回滾事務

 

2四、JDBC 中訪問數據庫的步驟、Statement 和 PreparedStatement 的區別

Java 中訪問數據庫的步驟以下

1)註冊驅動

2)創建鏈接

3)建立 Statement

4)執行 sql 語句

5)處理結果集(若 sql 語句爲查詢語句)

6)關閉鏈接

Statement、PreparedStatement 區別

1) 建立時的區別:

    Statement stm = con.createStatement();

    PreparedStatement pstm = con.prepareStatement(sql);

執行的時候:

    stm.execute(sql);

    pstm.execute();

2) PreparedStatement 一旦綁定了 SQL,此 pstm 就不能執行其它的 SQL,即只能執行一條 SQL 命令;Statement 能夠執行多條 SQL 命令。

3) 對於執行同構的 SQL(只有參數值不一樣,其它SQL 結構都相同),用 PreparedStatement 的執行效率比較高,支持預編譯,能夠執行批量處理任務;對於異構的SQL 語句,Statement 的執行效率較高。

4) 代碼的可讀性和可維護性;(例如一個insert 的 SQL 語句,stm 在 SQL 中須要用字符形式寫入傳遞的參數,pstm 提供方法傳遞參數,而且過濾掉SQL 中的特俗字符「 ’」,「-」)。

5) PreparedStatement 提升了安全性,防止了SQL 注入,但 Statement 不能實現,只能作判斷和過濾。

 

2五、Hibernate 中 Java 對象的三種狀態,對象分別如何進入某種狀態

1)臨時狀態(transient)

特徵:

不處於 Session 緩存中

數據庫中沒有對象記錄

Java 對象若是進入臨時狀態:

經過 new 語句建立一個對象時

當調用 session 的 delete() 方法,從 session 緩存刪除一個對象時

2)持久化狀態(persisted)

特徵:

處於 session 緩存中

數據庫中有對象記錄

session 在特定時刻會保持兩者同步

Java 對象如何進入持久化狀態

session 的 save() 從臨時狀態到持久化狀態

session 的 load(), get() 方法返回的對象

session 的 find() 返回的 list 集合中存放的對象

session 的 update(), saveOrUpdate() 使遊離態到持久化狀態

3)遊離狀態(detached)

特徵:

再也不位於 session 緩存中

遊離對象由持久化狀態轉變而來,數據庫中可能還有對應記錄

Java 對象如何從持久化狀態到遊離狀態

session 的 close() 方法

session 的 evict() 方法,從緩存中刪除一個對象。 提升性能,少用。

 

2六、JDBC 相對於 Hibernate 的優點

JDBC 效率高、直接操做數據庫比較靈活

 

2七、Hibernate 如何延時加載

當 Hibernate 在查詢數據的時候,數據並無存在內存中,當程序真正對數據進行操做時,對象才存在內存中,就實現了延時加載。節省了服務器的內存開銷,從而提升了服務器的性能

 

2八、session.load() 與 session.get() 的區別

均可以根據指定的實體類和 id 從數據庫讀取記錄,並返回與之對應的實體對象

若是沒有發現符合條件的記錄,get 方法返回 null,而 load 方法會拋出一個 ObjectNotFundException

 

2九、cookie 機制與 session 機制的區別

cookie 機制採用的是在客戶端保持狀態的方案,而 session 機制採用的是在服務器端保持狀態的方案。因爲服務器端保持狀態的方案也須要在客戶端保存一個標識,全部,session 機制可能須要藉助於 cookie 機制來達到保存標識的目的

 

轉發495303098的,供參考學習

相關文章
相關標籤/搜索