(一)Java web部分
1.Servlet和jsp頁面過濾器Filter的作用及配置
【參考答案】
過濾器是一個(gè)駐留在服務(wù)器端的Web組件,它可以截取客戶端和服務(wù)器端資源之間的請(qǐng)求與響應(yīng)信息,并對(duì)這些信息進(jìn)行過濾。作用:用戶請(qǐng)求審查、用戶數(shù)據(jù)轉(zhuǎn)換、統(tǒng)一認(rèn)證、輸出數(shù)據(jù)進(jìn)行壓縮、對(duì)請(qǐng)求響應(yīng)進(jìn)行加密。
配置:一般在web.xml中配置,通過和元素來完成的。
2.JSP內(nèi)置對(duì)象作用,如何取Cookie的方法
【參考答案】
使用request對(duì)象的getCookies()方法取到所有客戶端cookies信息。
(1) HttpServletRequest類的request對(duì)象
作用:代表請(qǐng)求對(duì)象,主要用于接受客戶端通過HTTP協(xié)議連接傳輸?shù)椒?wù)器端的數(shù)據(jù)。
(2) HttpServletResponse類的respone對(duì)象
作用:代表響應(yīng)對(duì)象,主要用于向客戶端發(fā)送數(shù)據(jù)
(3) JspWriter類的out對(duì)象
作用:主要用于向客戶端輸出數(shù)據(jù);
Out的基類是JspWriter
(4) HttpSession類的session對(duì)象
作用:主要用于來分別保存每個(gè)用戶信息,與請(qǐng)求關(guān)聯(lián)的會(huì)話;
會(huì)話狀態(tài)維持是Web應(yīng)用開發(fā)者必須面對(duì)的問題。
(5) ServletContext類的application對(duì)象
作用:主要用于保存用戶信息,代碼片段的運(yùn)行環(huán)境;
它是一個(gè)共享的內(nèi)置對(duì)象,即一個(gè)容器中的多個(gè)用戶共享一個(gè)application對(duì)象,故其保存的信息被所有用戶所共享.
(6) PageContext類的pageContext對(duì)象
作用:管理網(wǎng)頁屬性,為JSP頁面包裝頁面的上下文,管理對(duì)屬于JSP中特殊可見部分中已命名對(duì)象的訪問,它的創(chuàng)建和初始化都是由容器來完成的。
(7) ServletConfig類的config對(duì)象
作用:代碼片段配置對(duì)象,表示Servlet的配置。
(8) Object類的Page(相當(dāng)于this)對(duì)象
作用:處理JSP網(wǎng)頁,是Object類的一個(gè)實(shí)例,指的是JSP實(shí)現(xiàn)類的實(shí)例,即它也是JSP本身,只有在JSP頁面范圍之內(nèi)才是合法的。
(9)Exception
作用:處理JSP文件執(zhí)行時(shí)發(fā)生的錯(cuò)誤和異常
3.通過部署描述文件(web.xml)可以配置哪些功能?
【參考答案】
1、配置項(xiàng)目的歡迎頁面。
2、配置Servlet訪問URL
3、配置Web容器、Servlet的初始化參數(shù)
4、配置錯(cuò)誤頁面,可以通過異常編號(hào)進(jìn)行錯(cuò)誤頁面跳轉(zhuǎn)。
5、Servlet加載優(yōu)先級(jí)。
6、Web容器監(jiān)聽器。
7、Web請(qǐng)求過濾器。
8、設(shè)置會(huì)話的過期時(shí)間。
4.JSP有哪些的動(dòng)作?分別有什么作用?
【參考答案】
:在頁面被請(qǐng)求的時(shí)候引入一個(gè)文件。
:尋找或者實(shí)例化一個(gè)JavaBean。
:設(shè)置JavaBean的屬性。
:輸出某個(gè)JavaBean的屬性。
:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁面。
:在請(qǐng)求轉(zhuǎn)發(fā)與include中進(jìn)行頁面?zhèn)鲄ⅰ?/p>
:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記。
【分析】
主要說出常用的即可,分類羅列,一類與JavaBean相關(guān)的動(dòng)作,
>\\,另一類是轉(zhuǎn)發(fā)包含的指令\
d>\
5.JSP與SERVLET區(qū)別
【參考答案】
JSP在本質(zhì)上就是SERVLET,但是兩者的創(chuàng)建方式不一樣.Servlet完全是JAVA程序代碼構(gòu)成,擅長(zhǎng)于流程控制;而.JSP由HTML代碼和JSP標(biāo)簽構(gòu)成,可以方便地編寫動(dòng)態(tài)網(wǎng)頁.因此在實(shí)際應(yīng)用中采用Servlet來控制業(yè)務(wù)流程,而采用JSP來生成動(dòng)態(tài)網(wǎng)頁,同時(shí)在MVC設(shè)計(jì)模式中JSP充當(dāng)視圖層,而Servlet位于控制層。另外JSP也是Servlet技術(shù)的擴(kuò)展,本質(zhì)上就是Servlet,就是JSP的另一種簡(jiǎn)易體現(xiàn)形式,因?yàn)镴SP編譯后就是一個(gè)“類servlet”,再經(jīng)由JVM編譯生成Java類文件來執(zhí)行。
6.Tomcat的class加載的優(yōu)先順序一覽
【參考答案】
加載順序圖示如下:

第一步:加載JVM類庫。一般是加載由虛擬機(jī)提供的基本的運(yùn)行時(shí)類和系統(tǒng)擴(kuò)展目錄($JAVA_HOME/jre/lib/ext)下的JAR包。
第二步:加載系統(tǒng)環(huán)境變量的類庫。這個(gè)加載器用來加載CLASSPATH環(huán)境變量中指定的類。
第三步:加載Tomcat下面common文件夾下面的公共類庫。
第四步:加載自己需要的catalina類庫。
第五步:webapps下面自己應(yīng)用的類庫,包括webapp1、webapp1......等。
7.BS與CS的聯(lián)系與區(qū)別。【極地信息面試題】
【參考答案】
C/S是Client/Server的縮寫,表示客戶端需要安裝專用的客戶端軟件與服務(wù)器交互。
B/S是Brower/Server的縮寫,客戶機(jī)上只要安裝一個(gè)瀏覽器(Browser),如Internet Explorer。在這種結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn)。瀏覽器通過Web Server同數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互。
C/S與B/S區(qū)別:
1.硬件環(huán)境不同:
C/S一般建立在專用的網(wǎng)絡(luò)上,小范圍里的網(wǎng)絡(luò)環(huán)境,局域網(wǎng)之間再通過專門服務(wù)器提供連接和數(shù)據(jù)交換服務(wù).
B/S建立在廣域網(wǎng)之上的,不必是專門的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng),租用設(shè)備.信息自己管理.有比C/S更強(qiáng)的適應(yīng)范圍,一般只要有操作系統(tǒng)和瀏覽器就行
2.對(duì)安全要求不同
C/S一般面向相對(duì)固定的用戶群,對(duì)信息安全的控制能力很強(qiáng).一般高度機(jī)密的信息系統(tǒng)采用C/S結(jié)構(gòu)適宜.可以通過B/S發(fā)布部分可公開信息.
B/S建立在廣域網(wǎng)之上,對(duì)安全的控制能力相對(duì)弱,可能面向不可知的用戶。
3.對(duì)程序架構(gòu)不同
C/S程序可以更加注重流程,可以對(duì)權(quán)限多層次校驗(yàn),對(duì)系統(tǒng)運(yùn)行速度可以較少考慮.
B/S對(duì)安全以及訪問速度的多重的考慮,建立在需要更加優(yōu)化的基礎(chǔ)之上.比C/S有更高的要求B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨勢(shì),從MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng). SUN和IBM推的JavaBean構(gòu)件技術(shù)等,使B/S更加成熟.
4.軟件重用不同
C/S程序可以不可避免的整體性考慮,構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性好.
B/S對(duì)的多重結(jié)構(gòu),要求構(gòu)件相對(duì)獨(dú)立的功能.能夠相對(duì)較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子
5.系統(tǒng)維護(hù)不同
C/S程序由于整體性,必須整體考察,處理出現(xiàn)的問題以及系統(tǒng)升級(jí).升級(jí)難.可能是再做一個(gè)全新的系統(tǒng)
B/S構(gòu)件組成,方面構(gòu)件個(gè)別的更換,實(shí)現(xiàn)系統(tǒng)的無縫升級(jí).系統(tǒng)維護(hù)開銷減到最小.用戶從網(wǎng)上自己下載安裝就可以實(shí)現(xiàn)升級(jí).
6.處理問題不同
C/S程序可以處理用戶面固定,并且在相同區(qū)域,安全要求高需求,與操作系統(tǒng)相關(guān).應(yīng)該都是相同的系統(tǒng)
B/S建立在廣域網(wǎng)上,面向不同的用戶群,分散地域,這是C/S無法作到的.與操作系統(tǒng)平臺(tái)關(guān)系最小.
7.用戶接口不同
C/S多是建立的Window平臺(tái)上,表現(xiàn)方法有限,對(duì)程序員普遍要求較高
B/S建立在瀏覽器上,有更加豐富和生動(dòng)的表現(xiàn)方式與用戶交流.并且大部分難度減低,減低開發(fā)成本.
8.信息流不同
C/S程序一般是典型的中央集權(quán)的機(jī)械式處理,交互性相對(duì)低
B/S信息流向可變化, B-B B-C B-G等信息、流向的變化,更像交易中心。
8.Servlet與CGI的區(qū)別?!敬筇苿?dòng)力面試題】
【參考答案】
Servlet主要是運(yùn)行在服務(wù)器端的一個(gè)組件,基于Java語法構(gòu)建,延用Java的傳統(tǒng)優(yōu)勢(shì)——可移植、穩(wěn)健、易開發(fā)。CGI不可移植,為某一特定平臺(tái)編寫的CGI應(yīng)用只能運(yùn)行于這一環(huán)境中。每一個(gè)CGI應(yīng)用存在于一個(gè)由客戶端請(qǐng)求激活的進(jìn)程中,并且在請(qǐng)求被服務(wù)后被卸載。這種模式將引起很高的內(nèi)存、CPU開銷,而且在同一進(jìn)程中不能服務(wù)多個(gè)客戶。
Servlet對(duì)CGI的最主要優(yōu)勢(shì)在于一個(gè)Servlet被客戶端發(fā)送的第一個(gè)請(qǐng)求激活,然后它將繼續(xù)運(yùn)行于后臺(tái),等待后續(xù)請(qǐng)求。每個(gè)請(qǐng)求將生成一個(gè)新的線程,而不是一個(gè)完整的進(jìn)程,多個(gè)客戶能夠在同一個(gè)進(jìn)程中同時(shí)得到服務(wù),也就是說它是基于多線程模式。而CGI對(duì)每個(gè)請(qǐng)求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。
9.Servlet中的init()方法什么時(shí)候被調(diào)用?
【參考答案】
當(dāng)客戶端第一次請(qǐng)求該Servlet時(shí),由容器調(diào)用該Servlet類的init()方法對(duì)該Servlet進(jìn)行初始化,該初始始化方法只被調(diào)用一次。
10.用什么方法使服務(wù)器關(guān)閉之后,session所保存的信息不會(huì)丟失?
【參考答案】
使用cookie實(shí)現(xiàn),服務(wù)器端將需要保存的信息,通過Cookie并寫入客戶端磁盤中,下次訪問時(shí),客戶端瀏覽器攜帶寫入的信息提交至服務(wù)器,這樣可以使信息不會(huì)因服務(wù)器關(guān)閉而丟失。
【分析】
主要考查Cookie的相關(guān)知識(shí),比如還有一道題問:如果登錄某個(gè)網(wǎng)站后,想在本周內(nèi)都不用重新登錄,也是通過Cookie實(shí)現(xiàn)的
11.Forward與Redirect的區(qū)別?有哪些方式實(shí)現(xiàn)
【參考答案】
forward是服務(wù)器資源轉(zhuǎn)發(fā),服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,客戶機(jī)并不知道發(fā)送的內(nèi)容是從哪兒來的,所以地址欄中還是原來的地址;redirect則是服務(wù)器收到請(qǐng)求后發(fā)送一個(gè)狀態(tài)頭給客戶,客戶將再請(qǐng)求一次,這里多了兩次網(wǎng)絡(luò)通信的來往。forward會(huì)將請(qǐng)求狀態(tài)和信息發(fā)至下一個(gè)jsp或Servlet。redirect是送到client端后再一次請(qǐng)求,信息不被保留,就是我們說的無法獲取request中的參數(shù)。
實(shí)現(xiàn)方式:
HttpServletResponse接口sendRedirect()方法進(jìn)行重定向轉(zhuǎn)發(fā)
RequestDispatcher.接口forward()方法進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)
12.Servlet的生命周期分為3個(gè)階段?和CGI的區(qū)別?
【參考答案】
Servlet的生命周期主要由3個(gè)過程組成。
(1)init()方法:服務(wù)器初始化servlet。
(2)service()方法:初始化完畢,servlet對(duì)象調(diào)用該方法響應(yīng)客戶的請(qǐng)求。
(3)destroy()方法:調(diào)用該方法消滅servlet對(duì)象。
其中,init()方法只在servlet第一次被請(qǐng)求加載的時(shí)候被調(diào)用一次,當(dāng)有客戶再請(qǐng)求servlet服務(wù)時(shí),web服務(wù)器將啟動(dòng)一個(gè)新的線程,在該線程中,調(diào)用service方法響應(yīng)客戶的請(qǐng)求。
【分析】
后一個(gè)問題,與CGI的區(qū)別,可以參考前面的答案。
13.描述Cookie和Session的作用?區(qū)別和各自的應(yīng)用范圍?Session工作原理?!颈本┛迫鹈鳌?/b>
【參考答案】
Cookie和Session都是用來服務(wù)器端和客戶端進(jìn)行會(huì)話跟蹤的一種技術(shù)。
區(qū)別:Cookie只能傳輸字符數(shù)據(jù),字符是通過加密后寫到客戶端,下次請(qǐng)求時(shí)協(xié)帶至服務(wù)器端,Cookie協(xié)帶的數(shù)據(jù)大小為4KB,對(duì)數(shù)據(jù)量超出4KB的數(shù)據(jù),無法處理,Cookie數(shù)據(jù)一般是通過加密后存儲(chǔ)在客戶端,而Session在服務(wù)器端和瀏覽器緩存中都保存在ID的值,通過此ID來識(shí)別唯一的客戶端。Session對(duì)數(shù)據(jù)存儲(chǔ)的大小沒有限制,但存儲(chǔ)的信息加重服務(wù)器的負(fù)載,另外Session在分布式服務(wù)器的使用上也有限制,Session無法跨域,也就是多臺(tái)服務(wù)器無法共享會(huì)話。
Session原理:當(dāng)客戶端用戶訪問時(shí),服務(wù)器都為每個(gè)用戶分配一個(gè)唯一的會(huì)話ID(Session ID)保存在服務(wù)器內(nèi)存中,服務(wù)器響應(yīng)客戶端時(shí),將Session ID寫入瀏覽器緩存中,當(dāng)下次客戶端請(qǐng)求時(shí),就會(huì)將該Session ID攜帶至服務(wù)器,服務(wù)器再根據(jù)ID比對(duì),識(shí)別不同客戶端請(qǐng)求,以此方式來不斷維持服務(wù)器和客戶端狀態(tài)跟蹤。
14.dao是什么及作用
【參考答案】
DAO是數(shù)據(jù)庫訪問接口,負(fù)責(zé)管理與數(shù)據(jù)庫打交道操作對(duì)象,將對(duì)數(shù)據(jù)維護(hù)與操作的方法通過DAO封裝起來,使得這些操作可以從系統(tǒng)的業(yè)務(wù)邏輯中獨(dú)立出來,從而使系統(tǒng)中的數(shù)據(jù)庫操作變得統(tǒng)一和簡(jiǎn)單化,方便開發(fā)人員對(duì)組件職責(zé)進(jìn)行劃分。
15.解釋一下什么是servlet
【參考答案】
Servlet是用Java編寫的服務(wù)器端程序,由服務(wù)器端調(diào)用和執(zhí)行的Java類。是使用Java Servlet應(yīng)用程序設(shè)計(jì)接口(API)及相關(guān)類和方法來構(gòu)建的,而Java Servlet API定義了servlet和Java使能的服務(wù)器之間的一個(gè)標(biāo)準(zhǔn)接口,這使得Servlets具有跨服務(wù)器平臺(tái)的特性,當(dāng)客戶機(jī)發(fā)送請(qǐng)求至服務(wù)器時(shí),服務(wù)器可以將請(qǐng)求信息發(fā)送給Servlet,并讓Servlet建立起服務(wù)器返回給客戶機(jī)的響應(yīng)。Servlet的功能很廣泛,例如可以創(chuàng)建響應(yīng)至客戶端的所有HTML元素內(nèi)容和動(dòng)態(tài)數(shù)據(jù)內(nèi)容,與其它組件通訊等等。
16.HTTP請(qǐng)求的GET與POST方式的區(qū)別
【參考答案】
GET和POST.是HTTP定義的與服務(wù)器交互的不同方法,是使用HTTP的標(biāo)準(zhǔn)協(xié)議動(dòng)詞,用于編碼和傳送變量名/變量值對(duì)參數(shù),并且使用相關(guān)的請(qǐng)求語義。
1、Get方式在通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST方式,數(shù)據(jù)放置在HTML HEADER內(nèi)提交,無法在地址欄看到。
2、GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制。
3、GET一般用作小數(shù)據(jù)量的請(qǐng)求,POST一般用作大數(shù)據(jù)量的請(qǐng)求,如:附件。
17.什么情況下調(diào)用doGet()和doPost()?
【參考答案】
根據(jù)客戶端的請(qǐng)求的方式來決定調(diào)用哪個(gè)方法處理請(qǐng)求,如果客戶端采用GET方式
發(fā)送請(qǐng)求,服務(wù)器端則采用doGET()來處理,如果采用post方式,服務(wù)器端則采用doPOST()
18.request對(duì)象的主要方法
【參考答案】
setAttribute(String name,Object):設(shè)置名字為name的request的參數(shù)值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對(duì)象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例
getCookies():返回客戶端的所有Cookie對(duì)象,結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():返回請(qǐng)求中的字符編碼方式
getContentLength():返回請(qǐng)求的Body的長(zhǎng)度
getHeader(String name):獲得HTTP協(xié)議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結(jié)果是一個(gè)枚舉的實(shí)例
getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getInputStream():返回請(qǐng)求的輸入流,用于獲得請(qǐng)求中的數(shù)據(jù)
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getParametervalues(String name):獲得有name指定的參數(shù)的所有值
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發(fā)出請(qǐng)求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請(qǐng)求相關(guān)Session
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請(qǐng)求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號(hào)
removeAttribute(String name):刪除請(qǐng)求中的一個(gè)屬性
19.request.getAttribute()和request.getParameter()有何區(qū)別?
【參考答案】
request.getAttribute()獲取在請(qǐng)求對(duì)象中設(shè)置的屬性,該方法返回對(duì)象為Object類型,而getParameter()方法是獲取指定的請(qǐng)求參數(shù)值,返回值為String類型的字符串。
20.jsp有哪些內(nèi)置對(duì)象?作用分別是什么?分別有什么方法?【軟通動(dòng)力面試題】
【參考答案】
答:JSP共有以下9個(gè)內(nèi)置的對(duì)象:
1)request用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來自GET/POST請(qǐng)求的參數(shù)
2)response網(wǎng)頁傳回用戶端的回應(yīng)
3)pageContext網(wǎng)頁的屬性是在這里管理
4)session與請(qǐng)求有關(guān)的會(huì)話期
5)application servlet正在執(zhí)行的內(nèi)容
6)out用來傳送回應(yīng)的輸出
7)config servlet的構(gòu)架部件
8)page JSP網(wǎng)頁本身
9)exception針對(duì)錯(cuò)誤網(wǎng)頁,未捕捉的例外
具體說明如下:
request表示HttpServletRequest對(duì)象。它包含了有關(guān)瀏覽器請(qǐng)求的信息,并且提供了幾個(gè)用于獲取cookie, header,和session數(shù)據(jù)的有用的方法。
response表示HttpServletResponse對(duì)象,并提供了幾個(gè)用于設(shè)置送回瀏覽器的響應(yīng)的方法(如cookies,頭信息等)
out對(duì)象是javax.jsp.JspWriter的一個(gè)實(shí)例,并提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。
pageContext表示一個(gè)javax.servlet.jsp.PageContext對(duì)象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對(duì)象的API,并且包裝了通用的servlet相關(guān)功能的方法。
session表示一個(gè)請(qǐng)求的javax.servlet.http.HttpSession對(duì)象。Session可以存貯用戶的狀態(tài)信息
applicaton表示一個(gè)javax.servle.ServletContext對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
config表示一個(gè)javax.servlet.ServletConfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。
page表示從該頁面產(chǎn)生的一個(gè)servlet實(shí)例
21.JSP的常用指令
【參考答案】
共三種,分別是:
1)<%@include >用來在JSP頁面包含靜態(tài)資源
2)<%@taglib >用來指定JSP頁面標(biāo)簽類型
3)<%@page >用來指定頁面相關(guān)屬性
22.頁面間對(duì)象傳遞的方法
【參考答案】
request、session、application、Cookie等,其中比較常用的像request、Session。request主要是應(yīng)用在同一請(qǐng)求周期內(nèi),可能進(jìn)行對(duì)象或參數(shù)的共享傳遞。而Session主要可以應(yīng)用于同一客戶端會(huì)話周期內(nèi)進(jìn)行參數(shù)屬性的共享。
23.MVC的各個(gè)部分都有那些技術(shù)來實(shí)現(xiàn)?如何實(shí)現(xiàn)?
【參考答案】
MVC是Model-View-Controller的簡(jiǎn)寫。Model代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn)),View是應(yīng)用的表示面(由JSP頁面產(chǎn)生),Controller是提供應(yīng)用的處理過程控制(一般是一個(gè)Servlet),通過這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。
24.我們?cè)?/b>web應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼的字符串?
【參考答案】
public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
25.Web系統(tǒng)安全因素有哪些?
【參考答案】
1)操作系統(tǒng)、后臺(tái)數(shù)據(jù)庫的安全問題:這里指操作系統(tǒng)和后臺(tái)數(shù)據(jù)庫的漏洞,配置不當(dāng),如弱口令等等,導(dǎo)致黑客、病毒可以利用這些缺陷對(duì)網(wǎng)站進(jìn)行攻擊。
2)Web發(fā)布系統(tǒng)的漏洞:Web業(yè)務(wù)常用的發(fā)布系統(tǒng)(即Web服務(wù)器),如IIS、Apache
等,這些系統(tǒng)存在的安全漏洞,會(huì)給入侵者可乘之機(jī)。
3)Web應(yīng)用程序的漏洞:主要指Web應(yīng)用程序的編寫人員,在編程的過程中沒有考慮到
安全的因素,使得黑客能夠利用這些漏洞發(fā)起對(duì)網(wǎng)站的攻擊,比如SQL注入、跨站腳本攻擊等等。
4)自身網(wǎng)絡(luò)的安全狀況:網(wǎng)站服務(wù)器所處的網(wǎng)絡(luò)安全狀況也影響著網(wǎng)站的安全,比如網(wǎng)絡(luò)中存在的DoS攻擊等,也會(huì)影響到網(wǎng)站的正常運(yùn)營(yíng)。
26.web運(yùn)用程序的穩(wěn)定、安全需要考慮哪些?
【參考答案】
Web服務(wù)器的性能考慮主要有:并發(fā)用戶數(shù)、事務(wù)安全、負(fù)載均衡、時(shí)段流量、網(wǎng)絡(luò)帶寬
網(wǎng)格安全等。
網(wǎng)絡(luò)安全方面:
·關(guān)鍵數(shù)據(jù)的保護(hù),例如用戶數(shù)據(jù)等
·功能服務(wù)的正常提供。
·網(wǎng)站的防攻擊能力。
·對(duì)異常災(zāi)害的恢復(fù)能力。
程序性能:
·響應(yīng)請(qǐng)求并運(yùn)行得出結(jié)果的時(shí)間。
·錯(cuò)誤的檢測(cè)和攔截。
·擴(kuò)展性。
27.介紹幾種WEB服務(wù)器,問Tomcat里面的文件組成?
【參考答案】
Apache、Tomcat、Jetty、Jboss、Websphere、WebLogic
bin:啟動(dòng)、關(guān)閉Tomcat的命令。
common/lib:網(wǎng)絡(luò)編程的jar文件。
conf:配置文件。
logs:日志文件.
server:自帶的web應(yīng)用(三個(gè)).
shared:所有web應(yīng)用都可以訪問的內(nèi)容.
temp:臨時(shí).
webapps:默認(rèn)站點(diǎn)文件夾.
work:jsp生成的類.
Tomcat是一個(gè)開放源代碼、運(yùn)行servlet和JSP Web應(yīng)用軟件的基于Java的Web應(yīng)用軟件容器。Tomcat Server是根據(jù)servlet和JSP規(guī)范進(jìn)行執(zhí)行的,因此我們就可以說Tomcat Server也實(shí)行了Apache-Jakarta規(guī)范且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好。
28.將ISO8859-1字符串轉(zhuǎn)成GB2312編碼,語句為?
【參考答案】
String s=new String(text.getBytes(“iso8859-1”),”gb2312”)
29.與<%@include>的區(qū)別
【參考答案】
上面兩種都是在當(dāng)前頁面加載或包含另一頁面內(nèi)容,而使用動(dòng)作標(biāo)簽實(shí)現(xiàn)時(shí)它總是會(huì)檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁面,并且包含的頁頁要符合web容器語法要求,因?yàn)楸话捻撁鏁?huì)被web引擎進(jìn)行編譯和加載,同時(shí)包含時(shí)會(huì)發(fā)送http請(qǐng)求,所以可以攜帶參數(shù)。
而<%@include>是用偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,只是簡(jiǎn)單的將被加載的資源拷貝到了當(dāng)前,而這種包含更多的是一種重用,不能實(shí)現(xiàn)參數(shù)共享。
30.說出數(shù)據(jù)連接池的工作機(jī)制是什么?
【參考答案】
web服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接。客戶端程序需要連接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接,新建連接的數(shù)量有配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。
實(shí)現(xiàn)方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正關(guān)連接,而是把它代理的Connection對(duì)象還回到連接池中。
31.如何實(shí)現(xiàn)Servlet單線程
【參考答案】
<%@ page isThreadSafe="false"%>
32.哪些方法可以提高JDBC性能?
【參考答案】
1.使用數(shù)據(jù)連接池(Connection Pool),避免使用DriverManager.getConnection()。
2.合理的配置數(shù)據(jù)連接池參數(shù),合理如何設(shè)置數(shù)據(jù)連接池的初始大小
3.選擇合適的事務(wù)等級(jí),按照不同的數(shù)據(jù)庫操作類型選擇不同的事務(wù)等級(jí)。
4.及時(shí)關(guān)閉Connection,不關(guān)閉的話會(huì)嚴(yán)重影響系統(tǒng)的性能,甚至造成系統(tǒng)罷工
5.優(yōu)化Statement
1)選擇合適的Statement,根據(jù)不同的數(shù)據(jù)庫操作選擇Statement, PreparedStatement或者CallableStatement
2)盡可能的使用batch,這樣可以減少調(diào)用JDBC的次數(shù)。
3) Statement執(zhí)行完畢后關(guān)閉Statement
6.優(yōu)化你的SQL,盡量減少你的結(jié)果集,不要每次都"select * from XXX"
7.使用一些緩存工具進(jìn)行緩存,特別是大數(shù)據(jù)查詢。
33.實(shí)現(xiàn)會(huì)話跟蹤有哪幾個(gè)方式?
【參考答案】
1、URL重寫
2、隱藏表單域
3、Cookie
4、Session
34.Web容器里面的對(duì)象存活周期?
【參考答案】
當(dāng)然由web容器進(jìn)行創(chuàng)建管理的對(duì)象主要有application,session,request,page這四個(gè)級(jí)別的對(duì)象,而這4種級(jí)別的對(duì)象,根據(jù)它們自身的特點(diǎn)來管理所持的對(duì)象,如:request中的對(duì)象的生命周期就是在請(qǐng)求范圍內(nèi),Session在是會(huì)話周期內(nèi),page是在當(dāng)前JSP Page內(nèi),Application是在服務(wù)器啟、停的周期內(nèi)。
【分析】
總的來說這道題有點(diǎn)沒明白,提問者想問的是東西是什么??吹筋}第一反應(yīng)以為是問Servlet的生存周期,因?yàn)檎f到Web容器對(duì)象,一般指的是Servlet,Servlet組件是由容器進(jìn)行創(chuàng)建、調(diào)用和管理的,所以首先想到了Servlet的存活周期。
35.瀏覽器頁面與Tomcat的交互過程?
【參考答案】
當(dāng)一個(gè)JSP頁面第一次被訪問的時(shí)候,JSP引擎將執(zhí)行以下步驟:
(1)將JSP頁面翻譯成一個(gè)Servlet,這個(gè)Servlet是一個(gè)java文件,同時(shí)也是一個(gè)完整的java程序
(2)再由java編譯器對(duì)這個(gè)Servlet進(jìn)行編譯,得到可執(zhí)行class文件
(3)再由JVM解釋器來解釋執(zhí)行class文件,生成向客戶端發(fā)送的應(yīng)答,然后發(fā)送給客戶端
以上三個(gè)步驟僅僅在JSP頁面第一次被訪問時(shí)才會(huì)執(zhí)行,以后的訪問速度會(huì)因?yàn)閏lass文件已經(jīng)生成而大大提高。
36.什么是斷點(diǎn)續(xù)傳,HTTP是否支持上傳下載,原理?【大唐動(dòng)力面試題】
所謂斷點(diǎn)續(xù)傳,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載??蛻舳嗽谡?qǐng)求時(shí),除了其它的信息外,需要增加一條參數(shù),告訴服務(wù)器從哪里開始傳,在讀取時(shí)從指定的字節(jié)數(shù)的開始位向后讀取。簡(jiǎn)單示例:
RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 100000; //表示從100000字節(jié)位置開始讀取。
//定位文件指針到nPos位置
oSavedFile.seek(nPos);
byte[] b = new byte[1024];
int nRead;
//從輸入流中讀入字節(jié)流,然后寫到文件中
while((nRead=input.read(b,0,1024)) > 0)
{
oSavedFile.write(b,0,nRead);
下載完整面試題文件:
https://www.duyunwl.cn/2019/03/08/java面試題大全/