Java面試題彙總(100題) Ⅲ

51 多線程有幾種實現方法?同步有幾種實現方法?

多線程兩種:繼承thread類和實現runnable接口
同步兩種:synchronized,wait與notify

52 JSP的內置對象和方法

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可以存儲用戶的狀態信息。
application表示一個javax.servlet.ServletContext對象,這有助於查找有關servlet引擎和servlet環境的信息。
config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。
page表示從該頁面產生的一個servlet實例。

53 線程的基本概念

線程指的是在程序執行過程中能夠執行程序代碼的一個執行單位,每個程序至少都有一個線程。
java中的線程有四種狀態分別是運行、就緒、掛起、結束

54 JSP常用指令

Jsp包含三個編譯指令和七個動作指令
三個編譯指令爲:page、include、taglib
七個動作指令爲:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty

編譯指令

page指令通常位於jsp頁面的頂端,同一個頁面可以有多個page指令。
語法格式如下:
〈% @page
language=”Java” 一般情況就是java,代表jsp頁面使用的腳本語言

extends=”package.class” 確定 JSP 程序編譯時所產生的 Java 類,需要繼承的父類,或者需要實現的接口的全限定類名

import= “package. class I package. },…”用來導入包,有幾個包是默認自動導入的,不需要顯式導入。默認導入的包有:java.lang. 、javax.servlet.、javax.servlet.jsp. 、javax.servlet.http.*

session=”true I false” 設定這個 JSP 頁面是否需要 HTIP session

buffer=”none I 8kb I size kb” 指定輸出緩衝區的大小,輸出緩衝區的 JSP 內部對象:out 用於緩存 JSP頁面對客戶瀏覽器的輸出,默認值爲 8kb,可以設置爲 none ,也可以設置爲其他值,單位爲kb

autoFlush=”true I false”當輸出緩衝區即將溢出時,是否需要強制輸出緩衝區的內容。設置爲true 時爲正常輸出;如果設置爲 false ,會在 buffer 溢出時產生一個異常。

isThreadSafe=”true I false”

info=”text” 設置該 JSP 程序的信息,也可以看做其說明,可以通過 Servlet. getServletInfo()方法獲取該值。如果在 JSP 頁面中,可直接調用 getServletInfo()方法獲取該值 。

errorPage=”relativeURL”指定錯誤處理頁面。如果本程序產生了異常或者錯誤,而該 JSP 頁面沒有對應的處理代碼,則會自動調用該指令所指定的 JSP 頁面

contentType=”mimeType[ ;charset=characterSet]” I”text/html;charset= “808859-1” 用於設定生成網頁的文件格式和編碼方式,即 MIME 類型和頁面字符集類型,默認的 MIME 類型是 text/html; 默認的字符集爲 ISO-8859-1
isErrorPage=” true I false” 設置本 JSP 頁面是否爲錯誤處理程序。如果該頁面本身己是錯誤處理頁面,則無須使用 errorPage 屬性。
%〉

include指令

使用 include 指令,可以將一個外部文件嵌入到當前 JSP 文件中,同時解析這個頁面中的 JSP 語句(如果有的話)。這是個靜態的 include 語旬,不會檢查所包含 JSP 頁面的變化。
include 既可以包含靜態的文本,也可以包含動態的 JSP 頁面。靜態的編譯指令include ,是將被包含的頁面加入進來,生成一個完整的頁面。
include 編譯指令的語法:

〈% @include file=”relativeURLSpec” %〉

如果被嵌入的文件經常需要改變,建議使用< jsp:include>操作指令,因爲它是動態的 include 語句。

包含include指令的jsp頁面在部署後,經過訪問編譯生成java文件,在tomcat的 work\Catalina\localhost\project\org\apache\jsp目錄下會生成對應的java文件,這些文件與jsp的名字相同,他包含了編譯後的代碼,甚至include包含的另外一個jsp的代碼也被相應的加入了進來。

forward指令

forward 指令用於將頁面響應控制轉發給另外的頁面。既可以轉發給靜態的 HTML頁面,也可以轉發到動態的 JSP 頁面,或者轉發到容器中的 Servlet。
JSP 的 forward 指令的格式如下:
對於 JSP 1.0 ,使用如下語法:
< jsp:forward page=”{relativeURL |<%=expression%>}” />
可使用如下語法:
< jsp:forward page=”{relativeURL |<%=expression%>}”>
{< jsp:param…/>}
< /jsp:forward>
第二種語法用於在轉發時增加額外的請求參數。增加的請求參數的值可以通過HttpServletRequest 類的 getParameter方法獲取。

jsp:include指令

它是一個動態的指令,可以用於導入某個頁面。它的導入會每次檢查被導入頁面的改變。下面是include指令的使用格式:
< jsp:include page=”{relativeURL |<%=expression%>}” flush=”true” />
或者:
< jsp:include page=”{relativeURL |<%=expression%>}” flush=”true”>
< jsp:param name=”paramName” value=”paramValue”/>
< /jsp:include>
flush 屬性用於指定輸出緩存是否轉移到被導入文件中。如果指定爲劇。則包含在被導入文件中;如果指定爲false,則包含在原文件中。對於JSP 1.1以下的舊版本,只能設置爲false。

< include>和< jsp:include>分別爲靜態導入和動態導入。他們的的區別:靜態導入是將被導入頁面的代碼完全插入,兩個頁面生成一個整體的 Servlet; 而動態導入則在 Servlet 中使用動態導入,從而將頁面引入。

useBean、setProperty和getProperty指令

這三個指令都是與JavaBean相關的指令,其中useBean用於在jsp頁面初始化一個java實例,setProperty用於修改JavaBean實例的屬性,getProperty用於獲取JavaBean實例的屬性。

useBean的語法格式:

< jsp:useBean id=”” class=”” scope=”page | request |session | application” >

Id是JavaBean的實例名,class屬性確定JavaBean的實現類。Scope屬性確定生存範圍【頁面、請求、會話、應用】

setProperty的語法格式:

< jsp:setProperty name=”” property=”” value=”” />

name屬性確定需要設定

plugin指令

plugin 指令用得少

param指令

param指令用於設置參數值,這個指令本身不能單獨使用,因爲單獨使用沒有意義。它可以和以下幾個指令合起來使用

jsp:include
jsp:forward
jsp:plugin

55 servlet的生命週期

web容器加載servlet,生命週期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service方法實現,根據請求的不同調用不同的do方法。
最後web容器調用servlet的destroy()方法

56 如何實現servlet的單線程模式

< %@ page isThreadSafe=”false” % >

57 頁面之間對象傳遞的方法

request session application cookie等

58 JSP和Servlet的相同點和不同點

JSP是Servlet技術的擴展,本質上是Servlet的簡易模式。
Servlet和JSP最主要的不同點在於Servlet的應用邏輯實在Java文件中,並且完全從表示層中的html中分離出來,而JSP的情況是Java和HTML可以組合成一個擴展名爲.jsp的文件。
JSP側重於視圖而Servlet用於控制邏輯

59 四種會話跟蹤技術

page:代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的JavaServlet類表示。這既包括Servlet又包括被編譯成Servlet的JSP頁面
request是代表與web客戶端發出的請求相關的對象和屬性。一個請求可能跨域多個頁面,涉及多個web組件(由於forward指令和include動作的關係)
session是代表與某個web客戶端的一個用戶體驗相關的對象和屬性。一個web會話可以跨越多個客戶機請求。
application是代表與整個web應用程序相關的對象和屬性。這實質上是跨越整個web應用程序、包括多個頁面、請求和會話的一個全局作用域。

60 request對象的主要方法

setAttribute(String name,Object) 設置名字爲那麼的request的參數值

61 J2EE是技術還是平臺還是框架

J2EE本身是一個標準,一個爲企業分佈式應用的開發提供的標準平臺
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術

62 我們在web應用開發過程中經常遇到輸出某種編碼的字符,比如iso8859-1,如何輸出一個某種編碼的字符串

public String translate(String str){
    String temp="";
    try{
        temp=new String(str.getBytes("ISO-8859-1"),"GBK");
        temp=temp.trim()
    }catch(Exception e){
    System.err.println(e.getMessage())
    }
    return temp;
}

63 簡述邏輯操作(&,|,^)和條件操作(&&,|| )的區別

條件操作只能操作布爾類型的,而邏輯操作不僅可以操作布爾類型,同時可以操作數值型(此時叫位操作)
邏輯操作不會產生短路,而條件操作會產生短路。
使用操作符時,我們會遇到一種“短路”現象。即一旦能夠明確無誤地確定整個表達式的值,就不再計算表達式餘下部分了。因此,整個邏輯表達式靠後的部分有可能不會被運算。

64 XML文檔定義有幾種形式?它們之間有什麼本質區別?解析xml文檔有哪幾種方式?

  • 兩種形式:dtd schema
  • 本質區別:schma本身是xml的,可以被xml解析器解析(這也是從DTD上發展schema的根本目的)
  • 解析XML文檔方式有DOM,SAX,STAX等
    DOM:處理大型文件時其性能下降的非常厲害,這個問題是由DOM的樹結構所造成的,這種結構佔用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合對XML的隨機訪問。
    SAX:SAX是事件驅動型的xml解析方式。它順序讀取xml,文件不需要一次全部裝載整個文件。當遇到像文件開頭、文檔結束或者標籤開頭、標籤結束時,它會出發一個時間,用於通過在回調事件中寫入處理代碼來處理xml文件,適合對xml的順序訪問

65 簡述synchronized和lock的異同

主要相同點:lock能完成synchronized所實現的所有功能
不同點:lock有比synchronized更加精確的線程語義和更好的性能。synchronized會自動釋放鎖,而lock要求程序員手動釋放,並且在finally中釋放

66 Servlet執行的時候一般實現哪幾個方法?

public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destory()

67 Java 常用設計模式?並且舉例說明它們

68 排序都有哪幾種方法? 用Java實現一個快速排序法

69 解釋下列名詞

web容器:
EJB容器:
JNDI:
JMS:
JTA:
JAF:

70 Java語言如何進行異常處理?關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以拋出異常嗎?

Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的接口。在Java中,每個異常都是一個對象,它是throwable類或者其他子類的實例。
當一個方法出現異常後變拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。Java的異常處理通過5個關鍵詞來實現的:throws,throw,try,catch,finally
throws和finally一般情況下是用try來執行一段程序,如果出現異常,系統會拋出throw一個異常,這時候可以通過它的類型來catch它,或者在finally語句塊中由缺省處理器來處理。
throw用來明確地拋出一個異常
throws用來標明一個成員函數可能拋出的各種異常
finally爲了確保一段代碼不管發生什麼異常都會被執行一段代碼

71 一個.java源文件是否可以包括多個類(不是內部類)?有什麼限制嗎

可以包括多個類。但必須只有一個類名與文件名相同

72 MVC的各個部分都有哪些技術來實現?

Model-view-controller。
model:JavaBean
view:JSP、velocity、freemarker等
controller:servlet(基本不用)在controllerl類名上加@Controller,方法名上加@RequestMapping確定訪問的uri

73 Java 中有哪幾種類型的流?JDK爲每種類型的流提供了哪些抽象類以供繼承?

字節流:InputStream、OutputStream
字符流:InputStreamReader、OutputStreamWriter

74 Java會造成內存泄露嗎?

java中內存泄露的發生場景,通俗地說,就是程序員可能創建了一個對象,以後一直不再使用這個對象,這個對象卻一直被引用,即這個對象無用但是卻無法被垃圾回收器回收的,這就是java中的內存泄露,一定要讓程序將各種分支情況都完整執行到程序結束,然後看某個對象是否被使用過,如果沒有,則才能判定這個對象屬於內存泄露。
如果一個外部類的實例對象的方法返回了一個內部類的實例對象,這個內部類對象被長期引用了,即使那個外部類實例對象不再被使用,但由於內部類持久外部類的實例對象,這個外部類對象將不會被垃圾回收,這也會造成內存泄露。

75 Java中實現多態的機制是什麼?

overload和override

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章