面試問題列表

一、JS的4種基本數據類型
一下四種:Undefined, Boolean,Number和String
網上答案(js中有5種數據類型:Undefined、Null、Boolean、Number和String)。javascript

二、JS中,請說出==和===的區別
」==」是判斷值是否相等,」===」是判斷值及類型是否徹底相等html

三、JS裏面有沒有重載?
同名的函數最後聲明會覆蓋前面以聲明。Javascript中沒有函數重載,當同一個名稱的函數定義屢次時,最終使用的是最後一個的定義。java

四、JS定義變量是否是必定要有關鍵字var,假如沒有var定義變量會怎樣?
js中 容許在定義變量的時候 不加var 修飾符。
js會在當前做用域下尋找上下文是否認義了此變量, 若是沒有找到則會爲這個變量分配內存。
當且將其視爲window的成員。 也就是全局變量。mysql

若是加了var 修飾符。 js會從新爲這個變量分配內存,不論當前上下文中是否已經定義過了。
這個變量的做用域就爲當前上下文。 即局部變量。程序員

不加var的寫法是強烈不推薦的。
1. 語義不清楚。
2. 團隊開發時,容易覆蓋掉其它做用域內的變量,引起異常。
3. 給window對象添加沒必要要成員。 web

五、JS中的prototype是什麼?
「prototype」字面翻譯是「原型」。粗略來講就是:prototype是javascript中的函數(function)的一個保留屬性,而且它的值是一個對象(咱們能夠稱這個對象爲"prototype對象")。
Prototype注意的細節:
1.prototype是函數(function)的一個必備屬性(書面一點的說法是"保留屬性")(只要是function,就必定有一個prototype屬性)
2.prototype的值是一個對象
3.能夠任意修改函數的prototype屬性的值。
4.一個對象會自動擁有這個對象的構造函數的prototype的成員屬性和方法。spring


六、說出JS中獲取節點元素的3個方法
document.getElementById("html元素的id")
document.getElementsByTagName("標籤名")
document.getElementsByName("html元素的name")sql


七、說出在Java單元測試中@Before和@BeforeClass的區別
@Before:初始化方法 對於每個測試方法都要執行一次(注意與BeforeClass區別,後者是對於全部方法執行一次)
@BeforeClass:針對全部測試,只執行一次,且必須爲static void 數據庫

八、在XML經過什麼方式可讓原始的字符串不改變輸出
在編寫XML文件時,有些內容可能不想讓解析引擎解析執行,而是看成原始內容處理。
遇到此種狀況,能夠把這些內容放在CDATA區裏,對於CDATA區域內的內容,XML解析程序不會處理,而是直接原封不動的輸出。express

九、請說出什麼是XML的SAX解析
SAX採用事件處理的方式解析XML文件,利用 SAX 解析 XML 文檔,涉及兩個部分:解析器和事件處理器:
解析器可使用JAXP的API建立,建立出SAX解析器後,就能夠指定解析器去解析某個XML文檔。
解析器採用SAX方式在解析某個XML文檔時,它只要解析到XML文檔的一個組成部分,都會去調用事件處理器的一個方法,解析器在調用事件處理器的方法時,
會把當前解析到的xml文件內容做爲方法的參數傳遞給事件處理器。
事件處理器由程序員編寫,程序員經過事件處理器中方法的參數,就能夠很輕鬆地獲得sax解析器解析到的數據,從而能夠決定如何對數據進行處理。


十、請說出什麼事XML的DOM解析
DOM(全稱叫Document Object Model)基於樹或基於對象的XML處理模式。

XML 文檔具備一個稱爲節點的信息單元層次結構;


十一、請說出XML中SAX解析和DOM解析各自的優缺點。

基於SAX(事件的處理)的優勢和缺點

優勢:這種處理的優勢很是相似於流媒體的優勢。分析可以當即開始,而不是等待全部的數據被處理。並且,因爲應用程序只是在讀取數據時檢查數據,
所以不需 要將數據存儲在內存中。
這對於大型文檔來講是個巨大的優勢。事實上,應用程序甚至沒必要解析整個文檔;它能夠在某個條件獲得知足時中止解析。通常來講,SAX 還比它的替代者 DOM 快許多。
缺點:因爲應用程序沒有以任何方式存儲數據,使用 SAX 來更改數據或在數據流中日後移是不可能的。

基於DOM(樹)的處理的優勢和缺點

優勢:
1)因爲樹在內存中是持久的,所以能夠修改它以便應用程序能對數據和結構做出更改。
2)它能夠在任什麼時候候在樹中上下導航,而不是像 SAX 那樣是一次性的處理。
3)DOM 使用起來也要簡單得多。
缺點:
1)在內存中構造這樣的樹涉及大量的開銷。大型文件徹底佔用系統內存容量的狀況並不鮮見。
2)建立一棵DOM樹多是一個緩慢的過程。


十二、請說出HTTP1.0和HTTP1.1的區別
1,HTTP/1.0協議使用非持久鏈接,即在非持久鏈接下,一個tcp鏈接只傳輸一個Web對象,;
2,HTTP/1.1默認使用持久鏈接(然而,HTTP/1.1協議的客戶機和服務器能夠配置成使用非持久鏈接)。
在持久鏈接下,沒必要爲每一個Web對象的傳送創建一個新的鏈接,一個鏈接中能夠傳輸多個對象!

1三、請說出在html中表單的提交方式get和post的區別

經常使用的有:POST、GET
無論POST或GET,都用於向服務器請求某個WEB資源,這兩種方式的區別主要表如今數據傳遞上,客戶端經過這兩種方式均可以帶一些數據給服務器:
1)如請求方式爲GET方式,則能夠在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特色:在URL地址後附帶的參數是有限制的,其數據容量不能超過1K。另外一方面,一些用戶密碼等保密數據不適合以GET方式提交。

2)如請求方式爲POST方式,則能夠在請求的實體內容中向服務器發送數據,例如:
POST /servlet/ParamsServlet HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
Content-Length: 28

name=abc&password=xyz
Post方式的特色:傳送的數據量無限制。


1四、表單提交方式是否是隻有get和post這兩種方式
請求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT

1五、描述Servlet的執行過程
1.將應用部署到應用服務器(每一個應用程序必須提供web.xml web描述文件)(用來描述該應用程序全部組件(servlet)的信息,提供給應服務器進行參考)。
2.當客戶端(瀏覽器)發送請求到服務器,服務器分析請求信息在到應用程序(在應用服務器中已經部署)的web.xml文件中找對應的處理組件
(servlet)。
3.應用服務器調用對應Servlet的init()方法初始化Servlet(程序本身實現了Servlet接口的子類),產生對應的Servlet對象。
4.應用服務器調用對應Servlet的services()方法處理請求數據 。若是請求是基於Http協議
a)若是是get請求services()方法調用對應的doGet()方法
b)若是是post請求services()方法調用對應的doPost方法
5.當應用服務器處理完請求數據後(調用完services()方法)接着調用destroy()方法,釋放Serlvet對象佔用的內存空間。整個Servlet生命週期結束

1六、請說出Servlet的生命週期
Servlet是受容器管理的,其生命週期都是由容器負責,包括以下幾個階段:
1)Servlet的類加載與實例化(調用構造方法)
2)Servlet實例的初始化(調用init方法)
3)Servlet提供服務(調用service方法)
4)Servlet的銷燬(調用destroy方法)


1七、Servlet是單例仍是多例的
Servlet在web容器裏是單實例多線程的。當多個客戶端併發訪問同一個Servlet時,
web服務器會爲每個客戶端的訪問請求建立一個線程,並在這個線程上調用Servlet的service方法,
所以service方法內若是訪問了同一個資源的話,就有可能引起線程安全問題。


(servlet單實例多線程處理原理:
servlet中的init方法只有在啓動(例如web容器啓動,要看loadOnStartup的設置)的時候調用,也就是隻初始化一次,這就是單實例。
servlet在處理請求的時候 調用的是service方法,這個方法能夠處理多個客戶端的請求。

具體訪問時:

JSP 在web容器中"翻譯成servlet"由容器執行,web 容器自己就是提供的多線程,A,B,C 3個訪問,創建3個獨立的線程組,而後運行一個servlet。依次執行。

這就解決了多用戶同一實例實行的困惑。

要注意幾點:

1:servlet首先不是現成線程的。
2:Servlet體系結構是創建在Java多線程機制之上的,它的生命週期是由Web容器負責的)

1八、Servlet何時實例化
默認狀況下,第一次訪問時加載Servlet類並進行實例化。
在部署時經過ClassLoader直接載入並實例化


1九、怎麼配置文件,讓Servlet在啓動tomcat的時候就實例化
<load-on-startup>1</load-on-startup>
load-on-startup: 表示Servlet在部署時經過ClassLoader直接載入並初始化,
數值越低(從0開始計數),載入的優先級越高。不然,用戶第一次訪問的時候才實例化Servlet。
值相同,通常按在web.xml文件中的出現的順序執行。


20、請問Servlet的destory方法在何時纔會執行
destory方法在We服務器中止或Web應用被中止/從新加載時被調用。一般完成一些資源釋放,中止後臺程序等工做。釋放或銷燬一些非內存資源。destory只會調用一次。

2一、請描述ServletConfig對象
在Servlet的配置文件中,可使用一個或多個<init-param>標籤爲servlet配置一些初始化參數。
當servlet配置了初始化參數後,web容器在建立servlet實例對象時,會自動將這些初始化參數封裝到ServletConfig對象中,
並在調用servlet的init方法時,將ServletConfig對象傳遞給servlet。進而,程序員經過ServletConfig對象就能夠獲得當前servlet的初始化參數信息。
主要用來讀取web.xml中配置的Servlet初始信息,不能被其它Servlet共享。還能夠用於訪問ServletContext。

該對象的做用:
得到字符集編碼
得到數據庫鏈接信息
得到配置文件

2二、請描述ServletContext對象
WEB容器在啓動時,它會爲每一個WEB應用程序都建立一個對應的ServletContext對象,它表明當前web應用。

ServletContext對象被包含在ServletConfig對象中,開發人員在編寫servlet時,能夠經過ServletConfig.getServletContext方法得到對ServletContext對象的引用。

因爲一個WEB應用中的全部Servlet共享同一個ServletContext對象,所以Servlet對象之間能夠經過ServletContext對象來實現通信。ServletContext對象一般也被稱之爲context域對象。

ServletContext應用場景:
1)多個Servlet經過ServletContext對象實現數據共享。
2)獲取WEB應用的初始化參數。
3)實現Servlet的轉發。
4)利用ServletContext對象讀取資源文件。
 獲得文件路徑
 讀取資源文件



2三、請說出request對象獲取前臺傳過來參數的幾種方式
getParameter方法
getParameterValues(String name)方法
getParameterNames方法
getParameterMap方法


2四、使用Servlet下載時,爲何文件名須要單獨編碼後纔不會出現亂碼,是否是編碼後必定不會出現亂碼。

當文件名出現中文的時候會出現亂碼問題,須要把文件名編碼轉爲UTF-8,應爲服務器默認是iso-8859-1編碼,
而系統默認是jbk編碼,因此須要單獨轉碼。

編碼後還會出現亂碼,須要設置響應頭編碼,告訴瀏覽器端用什麼編碼來解析服務器發送的數據。

2五、請說出cookie和session的區別
區別:
1)Cookie保存在客戶端
2)只能保存字符串對象,不能保存對象類型
Cookie是把用戶的數據寫給用戶的瀏覽器。

Session技術把用戶的數據寫到用戶獨佔的session中。

都是有服務器建立

2六、除了使用Java代碼,還有沒有其餘方式清除cookie
//清除cookie,用javascript也可實現。

2七、請說出session的默認有效時間和有哪幾種方式能夠設置session的有效時間

默認有效時間爲30分鐘
設置Session的有效期
方式一:
public void setMaxInactiveInterval(int interval)
 置最大非活動時間間隔,單位秒;
 果參數interval是負值,表示永不過期
方式二:
經過配置web.xml來設置會話超時,單位是分鐘

 

2八、請說Servlet和JSP的區別和共同點

區別:servletd的應用邏輯是在java文件中,而且徹底從html裏分離開來。servlet主要用於控制邏輯。
jsp是的是java和HTML能夠組合成一個擴展名爲jsp的文件。jsp主要用於視圖。
相同點:本質上都是java類。


2九、請說出JSP的執行原理
1)首先,客戶端發出請求(request ),請求訪問JSP網頁
2)接着,JSP Container將要訪問的.JSP文件 轉譯成Servlet的源代碼(.java文件)
3)而後,將產生的Servlet的源代碼(.java文件)通過編譯,生成.class文件,並加載到內存執行
4)最後把結果響應(response )給客戶端

 

30、請說出JSP的3個指令,和各自的做用
1.Page指令 做用:page指令用於定義JSP頁面的各類屬性
2.Include指令 做用:include指令用於引入其它JSP頁面,
若是使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet。因此include指令引入一般也稱之爲靜態引入。
3.taglib指令 做用:讓用戶可以自定義標籤


3一、請說出JSP的9個內置對象,和四個域對象,並說出9個內置對象中那幾個比較經常使用

9個內置對象,不用咱們手工去建立的對象,由容器根據頁面設置而產生直接可使用

request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletcContext
config ServletConfig
exception (特殊狀況下使用)
page this(本JSP頁面)
out JspWriter(帶緩衝的PrintWriter)
pageContext (使普通Java類可訪問WEB資源,自定義標籤經常使用)


四大域對象
 pageContext(稱之爲page域)
 request(稱之爲request域)
 session(稱之爲session域)
 servletContext(稱之爲application域)

JSP的9個內置對象中比較經常使用的幾個:request,response,session,pageContext

 


3二、請說出JSP的9個內置對象對應的Servlet的對象
request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletcContext
config ServletConfig
exception Throwable(異常)
page this(本JSP頁面)
out JspWriter(帶緩衝的PrintWriter)
pageContext PageContext


3三、請說出JSP中4個域對象的生命週期

page:jsp頁面被執行,生命週期開始,jsp頁面執行完畢,聲明週期結束

request:用戶發送一個請求,開始,服務器返回響應,請求結束,生命週期結束

session:用戶打開瀏覽器訪問,建立session(開始),session超時或被聲明失效,該對象生命週期結束

application:web應用加載的時候建立。Web應用被移除或服務器關閉,對象銷燬。[結束]。


3四、JSP中哪一種狀況下用哪一種域對象。
四個域對象在選擇的時候,能用範圍小的毫不用範圍大的

page:數據只是暫時存在集合,在jsp頁面的其餘地方要用,用page(頁面中自定義的map)

(何時須要用map了,就用page)

Request:數據只是作顯示的,看完了就沒用了。就存request域,請求轉發,
Servlet產生的處理結果(數據)交給jsp顯示。 數據轉發能夠帶數據。

Session:數據給用戶看完了,必定還要用,會話結束了就沒用了

用戶登陸,用戶信息發給客戶端看,看完了,一會訪問別的頁面還要看用戶信息。

購物車,購物車成功了,給用戶看購物車,待會隨時間能夠查看購物車

請求重定向,由於是兩次請求,每一次請求的數據,第二次請求還要看。

application:數據給一個用戶用完了,別人還要用

聊天室,聊天記錄,須要給全部的用戶看

統計網站在線人數,全部看到的應該是一個數


3五、請說出el中的隱藏對象,和對應的servlet中的對象
EL表達式中的11個隱含對象

EL提供了本身的一套隱含對象,方便在頁面內對各類經常使用數據信息的訪問.
EL隱藏對象 JSP隱藏對象
pageScope/pageContext pageContext
requestScope request
sessionScope session
applicationScope appication
param request.getParameter()
paramValues 在提交表單裏,有多個輸入域同名getParameterValues
header request.getHeader(),按照key value的形式取出 value:是一個String類型的值
headerValues 按照key value的方式取出,但headerValues裏面的value是一個String類型的數組
cookie request.getCookies()
initParam context param


3六、請說出有幾種方式能夠設置禁止在JSP中使用el表達式
有倆種:
能夠自由設置是否支持表達式語言,
1.<%@page isELIgnored="false"%> : 缺省爲false,表示可使用EL

2.配置web.xml也可達到一樣的效果(同時存在,那種起做用?)(禁用腳本和EL) 默認都是false

在頁面中經過page指令設置isELIgnored屬性的優先級比在web.xml中經過<el-ignored>設置的高

 

3七、請說出JSP中經常使用的動做
<jsp:include>標籤
 <jsp:forward>標籤
 <jsp:param>標籤

 

3八、請說出<jsp:include>動做與include指令的區別
<jsp:include>與include指令的比較
<jsp:include>標籤是動態引入, <jsp:include>標籤涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容在執行時進行合併。
而include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在源文件級別進行合併。
無論是<jsp:include>標籤,仍是include指令,它們都會把兩個JSP頁面內容合併輸出,因此這兩個頁面不要出現重複的HTML全局架構標籤,
不然輸出給客戶端的內容將會是一個格式混亂的HTML文檔。

<jsp:include>標籤:使用page屬性指定被引入資源。
include指令:使用file屬性指定被引入資源。

 

3九、請說出自定義JSTL標籤的步驟
SimpleTag接口的方法:
doTag():執行標籤的方法,由web服務器調用
getParent(): 獲得父標籤。
setJspBody(JspFragment jspBody)傳入標籤主體內容。由web服務器調用
setJspContext(JspContext pc)傳入PageContext。由web服務器調用
setParent(JspTag parent) 傳入父標籤。由web服務器調用
a) 編寫一個java類,實現SimpleTag接口或者繼承SimpleTagSupport類。
b) 置這個標籤
在項目下的WEB-INF目錄下新建一個tld文件。(itcast.tld)
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>itcast</short-name>
<uri>http://gz.itcast.cn/jsp/tags</uri>
<!-- 一個標籤的配置 -->
<tag>
<name>showClientIP</name>
<tag-class>gz.itcast.tag.ShowClientIPTag</tag-class>
<!-- 默認empty:表示空標籤,麼有主體內容 -->
<body-content>empty</body-content>
</tag>
</taglib>

標籤
c)使用標籤
導入:<%@taglib uri="http://gz.itcast.cn/jsp/tags" prefix="itcast" %>
使用: <itcast:showClientIP/>

 

40、請說出使用JDBC訪問數據獲取數據的一個過程。
1.加載註冊驅動
2.創建數據鏈接 DriverManager.getConnection(url user pwd)
3.建立 statement或者PrepareStatement對象,執行sql語句
4.操做Resultset 結果集
5.資源釋放


4一、請說出Statement和PreparedStatement的區別
1、語法結構不一樣
1)Statment執行靜態sql語句,且sql能夠拼接。
2)PreparedStatement能夠先執行預編譯的sql語句,在預編譯sql語句中使用?進行參數佔位,後面在進行參數賦值
2、原理不一樣
1)Statement不能進行sql緩存
2)而PreparedStatement能夠進行sql緩存,執行效率會比Statement快!!!

3、安全性不一樣
1)Statement存在sql注入的風險
2)而PreparedStatement能夠有效防止用戶注入。

 


4二、mysql的默認端口是多少
3306


4三、什麼是數據庫元數據
指的是基本數據,好比人,人的基本信息,姓名,性別,年齡,身高體重,
與元數據對應的是關係數據

也能夠說:元數據就是關於數據的數據


4四、什麼是數據的悲觀鎖和樂觀鎖
數據的鎖定分爲兩種方法,第一種叫作悲觀鎖,第二種叫作樂觀鎖。
什麼叫悲觀鎖呢,悲觀鎖顧名思義,就是對數據的衝突採起一種悲觀的態度,
也就是說假設數據確定會衝突,因此在數據開始讀取的時候就把數據鎖定住。
而樂觀鎖就是認爲數據通常狀況下不會形成衝突,因此在數據進行提交更新的時候,
纔會正式對數據的衝突與否進行檢測,若是發現衝突了,則讓用戶返回錯誤的信息,讓用戶決定如何去作。

4五、請說出數據庫三範式

一、每一個字段都必須是不可分割的單元
二、每張表只表達一個意思(確保表中的每列都和主鍵相關)
三、每張表的主鍵以外的其餘字段都只能和主鍵有直接的決定依賴關係


4六、請簡要描述Servlet中的過濾器,Filter
一、過濾器其實就是一個接口
二、過濾器是一個對象,能夠在瀏覽器請求一個資源(動態或者靜態),服務器響應資源的時候,執行過濾任務
三、過濾器由服務器運行

4七、請說出Filter的生命週期
一、服務器啓動時候,調用構造方法建立過濾器,只執行一次
二、init方法初始化
三、doFilter執行過濾方法(屢次)
四、destroy方法,服務器中止或者服務器重啓,銷燬過濾器對象

4八、請說Filter作模糊過濾的幾種狀況
沒有明確的名稱
/*
/demo/*
*.do

4九、什麼是過濾器鏈
過濾器鏈: 一個目標資源能夠被多個過濾器過濾,那麼造成一個過濾器鏈。***
注意:過濾器鏈中的過濾器執行順序問題:由web.xml中filter-mapping的配置決定順序。先配置的優先被執行。

50、怎麼肯定過濾器的執行順序
過濾器鏈中的過濾器執行順序問題:由web.xml中
-mapping的配置決定順序。先配置的優先被執行。


5一、請說出監聽器的做用
web程序在開發的過程當中,會頻繁的使用到servletContext,servletRequest,httpSession三個對象,
在建立或者銷燬這些對象時候,或者在對這些對象進行操做的時候,觸發一些事件,
就可使用web監聽器去監聽這些事情。

5二、請詳細說出Struts2的執行流程

一、服務器啓動,加載服務器自身的web.xml文件
二、加載部署到服務器項目的web.xml文件
三、建立項目中struts 2的核心過濾器對象:StrutsPrepareAndExecuteFiter
四、執行過濾器初始化方法init
五、加載struts配置文件
六、執行過濾器doFilter方法
七、建立Action對象
八、再執行攔截器
九、執行action的業務方法

5三、請說Struts2和Servlet的關係
struts 就是對 servlet 的封裝

Servlet開發步驟:
Http --> servlet --> service --> dao 響應 jsp

struts 開發步驟
http --> action --> service --> dao 響應jsp


5四、請說出配置Struts2的步驟
一、引入jar包
二、配置web.xml核心過濾器
三、配置struts配置文件,配置action

5五、怎麼配置Struts2的常量
一、找到default.properties,找到須要配置的屬性
二、在struts.xml文件中定義常量
<constant nae="" value="">

5六、請說出Struts2配置文件中nameSpace和package的做用

nameSpace 是命名空間,用於action訪問時候的路徑一部分
Package 管理action或者管理路徑的做用,可用於包之間的繼承

5七、Struts2的action配置中,可不能夠不指定class屬性,爲何
能夠,不寫class屬性,系統會默認調用com.opensymphony.xwork2.ActionSupport類的execute()方法,該方法代碼是:
public String execute() throws Exception {
return SUCCESS;
}


5八、請說出struts.properties和struts.xml配置的常量的執行順序
先執行struts-default.xml,struts-plugin.xml,struts.xml配置的常量,
而後再執行struts.properties的配置文件,屬性相同,後者會覆蓋前者

5九、在struts2中,全局配置的result和局部配置的result,會執行哪個,爲何
局部優於全局

60、hibernate的handle

6一、請問Struts2中的action是單例仍是多例的,struts1呢?

Struts2 是多例,每次請求都會建立一個action

struts 1的Action是單實例的,由於它的數據保存在Form類中,
多線程環境下,Action只負責處理一些邏輯,
並無數據,也就是你們把它當作一個工具使用。


6二、請說出Struts2中自定義類型轉換器的步驟

一、自定義轉換器繼承StrutsTypeConverter
二、重寫convertFromString和convertToString方法
三、註冊轉換器
3.一、在Action所在的包中創建
action名-conversion.proprtties
3.二、在3.1文件中添加如下數據
須要轉換的字段名=自定義轉換器的權限定名
birthday=cn.itcast.convertor.DateTypeConvertor
總結:
以上的轉換器註冊時候是與action的名字想耦合的。所以只能在本身的action內部使用,
稱之爲局部轉換器註冊方式

6三、如何定義Struts2中的全局類型轉換器
一、自定義轉換器繼承StrutsTypeConverter
二、重寫convertFromString和convertToString方法
三、註冊轉換器
3.1 在項目src目錄下創建如下固定文件
xwork-conversion.properties
3.2 在3.1文件中添加如下數據
須要轉換的類類型=轉換器類的權限定名
如: java.util.Date= cn.itcast.converter.DateConverter 總結
該攔截器負責對錯誤信息進行攔截器<interceptor name="conversionError「 class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>

6四、請說出Struts2中的攔截器的生命週期
當請求到達Struts 2的ServletDispatcher時,Struts 2會查找配置文件,並根據其配置實例化相對的攔截器對象,
而後串成一個列表(list),最後一個一個地調用列表中的攔截器

struts2攔截器在訪問某個action方法以前或者以後實施攔截,struts2攔截器是可插拔的,
攔截器是aop的一種實現
攔截器棧(interceptor Stack):將攔截器按必定的順序連接成一條鏈,
在訪問被攔截的方法時候,struts2攔截器鏈就會按 定義的順序被依次調用

6五、請說出Strins2中怎麼配置自定攔截器
一、定義一個類實現Interceptor接口
二、實現生命週期的方法
三、聲明和引用自定義的攔截器

6六、Struts2攔截器能不能編碼get請求的數據
能夠,i18n編碼

6七、請詳細說出Struts2中ValueStack
ValueStack 實際是一個接口,在struts2中利用OGNL時,實際上使用的是實現了該接口的OgnlValue
Stack類,這個類是struts2利用OGNL的基礎

ValueStack特色
ValueStack貫穿整個Action的生命週期(每一個Action類的對象實例都擁有一個ValueStack對象),其做用至關於一個數據中轉站,在其中保存當前的Action對象和其餘相關對象

6八、請說出ognl表達式和el表達式各自的優缺點
OGNL:
object graph navigation language的縮寫,它是一種功能強大的表達式語言,經過它簡單一致的表達式語法,能夠存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。它使用相同的表達式去存取對象的屬性。這樣能夠更好的取得數據。
EL:
Expression Lanhuage 代替jsp頁面的java代碼塊

6九、請說說你對Strut2的理解
struts2 是對servlet的封裝
struts2 實現了mvc模式,層次結構清晰
struts2 有豐富的標籤庫,開發上大大方便
struts2 有豐富的過濾器
struts2 異常處理機制

70、請說出hibernate的執行流程

一、應用程序先調用Configuration類,該類讀取Hibernate配置文件及映射文件中的信息
二、並用這些信息生成一個SessionFactory對象
三、而後從SessionFactory對象生成一個Session對象
四、並用Session對象生成Transaction對象;
A、可經過Session對象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法對PO進行加載、保存、更新、刪除、等操做;
B、在查詢的狀況下,可經過Session對象生成一個Query對象,而後利用Query對象執行查詢操做;若是沒有異常Transaction對象將提交這些操做到數據庫中。


7一、請說hibernate中sessionFactory的做用
SessionFactory接口
Configuration對象根據當前的配置信息生成 SessionFactory 對象。SessionFactory 對象一旦構造完畢,即被賦予特定的配置信息(SessionFactory 對象中保存了當前的數據庫配置信息和全部映射關係以及預約義的SQL語句。同時,SessionFactory還負責維護Hibernate的二級緩存)。 Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); 是線程安全的。 SessionFactory是生成Session的工廠: Session session = sf.openSession(); 構造SessionFactory很消耗資源,通常狀況下一個應用中只初始化一個 SessionFactory對象。


7二、請說出hibernate的session中get()和load()的區別
get()和load()都是讀取數據的方法
get()在讀取數據,若是爲空,會返回null,因此容易致使空指針異常
load()在讀取數據的時候,若是數據爲空,會直接報錯,由於load 認爲,使用本方法就必定會有數據

7三、請說出hibernate的Query中list()和iterator()的區別
query.list(),一次性查詢出全部的數據,可是不會放入二級緩存中
query.iterator()
一、會放入緩存,也會從緩存取
二、容易產生N+1問題

7四、請詳細說出Hibernate3中持久化對象的幾種狀態
一、持久狀態
二、遊離狀態
三、臨時狀態

7五、請說出hibernate中緩存的做用,默認開啓的是哪一級緩存
做用、減小對數據庫的屢次查詢,提升程序的效率,保證緩存中的對象與數據庫記錄的保持同步,當
緩存改變之後,session不會當即執行sql,而是將多個sql語句合併爲一條sql進行執行,提升效率
默認開啓的是一級緩存


7六、請說出hibernate開啓二級緩存的步驟
方法:(1)在hibernate的properties文件修改配置開啓
#hibernate.cache.use_second_level_cache true 二級緩存默認不開啓
## enable the query cache
#hibernate.cache.use_query_cache true 是否開啓查詢緩存!
方法:(2)在hibernate.cfg.xml文件中增長配置文件
<!-- 開啓查詢緩存
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<class-cache usage="read-write" class="cn.itcast.g_second_cache.User"/>
<class-cache usage="read-only" class="cn.itcast.g_second_cache.Address"/>
-->
<!-- 集合緩存配置 (集合中的對象也要加入二級緩存!)
<collection-cache usage="read-only" collection="cn.itcast.g_second_cache.User.addresses"/>
-->

7七、請說出hibernate一級緩存和二級緩存的區別
一級緩存:
由hibernate自動維護的,開發者不可以自行控制,默認開啓,而且做用範圍只在一個session內,緩存在除了session範圍內就失效
二級緩存:
由開發者自定義開啓,默認是關閉的,二級緩存的做用範圍是基於application,做用時間長,範圍大


7八、請說出hibernate的配置文件中Inverse屬性的做用
inversese 屬性做用是控制的反轉,例如表關係的維護,一方能夠把本身的控制權放棄,交給另外一方去維護


7九、請說出hibernate的配置文件中lazy和cascade屬性的做用。
lazy屬性:
做用是延遲加載,默認是開啓,當須要查詢較大的數據量時候,使用緩存費內存,因此可使用懶加載功能

懶加載有三個屬性:
true:開啓
false:關閉
extra:懶加載, 在真正使用數據的時候才查詢,若是隻是使用集合的size()/isEmpty()方法,只是統計數據!
cascade屬性:
做用是控制級聯操做,默認是不開啓,多表之間的關係,級聯通常用在保存(爲了數據的安全性,其餘操做適宜用代碼去控制)

屬性
save-update 級聯保存更新
delete 級聯刪除
save-update,delete 級聯保存更新、刪除
all 同上 (save-update,delete)
none 默認不級聯


80、請說出hibernate和JDBC查詢數據庫各自的優缺點,如何優化Hibernate?
hibernate:
優勢:
一、hibernate是經過hql語句操縱數據庫的,是一個面向對象的過程,開發者只需關心如何寫hql語句即可以操縱數據庫。相對於學習sql語句,hibernate學習成本更低
二、hibernate 對錶單的複雜關係維護出色
三、hibernate 封裝了許多簡單的操做數據庫方法,開發者只需調用就可以使用對數據庫操做
四、移植性強,只需改驅動和少量配置就能更換數據庫
五、耦合性低
缺點:
因爲是對JDBC的輕量封裝,hibernate的效率比JDBC低
hibernate的緩存使用不容易

JDBC:
優勢:
一、直接使用sql語句操作數據庫,效率高
缺點:
一、耦合高
二、對開發者要求高,開發難度相對比較大
三、移植性差

優化hibernate的核心是優化hql語句


8一、請說出你對hibernate的理解。
hibernate是一款輕量級的持久層框架,可是功能強大,解耦能力強,提升了代碼的複用性,開發難度下降,強大的面向對象型hql語句簡化了開發流程

8二、請解析什麼是Spring的IOC(控制反轉)
IOC 控制反轉,
Inversion of control 控制反轉! 因此,也叫控制反轉容器!
主要是把建立對象的權利交給外部容器,而外部容器建立對象,能夠更好的管理對象的建立時期,便於程序的管理維護與開發


8三、請解析什麼事Spring的AOP,以及其應用場景
aop(Aspect Oriented Programming 面向切面編程)原理是動態代理,經過動態代理能夠爲目標對象增長額外功能。Spring的聲明式事務管理中,更精細的控制事物。採用面向切面編程來實現不少基礎可是與業務無關功能的解耦,好比:事務管理,日誌採集,權限驗證。。。

8四、請問AOP是Spring所獨有的嗎?Struts2中有沒有AOP?
不是,aop是一種思想,而struts2的攔截器能夠算是aop思想的實現方式!

8五、請問Spring中IOC容器裏面的對象是單例的仍是多例的。
scope="singletion" 默認是單例的,在容器建立的時候建立。

8六、請說出Spring中IOC容器裏面對象的生命週期
(單列狀況)Spring中IOC容器的對象在服務器啓動時建立,須要手動調用destroy()方法銷燬。
(多列狀況)Spring中IOC容器的對象在第一次使用的時候建立,使用完自動銷燬。

8七、Spring IOC容器裏面的對象,何時後會被建立
1. 單例/多例
scope="singleton" 默認是單例;默認是在建立容器的時候建立!
2.單例的對象,可否在第一次調用的時候建立? (服務器啓動不要建立)
lazy-init="true" 延遲建立單例的對象; 在第一次使用的時候建立一次!
注意:只對單例的對象有效!
3. 初始化與銷燬
init-method="init_" 對應bean中的init_()方法;
在建立對象以後執行!
destroy-method="destroy_"
在對象銷燬時候執行!
必需要調用容器的ac.destroy(); 須要用容器的實現類!(對單例的對象有效!)

8八、什麼是依賴注入?
程序在運行的時候,所須要的對象由外部容器動態的建立注入

8九、請說出註解注入對象,和配置文件注入對象各自的優缺點和你的體會
註解注入:
開發方便,不須要寫太多代碼,配置簡單,開發效率高。
維護不方便,間接增長了程序的耦合度,修改須要從新編譯
XML配置:
維護方便,對於對象的表示清晰易解,修改後不須要從新編譯
配置麻煩,開發效率較慢

90、請問Spring 的 AOP中使用了幾種動態代理技術,分別是什麼,各自的特色是什麼
spring在運行期建立代理,有兩種代理方式:若目標對象實現了若干接口,spring就會使用JDK動態代理。若目標對象沒有實現任何接口,spring就使用CGLIB庫生成目標對象的子類。

9一、請問Spring提供了幾種事務管理方式,分別是什麼
Spring提供了兩種事務管理方式
編程式事務管理
聲明式事務管理
若是你並不須要細粒度的事務控制,你可使用聲明式事務,在Spring中,你只須要在Spring配置文件中作一些配置,便可將操做歸入到事務管理中,解除了和代碼的耦合, 這是對應用代碼影響最小的選擇,從這一點再次驗證了Spring關於AOP的概念。當你不須要事務管理的時候,能夠直接從Spring配置文件中移除該設置
Spring聲明式事務控制:
在Spring中,對於事務控制: Spring提供了事務切面(DataSourceTransactionManager、HibernateTransactionManager), 若是程序中使用事務,能夠利用aop切入點表達式攔截指定對象生成代理對象, 從而在執行攔截方法的時候(業務方法), 動態織入事務切面的代碼!


9二、請說出Spring中聲明式事務的步驟
第一步 :開啓註解 掃描
第二步 :Aop配置
第三步:切入點 表達式
<!-- 1. 攔截指定類的指定方法 (UserDao.save) -->
<!--<aop:pointcut expression="execution(* cn.itcast.g_aop_pt.UserDao.save(..))" id="pt"/>-->
第四點:切面配置
<aop:aspect ref="aop">
<aop:before method="begin" pointcut-ref="pt"/>
<aop:after method="after" pointcut-ref="pt"/>
</aop:aspect>


9三、請簡要說出Spring AOP編程的執行過程
Aop執行過程:
1. 建立IOC容器對象,
a. 根據切入點表達式配置,對符合規則的類,生成代理對象!
b. 其餘bean,若是不符合切入點表達式攔截規則,就直接建立!

2. 執行代理類的方法,
a. 若是方法切入點表達式攔截規則, 在執行方法時候動態織入「通知代碼」
b. 執行方法,不被攔截器,就直接執行代理的方法(代理會直接調用目標對象)


Spring的Aop編程,其實就是代理的生成的過程,只是這步驟由Spring運行時期完成!

9四、Spring中的BeanFactory與ApplicationContext的做用有哪些?
ApplicationContext 繼承了 Beanfactory ,二者都是接口
beanFactory 是一個建立bean對象的實例化工廠
applicationContext 是一個貫穿web程序的對象容器


9五、描述一下你如何理解Spring的ApplicationContext對象的?
applicationContext 存放了IOC容器實例化的對象,它是一個貫穿web應用的對象

9五、請說出你對Spring的理解
spring 提供了對架構分層的一站式解決方案
spring 具備極大的包容性,能與市面上多個流行的主流框架相互整合共用,提升開發效率。
spring 的事物管理和切面編程,對於程序的開發,能起到很是好的控制做用
spring 的ioc容器能夠更好的管理對象的建立時期,便於程序的管理維護與開發

9六、爲何要用Spring
Spring提供的是一站式的解決方案!
Spring 主要是建立對象,與其餘框架整合,表示能夠幫其餘框架建立對象!
在項目中引入spring當即能夠帶來下面的好處下降組件之間的耦合度,實現軟件各層之間的解耦。
一、IOC(依賴注入):包含並管理應用對象的配置和生命週期,你能夠配置你的每一個bean如何被建立,也能夠配置每一個bean是隻有一個實例,仍是每次須要時都生成一個新的實例,以及它們是如何相互關聯的
二、AOP(面向切面):採用了面向切面編程來實現不少基礎可是與業務邏輯無關的功能的解耦,好比:事務管理、日誌、權限驗證.....
三、DAO:Spring 還提供了對數據庫JDBC的封裝,使用JdbcTemplate來簡化數據操

四、ORM:提供了對主流的對象關係映射框架的支持
五、JEE: 對Java企業級開發提供了一些解決方案,例如EJB、JMS等 六、WEB: 提供了本身的Spring MVC和對顯示層框架的集合支持


9七、談一談SSH的整合
Ssh分工明確,各司其職,struts負責表現層,spring負責業務層,hibernate負責數據庫層。其中spring至關於一箇中間的角色。負責對其餘兩個框架的整合。
Spring框架 能夠利用IOC容器建立對象給其餘容器使用,可使用切面編程aop實現對重複的代碼的編寫,具備一次編寫屢次利用的好處。還有的 spring的事務。能夠控制數據的回滾的問題,實現對數據的增長,刪除,修改的有效控制。
Hibernate:方便咱們對數據庫的操做。簡化咱們對sql語句的書寫。咱們 也能夠本身本身寫sql語句。

 

9八、請說說JSON和XML做爲數據載體的各自的優缺點
json:
格式簡潔,數據的有效性高,它是以對象形式傳輸數據,帶寬流量的利用率高,編寫相對比較簡單
缺點:可讀性差
xml:
可讀性好,它是以標籤形式存放數據,格式閱讀方便了然
缺點:編寫麻煩,佔用帶寬流量


9九、攔截器和過濾器之間不一樣之處
攔截器和過濾器之間有不少相同之處,可是二者之間存在根本的差異。其主要區別爲如下幾點:
1)攔截器是基於JAVA反射機制的,而過濾器是基於函數回調的。
2)過濾器依賴於Servlet容器,而攔截器不依賴於Servlet容器
3)攔截器只能對Action請求起做用,而過濾器能夠對幾乎全部的請求起做用。
4)攔截器能夠訪問Action上下文、值棧裏的對象,而過濾器不能
5)在Action的生命週期中,攔截器能夠屢次被調用,而過濾器只能在容器初始化時被調用一次。


SE部分
一、請說出經常使用的幾種設計模式,並詳細描
單例模式、
單例對象(Singleton)是一種經常使用的設計模式。在Java應用中,單例對象能保證在一個JVM中,該對象只有一個實例存在

裝飾器模式、
裝飾模式就是給一個對象增長一些新的功能,並且是動態的,要求裝飾對象和被裝飾對象實現同一個接口,裝飾對象持有被裝飾對象的實例

普通工廠模式、
就是創建一個工廠類,對實現了同一接口的一些類進行實例的建立。

觀察者模式、
觀察者模式定義了對象間的一對多依賴關係,讓一個或多個觀察者對象觀察一個主題對象。
當主題對象的狀態發生變化時,系統能通知全部的依賴於此對象的觀察者對象,從而使得觀察者對象可以自動更新。

二、建立線程有幾種不一樣的方式
1.第一種方式繼承了Thread類,但JAVA在類中只支持單繼承,就不能繼承其它類
繼承Thread:線程代碼存放在Thread子類run方法中
2.第二種方式實現了接口,但能夠繼續繼承其它類;(避免了單繼承侷限性)
實現接口,代碼存放在Runnable實現子類子的run方法中

三、HashMap和Hashtable有什麼區別?
1 HashMap不是線程安全的

hastmap是一個接口 是map接口的子接口,是將鍵映射到值的對象,其中鍵和值都是對象,而且不能包含重複鍵,
但能夠包含重複值。HashMap容許null key和null value,而hashtable不容許。

2 HashTable是線程安全的一個Collection。

四、ArrayList和LinkedList有什麼區別?

若是是實現了List接口的集合類,具有的特色: 能夠存儲重複元素,並且是有序的

ArrayList 底層是維護了一個Obejct數組實現的, 特色: 查詢速度快,增刪慢。
LinkedList 底層是使用了鏈表數據結構實現的,特色: 查詢速度慢, 增刪快.

五、若是對象的引用被置爲null,垃圾收集器是否會當即釋放對象佔用的內存? 不會,在下一個垃圾回收週期中,這個對象將是可被回收的。

相關文章
相關標籤/搜索