javaWeb面試題(重要)

1.Javaweb 技術的結構

 1.1 技術結構圖javascript

1.2. 結構圖說明:html

總體分爲四個部分:java

  1. 黑線: JavaScript 相關技術路線
  2. 藍線: Servlet 相關技術路線
  3. 紅線: Jsp 相關技術路線
  4. 紫線: Web 會話相關技術路線

2.JavaScript 相關技術路線(黑線)

此部分包括: JavaScript, Jquery, Ajax, XML, JSON 和 HTML 等技術.jquery

2.1BOM中經常使用的全局變量與方法web

全局對象: windowajax

全局變量: document  location  history  navigator  screen sql

全局方法:alert()  confirm()  prompt()  open()  close() 數據庫

2.2如何在JS中建立一個對象數組

2.3JS獲取對象屬性瀏覽器

 

 

2.4 Ajax 技術

Ajax 原理

Ajax 的原理簡單來講經過 XmlHttpRequest 對象來向服務器發異步請求,從服務器得到數據,而後用 javascript 來操做 DOM 而更新頁面的局部顯示。

 

Ajax 的優勢:

1.最大的一點是頁面無刷新,給用戶的體驗很是好。

2.使用異步方式與服務器通訊,不須要打斷用戶操做,具備更加迅速的響應能力。

3.ajax 的原則是「按需取數據」,最大程度的減小冗餘請求,減小服務器的負荷。

 

Ajax 的缺點:

1.破壞瀏覽器後退按鈕的正常行爲。在動態更新頁面後,用戶沒法回到前一個頁面的狀態.

2.使用 JavaScript 做 Ajax 的引擎,JavaScript 的兼容性和 Debug 自己就讓人

頭大。

Ajax 的應用場景:

1.文本輸入提示(自動完成)的場景(註冊)

2.對數據進行聯動過濾的場景(三級聯動)

 

2.5   jquery 有哪些好處?

jQuery 是輕量級的 javascript 框架

強大的選擇器出色的 DOM 操做的封裝可靠的事件處理機制

完善的 ajax 封裝

出色的瀏覽器的兼容性支持鏈式操做,隱式迭代支持豐富的插件

jquery 的文檔也很是的豐富

2.6   對象和 dom 對象如何轉換?

1.  jquery 轉 DOM 對象:

jQuery 對象是一個數組對象,能夠經過[index]的豐富獲得 DOM 對象還能夠經過 get[index]去獲得相應的 DOM 對象。

2.  DOM 對象轉 jQuery 對象:

$(DOM 對象)

 

2.7. jquery$.get()提交和$.post()提交的區別?

  1. $.get() 方法使用 GET 方式提交請求,而$.post()使用 POST 方式。
  2. GET 方式傳輸的數據大小不能超過 2KB 而 POST 要大的多
  3.   GET 方式請求的數據會被瀏覽器緩存起來,所以有安全問題。

 

 

2.8. $(document).ready()方法和window.onload 方法

1        window.onload 方法是在網頁中全部的元素(包括元素的全部關聯文件)徹底加載到瀏覽器後才執行的。

2        $(document).ready() 方法能夠在 DOM 載入就緒時就對其進行操縱,並調用執行綁定的函數。

 

2.9 xml有哪些解析技術?區別是什麼?

 

DOM: 一次性將整個文檔加載到內存中, 生成一個對象樹, 在處理大型文件時其性能降低的很是厲害。

DOM4J: 對 DOM 的進一步封裝, API 使用更簡潔

SAX:基於事件驅動的方法回調機制。每讀取一小部分數據時就會回調事件處理器對象的方法, 但解析一旦開始就不能中止.

PULL: 也是基於事件驅動, 只是須要手動控制讀取下一部分數據,這樣獲得想要的數據後就能夠中止解析.

 

2.10  項目中用到的XML技術及實現方式

答:用到了數據存貯,信息配置兩方面。在作數據交換平臺時,將不能數據源的數據組裝成 XML 文件,而後將 XML 文件壓縮打包加密後經過網絡傳送給接收者,接收解密與解壓縮後再同 XML 文件中還原相關信息進行處理。在作軟件配置時,利用 XML 能夠很方便的進行,軟件的各類配置參數都存貯在 XML 文件中。

2.11  你對JSON 的理解

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於標準

JavaScript 的一個子集,是一個 Js 對象或數組結構的字符串

JSON 有三類數據

  1. 單個數據

有 number, string, boolean 和 null 四種類型數據

  1. 多個有序的數據: 數組用[]包含起來, 其元素能夠是三類數據中的任意一種, 元素之間用,號隔開
  2. 多個無序的數據: 對象用{}包含起來, 其元素必須由 key-value 組成, key 是一個字符串, value 能夠是任意類型數據, key 與 value 之間用:號隔開, 兩個 key-value 之間用,號隔開.

 

3.Servlet 相關技術路線(藍線)

此部分包括: Servlet, Filter, Listener 和 HTTP 協議

3.1. 解釋一下什麼是servlet?

答: 咱們能夠從下面二個方面去看 Servlet:

  1. API: 有一個接口 Servlet, 它是 Servlet 規範中定義的用來處理客戶端請求的程

序須要實現的頂級接口

  1. 組件: 服務器端用來處理客戶端請求的組件, 須要在 web.xml 請求中配置

 

3.2 Servlet聲明週期:

答: Servlet 生命週期分爲三個階段:

  1,初始化階段  調用 init()方法

  2,響應客戶請求階段  調用 service()方法-àdoGet/doPost()

  3,終止階段  調用 destroy()方法

3.3. 區別請求的轉發與重定向?

答: 能夠從如下三個方面進行比較

1.地址欄:

轉發: 顯示的是請求的 URL 重定向: 顯示的不是請求的 URL, 而是重定向指向的新的 URL

2.瀏覽器發了幾回請求? 轉發: 1 次請求重定向: 2 次請求

3. 是否能夠進行 Request 的數據共享? 轉發: 兩個資源之間是同一個 request 對象, 能夠共享 request 中的數據重定向: 兩個資源之間不是同一個 request 對象, 不能夠共享經典現實案例:

 

3.4. HTTP請求的 GET 與 POST 方式的區別

答: 能夠從如下幾個方面去回答:

  1. 攜帶請求參數的方式

GET: 經過請求行攜帶參數, 參數會顯示在地址欄

POST: 經過請求體來攜帶參數, 參數不會顯示在地址欄

  1. 服務器端處理請求的方法

GET: 會調用 Servlet 的 doGet()來處理請求

POST: 會調用 Servlet 的 doPost()來處理請求

  1. 數據大小與安全性

GET: 大小有限制(小於 2k), 不安全

POST: 大小沒有限制, 安全

 

3.5. 比較一下Servlet 與 Filter

1. Filter 是一種特別的 Servlet, 它們的做用是徹底不同的. Servlet 是用來處理請求的, 而 Filter 是用來過濾檢查請求的.

經典現實案例:

假如咱們要去坐地鐵去天安門, 咱們須要先在檢票機上刷票後才能進站坐上地鐵, 請求問: 在這個實際業務中, 哪一個是 Servlet?哪一個是

Filter ?

4. Jsp 相關技術路線(紅線)

此部分包括: JSP, EL, JSTL, My Tag, I18N, FileUpDown

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

答:JSP 共有如下 9 個內置的對象: request: 用戶端請求,此請求會包含來自 GET/POST 請求的參數 response: 網頁傳回用戶端的迴應 pageContext: 網頁的屬性是在這裏管理 session: 與請求有關的會話期 application:  與當前應用對應的 ServletContext 對象, 應用中只有一個 out: 用來傳送回應的輸出 {}<%= % > config: 與 jsp 配置對象的對象, 通常無用 page: jsp 對應的 Servlet 對象

exception: 針對錯誤網頁,未捕捉的異常對象

 

4.2有哪些動做?做用分別是什麼?

答:JSP 共有如下 6 種基本動做 jsp:include:在頁面被請求的時候引入一個文件。 jsp:forward:把請求轉到一個新的頁面。 jsp:useBean:尋找或者實例化一個 JavaBean。 jsp:setProperty:設置 JavaBean 的屬性。 jsp:getProperty:輸出某個 JavaBean 的屬性。 jsp:plugin:根據瀏覽器類型爲 Java 插件生成 OBJECT 或 EMBED 標記

<jsp:include page="/view/public/menu.jsp"></jsp:include>

 

4.3. JSP的經常使用指令

答:主要有下面 3 種指令

  1. page 指令: 指定頁面的的一些屬性, 經常使用屬性:

contentType="text/html; charset=utf-8"  //向瀏覽器端輸出數據的編碼 pageEncoding="utf-8" //jsp 文件被編譯成 java 文件時所用的編碼 session="true"  //是否自動建立 session

 

  1. include 指令: 包含別一個 jsp 頁面
  2. taglib 指令: 引入一個標籤庫

 

三種指令:

<%@ include file="/public/tag.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

 

 

3.4. JSP中動態 INCLUDE 與靜態 INCLUDE 的區別?

答:

  1. 動態包含: 用<jsp:include>, 包含的動做是在 jsp 對應的 Serlet 處理請求時去執

行的,每次請求都會執行.

  1. 靜態包含: 用 include 指令, 包含的動做是在 jsp 被編譯成 java 文件時執行的, 只有第一次請求時執行.

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

答:

JSP 的優勢是擅長於網頁製做,生成動態頁面比較直觀,缺點是不容易跟蹤與排錯。 Servlet 是純 Java 語言,擅長於處理流程和業務邏輯,缺點是生成動態網頁不直觀。

 
 
EL?

EL 的功能包括:

  1. 從四個域對象中取出屬性數據顯示
  2. 取出請求參數數據顯示

爲何要用 EL?

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

1. 須要條件判斷

2. 可能須要強轉

 
JSTL?

JSTL 的功能

JSTL 全名爲 JavaServer Pages Standard Tag Library, 主要用於基本輸入輸出、流程

控制、循環、XML 文件剖析、數據庫查詢及國際化和文字格式標準化的應用等爲何要用 JSTL?

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

3.7. 爲何要用自定義標籤?, MyTag如何實現

爲何要用?

1. 不想在 Jsp 中編寫 java 代碼 2.   JSTL 標籤庫不能知足實際項目的需求

自定義標籤訂義和使用的流程

  1. 編寫標籤處理器類(SimpleTagSupport 的實現類)

a)        重寫 doTag()

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

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

b)        標籤的定義: <tag> 

  1. 在 jsp 頁面使用標籤:

a)        導入標籤庫( xxx.tld/ )

b)        使用標籤

5. Web 會話相關技術路線(紫線)

此部分包括: Cookie 和 Session 技術

 

1. cookie 是一種瀏覽器端的緩存技術, 而 Session 是一種服務器端的緩存技術(依賴 cookie)

經典現實案例:

某咖啡廳推出了一個優惠活動:累計喝五杯咖啡能夠免費贈送一杯。他們該如何實現呢?

方法一: 咖啡廳辦卡(id,count), 交給消費者, 消費者下次再來消費時, 必須帶上卡,

消費一次由咖啡廳來更新卡上的數據, 再次交給消費者

方法二: 咖啡廳辦卡(id), id 和 count 都保存在咖啡廳的電腦中的表中, 將卡(id)交給消費者;消費者下次再來消費時, 必須帶上卡, 消費一次由咖啡廳來更新表中的數據, 再次交給消費者

 

5.2. 說說自動登錄功能的編碼實現?

  1. 登錄功能是用 Session 實現的,就是向 Session 對象中保存當前用戶的對象
  2. 自動的功能用 Cookie 實現, 就是登錄時將用戶的信息保存爲持久化 Cookie
  3. 下次訪問時, 讀取請求中若是有用戶信息的 Cookie 就能夠自動登錄

5.3. 如何防止表單重複提交?

答: 使用 Session 技術:

  1. 在 regist.jsp 頁面中生成一個惟一隨機值, 將其保存到 Session 中, 同時將

其保存爲表單的隱藏域的值

  1. 在處理註冊的請求時,獲取 Session 中值,獲取請求參數的值,比較二者是否相同, 若是相同說明不是重複提交,請求經過同時刪除 session 中保存的值, 若是不相同則是重複提交, 不能經過. 經典現實案例:

一位乘客在北京火車站買了一張去天津的火車票(直接刷的那種) ,他刷票進站坐火車去了天津, 回來後過了幾天, 他又須要去天津此次他不想再買票, 直接拿上次的票去進站口刷, 檢票機提示此火車票已使用過了」, 不能進站.

 

6. 其它

此部分包括: MVC, WebService 和 Mybatis

 

6.1 WEBMVC的各個部分都有那些技術來實現?如何實現?

答: MVC 是 Model-View-Controller 的簡寫。

Model 表明的是應用的業務邏輯(經過 JavaBean,EJB 組件實現),

View 是應用的表示面(由 JSP 頁面產生),

Controller 是提供應用的處理過程控制(通常是一個 Servlet),

經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重用。

相關名詞解釋

6.2Web Service

Web Service 是基於網絡的、分佈式的模塊化組件,它執行特定的任務,遵照具體的技術規範,這些規範使得 Web Service 能與其餘兼容的組件進行互操做。 JAXM(Java API for XML Messaging)

是爲 SOAP 通訊提供訪問方法和傳輸機制的 API。

WSDL:

是一種 XML 格式,用於將網絡服務描述爲一組端點,這些端點對包含面向

文檔信息或面向過程信息的消息進行操做。這種格式首先對操做和消息進行抽象描述,而後將其綁定到具體的網絡協議和消息格式上以定義端點。相關的具體端點即組合成爲抽象端點(服務)。

SOAP:

即簡單對象訪問協議(Simple Object Access Protocol),它是用於交換 XML 編

碼信息的輕量級協議。

 

6.3 技術的本質是使用哪幾種技術實現的?

HTTP + XML + Schema

6.4. 如何編碼發佈一個 WebService?
  1. 定義 SEI: 使用@Webservice 和@Webmethod
  2. 定義 SEI 的實現類: 使用@Webservice
  3. 發佈:使用 JDK 中的 Endpoint,或者使用 CXF 框架基於 Spring 的配置來發布

6.5如何編碼請求一個webService

1. 根據 wsdl 文檔生成客戶端代碼. 2. 利用客戶端代碼編寫調用 webservice 的代碼.

 

6.6比較一下JDBC,dbutils,Mybatis和hibernate區別

  1. JDBC: 原生訪問數據庫的方式, 其它三個都是對 JDBC 不一樣程度的包裝訪問數據庫比較麻煩, 代碼重複度極高
  2. dbutils: 是對 jdbc 進行了相對簡單的包裝, 主要就是能自動封裝查詢結構集, 須要在代碼中寫 sql 語句
  3. Mybatis: 進一步封裝 jdbc, Sql 語句寫在配置文件中, 面向對象操做, 有一二級緩存功能
  4. Hibernate: 對 jdbc 封裝得最完全的框架, 純面向對象, 能夠不用寫 SQL
相關文章
相關標籤/搜索