Java軟件工程師綜合面試題
1.重寫和重載的區(qū)別:
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫 (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被”屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
2.代碼查錯(cuò):
a)注意考慮,聲明在接口中的對(duì)象是靜態(tài)常量,不允許被修改。所以如果在繼承接口的子類中,修改了引用,則會(huì)報(bào)錯(cuò)
b)在一個(gè)類中,文件名可以與類名不一樣,但是這個(gè)類必須是非public的.
3.面象對(duì)象三大特征。
1.抽象:抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。
2.繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過(guò)程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。
4.多態(tài)性:多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問(wèn)題。
4.hashMap和hashtable的區(qū)別:
HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現(xiàn)。(繼承自AbstractMap類).
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。
5.啟動(dòng)線程用什么方法?
start();
6.畫出模版模式圖
7.寫一段jdbc查詢代碼:
private Connection con = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
public void getQuery(){
try{
Class.forName(“com.jdbc.mysql.Driver”);
con = (Connection) DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”,“root”,“root”);
pstmt = (PreparedStatement) con.prepareStatement(“select * form tabName”);
rs = (ResultSet) pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getObject(1));
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (rs != null) {rs.close();}
if (pstmt != null) {pstmt.close();}
if(con != null){if (!con.isClosed()) {con.close();}con = null;}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
8.索引的優(yōu)缺點(diǎn):
這是因?yàn),?chuàng)建索引可以大大提高系統(tǒng)的性能。
第一,通過(guò)創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。
第二,可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
第四,在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間。
第五,通過(guò)使用索引,可以在查詢的過(guò)程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
二、建立方向索引的不利因素(缺點(diǎn))
也許會(huì)有人要問(wèn):增加索引有如此多的優(yōu)點(diǎn),為什么不對(duì)表中的每一個(gè)列創(chuàng)建一個(gè)索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優(yōu)點(diǎn),但是,為表中的每一個(gè)列都增加索引,是非常不明智的。這是因?yàn)椋黾铀饕灿性S多不利的一個(gè)方面。
第一,創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加。
第二,索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會(huì)更大。
第三,當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。
三、創(chuàng)建方向索引的準(zhǔn)則
索引是建立在數(shù)據(jù)庫(kù)表中的某些列的上面。因此,在創(chuàng)建索引的時(shí)候,應(yīng)該仔細(xì)考慮在哪些列上可以創(chuàng)建索引,在哪些列上不能創(chuàng)建索引。
一般來(lái)說(shuō),應(yīng)該在這些列上創(chuàng)建索引。
第一,在經(jīng)常需要搜索的列上,可以加快搜索的速度;
第二,在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);
第三,在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
第四,在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的;
第五,在經(jīng)常需要排序的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時(shí)間;
第六,在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。
同樣,對(duì)于有些列不應(yīng)該創(chuàng)建索引。一般來(lái)說(shuō),不應(yīng)該創(chuàng)建索引的的'這些列具有下列特點(diǎn):
第一,對(duì)于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。這是因?yàn),既然這些列很少使用到,因此有索引或者無(wú)索引,并不能提高查詢速度。相反,由于增加了索引,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。
第二,對(duì)于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。這是因?yàn),由于這些列的取值很少,例如人事表的性別列,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加快檢索速度。
第三,對(duì)于那些定義為text, image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因?yàn),這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。
第四,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建索引。這是因?yàn)椋薷男阅芎蜋z索性能是互相矛盾的。當(dāng)增加索引時(shí),會(huì)提高檢索性能,但是會(huì)降低修改性能。當(dāng)減少索引時(shí),會(huì)提高修改性能,降低檢索性能。因此,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建索引。
四、創(chuàng)建索引的方法
創(chuàng)建索引有多種方法,這些方法包括直接創(chuàng)建索引的方法和間接創(chuàng)建索引的方法。
第一,直接創(chuàng)建索引,例如使用CREATE INDEX語(yǔ)句或者使用創(chuàng)建索引向?qū)А?/p>
第二,間接創(chuàng)建索引,例如在表中定義主鍵約束或者唯一性鍵約束時(shí),同時(shí)也創(chuàng)建了索引。
9.truncate和delete,drop的區(qū)別:
不同點(diǎn):
1.truncate和 delete只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)
drop語(yǔ)句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger),索引(index); 依賴于該表的存儲(chǔ)過(guò)程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).
2.delete語(yǔ)句是dml,這個(gè)操作會(huì)放到rollback segement中,事務(wù)提交之后才生效;如果有相應(yīng)的trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā).
truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.
3.delete語(yǔ)句不影響表所占用的extent, 高水線(high watermark)保持原位置不動(dòng)
顯然drop語(yǔ)句將表所占用的空間全部釋放
truncate 語(yǔ)句缺省情況下見空間釋放到 minextents個(gè) extent,除非使用reuse storage; truncate會(huì)將高水線復(fù)位(回到最開始).
4.速度,一般來(lái)說(shuō): drop>; truncate >; delete
5.安全性:小心使用drop 和truncate,尤其沒(méi)有備份的時(shí)候.否則哭都來(lái)不及
使用上,想刪除部分?jǐn)?shù)據(jù)行用delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當(dāng)然用drop
想保留表而將所有數(shù)據(jù)刪除. 如果和事務(wù)無(wú)關(guān),用truncate即可. 如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還是用delete.
如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入/插入數(shù)據(jù)
【Java軟件工程師綜合面試題】相關(guān)文章:
Java軟件測(cè)試面試題06-21
java工程師面試題05-07
2014博朗軟件Java面試題12-25
Java軟件開發(fā)工程師實(shí)習(xí)求職常見面試題02-01
Java軟件工程師簡(jiǎn)歷封面01-05
Java軟件工程師求職簡(jiǎn)歷12-31
java軟件工程師的就業(yè)前景02-17
用友軟件Java工程師筆試題06-21
Java經(jīng)典面試題05-06