Java程式設計師~面試真題了解一下

小夥伴們大家好啊!一起來看看浙江優就業今天為大家整理的Java面試常見問題吧~

Java程序員~面試真題了解一下

1、什麼時候用斷言(assert)?

答:斷言在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。一般來說,斷言用於保證程序最基本、關鍵的正確性。斷言檢查通常在開發和測試時開啟。為了保證程序的執行效率,在軟件發佈後斷言檢查通常是關閉的。斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為true;如果表達式的值為false,那麼系統會報告一個Asserti。斷言的使用如下面的代碼所示:

assert(a > 0); // throws an Asserti if a <= 0

斷言可以有兩種形式:

assert Expression1;

assert Expression1 : Expression2 ;

Expression1 應該總是產生一個布爾值。

Expression2 可以是得出一個值的任意表達式;這個值用於生成顯示更多調試信息的字符串消息。

要在運行時啟用斷言,可以在啟動JVM時使用-enableassertions或者-ea標記。要在運行時選擇禁用斷言,可以在啟動JVM時使用-da或者-disableassertions標記。要在系統類中啟用或禁用斷言,可使用-esa或-dsa標記。還可以在包的基礎上啟用或者禁用斷言。

注意:斷言不應該以任何方式改變程序的狀態。簡單的說,如果希望在不滿足某些條件時阻止代碼的執行,就可以考慮用斷言來阻止它。

2、比較一下Java和JavaSciprt。

答:Java 與Java是兩個公司開發的不同的兩個產品。Java 是原Sun Microsystems公司推出的面向對象的程序設計語言,特別適合於互聯網應用程序開發;而Java是Netscape公司的產品,為了擴展Netscape瀏覽器的功能而開發的一種可以嵌入Web頁面中運行的基於對象和事件驅動的解釋性語言。Java的前身是Live;而Java的前身是Oak語言。

下面對兩種語言間的異同作如下比較:

- 基於對象和麵向對象:Java是一種真正的面向對象的語言,即使是開發簡單的程序,必須設計對象;Java是種腳本語言,它可以用來製作與網絡無關的,與用戶交互作用的複雜軟件。它是一種基於對象(Object-Based)和事件驅動(Event-Driven)的編程語言,因而它本身提供了非常豐富的內部對象供設計人員使用。

- 解釋和編譯:Java的源代碼在執行之前,必須經過編譯。Java是一種解釋性編程語言,其源代碼不需經過編譯,由瀏覽器解釋執行。(目前的瀏覽器幾乎都使用了JIT(即時編譯)技術來提升Java的運行效率)

- 強類型變量和弱類型變量:Java採用強類型變量檢查,即所有變量在編譯之前必須作聲明;Java中變量是弱類型的,甚至在使用變量前可以不作聲明,Java的解釋器在運行時檢查推斷其數據類型。

- 代碼格式不一樣。

補充:上面列出的四點是網上流傳的所謂的標準答案。其實Java和Java最重要的區別是一個是靜態語言,一個是動態語言。目前的編程語言的發展趨勢是函數式語言和動態語言。在Java中類(class)是一等公民,而Java中函數(function)是一等公民,因此Java支持函數式編程,可以使用Lambda函數和閉包(closure),當然Java 8也開始支持函數式編程,提供了對Lambda表達式以及函數式接口的支持。對於這類問題,在面試的時候最好還是用自己的語言回答會更加靠譜,不要背網上所謂的標準答案。

3、Error和Exception有什麼區別?

答:Error表示系統級的錯誤和程序不必處理的異常,是恢復不是不可能但很困難的情況下的一種嚴重問題;比如內存溢出,不可能指望程序能處理這樣的情況;Exception表示需要捕捉或者需要程序進行處理的異常,是一種設計或實現問題;也就是說,它表示如果程序運行正常,從不會發生的情況。

面試題:2005年摩托羅拉的面試中曾經問過這麼一個問題“If a process reports a stack overflow run-time error, what’s the most possible cause?”,給了四個選項a. lack of memory; b. write on an invalid memory space; c. recursive function calling; d. array index out of boundary. Java程序在運行時也可能會遭遇StackOverflowError,這是一個無法恢復的錯誤,只能重新修改代碼了,這個面試題的答案是c。如果寫了不能迅速收斂的遞歸,則很有可能引發棧溢出的錯誤,如下所示:

class StackOverflowErrorTest { public static void main(String[] args) { main( null); } }

提示:用遞歸編寫程序時一定要牢記兩點:1. 遞歸公式;2. 收斂條件(什麼時候就不再繼續遞歸)


分享到:


相關文章: