JAVA面試題大全及答案有哪些
JAVA面試題大全及答案有哪些
Java是一種可以撰寫跨平臺應(yīng)用程序的面向?qū)ο蟮某绦蛟O(shè)計語言。今天小編給大家整理的是JAVA工作者的面試題,歡迎大家前來參考試做。
JAVA面試題
1. J2EE是什么?它包括哪些技術(shù)?
解答:從整體上講,J2EE是使用Java技術(shù)開發(fā)企業(yè)級應(yīng)用的工業(yè)標(biāo)準(zhǔn),它是Java技術(shù)不斷適應(yīng)和促進(jìn)企業(yè)級應(yīng)用過程中的產(chǎn)物。適用于企業(yè)級應(yīng)用的J2EE,提供一個平臺獨立的、可移植的、多用戶的、安全的和基于標(biāo)準(zhǔn)的企業(yè)級平臺,從而簡化企業(yè)應(yīng)用的開發(fā)、管理和部署。J2EE是一個標(biāo)準(zhǔn),而不是一個現(xiàn)成的產(chǎn)品。
主要包括以下這些技術(shù):
1) Servlet Servlet是Java平臺上的CGI技術(shù)。Servlet在服務(wù)器端運行,動態(tài)地生成Web頁面。與傳統(tǒng)的CGI和許多其它類似CGI的技術(shù)相比,Java Servlet具有更高的效率并更容易使用。對于Servlet,重復(fù)的請求不會導(dǎo)致同一程序的多次轉(zhuǎn)載,它是依靠線程的方式來支持并發(fā)訪問的。 2)JSP JSP(Java Server Page)是一種實現(xiàn)普通靜態(tài)HTML和動態(tài)頁面輸出混合編碼的技術(shù)。從這一點來看,非常類似Microsoft ASP、PHP等技術(shù)。借助形式上的內(nèi)容和外觀表現(xiàn)的分離,Web頁面制作的任務(wù)可以比較方便地劃分給頁面設(shè)計人員和程序員,并方便地通過JSP來合成。在運行時態(tài),JSP將會被首先轉(zhuǎn)換成Servlet,并以Servlet的形態(tài)編譯運行,因此它的效率和功能與Servlet相比沒有差別,一樣具有很高的效率。 3) EJB EJB定義了一組可重用的組件:Enterprise Beans。開發(fā)人員可以利用這些組件,像搭積木一樣建立分布式應(yīng)用。 4)JDBC
JDBC(Java Database Connectivity,Java數(shù)據(jù)庫連接)API是一個標(biāo)準(zhǔn)SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)數(shù)據(jù)庫訪問接口,它使數(shù)據(jù)庫開發(fā)人員能夠用標(biāo)準(zhǔn)Java API編寫數(shù)據(jù)庫應(yīng)用程序。JDBC API主要用來連接數(shù)據(jù)庫和直接調(diào)用SQL命令執(zhí)行各種SQL語句。利用JDBC API可以執(zhí)行一般的SQL語句、動態(tài)SQL語句及帶IN和OUT參數(shù)的存儲過程。Java中的JDBC相當(dāng)于Microsoft平臺中的ODBC(Open Database Connectivity)。
2.測試生命周期、測試過程分為幾個階段,以及各階段的含義?
解答:軟件測試生命周期一般包括6個階段:1)計劃 2)分析,3)設(shè)計,4)構(gòu)建,5)測試周期,6)最后測試和實施,
1) 計劃:產(chǎn)品定義階段
2). 分析:外部文檔階段
3). 設(shè)計:文檔架構(gòu)階段
4). 構(gòu)建:單元測試階段
5). 測試周期:錯誤修正,重復(fù)系統(tǒng)測試階段
6). 最后的測試和實施:代碼凍結(jié)階段
JAVA面試相關(guān)基礎(chǔ)知識
1、面向?qū)ο蟮奶卣饔心男┓矫?/p>
1.抽象:
抽象就是忽略一個主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細(xì)節(jié)。抽象包括兩個方面,一是過程抽象,二是數(shù)據(jù)抽象。
2.繼承:
繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥嬎闶加谶@個基本概念,即現(xiàn)實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護(hù)的接口訪問其他對象。
4. 多態(tài)性:
多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
2、String是最基本的數(shù)據(jù)類型嗎?
基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類
3、int 和 Integer 有什么區(qū)別
Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個類的實例數(shù)據(jù)時所指定的缺省值。對象引用實例變量的缺省值為 null,而原始類型實例變量的缺省值與它們的類型有關(guān)。
4、String 和StringBuffer的區(qū)別
JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改變的字符串。而這個StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。
5、運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
6、說出Servlet的生命周期,并說出Servlet和CGI的區(qū)別。
Servlet被服務(wù)器實例化后,容器運行其init方法,請求到達(dá)時運行其service方法,service方法自動派遣運行與請求對應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實例銷毀的時候調(diào)用其destroy方法。
與cgi的區(qū)別在于servlet處于服務(wù)器進(jìn)程中,它通過多線程方式運行其service方法,一個實例可以服務(wù)于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。
7、說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。
8、EJB是基于哪些技術(shù)實現(xiàn)的?并說出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實現(xiàn)。
SessionBean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。
對于客戶機(jī),SessionBean是一種非持久性對象,它實現(xiàn)某些在服務(wù)器上運行的業(yè)務(wù)邏輯。
對于客戶機(jī),EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實體。
Session Bean 還可以再細(xì)分為 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean都可以將系統(tǒng)邏輯放在 method之中執(zhí)行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態(tài),因此通常來說,一個使用者會有一個相對應(yīng)的 Stateful Session Bean 的實體。Stateless Session Bean 雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說當(dāng)使用者呼叫 Stateless Session Bean 的時候,EJB Container 并不會找尋特定的 Stateless Session Bean 的實體來執(zhí)行這個 method。換言之,很可能數(shù)個使用者在執(zhí)行某個 Stateless Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執(zhí)行。從內(nèi)存方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內(nèi)存,然而 Stateful Session Bean 的優(yōu)勢卻在于他可以維持使用者的狀態(tài)。
9、Collection 和 Collections的區(qū)別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安全化等操作。
10、&和&&的區(qū)別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。
11、HashMap和Hashtable的區(qū)別。
HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個實現(xiàn)。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
12、final, finally, finalize的區(qū)別。
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關(guān)閉文件等。
13、sleep() 和 wait() 有什么區(qū)別?
sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時間,給執(zhí)行機(jī)會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時后會自動恢復(fù)。調(diào)用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)致本線程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運行狀態(tài)。
14、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
15、error和exception有什么區(qū)別?
error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運行正常,從不會發(fā)生的情況。
16、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個線程寫過了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。
當(dāng)應(yīng)用程序在對象上調(diào)用了一個需要花費很長時間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時,就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。
17、abstract class和interface有什么區(qū)別?
聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類可以在類中實現(xiàn)這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運算符可以用來決定某對象的類是否實現(xiàn)了接口。
java面試成功的技巧
在面試時,你首先要沉著冷靜,舉止得體,思維清晰,語言表達(dá)有邏輯性,懂得商務(wù)禮儀。許多應(yīng)聘者在招聘人員面前有膽怯心理,這是很不好的表現(xiàn)。你應(yīng)該在招聘者面前表現(xiàn)出充分的自信。面試的過程其實也是一個心理較量的過程,你如果勇于展現(xiàn)自己的心理素質(zhì),一定能得到對方的欣賞。我曾經(jīng)對一個膽怯的面試者說:“你為什么會怕我?其實,你的能力很好,完全不必膽怯。全世界人都是一樣的人,只不過我比你早工作幾年而已。”聽了我的話,這位同學(xué)笑了,也不那么膽怯了,后來我們錄取了他。后來他告訴我,如果不是我的話讓他放松,他嚇得一定不會通過面試的。
一個面試的第一步往往是“自我介紹”。在這個階段,你應(yīng)該根據(jù)單位對人才的要求,有的放矢地介紹自己的情況。如果單位是政府機(jī)關(guān),那么必然看重的是學(xué)生的政治修養(yǎng)以及含蓄持重、知識面寬、反應(yīng)靈敏、綜合素質(zhì)過硬等基本條件。如果對方是科研院所,可能看重的是你的基礎(chǔ)理論功底、外語能力、事業(yè)心、責(zé)任心、進(jìn)取心、好奇心以及尊重客觀事實、實事求是的工作態(tài)度等。如果從事的是外貿(mào)工作,那么對方可能就會對你的外語水平、財貿(mào)知識、公關(guān)能力、法律常識等有特殊的要求。
面試時,主要是考官問,你答。應(yīng)聘者的回答要切中要點,不要長而不當(dāng);要充分體現(xiàn)自己的實力和人品;眼神接觸要穩(wěn)定,態(tài)度自然誠懇。面試前最好多找老師或輔導(dǎo)員練習(xí)練習(xí)這種臨場發(fā)揮的能力。
簡歷上的每一句話,面試時回答的每一句話你都要能夠提出實例,不能夸張,否則可能遇到“不幸”的后果。比如,你想說自己會某種技術(shù),你最好準(zhǔn)備好與這項技術(shù)有關(guān)的一系列實際解決方案。如果你想指出自己的優(yōu)點是團(tuán)隊精神,你最好準(zhǔn)備好回答“請舉一個靠你的團(tuán)隊精神,讓團(tuán)隊達(dá)到成功的例子”。少具備一個優(yōu)點,少掌握一個工作工具,也許你還有機(jī)會,但是,如果被認(rèn)為撒謊、缺乏誠信,你就永遠(yuǎn)沒有機(jī)會了。
面試時要有自信,但是切忌吹噓自己。吹噓自己并不是展示自己的優(yōu)點,而是在增加自己的缺點。江蘇電視臺曾有三位研究生參加面試,其中一位吹噓說他對吳地文化研究非常深,還舉出幾個文化名人。那知面試他的電視臺臺長正好是蘇州人,反問了幾個問題,結(jié)果他一個也答不上來,最后被淘汰了。
在大規(guī)模的招聘會上,如果你只是到各個展臺投遞簡歷,那么不必穿正式的西服,只要穿著整潔即可。在正式面試前,你可以詢問對方人事部的聯(lián)系人相關(guān)信息,譬如該公司希望應(yīng)聘者如何著裝等等。對男生來說,我認(rèn)為穿西服、系領(lǐng)帶是一定不會錯的。但是如果經(jīng)濟(jì)條件不允許你購置一套好的西裝,那么襯衫、長褲、皮鞋也可以。如果你不會配色,就采取簡單的素色(白襯衫、藍(lán)西裝、黑皮鞋、搭配西裝顏色的素色領(lǐng)帶)。對女士來說,簡單大方的上班裝(襯衫、長裙、外套)是正確的選擇,最安全的做法是一套素色長裙和外套,襯衫也應(yīng)該是素色的。最后,千萬不要忽視了自己的頭發(fā)。我在招聘中曾經(jīng)見到不少人西裝筆挺,但是頭發(fā)卻很凌亂,給我留下非常邋遢的印象。此外,不要忘了正式面試前洗澡、洗頭、洗臉、刮胡子、刷牙,忽略這些會給人對面試不尊敬和不重視的印象?;蛟S沒有人會為你面試時穿得好給你加分,但是如果這些基本細(xì)節(jié)沒做好,你肯定會被扣分。在面試前的一切準(zhǔn)備工作都代表了你對這個公司的尊敬和重視。
面試最后,面試官可能會給你機(jī)會提問,這部份重點是考察應(yīng)聘者考慮問題的深度和對該企業(yè)的理解。最好在每一次面試前,準(zhǔn)備一兩個問題,最后被要求提問時會派上用場。
很多朋友也提到面試中專業(yè)問題很好應(yīng)對,但面對開放答案的問題常常無從下手。其實面試中設(shè)置開放答案的測試題的目的并不是測試你的智商,而是考察你分析問題的能力、以及思維模式與方法。其實這些問題的設(shè)置與回答并無定律,答案大可以千變?nèi)f化。
微軟有很多著名的測試題,比如“井蓋為什么是圓的”之類。如果你答“圓的不像方的,不會掉進(jìn)洞里”,這只是一個“相對正確”的大眾性答案;如果你回答“因為下水道蓋子很重,所以做成圓的比較容易隨處滾動”,這雖然不是大多數(shù)人眼中的“正確答案”,但能夠證明你善于聯(lián)想性、發(fā)散性思考,因此也是很好的回答,甚至可能收到更好的客觀效果;倘若你回答“方的有角,可能會傷到小孩”、或者“圓的比較省材料”,這些答案都可以接受,不過考官可能會據(jù)此進(jìn)一步再提幾個問題,譬如“為什么圓的比較節(jié)省材料”、“如果我有20公斤鐵,請你證明圓形是最節(jié)省材料的設(shè)計方案”等等。
在大規(guī)模招聘人才時,在筆試環(huán)節(jié)中設(shè)置一系列的開放性測試題,有助于考官迅速判斷一個人的思路清晰與否,進(jìn)而首先淘汰一批思考速度相對滯后的應(yīng)聘者。面試中現(xiàn)場提問這類題目,可以使考官通過一個人的現(xiàn)場答題速度考察一個人的反應(yīng)能力、思維速度以及現(xiàn)場心理調(diào)控能力。
目前,智商、情商測試題在跨國企業(yè)招聘人才中經(jīng)常被采用,在國內(nèi)企業(yè)以及公務(wù)員考試中也屢見不鮮,因此增強日常積累、平時注重綜合能力的培養(yǎng)、關(guān)注一些名企招聘中的難題,是非常必要的。
猜你感興趣: