Java開發人員面試必會系列(4)

61. 什麼是不受信任的applet?

不受信任的applet是不能訪問或是執行本地系統文件的Java applet,默認情況下,所有下載的applet都是不受信任的。

62. 從網絡上加載的applet和從本地文件系統加載的applet有什麼區別?

當applet是從網絡上加載的時候,applet是由applet類加載器載入的,它受applet安全管理器的限制。當applet是從客戶端的本地磁盤載入的時候,applet是由文件系統加載器載入的。從文件系統載入的applet允許在客戶端讀文件,寫文件,加載類庫,並且也允許執行其他程序,但是,卻通不過字節碼校驗。

63. applet類加載器是什麼?它會做哪些工作?

當applet是從網絡上加載的時候,它是由applet類加載器載入的。類加載器有自己的java名稱空間等級結構。類加載器會保證來自文件系統的類有唯一的名稱空間,來自網絡資源的類有唯一的名稱空間。當瀏覽器通過網絡載入applet的時候,applet的類被放置於和applet的源相關聯的私有的名稱空間中。然後,那些被類加載器載入進來的類都是通過了驗證器驗證的。驗證器會檢查類文件格式是否遵守Java語言規範,確保不會出現堆棧溢出(stack overflow)或者下溢(underflow),傳遞給字節碼指令的參數是正確的。

64. applet安全管理器是什麼?它會做哪些工作?

applet安全管理器是給applet施加限制條件的一種機制。瀏覽器可以只有一個安全管理器。安全管理器在啟動的時候被創建,之後不能被替換覆蓋或者是擴展。

65. 彈出式選擇菜單(Choice)和列表(List)有什麼區別?

Choice是以一種緊湊的形式展示的,需要下拉才能看到所有的選項。Choice中一次只能選中一個選項。List同時可以有多個元素可見,支持選中一個或者多個元素。

66. 什麼是佈局管理器?

佈局管理器用來在容器中組織組件。

67. 滾動條(Scrollbar)和滾動面板(JScrollPane)有什麼區別?

Scrollbar是一個組件,不是容器。而ScrollPane是容器。ScrollPane自己處理滾動事件。

68. 哪些Swing的方法是線程安全的?

只有3個線程安全的方法: repaint(), revalidate(), and invalidate()。

69. 說出三種支持重繪(painting)的組件。

Canvas, Frame, Panel,和Applet支持重繪。

70. 什麼是JDBC?

JDBC是允許用戶在不同數據庫之間做選擇的一個抽象層。JDBC允許開發者用JAVA寫數據庫應用程序,而不需要關心底層特定數據庫的細節。

JDBC(Java DataBase Connectivity),是一套面向對象的應用程序接口(API),制定了統一的訪問各類關係數據庫的標準接口,為各個數據庫廠商提供了標準的實現。通過JDBC技術,開發人員可以用純Java語言和標準的SQL語句編寫完整的數據庫應用程序,並且真正地實現了軟件的跨平臺性。通常情況下使用JDBC完成以下操作:1.同數據庫建立連接;2.向數據庫發送SQL語句;3.處理從數據庫返回的結果;JDBC具有下列優點:1.JDBC與ODBC(Open Database Connectivity,即開放數據庫互連)十分相似,便於軟件開發人員理解;2.JDBC使軟件開發人員從複雜的驅動程序編寫工作中解脫出來,可以完全專注於業務邏輯開發;3.JDBC支持多種關係型數據庫,大大增加了軟件的可移植性;4.JDBC API是面向對象的,軟件開發人員可以將常用的方法進行二次封裝,從而提高代碼的重用性;

71. 數據庫連接池是什麼意思?

像打開關閉數據庫連接這種和數據庫的交互可能是很費時的,尤其是當客戶端數量增加的時候,會消耗大量的資源,成本是非常高的。可以在應用服務器啟動的時候建立很多個數據庫連接並維護在一個池中。連接請求由池中的連接提供。在連接使用完畢以後,把連接歸還到池中,以用於滿足將來更多的請求。

72. 讓RMI程序能正確運行有哪些步驟?

為了讓RMI程序能正確運行必須要包含以下幾個步驟:編譯所有的源文件。使用rmic生成stub。啟動rmiregistry。啟動RMI服務器。運行客戶端程序。

73. 解釋下Marshalling和demarshalling。

當應用程序希望把內存對象跨網絡傳遞到另一臺主機或者是持久化到存儲的時候,就必須要把對象在內存裡面的表示轉化成合適的格式。這個過程就叫做Marshalling,反之就是demarshalling。

74. 解釋下Serialization和Deserialization。

Java提供了一種叫做對象序列化的機制,他把對象表示成一連串的字節,裡面包含了對象的數據,對象的類型信息,對象內部的數據的類型信息等等。因此,序列化可以看成是為了把對象存儲在磁盤上或者是從磁盤上讀出來並重建對象而把對象扁平化的一種方式。反序列化是把對象從扁平狀態轉化成活動對象的相反的步驟。

75. 什麼是Servlet?

Servlet是用來處理客戶端請求併產生動態網頁內容的Java類。Servlet主要是用來處理或者是存儲HTML表單提交的數據,產生動態內容,在無狀態的HTTP協議下管理狀態信息。

76. 說一下Servlet的體系結構。

所有的Servlet都必須要實現的核心的接口是javax.servlet.Servlet。每一個Servlet都必須要直接或者是間接實現這個接口,或者是繼承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。最後,Servlet使用多線程可以並行的為多個請求服務。

77. 什麼是Web應用程序?

Web應用程序是對Web或者是應用服務器的動態擴展。有兩種類型的Web應用:面向表現的和麵向服務的。面向表現的Web應用程序會產生包含了很多種標記語言和動態內容的交互的web頁面作為對請求的響應。而面向服務的Web應用實現了Web服務的端點(endpoint)。一般來說,一個Web應用可以看成是一組安裝在服務器URL名稱空間的特定子集下面的Servlet的集合。

78. 如何知道是哪一個客戶端的機器正在請求你的Servlet?

ServletRequest類可以找出客戶端機器的IP地址或者是主機名。getRemoteAddr()方法獲取客戶端主機的IP地址,getRemoteHost()可以獲取主機名。

79. HTTP響應的結構是怎麼樣的?

HTTP響應由三個部分組成:狀態碼(Status Code):描述了響應的狀態。可以用來檢查是否成功的完成了請求。請求失敗的情況下,狀態碼可用來找出失敗的原因。如果Servlet沒有返回狀態碼,默認會返回成功的狀態碼HttpServletResponse.SC_OK。HTTP頭部(HTTP Header):它們包含了更多關於響應的信息。比如:頭部可以指定認為響應過期的過期日期,或者是指定用來給用戶安全的傳輸實體內容的編碼格式。如何在Serlet中檢索HTTP的頭部看這裡。主體(Body):它包含了響應的內容。它可以包含HTML代碼,圖片,等等。主體是由傳輸在HTTP消息中緊跟在頭部後面的數據字節組成的。

80. 什麼是cookie?session和cookie有什麼區別?

cookie是Web服務器發送給瀏覽器的一塊信息。瀏覽器會在本地文件中給每一個Web服務器存儲cookie。以後瀏覽器在給特定的Web服務器發請求的時候,同時會發送所有為該服務器存儲的cookie。下面列出了session和cookie的區別:無論客戶端瀏覽器做怎麼樣的設置,session都應該能正常工作。客戶端可以選擇禁用cookie,但是,session仍然是能夠工作的,因為客戶端無法禁用服務端的session。在存儲的數據量方面session和cookies也是不一樣的。session能夠存儲任意的Java對象,cookie只能存儲String類型的對象。


分享到:


相關文章: