項目介紹
在進行技術面試前,提醒大家,必須要準備好項目介紹,即需要準備好你的簡歷中列的所有項目的項目介紹!
面試時關于項目,面試官常見的問題及回答(以銀行柜臺系統(tǒng)為例):
你給我簡要介紹一下銀行柜臺系統(tǒng)?
1、簡易銀行柜臺系統(tǒng)是模擬銀行柜臺的基本功能而做的一個系統(tǒng)。
2、系統(tǒng)分前臺和后臺部分,前臺部分是銀行柜臺人員操作的,包括:注冊登錄模塊、開銷戶模塊、帳號管理模塊、存取錢轉賬模塊、柜臺人員信息管理;后臺部分是銀行管理者操作的,包括查看日志模塊、管理柜臺人員信息模塊;
3、我主要負責的是前臺的全部功能;
你詳細介紹一下你負責的模塊的功能?
1、我負責的注冊登錄模塊和柜臺人員信息模塊實際上是管理柜臺人員信息的,內(nèi)容比較簡單;
2、開銷戶模塊、帳號管理模塊、存取錢轉賬模塊是為銀行儲戶服務的模塊。其中開銷戶就是為儲戶開戶、銷戶的功能,賬戶管理模塊就是幫儲戶凍結帳號、修改密碼等功能,存取錢轉賬模塊就是為儲戶存錢、取錢,幫儲戶轉賬的功能;
這個項目幾個人做的?用了多長時間?
1、 這個項目比較小,由2個人合作完成的,我負責的是前臺部分;
2、 項目大概用了4天左右的時間;
這個項目使用了什么技術?
1、 這個項目使用Struts2、Hibernate3和MySQL
你在做這個項目的時候,遇到了什么困難,怎么解決的?
1、 比如在Hiberante的使用,關于表之間關聯(lián)關系的配置,我開始操作的時候不太熟悉,后來通過查文檔、和其他同學溝通的方式,這個問題也得到了解決;
備注:如果你在這里提到了表之間關聯(lián)關系的配置,那么這個問題面試官非常有可能接下去就問這個技術問題,所以務必認真準備這個技術問題。
前言
這套面試題主要目的是幫助那些還沒有java軟件開發(fā)實際工作經(jīng)驗,而正在努力尋找java軟件開發(fā)工作的學生在筆試/面試時更好地贏得好的結果。由于這套試題涉及的范圍很泛,很廣,很雜,大家不可能一天兩天就看完和學完這套面試寶典,即使你已經(jīng)學過了有關的技術,那么至少也需要半個月的時間才能消化和掌握這套面試寶典,所以,大家應該早作準備,從拿到這套面試寶典之日起,就要堅持在每天閑暇之余學習其中幾道題目,日積月累,等到出去面試時,一切都水到渠成,面試時就自然會游刃有余了。
答題時,先答是什么,再答有什么作用,要注意什么(這條可以沒有)
比如說面試官問:給我介紹一下ORM?
較好回答:
1、 ORM就是Object Relational Mapping,就是對象關系映射;
2、 作用:我們在寫程序的時候,用的是面向對象的方法,但是在關系型數(shù)據(jù)庫里,存的是一條條的記錄;為了用純面向對象的思想解決問題,所以需要將程序中的對象和數(shù)據(jù)庫中的記錄建立起映射關系,ORM就是將對象和數(shù)據(jù)庫中的記錄建立起映射的技術;
答案要層次分明,條理清晰,從這些表面的東西也可以看出一個人的習慣、辦事風格、條理等。
答題不局限于什么格式和形式,就是要將自己的掌握的技術內(nèi)容展現(xiàn)出來,比如可以采用舉例的說法:
需要特別注意的是,因為面試官本身水平層次不齊,不要因為人家題目問的模棱兩可(或者題目問的不準確),你就心里膽怯和沒底氣了,不敢回答了。你要大膽地提出對方題目中你不清楚的地方,希望對方能重新明確的提出問題?
例如,你可以問:您提的問題,我剛才沒有完全聽明白,能不能再說一遍。
一. Java基礎部分
1、 請說一下break和continue的區(qū)別?
1、這兩個語句都可以用于跳出循環(huán)的;
2、break是中止循環(huán),執(zhí)行循環(huán)體以后的語句,而continue是跳出本次循環(huán),執(zhí)行下一次循環(huán);
2、 switch 中用于判斷的表達式,可以用哪些數(shù)據(jù)類型?
1、可以是char、byte、short、int,不可以是long、String等其他類型;
2、從JDK1.7開始,支持String類型;
3、 char型變量中能不能存貯一個中文漢字?為什么?
Java里采用了Unicode編碼格式,Unicode編碼中一個char型占用2個字節(jié),而一個漢字也是占用2個字節(jié),所以可以存儲中文漢字。
備注:C語言里,char占用1個字節(jié),不用存漢字。
4、 靜態(tài)變量和實例變量的區(qū)別?
在語法定義上的區(qū)別:靜態(tài)變量前要加static關鍵字,而實例變量前則不加。
在程序運行時的區(qū)別:實例變量屬于某個對象的屬性,必須創(chuàng)建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態(tài)變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,不用創(chuàng)建任何實例對象,靜態(tài)變量就會被分配空間,靜態(tài)變量就可以被使用了。總之,實例變量必須創(chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來引用。
5、 是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用?
不可以。因為非static方法是要與對象關聯(lián)在一起的,必須創(chuàng)建一個對象后,才可以在該對象上進行方法調(diào)用,而static方法調(diào)用時不需要創(chuàng)建對象,可以直接調(diào)用。也就是說,當一個static方法被調(diào)用時,可能還沒有創(chuàng)建任何實例對象,如果從一個static方法中發(fā)出對非static方法的調(diào)用,那個非static方法是關聯(lián)到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用。
6、 Integer與int的區(qū)別
1、int是基本數(shù)據(jù)類型,Integer是包裝類;
2、int的默認值是0,Interger的默認值是null;
7、 Overload和Override的區(qū)別。參數(shù)列表相同,返回值不同的方法,是否是重載方法?
Overload是重載的意思,Override是覆蓋的意思,也就是重寫。
重載是指在一個類里,方法名相同,參數(shù)不同;
重寫是指子類繼承父類,子類里重新編寫了父類中的同名(同參數(shù))方法,也就是覆蓋了父類的方法;
不是!因為重載必須要求參數(shù)列表不同!
8、 接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承具體類(concrete class)?
接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類是否可繼承具體類。
備注:只要明白了接口和抽象類的本質(zhì)和作用,這些問題都很好回答。
只有記住抽象類與普通類的唯一區(qū)別就是不能創(chuàng)建實例對象和允許有abstract方法。
9、 面向對象有哪三大特性?
1、面向對象有三大特性,分別是:封裝、繼承和多態(tài)。
2、封裝:面向對象的封裝就是把描述一個對象的屬性和行為的代碼封裝在一個類中,有些屬性是不希望公開的,或者說被其他對象訪問的,所以我們使用private修飾該屬性,使其隱藏起來;類中提供了方法(用public修飾),常用的是get、set方法,可以操作這些被隱藏的屬性,其他類可以通過調(diào)用這些方法,改變隱藏屬性的值!
下面的回答是更高要求,不需要學生必須掌握:
封裝是保證軟件部件具有優(yōu)良的模塊性的基礎,封裝的目標就是要實現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴性而帶來的變動影響。在面向對象的編程語言中,對象是封裝的最基本單位,面向對象的封裝比傳統(tǒng)語言的封裝更為清晰、更為有力。
3、繼承:在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎之上來進行,使用extends關鍵字實現(xiàn)繼承;子類中可以加入若干新的內(nèi)容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類數(shù)據(jù)和方法的機制,這是類之間的一種關系,提高了軟件的可重用性和可擴展性。
4、多態(tài):多態(tài)就是在聲明時使用父類,在實現(xiàn)或調(diào)用時使用具體的子類;即不修改程序代碼就可以改變程序運行時所綁定的具體代碼,讓程序可以選擇多個運行狀態(tài),這就是多態(tài)性,多態(tài)增強了軟件的靈活性和擴展性。這里可以舉個例子,比如聲明時使用的是動物類,調(diào)用時傳遞的是一個貓類(動物類的子類)的對象,具體執(zhí)行父類里動物——吃的方法時,實際執(zhí)行的是貓——吃的方法。
10、 abstract class和interface有什么區(qū)別?
1、抽象類里面可以用普通方法,而接口中的方法全部都是抽象的;
2、在應用范圍上來說,接口往往在程序設計的時候,用來定義程序模塊的功能,方便各模塊協(xié)同工作;抽象類是對相似類進行抽象,形成一個抽象的父類可供重用!
11、 String是最基本的數(shù)據(jù)類型嗎?
1、String是個類,不是基本數(shù)據(jù)類型;
2、基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。
12、 String 和StringBuffer的區(qū)別
1、String是個不可變長度的字符串,而StringBuffer是個可變長度的字符串;
2、在對String類進行操作的時候(例如增加字符),實際上是在內(nèi)存中產(chǎn)生了一個新的String對象; 而StringBuffer是給原對象增加字符,不是新創(chuàng)建一個對象;
13、 數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法?
數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength的屬性。String有l(wèi)ength()這個方法。
14、 final, finally, finalize的區(qū)別。
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執(zhí)行。
finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。JVM不保證此方法總被調(diào)用
15、 請說一下你常用的幾種異常?
比如:
1、 空指針異常;
2、 數(shù)組下標越界;
3、 類型轉換異常;
4、 算數(shù)異常,例如除數(shù)為零;
5、 IO異常,比如說找不到文件;
6、 找不到類異常;
7、 sql異常,例如sql語句不能正常運行;
8、 …
16、 線程的基本概念?線程的基本狀
[Java面試寶典2013版]