java面試題最容易犯錯的8道
1. static 與final 的用法
#static 的作用從三個面向來談,分別是靜態變數、靜態方法、靜態類。
靜態變數:宣告為static 的靜態變數實質上就是全域變量,當宣告一個物件時,並不會產生static 變數的拷貝,而是該類別所有實例變數共用同一個static 變數。也就是說這個靜態變數只載入一次,只分配一塊儲存空間。
靜態方法: 宣告為static的靜態方法有以下幾個特點:
(1)靜態方法只能呼叫靜態方法;
# (2)靜態方法只能存取靜態資料;
(3)靜態方法不能以任何方式引用this或super;
靜態類別:通常一個普通類別不允許宣告為靜態,只有一個內部類別才可以(main方法就是一個典型),這時這個宣告的靜態類別可以直接當作一個普通類別來使用,而不需要實例一個外部類別。
final 的作用從變數、方法、類別三個面向來理解:
final修飾的變數的值不能被修改,是一個常數;
final修飾的方法不能被重寫;
final修飾的類別不能被繼承;
#2. 抽象類別和介面的區別,類別可以繼承多個類別嗎,介面可以繼承多個介面嗎,類別可以實作多個介面嗎?
抽象類別和介面都不能直接實例化,如果要實例化,抽象類別變數必須指向實作所有抽象方法的子類別對象,介面變數必須指向實作所有介面方法的類別物件。
抽象類別要被子類別繼承,介面要被類別實作。
介面只能做方法聲明,抽象類別中可以做方法聲明,也可以做方法實作
介面裡定義的變數只能是公共的靜態的常數,抽象類別中的變數是普通變數。
抽象類別裡的抽象方法必須全部被子類別所實現,如果子類別不能全部實作父類別抽象方法,那麼該子類別只能是抽象類別。同樣,一個實作介面的時候,如不能全部實作介面方法,那麼該類別也只能為抽象類別。
抽象方法只能申明,不能實現。 abstract void abc();不能寫成abstract void abc(){}。
抽象類別裡可以沒有抽象方法 。
如果一個類別裡有抽象方法,那麼這個類別只能是抽象類別 。
抽象方法要實現,所以不能是靜態的,也不能是私有的。
介面可繼承接口,並可多繼承接口,但類別只能單根繼承。
3. this和super的功能和用法
#this :
(1) 能存取建構方法以外所有的屬性、方法,透過this.來呼叫方法和屬性
(2) 不可以在靜態方法中使用
(3) 在建構方法中使用this(參數列表) 調用本類的其它構造方法,必須放在構造方法的第一句。
super :存取父類別的方法和屬性
(1) 存取父類別的方法和屬性;
(2) 在建構方法中透過super(參數列表) 來呼叫父類別的建構方法,必須放在子類別建構方法裡的第一行。
4. final, finally, finalize 的差異?
#final:修飾符(關鍵字)有三種用法:如果一個類別被宣告為final,則意味著它不能再派生出新的子類,即不能被繼承。將變數宣告為final,可以保證它們在使用中不被改變,被宣告為final 的變數在初始化以後的參考中只能讀取不可修改。被宣告為 final 的方法也同樣只能使用,不能在子類別中被重寫。
finally:通常放在try…catch的後面構造總是執行程式碼區塊,這就意味著程式無論正常執行或發生異常,這裡的程式碼只要JVM不關閉都能執行,可以將釋放外部資源的程式碼寫在finally區塊中。
finalize:Object類別中定義的方法,Java中允許使用finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在銷毀物件時呼叫的,透過重寫finalize() 方法可以整理系統資源或執行其他清理工作。
5. Error 和Exception 有什麼區別?
Error 表示系統級的錯誤和程式不必處理的異常,是恢復不是不可能但很困難的情況下的一種嚴重問題;例如記憶體溢出,不可能指望程式能處理這樣的情況;
Exception 表示需要捕捉或需要程式處理的異常,是一種設計或實作問題;也就是說,它表示如果程式運作正常,從不會發生的情況。
6. 說出Servlet的生命週期,並說出Servlet和CGI的差異。
Servlet被伺服器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將實例銷毀的時候呼叫其destroy()方法。
與CGI的區別在於Servlet處於伺服器進程中,它透過多執行緒方式運行其service方法,一個實例可以服務於多個請求,且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就會銷毀,所以效率上低於Servlet。
7. 如何防止快取雪崩?
原因:
快取雪崩可能是因為資料未載入到快取中,或是快取同一時間大面積的失效,從而導致所有請求都去查資料庫,導致資料庫CPU和記憶體負載過高,甚至宕機。
對應解決:
採用加鎖計數,或使用合理的佇列數量來避免快取失效時對資料庫造成太大的壓力。這種辦法雖然能緩解資料庫的壓力,但是同時又降低了系統的吞吐量。
分析使用者行為,盡量讓失效時間點均勻分佈。避免緩存雪崩的出現。
如果是因為某台快取伺服器宕機,可以考慮做主備,例如:redis主備,但是雙重快取涉及到更新交易的問題,update可能讀到髒數據,需要好好解決。
8. 談談你對MVC的理解
MVC是Model—View—Controler的簡稱。即模型—視圖—控制器。 MVC是一種設計模式,它強制性的把應用程式的輸入、處理和輸出分開。
MVC中的模型、視圖、控制器它們分別擔負著不同的任務。
視圖: 視圖是使用者看到並與之互動的介面。視圖向使用者顯示相關的數據,並接受使用者的輸入。視圖不進行任何業務邏輯處理。
模型: 模型表示業務資料和業務處理,相當於JavaBean。一個模型能為多個視圖提供資料。這提高了應用程式的重用性。
控制器: 當使用者點擊Web頁面中的提交按鈕時,控制器接受請求並呼叫對應的模型去處理請求,然後根據處理的結果呼叫對應的視圖來顯示處理的結果。
MVC的處理過程:首先控制器接受使用者的請求,呼叫對應的模型來進行業務處理,並傳回資料給控制器。控制器呼叫對應的視圖來顯示處理的結果。並透過視圖呈現給使用者。
以上是java面試題最容易犯錯的8道的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。
