應(yīng)屆生java軟件工程師面試題
應(yīng)屆生面試Java工程師崗位時(shí),做好準(zhǔn)備很有必要,你了解Java面試題目了嗎?以下是小編幫你們整理的應(yīng)屆生java軟件工程師面試題,一起來學(xué)習(xí)啦。
應(yīng)屆生java軟件工程師面試題(一)
1、簡述你所知道的JAVA修飾符及各自的使用機(jī)制?(public、abstract、final、synchronized、super…)
public :允許所有客戶訪問
protected:只能在本包內(nèi)被該類的子類所使用
private:只允許在本類內(nèi)使用
abstract:沒有提供實(shí)現(xiàn),需要子類提供
static:與整個(gè)類相關(guān),與單個(gè)對象無關(guān)
final:你只能定義一個(gè)實(shí)體一次,以后不能改變它或繼承它。一個(gè)final修飾的類不能被子類化,一個(gè)final修飾的方法不能被重寫,一個(gè)final修飾的變量不能改變其初始值
synchronized:方法獲得對對象監(jiān)控的訪問權(quán);如果該方法是static類型的,獲得是對類本身的訪問權(quán)。 super:構(gòu)造器和方法,都用關(guān)鍵字super指向超類,但是用的方法不一樣。方法用這個(gè)關(guān)鍵字去執(zhí)行被重載的超類中的方法。
2. String、StringBuffer與StringBuilder之間區(qū)別?別簡述各自的執(zhí)行效率?
區(qū)別:String 類型和 StringBuffer 類型的主要性能區(qū)別其實(shí)在于 String 是不可變的對象, 因此在每次對 String 類型進(jìn)行改變的時(shí)候其實(shí)都等同于生成了一個(gè)新的 String 對象,然后將指針指向新的 String 對象,所以經(jīng)常改變內(nèi)容的字符串最好不要用 String ,因?yàn)槊看紊蓪ο蠖紩ο到y(tǒng)性能產(chǎn)生影響,特別當(dāng)內(nèi)存中無引用對象多了以后, JVM 的 GC 就會開始工作,那速度是一定會相當(dāng)慢的, 執(zhí)行速度:三者在執(zhí)行速度方面的比較:StringBuilder > StringBuffer > String 使用場景:1.如果要操作少量的數(shù)據(jù)用 = String
3、靜態(tài)變量和實(shí)例變量的區(qū)別?能在靜態(tài)方法中調(diào)用非靜態(tài)變量嗎?
靜態(tài)變量屬于類,該類不生產(chǎn)對象,通過類名就可以調(diào)用靜態(tài)變量。實(shí)例變量屬于該類的對象,必須產(chǎn)生該類對象,才能調(diào)用實(shí)例變量
靜態(tài)方法及變量屬于整個(gè)類,數(shù)據(jù)將會被存儲在公共區(qū)域,非靜態(tài)方法及變量屬于對象 靜態(tài)方法中無法調(diào)用實(shí)例變量,而實(shí)例方法卻可以調(diào)用靜態(tài)變量
應(yīng)屆生java軟件工程師面試題(二)
1、繼承和接口是什么?以及他們的區(qū)別?
1) 接口定義一個(gè)類需要實(shí)現(xiàn)的方法 屬性 索引 事件和可能的參數(shù) 返回值類型,具體的實(shí)現(xiàn)交由相應(yīng)的類或結(jié)構(gòu),從而實(shí)現(xiàn)多態(tài);而繼承用于在一個(gè)現(xiàn)有父類基礎(chǔ)上的功能擴(kuò)展,把幾個(gè)類中相同的成員提取出來 放在一個(gè)父類中,在子類中添加獨(dú)特的方法 即繼承擴(kuò)展
2) 接口能夠?qū)崿F(xiàn)多接口繼承,而繼承只能實(shí)現(xiàn)單繼承
3) 繼承能夠獲得父類方法的實(shí)現(xiàn),而接口只能獲得方法的定義,所以必須獲得所有的方法
4) 在繼承中 為父類添加方法不影響子類的繼承,但在接口中 為父類添加一個(gè)方法定義 必須在子類中添加此方法的實(shí)現(xiàn)
2、HashMap和Hashtable的區(qū)別?
1),Hashtable是基于陳舊的Dictionary類的,HashMap是Map接口的一個(gè)實(shí)現(xiàn)。
2),Hashtable的方法是同步的,而HashMap的方法不是
3),只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value
3、抽象類(abstract class)和接口(interface)有什么區(qū)別?
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口
應(yīng)屆生java軟件工程師面試題(三)
1、重載(Overload)和重寫(Override)的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
Overload是重載,是有相同的方法名,但參數(shù)類型或個(gè)數(shù)彼此不同
Override是重寫,是在子類與父類中,子類中的方法的方法名,參數(shù)個(gè)數(shù)、類型都與父類中的完全一樣,在子類中覆蓋掉了父類的改方法。
2、你所知道的集合類都有哪幾類?主要區(qū)別有哪些并簡單描述?
集合類型主要有3種:set(集)、list(列表)和map(映射)
集 Set
它的對象不按特定方式排序,只是簡單的把對象加入集合中。
對集中成員的訪問和操作是通過集中對象的引用進(jìn)行的,所以集中不能有重復(fù)對象。
列表 List
List接口與其實(shí)現(xiàn)類是容量可變的列表,可以按照索引訪問集合中的元素,是有序的集合。
列表在數(shù)據(jù)結(jié)構(gòu)中分別表現(xiàn)為:數(shù)組和向量、鏈表、堆棧、隊(duì)列。常用的有ArrayList vector
映射 Map
映射中每個(gè)項(xiàng)都是成對的,Map是把鍵對象和值對象進(jìn)行關(guān)聯(lián)的容器。
映射中存儲的每個(gè)對象都有一個(gè)相關(guān)的關(guān)鍵字(Key)對象,關(guān)鍵字決定了對象在映射中的存儲位置,關(guān)鍵字應(yīng)該是唯一的,常用的有HashMap,HashTable。
3、JAVA SERVLET API中forward() 與redirect()的區(qū)別?
使用forward的時(shí)候?yàn)g覽器不知道它所請求的具體資源來源,所以地址欄不會變;
使用redirect,服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請求那個(gè)地址.所以地址欄顯示的是新的URL。
forward,轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).redirect,不能共享數(shù)據(jù).
4、寫出JSP的常用內(nèi)置對象?以及每個(gè)內(nèi)置對象的簡單介紹?
request對象
客戶端的請求信息被封裝在request對象中,通過它才能了解到客戶的需求,然后做出響應(yīng)。它是HttpServletRequest類的實(shí)例。
response對象
response對象包含了響應(yīng)客戶請求的有關(guān)信息,但在JSP中很少直接用到它。它是HttpServletResponse類的實(shí)例。
session對象
session對象指的是客戶端與服務(wù)器的一次會話,從客戶連到服務(wù)器的一個(gè)WebApplication開始,直到客戶端與服務(wù)器斷開連接為止。它是HttpSession類的實(shí)例。
out對象
out對象是JspWriter類的實(shí)例,是向客戶端輸出內(nèi)容常用的對象
page對象
page對象就是指向當(dāng)前JSP頁面本身,有點(diǎn)象類中的this指針,它是java.lang.Object類的實(shí)例 。
application對象
application對象實(shí)現(xiàn)了用戶間數(shù)據(jù)的共享,可存放全局變量。它開始于服務(wù)器的啟動(dòng),直到服務(wù)器的關(guān)閉,在此期間,此對象將一直存在;這樣在用戶的前后連接或不同用戶之間的連接中,可以對此對象的同一屬性進(jìn)行操作;在任何地方對此對象屬性的操作,都將影響到其他用戶對此的訪問。服務(wù)器的啟動(dòng)和關(guān)閉決定了application對象的生命。它是ServletContext類的實(shí)例。
exception對象
exception對象是一個(gè)例外對象,當(dāng)一個(gè)頁面在運(yùn)行過程中發(fā)生了例外,就產(chǎn)生這個(gè)對象。如果一個(gè)JSP頁面要應(yīng)用此對象,就必須把isErrorPage設(shè)為true,否則無法編譯。他實(shí)際上是java.lang.Throwable的對象。
pageContext對象
pageContext對象提供了對JSP頁面內(nèi)所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當(dāng)于頁面中所有功能的集大成者,它的本類名也叫pageContext。
config對象
config對象是在一個(gè)Servlet初始化時(shí),JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時(shí)所要用到的參數(shù)(通過屬性名和屬性值構(gòu)成)以及服務(wù)器的有關(guān)信息(通過傳遞一ServletContext對象) 。
看了“應(yīng)屆生java軟件工程師面試題”