JAVA面試題總結

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域)

關于異常的的面試題

java異常結構繼承圖

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系統使用或者保留端口。(了解即可)


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JA...
    八爺君閱讀 4,673評論 1 114
  • 基本數據類型nullstringnumberBooleanundefined基本數據類型,理論上不應該存在屬性和方...
    daisx閱讀 242評論 0 1
  • 以此紀念我用One Note書寫的第一篇。
    德國留聲機閱讀 215評論 1 0
  • 我前世的這一腳。讓我灰呀灰(飛),眼看落入懸崖!那個女人一個新娘抱攬我入懷。這個女人沒打燈。 黎明的曙光照亮了她,...
    雨射零丁閱讀 268評論 0 0