java面試題最容易犯錯的8道題

1573465941642076988.jpg

  1. static 和 final 的用法

  static 的做用從三個方面來談,分別是靜態變量、靜態方法、靜態類。java

  靜態變量:聲明爲 static 的靜態變量實質上就是全局變量,當聲明一個對象時,並不產生static 變量的拷貝,而是該類全部實例變量共用同一個 static 變量。也就是說這個靜態變量只加載一次,只分配一塊儲存空間。面試

  靜態方法: 聲明爲static的靜態方法有如下幾個特色:redis

  (1)靜態方法只能調用靜態方法;數據庫

  (2)靜態方法只能訪問靜態數據;設計模式

  (3)靜態方法不能以任何方式引用this或super;緩存

  靜態類:一般一個普通類不容許聲明爲靜態,只有一個內部類才能夠(main方法就是一個典型),這時這個聲明的靜態類能夠直接做爲一個普通類來使用,而不須要實例一個外部類。服務器

  final 的做用從變量、方法、類三個方面來理解:多線程

  final修飾的變量的值不能被修改,是一個常量;this

  final修飾的方法不能被重寫;spa

  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道的詳細內容,但願對你有所幫助。碼字不易,點個讚唄💗,支持支持

相關文章
相關標籤/搜索