友快網

導航選單

成功拿到大廠offer的我熬夜整理了這份Java高頻面試題(含答案)

今日分享開始啦,請大家多多指教~

點選載入圖片

Throw 和 throws 的區別?

throws 用在方法定義上,後面跟著的是異常類,可以多個。

點選載入圖片

而 throw 用在方法內部,後面跟著的是異常物件。

點選載入圖片

throws 表示這個方法可能會丟擲哪些異常,這樣呼叫者可以知道這個方法會丟擲什麼異常,可以提前進行預處理; throw 表示要丟擲什麼異常物件,throw 後面的語句不會被執行到,會將異常丟擲到呼叫者。

throws 和 throw 都不處理異常,而是將丟擲或者可能丟擲異常,由呼叫者去處理異常。

獲取 Class 物件有哪些方法?

呼叫物件的 getClass 方法來獲取。

Person person = new Person;

Class extends Person> aClass = person。getClass;

呼叫類的 class 屬性來獲取。

Class

personClass = Person。class;

呼叫 Class 類的 forName 靜態方法來獲取,比較常用,也是效能最好的。

Class> aClass = Class。forName(“com。chenpi。Person”);

什麼是 Java 反射機制?

Java 反射機制是在執行期,對於任意一個類,都能夠獲得這個類的所有屬性和方法。對於任意一個物件都能夠呼叫它的任意一個屬性和方法。這種在執行時動態地獲取資訊以及動態呼叫物件的方法的功能稱為 Java 的反射機制。

我們知道,程式執行時,允許改變程式結構或變數型別的語言稱為動態語言。例如 Python,Ruby等是動態語言。而 Java 不是動態語言,但是 Java 的反射機制讓它成為準動態語言。反射允許靜態語言在執行時檢查,修改程式的結構與行為。

final 的作用?

final 修飾類時,說明這個類不能被繼承。如果你希望一個不要被繼承,就可以用 final 關鍵字修飾。

final 修飾方法,說明這個方法不能被重寫。

final 修飾變數,說明這個變數的值賦值後不能被修改。

Java 集合類哪些是執行緒安全和執行緒不安全的?

執行緒安全的集合

Vector

HashTable

Stack

Properties

執行緒不安全的集合

ArrayList

LinkedList

HashMap

HashSet

TreeMap

TreeSet

JAVA 執行緒建立方式有哪些?

繼承 Thread 類,重寫 run 方法。

實現 Runnable 介面,重寫 run 方法。

實現 Callable 介面,重寫 call 方法,這是一個由返回值的方法。

怎麼實現動態代理?

JDK 原生動態代理

Cglib 動態代理

什麼是死鎖?

執行緒 A 持有獨佔鎖 a,並且還嘗試獲取獨佔鎖 b 的同時,執行緒 B 持有獨佔鎖 b,並且還嘗試獲取獨佔鎖 a 的情況下,這時 A 和 B 執行緒都在等待對方釋放需要的鎖,從而發生的阻塞現象,我們稱為死鎖。

ArrayList 和 LinkedList 的區別?

ArrayList 底層是基於動態陣列的資料結構實現,而 LinkedList 是基於雙向連結串列的資料結構實現。

因為 ArrayList 底層是基於陣列實現的,所以 ArrayList 比 LinkedList 隨機訪問效率快。而 LinkedList 是連結串列線性的資料結構,所以需要移動指標從前往後依次查詢,效率比較慢。

在非首尾的增加和刪除操作,LinkedList 要比 ArrayList 效率要高。

需要頻繁讀取集合中的元素時,推薦使用 ArrayList;在插入和刪除操作較多時,推薦使用 LinkedList。

並行和併發有什麼區別?

並行是指兩個或者多個事件在同一時刻發生;併發是指兩個或多個事件在同一時間間隔發生。

並行是在不同實體上的多個事件,併發是在同一實體上的多個事件。

Java 訪問修飾符有哪些?

點選載入圖片

構造器(constructor)是否可被重寫(override)?

構造器是不能被繼承的,所以不能被重寫,但是可以被過載。

String 屬於基礎的資料型別嗎?

String 不屬於基礎型別,String 屬於引用型別。基礎型別有 8 種:byte、boolean、char、short、int、float、long、double。

普通類和抽象類有哪些區別?

普通類不能包含抽象方法,抽象類可以包含抽象方法。

抽象類不能直接例項化,普通類可以直接例項化。

BIO、NIO、AIO 有什麼區別?

BIO:Block IO 同步阻塞式 IO,平常使用的傳統 IO,它的特點是模式簡單使用方便,併發處理能力低。

NIO:New IO 同步非阻塞 IO,傳統 IO 的升級,客戶端和伺服器端透過 Channel(通道)通訊,實現了多路複用。

AIO:Asynchronous IO 是 NIO 的升級,也叫 NIO2,實現了非同步非堵塞 IO ,非同步 IO 的操作基於事件和回撥機制。

JDK 和 JRE 區別?

JDK:Java Development Kit,java 開發工具包,提供了 java 的開發環境和執行環境。

JRE:Java Runtime Environment,java 執行環境,提供了 java 的執行環境。

什麼是守護執行緒?

守護執行緒(daemon

thread

),是一個服務執行緒,即服務其他執行緒的執行緒。

執行緒的 run 和 start 有什麼區別?

執行緒真正執行的操作是定義在 run 方法中的,也稱為執行緒體。而透過呼叫 Thread 類的 start 方法來啟動一個執行緒。

synchronized 和 volatile 的區別?

volatile 可以告訴告訴 jvm 當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取; synchronized 則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。

volatile僅能使用在變數級別;synchronized則可以使用在變數、方法、

和類

級別的。

volatile僅能實現變數的修改可見性,不能保證原子性;而synchronized則可以保證變數的修改可見性和原子性。

volatile不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。

volatile標記的變數不會被編譯器最佳化;synchronized標記的變數可以被編譯器最佳化。

今日份分享已結束,請大家多多包涵和指點!

點選載入圖片

點選載入圖片

如何獲取?

上一篇:小交易撿大寶貝! 火箭收穫16+6猛將, 斯通再造新交易?
下一篇:Excel – 快速新增千分位符, 多學幾個快捷鍵, 脫離滑鼠更歡脫