java軟件開發工程師面試題寶典
Java軟件開發的面試題目你又了解了嗎?對于Java軟件工程師來說,做好準備很重要,以下是小編幫你們整理的java軟件開發工程師面試題,一起來學習啦。
java軟件開發工程師面試題(一)
1)transient和volatile是java關鍵字嗎?
如果用transient聲明一個實例變量,當對象存儲時,它的值不需要維持。例如: class T
{
transient int a; //不需要維持
int b; //需要維持
}
這里,如果T類的一個對象寫入一個持久的存儲區域,a的內容不被保存,但b的將被保存。
volatile修飾符告訴編譯器被volatile修飾的變量可以被程序的其他部分改變。在多線程程序中,有時兩個或更多的線程共享一個相同的實例變量。考慮效率問題,每個線程可以自己保存該共享變量的私有拷貝。實際的變量副本在不同的時候更新,如當進入synchronized方法時。 用strictfp修飾類或方法,可以確保浮點運算(以及所有切斷)正如早期的Java版本那樣準確。切斷只影響某些操作的指數。當一個類被strictfp修飾,所有的方法自動被strictfp修飾。
strictfp的意思是FP-strict,也就是說精確浮點的意思。在Java虛擬機進行浮點運算時,如果沒有指定strictfp關鍵字時,Java的編譯器以及運行環境在對浮點運
算的表達式是采取一種近似于我行我素的行為來完成這些操作,以致于得到的結果往往無法令你滿意。而一旦使用了strictfp來聲明一個類、接口或者方法時,那么所聲明的范圍內Java的編譯器以及運行環境會完全依照浮點規范IEEE-754來執行。因此如果你想讓你的浮點運算更加精確,而且不會因為不同的硬件平臺所執行的結果不一致的話,那就請用關鍵字strictfp。
你可以將一個類、接口以及方法聲明為strictfp,但是不允許對接口中的方法以及構造函數聲明strictfp關鍵字,例如下面的代碼:
strictfp interface A {}
public strictfp class FpDemo1 {
strictfp void f() {}
}
2. 錯誤的使用方法
interface A {
strictfp void f();
}
public class FpDemo2 {
strictfp FpDemo2() {}
}
一旦使用了關鍵字strictfp來聲明某個類、接口或者方法時,那么在這個關鍵字所聲明的范圍內所有浮點運算都是精確的,符合IEEE-754規范的。例如一個類被聲明為strictfp,那么該類中所有的方法都是strictfp的。
2)抽象類和接口有什么區別?
1.abstract class 在 Java 語言中表示的是一種繼承關系,一個類只能使用一次繼承關系。但是,一個類卻可以實現多個interface。
2.在abstract class 中可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的數據成員(也就是必須是static final的,不過在 interface中一般不定義數據成員),所有的成員方法都是abstract的。
3.abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關系,interface表示的是"like-a"關系。
4.實現抽象類和接口的類必須實現其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實現方法。
5.接口中定義的變量默認是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。
6.抽象類中的變量默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。
7.接口中的方法默認都是 public,abstract 類型的。
3)能說一下java的反射(reflection)機制嗎?
開放性和原因連接(causally-connected)是反射系統的兩大基本要素
java軟件開發工程師面試題(二)
1.j2ee是什么?它包含哪些技術?
從整體來講,J2EE是使用java開發技術開發企業級應用的工業標準,它是java技術不斷適應和醋精企業級應用過程的產物。適用于企業級應用的j2ee,提供一個平臺獨立的、可移植的、多用戶的、安全的和基于標注呢企業級平臺,從而簡化企0業應用的開發、管理和部署。J2EE是一個標準,而不是一個現成的產品。
主要包括以下這些技術:
(1)Servlet servlet是java平臺上的CGI技術。Servlet在服務器端運行,動態的生成web頁面。與傳統的CGI和其他類似CGI的技術相比,Java Servlet具有更高的效率并更容易使用。對于Servlet,從夫的請求不會導致同一程序的多次轉載,它是依靠線程的方式來支持并訪問的。
(2)JSP Jsp(java server page)是一種是實現普通靜態HTML和動態頁面輸出混合編碼的技術。從這一點看,非常類似Microsoft ASP、PHP等技術。借助形式上的內容和外觀表現的分離,web頁面制作的任務可以比較方便的話費給頁面設計人員和程序員,并方便的通過JSP來合成。在運行時態,JSP將會被首先轉換成Servlet,并以Servlet的形態編譯運行,因此它的效率和功能與Servlet相比沒有差別,一樣具有很高的效率。
(3)EJB EJB定義了一組可充用的組件:Enterprise Beans。開發人員可以利用這些組件,像搭積木一樣建立分布式應用。
(4)JDBC JDBC(Java DataBase Connectivity,java數據庫連接)API是一個標準SQL(Structured Query Language,結構化查詢語句)數據庫訪問接口,它使數據庫開發人員能夠使用標準Java API編寫數據庫應用程序。JDBC API主要用來連接數據庫和調用SQL命令執行各種SQL語句。利用JDBC API可以執行一般的SQL語句、動態SQL語句及帶IN和OUT參數的存儲過程。JAVA中的JDBC 相當于Microsoft平臺中的ODBC(open Database Connectivity)。
2.測試生命周期、測試過程分為幾個階段、以及各階段的含義?
軟件測試生命周期一般包括6個階段:
(1)技術:產品定義階段
(2)分析:外部文檔階段
(3)設計:文檔架構階段
(4)構建:單元測試階段
(5)測試周期:錯誤修正,重復系統測試階段
(6)最后測試和實施:代碼凍結階段
3.您做系統設計用各種工具?
Visio,Rational rose,power designer的
4.什么是web容器?
容器就是一種服務程序,在服務器一個端口就有一個提供相應服務的程度,而這個程序就是處理從客戶端發出的請求,如java中的Tomat容器,ASP的IIS火舌PWS都是這樣的容器。
java軟件開發工程師面試題(三)
1.運行是異常與一般異常有何異同?
異常表示程序運行高城中可能會出現的非正常狀態,運行時異常表示虛擬機的同城操作中可能遇到的異常,是一種常見運行異常。Java編譯器要求方法必須聲明拋出可能發生的非運行異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
2.Hibernate中:不看數據庫,不看XML文件,不看查詢語句,怎么能知道表結構?
可以看與xml文件對應的域模型。
3.目前集中主流數據庫軟件的應用特點,使用范圍各是什么?
國際國內的主導關系型數據庫管理系統由SQL Server、ORACLE、SYBASE、InFormix和DB2。本問題從性能、可伸縮性和并行性、安全性、操作簡便、使用風險、開放性、易維護性和價格、數據庫二次開發方面比較了SQL Server、ORACLE、SYBASE\DB2\INformix數據庫。
(1)性能
SQLServer:老版本多用戶時性能不佳,新版本的性能有了明顯的改善,各項處理能力都有了明顯的提高。保持了多項TPC-C(TPC-C值被廣泛用于衡量C/S環境下,由服務器和客戶端構筑的整體系統的性能,它由事務處理性能委員會(TPC,Transaction Processing Corp)制定,TPC為非盈利性國際組織)記錄。
Oracle:性能最高,保持Windows NT下的TPC-C的世界紀錄。
SYSBASE:性能較高,支持Sun,IBM,HP,Compaq和veritas的集群設備特性,實現高可用性。適應與安全性要求極高的系統。
DB2:適用于數據倉庫和在線事務處理,性能較高。客戶端支持及應用模式。
Informix:性能較高,支持集群,實現高可用性。適用于安全性要求極高的系統,尤其是銀行,證券系統的應用。
(2)可伸縮性,并行性
SQLServer:以前版本SQLServer并行實施和共存模型并不成熟。很難處理大量的用戶數和數據卷。伸縮性有限。新版本性能有了較大的改善,在Microsoft Advanced Server上由突出表現,查過了它的主要競爭對象。
ORACLE:平行服務器通過使一組結點貢獻同一簇中的工作來擴展Window nt的能力,提供高可用性和高伸縮性的簇的解決方案。如果Window NT不能滿足需要,用戶可以吧數據庫一道linux中,具有很好的伸縮性。
SYBASE:新版本具有較好的并行性,速度快,對巨量數據無明顯影響,但是技術實現復雜,需要程序指導,伸縮性有限。
DB2:DB2具有很好的并行性。DB2把數據庫管理擴充到了并行的、多節點的環境。數據庫分區是數據庫的一部分,包含自己的數據、索引、配置文件和事務日志。數據庫分區又是被稱之為節點或是數據庫節點,伸縮性有限。
InFormix:采用單進程多線程的技術,具有較好的并行性。但是僅運行于unix平臺,伸縮性優先。
(3)安全性
SQL Server:Microsoft Advanced Server獲得最高安全認證,服務器平臺的穩定性是數據庫的穩定性的基礎,新版本的SQL的安全性有了極大的提高。
ORACLE:獲得最高認證級別的ISO標準認證。
SYBASE:通過sun公司J2EE認證測試,獲得最高認證級別的ISO的標準認證。
DB2:獲得最高認證級別的ISO標準認證。
inFormin:獲得最高認證級別的ISO標準認證。
(4)操作簡便
SQLServer:操作簡單,采用圖形界面。管理也很方便,而且編程接口特別友好(它的SQL-DMO讓變成變得更方便),從易維護和價格上SQL Server明顯占有優勢。
Oracle:較復雜,同時提供GUI和命令行,在windowNT和Unix,linux下操作仙童。對數據庫管理人員要求較高。
SYBASE:復雜,使用命令行操作,對數據庫管理人員要求較高。
DB2:操作簡單,同時提供GUI和命令行,在window NT和unix下操作相同。
Informix:使用和管理復雜,命令行操作,對數據庫管理人員要求較高,
(5)使用風險
SQLServer:完全重寫的代碼,性能和兼容性有了較大的提高,與Oracle,DB2的性能差距明顯減小。該產品的出臺經歷了長期的測試,為產品的安全和穩定進行了全面的測試,安全穩定性有了明顯的提高。
ORACEL:長時間的開發經驗,完全向下兼容,可以安全的進行數據庫的升級,在企業,政府中的到廣泛的應用。并且如果在Window NT上無法媽祖數據的妖氣,可以安全的把數據轉到unix上來。
SYBASE:開發時間長,升級較復雜,穩定性較好,數據安全有保障。風險小。在安全要求極高的銀行,證券行業得到了廣發的應用。
DB2:在巨型企業得到廣泛的應用,向下兼容性好,風險小。
Informix:開放時間較長,升級較復雜,穩定性較好,數據安全有保障。風險小,在安全要求極高的銀行,證券行業得到廣泛應用。
(6)開放性
SQL Server:只能在Window上運行,C/S結果,只支持window客戶,可以用
ADO,DAO,OLEDB,ODBC連接。Windows9X系列產品是偏重于桌面應用,NTserver使用各種大小大小型企業。操作系統的穩定對數據庫是十分重要的。Window平臺的可靠性,安全性警告了最高級別的C2認證的。在處理大數據量的關鍵業務時提供了較好的性能。
ORACLE:能在所有主流平臺上運行。完全支持所有的工業標準。蠶蛹完全開放策略。多層次萬羅計算,支持多種工業標準,可以用ODBC,JDBC,OCI等網絡客戶連接。可以使客戶選擇最適合的解決方案。對開發商全力支持。
SYBASE:能在所有主流平臺上運行,在銀行中得到廣泛的應用。
DB2:有較好的開放性,最適合海量數據。跨平臺,多層結構,支持ODBC、JDBC等客戶。在大型的國際企業中得到最為廣泛的應用,在全球的500家最大的企業中,大部分采用DB2數據庫服務器。
Informix:僅運行在unix平臺,包括SUBOS、HPUX、ALFAOSF/1。在銀行中得到廣泛應用。
(7)易維護性和價格
SQL Server:從易維護性和價格上SQL Server明顯占優勢,基于Microsoft的一貫風格,SQL Server的的圖形管理界面帶來了明顯的易用性,微軟的數據庫管理員培訓進行的比較充分,可以輕松的找到很好的數據庫管理員,數據庫管理價格也是很低的,SQL Server的價格也是很低的,但是在license的購買商會抬高價格。總體來說SQL Server的價格在商用數據庫中是最低的。
Oracle:從易維護性和價格上來說Oracle的價格是比較高的,管理比較復雜,由于Oracle的應用廣泛,經驗豐富得問Oracle數據庫管理員可以比較容易的找到,從而實現Oracle的良好管理。因此oracle的性能價格比在商用數據庫中是最好的。
Sybase:sybase的價格是比較低,但是sybase在企業和政府中的應用是較少的,很難找到經驗豐富的管理員,運行管理費用較高。
DB2:價格高,管理員少,在中國的應用少,運行管理費用高,適用于大興企業的數據倉庫應用。
Informix:價格在這些系統中居于中間,與sybase一樣,在企業與政府中應用較少,僅在銀行在得到了廣范應用。經驗豐富的管理人員較少,運行費用高。
(8)數據庫的二次開發
SQLServer:數據庫的二次開發工具很多,包括Visual C++,Visual Basic等開發工具,可以實現很好的Windows應用,開發容易。
Oracle:數據庫的二次開發工具很多,涵蓋了數據庫開發的各個階段,中國的經驗豐富的人員很少。
Informin:在銀行項目中廣泛的應用,但是在中國的經驗豐富的人很少。
看了“java軟件開發工程師面試題”