中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

Java軟件工程師綜合面試題

時間:2024-08-22 11:26:35 學(xué)人智庫 我要投稿
  • 相關(guān)推薦

Java軟件工程師綜合面試題

  1.重寫和重載的區(qū)別:

Java軟件工程師綜合面試題

  方法的重寫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的方法是可以改變返回值的類型。

  2.代碼查錯:

  a)注意考慮,聲明在接口中的對象是靜態(tài)常量,不允許被修改。所以如果在繼承接口的子類中,修改了引用,則會報錯

  b)在一個類中,文件名可以與類名不一樣,但是這個類必須是非public的.

  3.面象對象三大特征。

  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ù)同名問題。

  4.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)。(繼承自AbstractMap類).

  最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步。

  Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

  5.啟動線程用什么方法?

  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)缺點:

  這是因為,創(chuàng)建索引可以大大提高系統(tǒng)的性能。

  第一,通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。

  第二,可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。

  第三,可以加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。

  第四,在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。

  第五,通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。

  二、建立方向索引的不利因素(缺點)

  也許會有人要問:增加索引有如此多的優(yōu)點,為什么不對表中的每一個列創(chuàng)建一個索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優(yōu)點,但是,為表中的每一個列都增加索引,是非常不明智的。這是因為,增加索引也有許多不利的一個方面。

  第一,創(chuàng)建索引和維護(hù)索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加。

  第二,索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。

  第三,當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時候,索引也要動態(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。

  三、創(chuàng)建方向索引的準(zhǔn)則

  索引是建立在數(shù)據(jù)庫表中的某些列的上面。因此,在創(chuàng)建索引的時候,應(yīng)該仔細(xì)考慮在哪些列上可以創(chuàng)建索引,在哪些列上不能創(chuàng)建索引。

  一般來說,應(yīng)該在這些列上創(chuàng)建索引。

  第一,在經(jīng)常需要搜索的列上,可以加快搜索的速度;

  第二,在作為主鍵的列上,強制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);

  第三,在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;

  第四,在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因為索引已經(jīng)排序,其指定的范圍是連續(xù)的;

  第五,在經(jīng)常需要排序的列上創(chuàng)建索引,因為索引已經(jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時間;

  第六,在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。

  同樣,對于有些列不應(yīng)該創(chuàng)建索引。一般來說,不應(yīng)該創(chuàng)建索引的的這些列具有下列特點:

  第一,對于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,并不能提高查詢速度。相反,由于增加了索引,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。

  第二,對于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。這是因為,由于這些列的取值很少,例如人事表的性別列,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加快檢索速度。

  第三,對于那些定義為text, image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因為,這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。

  第四,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時,不應(yīng)該創(chuàng)建索引。這是因為,修改性能和檢索性能是互相矛盾的。當(dāng)增加索引時,會提高檢索性能,但是會降低修改性能。當(dāng)減少索引時,會提高修改性能,降低檢索性能。因此,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時,不應(yīng)該創(chuàng)建索引。

  四、創(chuàng)建索引的方法

  創(chuàng)建索引有多種方法,這些方法包括直接創(chuàng)建索引的方法和間接創(chuàng)建索引的方法。

  第一,直接創(chuàng)建索引,例如使用CREATE INDEX語句或者使用創(chuàng)建索引向?qū)А?/p>

  第二,間接創(chuàng)建索引,例如在表中定義主鍵約束或者唯一性鍵約束時,同時也創(chuàng)建了索引。

  9.truncate和delete,drop的區(qū)別:

  不同點:

  1.truncate和 delete只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)

  drop語句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger),索引(index); 依賴于該表的存儲過程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).

  2.delete語句是dml,這個操作會放到rollback segement中,事務(wù)提交之后才生效;如果有相應(yīng)的trigger,執(zhí)行的時候?qū)⒈挥|發(fā).

  truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.

  3.delete語句不影響表所占用的extent, 高水線(high watermark)保持原位置不動

  顯然drop語句將表所占用的空間全部釋放

  truncate 語句缺省情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復(fù)位(回到最開始).

  4.速度,一般來說: drop>; truncate >; delete

  5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及

  使用上,想刪除部分?jǐn)?shù)據(jù)行用delete,注意帶上where子句. 回滾段要足夠大.

  想刪除表,當(dāng)然用drop

  想保留表而將所有數(shù)據(jù)刪除. 如果和事務(wù)無關(guān),用truncate即可. 如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還是用delete.

  如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入/插入數(shù)據(jù)

【Java軟件工程師綜合面試題】相關(guān)文章:

java面試題及答案10-03

軟件測試面試題07-18

軟件測試面試題06-27

軟件測試的面試題04-20

10個經(jīng)典的Java面試題集合09-20

外企軟件測試面試題08-23

iPhone軟件開發(fā)面試題10-23

Android工程師的面試題08-07

Android工程師面試題10-24

前端工程師面試題10-20