java中級面試題總結(1)

1、如何理解多態?類與對象的區別是什麼?

 答:子類繼承父類時候 同時繼承父類方法,也重寫方法。

多態的三要素爲:繼承;方法重寫;父類引用指向子類對象。

類是對象的抽象,對象是類的具體實例。

類是抽象的,不佔用內存,而對象是具體的,佔有內存空間。

例如:類就是水果,對象就是蘋果。

2、如何理解Object.hashCode()方法?,它的作用是什麼?

1.newObject(),JVM根據這個對象的Hashcode值,放入到對應的Hash表對應的Key上,如果不同的對象確產生了相同的hash值,也就是發 生了Hashkey相同導致衝突的情況,那麼就在這個Hash key的地方產生一個鏈表,將所有產生相同hashcode的對象放到這個單鏈表上去,串在一起。

2.比較兩個對象的時候,首先根據他們的hashcode去hash表中找他的對象,當兩個對象的hashcode相同,那麼就是說他們這兩個對象放在Hash表中的同一個key上,那麼他們一定在這個key上的鏈表上。那麼此時就只能根據Object的equal方法來比較這個對象是否equal。當兩個對象的hashcode不同的話,肯定他們不能equal

所以hashcode相等只能保證兩個對象在一個HASH表裏的同一條HASH鏈上,繼而通過equals方法才能確定是不是同一對象,如果結果爲true,則認爲是同一對象在插入,否則認爲是不同對象繼續插入

3、Collections類的作用?Arrays類的作用?

Collection是集合框架中的一個頂層接口,它裏面定義了單列集合的共性方法,

它有兩個常用的子接口:List:元素都定義有索引。有序,元素可以重複。Set:不可以重複元素。無序。

 

給數組賦值:通過fill方法。

對數組排序:通過sort方法,按升序。

比較數組:通過equals方法比較數組中元素值是否相等。

查找數組元素:通過binarySearch方法能對排序好的數組進行二分查找法操作。

4、JSP文件與JAVA文件的區別

 

JSP算是JAVA一種技術,用在網頁編程上,因爲JAVA不能直接寫在html上,但jsp能,jsp就是Servlet程序,當JSP收到客戶的請求時,SCRIPTLET(腳本小程序)就會被執行,腳本段將被插入到JSP所生成的目標Servlet的Serivce函數中.

1.JSP頁面的訪問請求被髮送到服務器端

2.服務器中有相應的JSP引擎,JSP引擎把JSP頁面轉譯成Servlet程序

3.然後Servlet程序被編譯成Class文件

4.然後Class文件被執行,執行的結果返回器時,服務器會檢查是否有對應的Servlet存在,如果存在則是直接執行,如果不存在則生成相應的Servlet.

JSP是一種動態網頁,它的網頁代碼的靜態部分是HTML語言,動態部分是JAVA語言

5、StringBuffer的實現方式,容量如何擴充?

StringBuffer是通過char[]來實現的,默認長度是16,在進行串的append的時,StringBuffer會檢測剩餘容量,適時會重新擴充,而擴容的
同時,會創建一個新的數組,並將原來的數組內容複製到新的數組裏面

6、說出數據連接池的工作機制

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

7、概述一下SpringMVC的工作原理。

1、客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet.

2、DipatcherServlet接收到這個請求之後將根據請求的信息(包括URL、Http方法、請求報文頭和請求參數Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)。

3-4、DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的HandlerAdapter對Handler進行具體的調用。

5、Handler對數據處理完成以後將返回一個ModelAndView()對象給DispatcherServlet。

6、Handler返回的ModelAndView()只是一個邏輯視圖並不是一個正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖轉化爲真正的視圖View。

7、Dispatcher通過model解析出ModelAndView()中的參數進行解析最終展現出完整的view並返回給客戶端。

8、數據庫的三大範式。

1 第一範式(1NF)
在任何一個關係數據庫中,第一範式(1NF)是對關係模式的基本要求,不滿足第一範式(1NF)的數據庫就不是關係數據庫。
所謂第一範式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義一個新的實體,新的實體由重複的屬性構成,新實體與原實體之間爲一對多關係。在第一範式(1NF)中表的每一行只包含一個實例的信息。簡而言之,第一範式就是無重複的列。

2 第二範式(2NF)
第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求數據庫表中的每個實例或行必須可以被惟一地區分。爲實現區分通常需要爲表加上一個列,以存儲各個實例的惟一標識。
第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。爲實現區分通常需要爲表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是非主屬性非部分依賴於主關鍵字。

3 第三範式(3NF)
滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。簡而言之,第三範式就是屬性不依賴於其它非主屬性。

9、抽象類與接口(interface)的區別

   1.abstract class 在java語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface。

  2.在abstract class 中可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的數據成員(也就是必須是static final的,不過在 interface中一般不定義數據成員),所有的成員方法都是abstract的。

  3.abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。 

  4.實現抽象類和接口的類必須實現其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實現方法。

  5.接口中定義的變量默認是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。

  6.抽象類中的變量默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。 

  7.接口中的方法默認都是 public,abstract 類型的。


10、jsp內置對象?

1、request對象javax.servlet.http.HttpServletRequest

request對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對 象的作用域爲一次請求。

2、response對象 javax.servlet.http.HttpServletResponse

response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。

具有動態響應contentType屬性,當一個用戶訪問一個JSP頁面時,如果該頁面用page指令設置頁面的contentType屬性是text/html,那麼JSP引擎將按照這個屬性值做出反應。

3、session對象 javax.servlet.http.HttpSession

session 對象是由服務器自動創建的與用戶請求相關的對象。服務器爲每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。

 session對象內部使用Map類來保存數據,因此保存數據的格式爲 “Key/value”。 session對象的value可以使複雜的對象類型,而不僅僅侷限於字符串類型。

public String getId():獲取Session對象編號。

public void setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Session對象中,併爲添加的對象指定一個索引關鍵字。

public Object getAttribute(String key):獲取Session對象中含有關鍵字的對象。

public Boolean isNew():判斷是否是一個新的客戶。

4、application對象javax.servlet.ServletContext

application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,類似於系統的“全局變量”。

服務器啓動後就產生了這個Application對象,當客戶再所訪問的網站的各個頁面之間瀏覽時,這個Application對象都是同一個,直到服務器關閉。但是與Session對象不同的時,所有客戶的Application對象都時同一個,即所有客戶共享這個內置的Application對象。

setAttribute(String key,Object obj):將參數Object指定的對象obj添加到Application對象中,併爲添加的對象指定一個索引關鍵字。

getAttribute(String key):獲取Application對象中含有關鍵字的對象。

5、out 對象javax.servlet.jsp.jspWriter

out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,爲其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。

Out對象時一個輸出流,用來向客戶端輸出數據。Out對象用於各種數據的輸出。其常用方法如下。

out.print():輸出各種類型數據。

 out.newLine():輸出一個換行符。

 out.close():關閉流。

6、pageContext 對象javax.servlet.jsp.PageContext

pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。

pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

page 對象代表JSP本身,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。

7、config 對象javax.servlet.ServletConfig

config 對象的主要作用是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。開發者可以在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。

8 cookie 對象

Cookie是Web服務器保存在用戶硬盤上的一段文本。Cookie允許一個Web站點在用戶電腦上保存信息並且隨後再取回它。舉例來說,一個Web站點可能會爲每一個訪問者產生一個唯一的ID,然後以Cookie文件的形式保存在每個用戶的機器上。

 使用Request對象的getCookie()方法,執行時將所有客戶端傳來的Cookie對象以數組的形式排列,如果要取出符合需要的Cookie對象,就需要循環比較數組內每個對象的關鍵字。設置Cookie對象的有效時間,用Cookie對象的setMaxAge()方法便可以設置Cookie對象的有效時間,

例如:Cookie c = newCookie(username","john");c.setMaxAge(3600);

9、exception 對象java.lang.Throwable

exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。

excepation對象和Java的所有對象一樣,都具有系統提供的繼承 結構。

exception 對象幾乎定義了所有異常情況。在Java程序中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 對象。

11、Servlet的生命週期。
Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。與cgi的區別在於servlet處於服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷燬,而CGI對每個請求都產生新的進程,服務完成後就銷燬,所以效率上低於servlet。






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