JAVA面試精選【Java web部分一】


 

Java的基礎知識點就太多了,要說也不能窮盡,這個主要是靠自己在平時的積累和項目的開發經驗,外邊考的多的一般是繼承,多態,線程,集合等等,但是筆試或者是面試中很有可能問許多集體的內容,比如hashMap和hashTable的異同點,集合的主要框架,這些要多看資料,我的建議是到網上去多下點筆試題,看到了就會有感覺,基礎知識牢靠的話,筆試很容易過。面試的時候(我只能說關於技術的部分),java web面試,首先面試官要看你有沒有項目的經驗,所以簡歷中肯定要有項目的經驗。再者,簡歷中的項目一定要是你親身經歷的,或者是你對這個項目很了解(不論是從技術或者是從源碼),因為面試官在你介紹的項目的時候很可能打斷你要你介紹具體的實現方法。 在介紹自己項目的時候,一定要發覺自己在項目中的閃光點,也就是有和一般的項目有重大區別的地方(可以對面試官詳訴)。然后就是你在項目中所使用的技術,你要有一定的了解,比如說spring,你首先要知道使用spring框架的好處,然后就是spring的主要組成(ioc和aop),當然面試官回問一些關於技術的實際問題(比如說加載的applicationContext.xml可不可以改名字,怎么實現),這個就看你的項目經驗了。總的來說,關於技術方面你要知道使用技術的優點,基本的組成,這個可以多網上去搜索關於特定技術的面試問題。Mybatis我不是很懂所以給不了你答案,Struts好像學java web的都在用,但在實際開發中好像用的真的不是很多,面試的問題一般是關於它的配置問題,比如要返回一個json對象怎么設置,幾個配置文件怎么糅合,我也不知道說什么好,如果可以的話,還是上網上搜搜看。好了,說的就是這么多,希望你能有收獲。本章我們將針對JAVA的Web部分,給大家分享一些面試題目。

 

 1、Tomcat的優化經驗
答:去掉對web.xml的監視,把jsp提前編輯成Servlet。
有富余物理內存的情況,加大tomcat使用的jvm的內存

 2、HTTP請求的GET與POST方式的區別
答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。

3、解釋一下什么是servlet;
答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。

4、說一說Servlet的生命周期?
答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。
 
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。

5、Servlet的基本架構
public class ServletNameextends HttpServlet {
public voiddoPost(HttpServletRequest request,HttpServletResponse response) throws
ServletException,IOException {
}
public voiddoGet(HttpServletRequest request,HttpServletResponse response) throws
ServletException,IOException {
}
}

6、SERVLETAPI中forward()與redirect()的區別?
答:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;后者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用
sendRedirect()方法。
 
7、什么情況下調用doGet()和doPost()?
Jsp頁面中的FORM標簽里的method屬性為get時調用doGet(),為post時調用doPost()。
 
8、Request對象的主要方法:
setAttribute(Stringname,Object):設置名字為name的request的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的實例
getHeaderNames():返回所以request Header的名字,結果是一個枚舉的實例
getInputStream():返回請求的輸入流,用於獲得請求中的數據
getMethod():獲得客戶端向服務器端傳送數據的方法
getParameter(String name):獲得客戶端傳送給服務器端的有name指定的參數值
getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例
getParametervalues(Stringname):獲得有name指定的參數的所有值
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Booleancreate]):返回和請求相關Session
getServerName():獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(Stringname):刪除請求中的一個屬性
 
9、forward和redirect的區別
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。
   redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。

10、Class.forName的作用?為什么要用?
答:按參數中指定的字符串形式的類名去搜索並加載相應的類,如果該類字節碼已經被加載過,則返回代表該字節碼的Class實例對象,否則,按類加載器的委托機制去搜索和加載該類,如果所有的類加載器都無法加載到該類,則拋出ClassNotFoundException。加載完這個Class字節碼后,接着就可以使用Class字節碼的newInstance方法去創建該類的實例對象了。
有時候,我們程序中所有使用的具體類名在設計時(即開發時)無法確定,只有程序運行時才能確定,這時候就需要使用Class.forName去動態加載該類,這個類名通常是在配置文件中配置的,例如,spring的ioc中每次依賴注入的具體類就是這樣配置的,jdbc的驅動類名通常也是通過配置文件來配置的,以便在產品交付使用后不用修改源程序就可以更換驅動類名。

11. jsp有哪些內置對象?作用分別是什么?分別有什么方法?
答:JSP共有以下9個內置的對象:
request 用戶端請求,此請求會包含來自GET/POST請求的參數
response 網頁傳回用戶端的回應
pageContext 網頁的屬性是在這里管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config  servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外
 
request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,並且提供了幾個用於獲取cookie, header,和session數據的有用的方法。
   response表示HttpServletResponse對象,並提供了幾個用於設置送回瀏覽器的響應的方法(如cookies,頭信息等)
   out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
   pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各種范圍的名字空間、servlet相關的對象的API,並且包裝了通用的servlet相關功能的方法。
   session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息
   applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息
   config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。
   page表示從該頁面產生的一個servlet實例
 
12. jsp有哪些動作?作用分別是什么?
(這個問題似乎不重要,不明白為何有此題)
答:JSP共有以下6種基本動作
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記

13、JSP的常用指令
isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達式)
 
14. JSP中動態INCLUDE與靜態INCLUDE的區別?
答:動態INCLUDE用jsp:include動作實現
<jsp:includepage=included.jsp flush=true />它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數 靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面 <%@includefile=included.htm %>
 
15、兩種跳轉方式分別是什么?有什么區別?
(下面的回答嚴重錯誤,應該是想問forward和sendRedirect的區別,畢竟出題的人不是專業搞文字藝術的人,可能表達能力並不見得很強,用詞不一定精准,加之其自身的技術面也可能存在一些問題,不一定真正將他的意思表達清楚了,嚴格意思上來講,一些題目可能根本就無人能答,所以,答題時要掌握主動,只要把自己知道的表達清楚就夠了,而不要去推敲原始題目的具體含義是什么,不要一味想着是在答題)
答:有兩種,分別為:
<jsp:includepage=included.jsp flush=true>
<jsp:forward page=nextpage.jsp/>
前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面。執行完后還會回來,相當於函數調用。並且可以帶參數.后者完全轉向新頁面,不會再回來。相當於go to 語句。

16、頁面間對象傳遞的方法
request,session,application,cookie等

17、JSP和Servlet有哪些相同點和不同點,他們之間的聯系是什么?
JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯后是"類servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。

18、MVC的各個部分都有那些技術來實現?如何實現?
答:MVC是Model-View-Controller的簡寫。Model代表的是應用的業務邏輯(通過JavaBean,EJB組件實現),View是應用的表示面(由JSP頁面產生),Controller是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。
 
19、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
 Public String translate(String str) {
   String tempStr ="";
   try {
     tempStr =newString(str.getBytes("ISO-8859-1"), "GBK");
     tempStr =tempStr.trim();
   }
   catch (Exception e) {
    System.err.println(e.getMessage());
   }
   return tempStr;

 }

 

20、說出數據連接池的工作機制是什么?

J2EE服務器啟動時會建立一定數量的池連接,並一直維持不少於此數目的池連接。客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接並將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成后,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。

實現方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正關連接,而是把它代理的Connection對象還回到連接池中。


 

 

21、xml有哪些解析技術?區別是什么?

答:有DOM,SAX,STAX等

DOM:處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合對XML的隨機訪問SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問

STAX:Streaming API for XML(StAX)

講解這些區別是不需要特別去比較,就像說傳智播客與其他培訓機構的區別時,我們只需說清楚傳智播客有什么特點和優點就行了,這就已經間接回答了彼此的區別。

22、你在項目中用到了xml技術的哪些方面?如何實現的?

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


 

23、XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?

a: 兩種形式 dtd schema,b:本質區別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的),c:有DOM,SAX,STAX等

   DOM:處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合對XML的隨機訪問

SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問

   STAX:Streaming API forXML (StAX)

24、為什么要用 ORM? 和 JDBC有何不一樣?

orm是一種思想,就是把object轉變成數據庫中的記錄,或者把數據庫中的記錄轉變成objecdt,我們可以用jdbc來實現這種思想,其實,如果我們的項目是嚴格按照oop方式編寫的話,我們的jdbc程序不管是有意還是無意,就已經在實現orm的工作了。

現在有許多orm工具,它們底層調用jdbc來實現了orm工作,我們直接使用這些工具,就省去了直接使用jdbc的繁瑣細節,提高了開發效率,現在用的較多的orm工具是hibernate。也聽說一些其他orm工具,如toplink,ojb等。

25、Class.forName的作用?為什么要用?

答:按參數中指定的字符串形式的類名去搜索並加載相應的類,如果該類字節碼已經被加載過,則返回代表該字節碼的Class實例對象,否則,按類加載器的委托機制去搜索和加載該類,如果所有的類加載器都無法加載到該類,則拋出ClassNotFoundException。加載完這個Class字節碼后,接着就可以使用Class字節碼的newInstance方法去創建該類的實例對象了。

有時候,我們程序中所有使用的具體類名在設計時(即開發時)無法確定,只有程序運行時才能確定,這時候就需要使用Class.forName去動態加載該類,這個類名通常是在配置文件中配置的,例如,spring的ioc中每次依賴注入的具體類就是這樣配置的,jdbc的驅動類名通常也是通過配置文件來配置的,以便在產品交付使用后不用修改源程序就可以更換驅動類名。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM