JAVA面試題 java web部分

(一)Java web部分

1.Servletjsp頁面過濾器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.JSPSERVLET區(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.Tomcatclass加載的優(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.BSCS的聯(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/SB/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.ServletCGI的區(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.ForwardRedirect的區(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.描述CookieSession的作用?區(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)求的GETPOST方式的區(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、JettyJboss、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面試題大全/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容