JSP面試題
1..JSP有哪些內置對象和動作,他們的作用分別是什么?
(1)什么是內置對象?
在jsp開發中,會頻繁使用到一些對象
。例如HttpSession,ServletContext,ServletContext,HttpServletRequet。如果我們每次要使用這些對象都去創建這些對象就顯示非常麻煩。所以Sun公司設計Jsp時,在jsp頁面加載完畢之后就會自動幫開發者創建好這些對象,而開發者只需要直接使用這些對象調用方法即可!,這些創建好的對象就叫內置對象!!!!
舉例:
servlet:
HttpSession session = request.getSession(true); (需要開發者做)
jsp:
tomcat服務器: HttpSession session = request.getSession(true);(不需要開發者做)
開發者做的: session.getId();
2.九大內置對象都有哪些?
內置對象名? ? ? ? ? 類型? ? ? ? 范圍
request ? HttpServletRequest? 請求范圍
response? ? ? HttpServletResponse? 標準輸出流
config? ? ? ? ServletConfig。? Servlet配置信息對象
application? ? ? ? ServletContext? 應用范圍
session? ? ? ? HttpSession? 會話范圍
exception? ? ? ? Throwable? 異常引用(isErrorPage=“true”)
page? ? ? ? ? ? Object(this)? ? ? 很少用
out? ? ? ? ? ? JspWriter? ? ? ? ? 響應對象
pageContext? ? PageContext? ? 頁面范圍
1、HttpServletRequest 的 request 對象
作用:代表請求對象,用來接收客戶端通過http 協議連接傳輸到服務器端的數據。
2、HttpServletResponse 的response 對象
作用:代表響應對象,用來向客戶端發送數據。
3、JspWriter 的 out 對象
作用:主要用于向客戶端發送數據。其中JspWriter 是out 的基類。
4、HttpSession 的session 對象
作用:主要用于來分別保存每個用戶的個人信息,與請求關聯的對話。會話狀態的維持是每個web 應用開發者都必須面對的問題。
5、ServletContext 的application 對象
作用:主要用于保存用戶信息,代碼片斷的運行環境。它是一個共享的內置對象。即一個容器中多個用戶共享一個application 對象,故其保存的信息被所有的用戶所共享。
6、PageContext 的PageContext 對象
作用:管理網頁的屬性,為jsp 頁面包裝頁面的上下文,管理對屬于jsp 中特殊可見部分中
已經命名對象的訪問。它的創建和初始化的工作都是由容器來自動完成的。
7、ServletConfig 的Config 對象
作用:代碼片斷配置對象,表示對servlet 的配置。
8、Object 的page(相當于this) 對象
作用:處理jsp 網頁,是object 類的一個實例。即它也是jsp 的本身,只有在jsp 的頁面范
圍之內它才是合法的。
9、Exception
2..JSP的執行原理?
-瀏覽器上訪問的路徑雖然是以.jsp結尾,訪問的是某個jsp文件,其實底層執行的是jsp對應的java程序
-Tomcat服務器負責將.jsp文件翻譯生成.java源文件,并且將java源文件編譯生成.class字節碼文件
-訪問jsp,其實底層還是執行了.class文件中的程序
-Tomcat服務器內置了一個JSP翻譯引擎,專門負責翻譯JSP文件,編譯java源文件
-index.jsp會被翻譯生成index_jsp.java,編譯生成index_jsp.class
-index_jsp這個類繼承了HttpJspBase,而HTTPJsBase繼承了HttpServlet
-jsp就是Servlet,只不過職責不同,JSP的強項做頁面展示
3.3 Jsp中的四個域對象
四個域對象:
pageContext? ? ? page域
request? ? ? ? ? request域
session? ? ? ? ? session域
application? ? ? context域
1)域對象作用:
保存數據? 和 獲取數據 ,用于數據共享。
2)域對象方法:
setAttribute("name",Object) 保存數據
getAttribute("name")? 獲取數據
removeAttribute("name") 清除數據
3)域對象作用范圍:
page域: 只能在當前jsp頁面中使用(當前頁面)
request域: 只能在同一個請求中使用(轉發)
session域: 只能在同一個會話(session對象)中使用(私有的)
context域: 只能在同一個web應用中使用。(全局的)
順序: page域 -> request域 -> session域- > context域(application域)
關于異常的的面試題
throwable形容詞,可拋出的,繼承與objcet,所有的異常都是可拋出的,
StackOverFlowError 棧內存溢出
1.java中的異常和error有什么區別?(必考)
所有的異常都有一個共同的祖先 Throwable(可拋出),Throwable 有兩個重要的子類:Exception(異常)和 Error(錯誤),
Exception(異常)是應用程序中可能的可預測、可處理,可恢復的。Exception 類有一個重要的子類 RuntimeException。RuntimeException 類及其子類表示“JVM 常用操作”引發的錯誤,如:空值對象引用、除數為零或數組越界(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。)異常又分為兩類:一個是編譯時異常一個是運行時異常。在我們代碼級別上,所有runtimeException的子類都是運行時異常,所有Exception的直接子類都是編譯時異常,在語法上規定,編譯時異常要求程序員在編寫階段必須處理,如果不處理的話,編譯都無法通過。如果異常時runtimeException,那么程序猿在編寫階段對它不需要處理 ,和現實世界對比,編譯時異常發生幾率是比較高的,運行時異常發生幾率是比較低的。
Error(錯誤)表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如:StackOverFlowError 棧內存溢出。或者 當 JVM 不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。.java.lang.Error:? Throwable的子類,用于標記嚴重錯誤。應用程序不應該去try/catch這種錯誤。絕大多數的錯誤都是非正常的,就根本不該出現的。
3.編譯時異常和運行時異常的區別:
在我們代碼級別上,所有runtimeException的子類都是運行時異常,所有Exception的直接子類都是編譯時異常,在語法上規定,編譯時異常要求程序員在編寫階段必須處理,如果不處理的話,編譯都無法通過。如果異常時runtimeException,那么程序猿在編寫階段對它不需要處理 ,和現實世界對比,編譯時異常發生幾率是比較高的,運行時異常發生幾率是比較低的。
2.1 處理異常的兩種方式
1. 聲明拋出
2 捕捉 try……catch……
3.下面程序的執行結果.(異常的必考題)
public static void main(String[] args){
int i = m1();
System.out.println(i); //10
}
public static int m1(){
int i = 10;
try{
return i;
}finally{
i++;
System.out.println("m1的i=" + i); //11
}
//以上代碼的執行原理(還有一個考點就是++運算符號單獨使用,不參與運算操作,運算符前置后置結果是一致的,當參與運算,前置a++,先使用變量原有值參與運算操作,運算操作完成后,變量a的值自增或者自減1)
/*
int i = 10;
try{
int temp = i;
return temp;
}finally{
i++;
System.out.println("m1的i=" + i); //11
}
4.JAVA異常處理中一個try后必須得有一個catch塊嗎?在什么情況下使用try cacth finally語句。請舉例說明:
(1)catch 可以有多個,也可以沒有,每個catch可以處理一個特定的異常
finally可以沒有,也可以只有一個。無論有沒有發生異常,它總會在這個異常處理結構的最后運行。即使你在try塊內用return返回了,在返回前,finally總是要執行,這以便讓你有機會能夠在異常處理最后做一些清理工作。如關閉數據庫連接等等。
在語法上你有一個try后有一個finally塊也是能通過編譯的也是正確的,所以try后只有catch(){}或只有finally{}或者兩者都有都是可以的。但如果后面沒有catch塊也沒有finally塊而只有try那是編譯不過去的是不正確的。
(2)
舉例:有可能拋出異常時,比如你編寫了一個程序,要讀取某一個文件中的內容,但是這個文件有可能存在,也有可能不存在,那就是一種異常,在編程時是無法預料的,還有就是線程在wait或sleep時也會拋出異常
try catch是程序語言本身提供的一種異常處理機制,你大多數寫的代碼都是要調用底層的api,而這些api的作者在開發api時,很清楚api在使用的過程中會有哪些非正常情況發生,因此他要通知api的調用者,至于對于這種非正常情況怎么處理,就交給了api的調用者。
你是寫代碼的,你要調用api,因此你就是api的調用者,你也應該處理api本身存在的非正常情況,那你怎么處理這些非正常狀況,這就是你提到的try catch的作用了,它就是干這事的。至于api會有哪些非正常情況發生,需要查api的幫助文檔;這些非正常狀況怎么處理,這又取決于問題邏輯了,跟實際需求有關系。
舉例代碼:
try { //執行的代碼,其中可能有異常。一旦發現異常,則立即跳到catch執行。否則不會執行catch里面的內容
//程序執行到此處發生了FileNotFoundException類型的異常.
//JVM會自動創建一個FileNotFoundException類型的對象,將該對象的內存地址賦值給catch語句塊中的e變量.
FileInputStream fis = new FileInputStream("abc");
//上面的代碼出現了異常,try語句塊的代碼不再繼續執行,直接進入catch語句塊中執行。
System.out.println("TTTTTTT");
fis.read();
}
catch { //除非try里面執行代碼發生了異常,否則這里的代碼不會執行
System.out.println("讀取的文件不存在!");
//FileNotFoundException將Object中的toString方法重寫。
System.out.println(e); //java.io.FileNotFoundException: abc (系統找不到指定的文件。)
}
finally { //不管什么情況都會執行,包括try catch 里面用了return ,可以理解為只要執行了try或者catch,就一定會執行 finally }
網絡編程面試題
簡單介紹TCP和UDP的不同之處以及各自的適用范圍?
UDP是User Datagram Protocol 的簡稱,稱為用戶數據報協議
UDP是無連接通信協議,即在數據傳輸時,數據的發送端盒接收端不建立邏輯連接。簡單來說,當一臺計算機向另一臺計算機發送數據時,發送端不會確認接收端是否存在,就會發送數據,同樣接收端在收到數據時,也不會向發送端反饋是否收到數據。
由于使用UDP協議消耗資源小,通信效率高,所以通常都會用于音頻和普通數據的傳輸,例如視頻會議都是用UDP協議,因為這種情況即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。
但時在使用UDP協議傳送數據時,由于UDP的面向無連接性,不能保證數據的完整性,因此在傳輸重要數據時不建議使用UDP協議,UDP的交換過程如下圖所示
以上歸納:(1)將數據及源和目的封裝成數據包,不需要建立連接。(2)每個數據報的大小限制在64K內(3)因無連接,是不可靠協議 (4)不需要建立連接,速度快
TCP是Transmission Control Protocol 的簡稱,稱為傳輸控制協議。
TCP協,議是面向連接的通信協議,即在傳輸數據前先在發送端和接收端建立邏輯連接,然后再傳輸數據,它提供了兩臺計算機之間可靠無差錯的數據傳輸。在TCP連接中必須要明確客戶端與服務器端,由客戶端向服務器發出連接請求,每次連接的創建都需要經過“三次握手”。第一次握手:客戶端向服務器發出連接請求,等待服務器確認,第二次握手,服務器向客戶端回送一個響應,通知客戶端收到了連接請求,第三次握手,客戶端再次向服務器端發送確認信息,確認連接,
由于TCP協議的面向連接特性,它可以保證傳輸數據的安全性,所以是一個被廣泛采用的協議,例如在下載文件時,如果數據接收不完整,將會導致文件數據丟失而不能被打開,因此,下載文件時必須采用TCP協議。
以上歸納:(1)建立連接,形成傳輸數據的通道。(2)在連接中進行大數據量傳輸 (3)通過三次握手完成連接,是可靠協議 (4)必須建立連接,效率會稍低
TCP和UDP的區別
TCP通信同UDP通信一樣,都能實現兩臺計算機之間的通信,通信的兩端都需要創建socket對象。區別在于,UDP中只有發送端和接收端,不區分客戶端與服務器端,計算機之間可以任意地發送數據。
而TCP通信是嚴格區分客戶端與服務器端的,在通信時,必須先由客戶端去連接服務器端才能實現通信,服務器端不可以主動連接客戶端,并且服務器端程序需要事先啟動,等待客戶端的連接。
在JDK中提供了兩個類用于實現TCP程序,一個ServerSocket類,用于表示服務器度端,一個socket類,用于表示客戶端。
通信時,首先創建代表服務器端的ServerSocket對象,該對象相當于開啟了一個服務,并等待客戶端的連接,然后創建代表客戶端的socket對象向服務器端發送連接請求,服務器端響應請求,兩者建立連接開始通信。(了解即可)
IP地址:用來唯一表示我們自己的電腦的,是一個網絡標示
端口號:用來區別當前電腦中的應用程序的。
IP地址 :(1)網絡中設備的標識。(2)不易記憶,可用主機名 (3)本地回環地址:127.0.0.1 主機名:localhost
端口號:(1)用于識別進程的邏輯地址,不同的進程的標識。(2)有效端口:0~65535,其中0~1024系統使用或者保留端口。(了解即可)