JAVA 基礎(面試必用)

一、面向對象編程的三大特性是什麼?

(1).繼承:java

繼承是一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼承。新類繼 承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且類能夠修改或增 加新的方法使之更適合特殊的須要。算法

(2).封裝:編程

封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。數組

(3).多態:瀏覽器

多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。安全

二、String 和StringBuffer的區別

JAVA平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據這個String類提供了數值不可改變字符串而這個StringBuffer類提供的字符串進行修改當你知道字符數據要改變的時候你就可使用StringBuffer典型地,你可使用StringBuffers來動態構造字符數據服務器

三、說出ArrayList,Vector, LinkedList的存儲性能和特性

ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized思路方法(線程安全) ,一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項先後項便可,因此插入速度較快cookie

四、Collection 和 Collections的區別

Collection是集合類的上級接口,繼承與他的接口主要有Set 和List. Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。session

五、HashMap和Hashtable的區別

HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於HashtableJAVA中文站社區門戶oC)| g| ax ,HashMap容許將Null做爲一個entryde key 或者value,而Hashtable不容許 HashMap把Hashtable的contains思路方法去掉了,改爲containsvalue和containsKey由於contains思路方法容易讓人引發誤解Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。多線程

最大的區別是,Hashtable的思路方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的思路方法實現同步,而HashMap 就必須爲的提供外同步。

Hashtable和HashMap採用的hash/rehash算法都大概同樣,因此性能不會有很大的差別。

六、final, finally, finalize的區別

final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示老是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。

七、Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型?

重載(Overload):

(1)方法重載是讓類以統一的方式處理不一樣類型數據的一種手段。多個同名函數同時存在,具備不一樣的參數個數/類型。重載Overloading是一個類中多態性的一種表現。 
(2)Java的方法重載,就是在類中能夠建立多個方法,它們具備相同的名字,但具備不一樣的參數和不一樣的定義。調用方法時經過傳遞給它們的不一樣參數個數和參數類型來決定具體使用哪一個方法, 這就是多態性。 
(3)重載的時候,方法名要同樣,可是參數類型和個數不同,返回值類型能夠相同也能夠不相同。沒法以返回型別做爲重載函數的區分標準。

重寫(Override):

(1) 父類與子類之間的多態性,對父類的函數進行從新定義。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不須要從新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想做必定的修改,這就須要採用方法的重寫。方法重寫又稱方法覆蓋。
(2) 若子類中的方法與父類中的某一方法具備相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可以使用super關鍵字,該關鍵字引用了當前類的父類。 
(3)子類函數的訪問修飾權限不能少於父類的

重寫方法的規則: 
1.參數列表必須徹底與被重寫的方法的相同,不然不能稱其爲重寫而是重載. 
2.返回的類型必須一直與被重寫的方法的返回類型相同,不然不能稱其爲重寫而是重載. 
3.訪問修飾符的限制必定要大於被重寫方法的訪問修飾符(public>protected>default>private) 
4.重寫方法必定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常.例如, 
父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,能夠拋出非檢查異常.


而重載的規則: 
1.必須具備不一樣的參數列表; 
2.能夠有不一樣的返回類型,只要參數列表不一樣就能夠了; 
3.能夠有不一樣的訪問修飾符; 
4.能夠拋出不一樣的異常;


重寫和重載的區別在於:

重寫多態性起做用,對調用被重載過的方法能夠大大減小代碼的輸入量,同一個方法名只要往裏面傳遞不一樣的參數就能夠擁有不一樣的功能或返回值.

用好重寫和重載能夠設計一個結構清晰而簡潔的類,能夠說重寫和重載在編寫代碼過程當中的做用非同通常.

Overloaded的方法是能夠改變返回值的類型。

八、error和exception有什麼區別?

error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。 
exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。

九、abstract class和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 類型的。

十、List, Set, Map是否繼承自Collection接口

List,Set是繼承自Collection,Map不是。

十一、swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上?

swtich中只能用byte short int char

十二、char型變量中能不能存貯一箇中文漢字?爲何?

可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個bit,因此放一箇中文是沒問題的。

1三、多線程有幾種實現方法,都是什麼?哪種方式比較優秀?同步有幾種實現方法,都是什麼?

多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口

實現Runnable接口比較好,由於實現類能夠實現多個接口,而只能繼承一個類。

同步的實現方面有兩種,分別是synchronized,wait與notify

1四、java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類

字節流,字符流。字節流繼承與inputStream/outputStream,字符流繼承於inputStreamReader/outputSteamWriter。

1五、Java I/O中字符流和字節流的區別?

字節流在操做的時候自己是不會用到緩衝區(內存)的,是與文件自己直接操做的,而字符流在操做的時候是使用到緩衝區的
字節流在操做文件時,即便不關閉資源(close方法),文件也能輸出,可是若是字符流不使用close方法的話,則不會輸出任何內容,說明字符流用的是緩衝區,而且可使用flush方法強制進行刷新緩衝區,這時才能在不close的狀況下輸出內容
在全部的硬盤上保存文件或進行傳輸的時候都是以字節的方法進行的,包括圖片也是按字節完成,而字符是隻有在內存中才會造成的,因此使用字節的操做是最多的。

1六、Servlet的生命週期

1,初始化階段
調用init()方法
2,響應客戶請求階段
調用service()方法
3,終止階段
調用destroy()方法

1七、Http協議是長鏈接,仍是短鏈接?

Http協議是無狀態鏈接,因此是短鏈接.

1八、Java的基本數據類型有哪些?String是否是基本類型?

boolean,int,byte,char,short,long,float,double,void,String 不是基本類型.

1九、JSP中有哪些重定向方法,它們的區別?

<jsp:forward page=」url」/>

<jsp:include file=」url」/>

前者將當前頁面重定向到指定的URL的頁面,然後者是在當前頁面中包含指定的URL的頁面.

20、Jsp有哪些內置對象?做用分別是什麼?

request            請求對象                 類型 javax.servlet.ServletRequest        做用域 Request
response          響應對象                   類型 javax.servlet.SrvletResponse       做用域  Page
pageContext    頁面上下文對象       類型 javax.servlet.jsp.PageContext      做用域    Page
session            會話對象                   類型 javax.servlet.http.HttpSession       做用域    Session
application       應用程序對象          類型 javax.servlet.ServletContext          做用域    Application
out                   輸出對象                   類型 javax.servlet.jsp.JspWriter             做用域    Page
config              配置對象                  類型 javax.servlet.ServletConfig            做用域    Page
page               頁面對象                  類型 javax.lang.Object                            做用域    Page
exception        例外對象                 類型 javax.lang.Throwable                     做用域    page

一、request 對象表明的是來自客戶端的請求,例如咱們在FORM表單中填寫的信息等,是最經常使用的對象
經常使用的方法有:getParameter、getParameterNames 和getParameterValues 經過調用這幾個方法來獲取請求對象中所包含的參數的值。

二、response 對象表明的是對客戶端的響應,也就是說能夠經過response 對象來組織發送到客戶端的數據。可是因爲組織方式比較底層,因此不建議普通讀者使用,須要向客戶端發送文字時直接使用

三、pageContext 對象直譯時能夠稱做「頁面上下文」對象,表明的是當前頁面運行的一些屬性
經常使用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
通常狀況下pageContext對象用到得也不是不少,只有在項目所面臨的狀況比較複雜的狀況下,纔會利用到頁面屬性來輔助處理。

四、session 對象表明服務器與客戶端所創建的會話,當須要在不一樣的JSP頁面中保留客戶信息的狀況下使用,好比在線購物、客戶軌跡跟蹤等。「session」 對象創建在cookie的基礎上,因此使用時應注意判斷一下客戶端是否打開了cookie。經常使用的方法包括getId、 getValue、 getValueNames和putValue等。

概要
HTTP是無狀態(stateless)協議;
Web服務器對每個客戶端請求都沒有歷史記憶;
Session用來保存客戶端狀態信息;
由Web服務器寫入;
存於客戶端;
客戶端的每次訪問都把上次的session記錄傳遞給Web Server;
Web服務器讀取客戶端提交的session來獲取客戶端的狀態信息

五、application 對象負責提供應用程序在服務器中運行時的一些全局信息,經常使用的方法有getMimeType和getRealPath等。

六、out 對象表明了向客戶端發送數據的對象,與「response」 對象不一樣,經過「out」 對象發送的內容將是瀏覽器須要顯示的內容,是文本一級的,能夠經過「out」 對象直接向客戶端寫一個由程序動態生成HTML文件。經常使用的方法除了pirnt和println以外,還包括clear、clearBuffer、flush、getBufferSize和getRemaining,這是由於「out」 對象內部包含了一個緩衝區,因此須要一些對緩衝區進行操做的方法

七、config 對象提供一些配置信息,經常使用的方法有getInitParameter和getInitParameterNames,以得到Servlet初始化時的參數。

八、page 對象表明了正在運行的由JSP文件產生的類對象,不建議通常讀者使用。

九、exception 對象則表明了JSP文件運行時所產生的例外對象,此對象不能在通常JSP文件中直接使用,而只能在使用了「<%@ page isErrorPage="true "%>」的JSP文件中使用

相關文章
相關標籤/搜索