1. 程式人生 > >Java基礎面試題目

Java基礎面試題目

1、int 和 Integer 有什麼區別

Java 提供兩種不同的型別:引用型別和原始型別(或內建型別)。int是java的原始資料型別,Integer是java為int提供的封裝類。Java為每個原始型別提供了封裝類。

原始型別封裝類

boolean

Boolean

char

Character

byte

Byte

short

Short

int

Integer

float

Float

long

Long

double

Double

2、forward(轉發) 和redirect (重定向)的區別

轉發在伺服器端完成的;重定向是在客戶端完成的
轉發的速度快;重定向速度慢

轉發的是同一次請求;重定向是兩次不同請求

轉發不會執行轉發後的程式碼;重定向會執行重定向之後的程式碼

轉發位址列沒有變化;重定向位址列有變化

轉發必須是在同一臺伺服器下完成;重定向可以在不同的伺服器下完成

3、String 和StringBuffer的區別?

StringBuffer物件的內容可以修改;而String物件一旦產生後就不可以被修改,重新賦值其實是兩個物件。
    StringBuffer的內部實現方式和String不同,StringBuffer在進行字串處理時,不生成新的物件,在記憶體使用上要優於String類。所以在實際使用時,如果經常需要對一個字串進行修改,例如插入、刪除等操作,使用StringBuffer要更加適合一些。

4、List,Set,Map是否繼承自Collection介面?List、Map、Set三個介面,存取元素時,各有什麼特點?

List,Set是;Map不是。

List 以特定次序來持有元素,可有重複元素。

Set 無法擁有重複元素,內部排序。

Map 儲存key-value值,value可多值。

5、HashMap和Hashtable的區別?

二者都實現了Map介面,是將惟一鍵對映到特定的值上;

主要區別在於:

1)HashMap沒有排序,允許一個 null 鍵和多個 null 值,而Hashtable不允許;

2)HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey,因為contains方法容易讓人引起誤解;

3)Hashtable繼承自Dictionary類,HashMap是Java1.2引進的Map介面的實現;

4)Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。 Hashtable和HashMap採用的hash/rehash演算法大致一樣,所以效能不會有很大的差異。

6、啟動一個執行緒是用run()還是start()?

啟動一個執行緒是呼叫start()方法,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著它可以由JVM排程並執行。這並不意味著執行緒就會立即執行。

run()方法可以產生必須退出的標誌來停止一個執行緒。

7、sleep() 和 wait() 有什麼區別?

sleep是執行緒類(Thread)的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。

wait是Object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyAll)後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。

8、jsp有哪些內建物件?作用分別是什麼?

JSP共有以下9種基本內建元件:

request:使用者端請求,此請求會包含來自GET/POST請求的引數;

response:網頁傳回使用者端的迴應;

pageContext:網頁的屬性是在這裡管理;

session:與請求有關的會話期;

application:servlet正在執行的內容;

out:用來傳送回應的輸出;

config:servlet的構架部件;

page:JSP網頁本身;

exception:針對錯誤網頁,未捕捉的例外。

9、get和post的區別?

Form中的get和post方法,在資料傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:

1)Get是用來從伺服器上獲得資料,而Post是用來向伺服器上傳遞資料;

2)Get將表單中資料按照variable=value的形式,新增到action所指向的URL後面,並且兩者使用“?”連線,而各個變數之間使用“&”連線;Post是將表單中的資料放在form的資料體中,按照變數和值相對應的方式,傳遞到action所指向URL; 3)Get是不安全的,因為在傳輸過程,資料被放在請求的URL中;Post的所有操作對使用者來說都是不可見的;

4)Get傳輸的資料量小,這主要是因為受URL長度限制;而Post可以傳輸大量的資料,所以在上傳檔案只能使用Post;

5)Get限制Form表單的資料集必須為ASCII字元,而Post支援整個ISO10646字符集;

6)Get是Form的預設方法。

10、Java中的final關鍵字由哪些用法?

a.修飾類:表示該類不能被繼承;

b.修飾方法:表示方法不能被重寫;

c.修飾變數:表示變數只能一次賦值以後不能被修改(常量)。

11、闡述靜態變數和例項變數的區別?

靜態變數是static修飾的變數,也稱為變數,它屬於類,不屬於類的任何一個物件,一個類不管建立多少個物件,靜態變數在記憶體中有僅有一個拷貝;例項變數必須依存於某一例項,需要先建立物件然後通過物件才能訪問到它。靜態變數可以實現讓多個物件共享記憶體。

12、java中的跳轉語句有哪些,作用是什麼?

break:用於跳出本輪迴圈或跳出switch,可以用於迴圈和switch

         continue:用於跳出本次迴圈,繼續下一次迴圈,只用於迴圈中

         return:用於結束方法,或者結束方法把值返回給方法

13、面向物件的特徵有哪些方面?

a.抽象:抽象就是忽略一個主題中與當前目標無關的哪些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時的不同部分細節。抽象包括兩個方面:一個過程抽象,二是資料抽象;

b.繼承:繼承是一種聯結層次模型,並且可以重用,它提供了一種明確表示式共性的方法,物件的一個新類可以從現有的類中派生,這個過程稱為類繼承,新類繼承了原始類的特性,新類稱為新類的派生類(子類),而原始類稱為類的基類(父類),派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改過新增新的方法;

c.封裝:封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描述成一系列完全治,封裝的物件,這些物件通過一個受保護的介面訪問其他物件;

d.多型性:多型性是指允許不同類的物件對同一訊息作出響應,多型性包括引數化多型性和包含多型性。多型性語言具有錄活,抽象,行為共享,程式碼共享的優勢,很好的解決了應用程式函式同名問題。

14、方法重寫和過載的區別

方法重寫:

                   1.在不同的類中,滿足繼承關係。

                   2.方法名形同

                   3.引數列表必須一樣

                   4.返回值要麼是一樣的,要麼是其子類

         方法過載:

                   1.方法名相同

                   2.引數列表項不同(型別不同,個數不同,順序不同)

                   3.跟訪問修飾符和返回值無關

                   4.在同一個類中

15、Java支援多繼承麼?

不支援,Java不支援多繼承。每個類都只能繼承一個類,但是可以實現多個介面。

16.while 和do…while區別?

         while先判斷條件,再執行。

do……while先執行,再判斷條件

do……while至少執行一次。

17、成員變數的作用範圍?區域性變數的作用範圍?

         根據變數的宣告位置,在方法裡宣告的變數叫區域性變數,在類中宣告的變數叫成員變數有初始值,區域性變數沒有初始值。

         一個方法中不能有同名區域性變數,不同的方法中可以用同名區域性變數,變數取值按照就近原則。