国产在线精品一级A片-国产另类欧美-国产精品va在线观看一-我要找美国一级片黄色|www.zheinei.com

java開發面試題及答案

時間:2022-11-23 23:24:55 面試技巧 我要投稿
  • 相關推薦

java開發面試題及答案

  Java開發程序面試中,面試者的提前準備很有必要,你了解Java面試題目嗎?以下是陽光網小編幫你們整理的java開發面試題及答案,一起來學習啦。

java開發面試題及答案

  java開發面試題及答案(一)

  1.JSP頁面之間傳遞參數的方法有哪些?

  解答:

  1)request

  2)session

  3)application

  4)提交表單

  5)超鏈接

  2.forward 和redirect的區別

  解答:forward是容器中控制權的轉向,是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。

  redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,并且從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隱藏實際的鏈接;在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。

  3.Java反射機制的作用?

  解答:Java反射機制的作用是:

  1)在運行時判斷任意一個對象所屬的類。

  2)在運行時構造任意一個類的對象。

  3)在運行時判斷任意一個類所具有的成員變量和方法。

  4)在運行時調用任意一個對象的方法

  4.你是怎么理解java的泛型的?

  解答: 在Java SE 1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現參數的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉換,而這種轉換是要求開發者對實際參數類型可以預知的情況下進行的。對于強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在運行的時候才出現異常,這是一個安全隱患。

  泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、接口和方法的創建中,分別稱為泛型類、泛型接口、泛型方法。

  泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉換都是自動和隱式的,提高代碼的重用率。

  5.JAVA源文件中是否可以包括多個類,有什么限制

  解答:一個java源文件中可以包含多個類,每個源文件中至多有一個public類,如果有的話,那么源文件的名字必須與之相同。如果源文件中沒有public類,則源文件用什么名字都可以,但最好還是具有特定的意義,免得自己都不記得里面寫的是什么了。

  6.在一個千萬級的數據庫查尋中,如何提高查詢效率?分別說出在數據庫設計、SQL語句、java等層面的解決方案。

  解答:

  1)數據庫設計方面:

  a. 對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。

  b. 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如: select id from t where num is null 可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢: select id from t where num=0

  c. 并不是所有索引對查詢都有效,SQL是根據表中數據來進行查詢優化的,當索引列有大量數據重復時,查詢可能不會去利用索引,如一表中有字段sex,male、female幾乎各一半,那么即使在sex上建了索引也對查詢效率起不了作用。

  d. 索引并不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有必要。

  e. 應盡可能的避免更新索引數據列,因為索引數據列的順序就是表記錄的物理存儲順序,一旦該列值改變將導致整個表記錄的順序的調整,會耗費相當大的資源。若應用系統需要頻繁更新索引數據列,那么需要考慮是否應將該索引建為索引。

  f. 盡量使用數字型字段,若只含數值信息的字段盡量不要設計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會逐個比較字符串中每一個字符,而對于數字型而言只需要比較一次就夠了。

  g. 盡可能的`使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段存儲空間小,可以節省存儲空間,其次對于查詢來說,在一個相對較小的字段內搜索效率顯然要高些。

  h. 盡量使用表變量來代替臨時表。如果表變量包含大量數據,請注意索引非常有限(只有主鍵索引)。

  i. 避免頻繁創建和刪除臨時表,以減少系統表資源的消耗。

  j. 臨時表并不是不可使用,適當地使用它們可以使某些例程更有效,例如,當需要重復引用大型表或常用表中的某個數據集時。但是,對于一次性事件,最好使用導出表。

  k. 在新建臨時表時,如果一次性插入數據量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果數據量不大,為了緩和系統表的資源,應先create table,然后insert。

  l. 如果使用到了臨時表,在存儲過程的最后務必將所有的臨時表顯式刪除,先 truncate table ,然后 drop table ,這樣可以避免系統表的較長時間鎖定。

  2)SQL語句方面:

  a. 應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。

  b. 應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如: select id from t where num=10 or num=20 可以這樣查詢: select id from t where num=10 union all select id from t where num=20

  c. in 和 not in 也要慎用,否則會導致全表掃描,如: select id from t where num in(1,2,3) 對于連續的數值,能用 between 就不要用 in 了: select id from t where num between 1 and 3

  d. 下面的查詢也將導致全表掃描: select id from t where name like ‘%abc%’

  e. 如果在 where 子句中使用參數,也會導致全表掃描。因為SQL只有在運行時才會解析局部變量,但優化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描: select id from t where num=@num 可以改為強制查詢使用索引: select id from t with(index(索引名)) where num=@num

  f. 應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。如: select id from t where num/2=100 應改為: select id from t where num=100*2

  g. 應盡量避免在where子句中對字段進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。如: select id from t where substring(name,1,3)=’abc’–name以abc開頭的id select id from t where datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id 應改為: select id from t where name like ‘abc%’ select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′

  h. 不要在 where 子句中的“=”左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引。

  i. 不要寫一些沒有意義的查詢,如需要生成一個空表結構: select col1,col2 into #t from t where 1=0 這類代碼不會返回任何結果集,但是會消耗系統資源的,應改成這樣: create table #t(„)

  j. 很多時候用 exists 代替 in 是一個好的選擇: select num from a where num in(select num from b) 用下面的語句替換: select num from a where exists(select 1 from b where num=a.num)

  k. 任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。

  l. 盡量避免使用游標,因為游標的效率較差,如果游標操作的數據超過1萬行,那么就應該考慮改寫。

  m. 盡量避免向客戶端返回大數據量,若數據量過大,應該考慮相應需求是否合理。

  n. 盡量避免大事務操作,提高系統并發能力。

  3)java方面:

  a.盡可能的少造對象。

  b.合理擺正系統設計的位置。大量數據操作,和少量數據操作一定是分開的。大量的數據操作,肯定不是ORM框架搞定的。,

  c.使用jDBC鏈接數據庫操作數據

  d.控制好內存,讓數據流起來,而不是全部讀到內存再處理,而是邊讀取邊處理;

  e.合理利用內存,有的數據要緩存

  java開發面試題及答案(二)

  1.請解釋分布式事務管理?

  解答:分布式事務是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位于不同的分布式系統的不同節點之上。為了實現分布式事務,需要使用下面將介紹的兩階段提交協議。

  階段一:開始向事務涉及到的全部資源發送提交前信息。此時,事務涉及到的資源還有最后一次機會來異常結束事務。如果任意一個資源決定異常結束事務,則整個事務取消,不會進行資源的更新。否則,事務將正常執行,除非發生災難性的.失敗。為了防止會發生災難性的失敗,所有資源的更新都會寫入到日志中。這些日志是永久性的,因此,這些日志會幸免遇難并且在失敗之后可以重新對所有資源進行更新。

  階段二:只在階段一沒有異常結束的時候才會發生。此時,所有能被定位和單獨控制的資源管理器都將開始執行真正的數據更新。 在分布式事務兩階段提交協議中,有一個主事務管理器負責充當分布式事務協調器的角色。事務協調器負責整個事務并使之與網絡中的其他事務管理器協同工作。 為了實現分布式事務,必須使用一種協議在分布式事務的各個參與者之間傳遞事務上下文信息,IIOP便是這種協議。這就要求不同開發商開發的事務參與者必須支持一種標準協議,才能實現分布式的事務。

  2.請寫出5種常見到的runtime exception。

  解答:

  NullPointerException:當操作一個空引用時會出現此錯誤。

  NumberFormatException:數據格式轉換出現問題時出現此異常。

  ClassCastException:強制類型轉換類型不匹配時出現此異常。

  ArrayIndexOutOfBoundsException:數組下標越界,當使用一個不存在的數組下標時出現此異常。

  ArithmeticException:數學運行錯誤時出現此異常

  3.數組有沒有length()這個方法?String有沒有length()這個方法?

  解答:數組沒有length()方法 它有length屬性

  String有length()方法。

  4.請寫出一個單例模式。

  解答:單例模式(Singleton pattern):確保一個類只有一個實例,并提供一個全局的訪問點

  public class EagerSingleton { private static final EagerSingleton m_instance = new EagerSingleton(); /** * 私有的默認構造子 */ private EagerSingleton() { } /** * 靜態工廠方法 */ public static EagerSingleton getInstance() { return m_instance; } }

  5.在java中,List是個接口,那實現List接口的類有哪些,有什么區別?

  解答: ArrayList是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,

  LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。

  6.char類型能否存儲一個中文字符?為什么

  解答:可以。一個char是兩個字節,而一個中文也是兩個字節。

  java開發面試題及答案(三)

  1.Switch選擇語句能否作用在String【字符串】上,也就是能否這么寫:Switch(一個字符串變量)?

  解答:不可以,只能處理int,byte,short,char,(其實是只能處理int,其它三種是可以promotion到int型)不能處理Sring 。

  2.關鍵字final 分別修飾一個類,一個方法,一個變量,各起什么作用

  解答:final修飾類是不能被繼承

  fianl修飾方法不能在子類中被覆蓋

  final修飾變量,稱為常量,初始化以后不能改變值。

  3.啟動一個線程是用run()還是start()?

  解答:start()。

  4.是否可以繼承String類

  解答:不可以。因為String類有final修飾。

  5.Java異常處理中,try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?

  解答:會執行,在return前執行。

  6.EJB包含哪3種bean

  解答:session bean(會話bean), entity bean(實體bean), message bean(消息bean)

  7.Class.forName(String className)這個方法的作用

  解答:通過類的全名獲得該類的類對象

  8.你認為在表上建立索引可以提高數據庫系統的'效率嗎,為什么?

  解答:不一定

  建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個索引文件。對于一個經常需要更新和插入的表格,就沒有必要為一個很少使用的where子句單獨建立索引了,對于比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。

【java開發面試題及答案】相關文章:

java面試題目及答案04-05

java基礎面試題及答案04-05

高級java面試題及答案04-04

java高級面試題及答案04-06

華為java面試題及答案04-06

java常見面試題及答案04-03

2017java開發面試題04-05

2017java面試題和答案04-05

java實習生面試題及答案04-02