1. 程式人生 > 其它 >Java高頻面試題及答案整理(會持續更新)

Java高頻面試題及答案整理(會持續更新)

技術標籤:面經

宣告:只是記錄自己的學習筆記,如果有不對的地方還請大家幫忙提出來

目錄

一:Java基礎

1.Java支援多繼承嗎?

  • Java中類不支援多繼承,只支援單繼承,即一個類只有一個父類。但Java中的介面支援多繼承,即一個子介面可以有多個父介面,介面的作用是用來拓展物件的功能,一個子介面繼承多個父介面,說明子介面拓展了多個功能,當類拓展介面時,類就拓展了相應的功能。

2.

二:作業系統基礎

1.程序和執行緒的區別是什麼?

  • 程序是執行著的應用程式,程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位。而執行緒是程序內部的一個執行序列,一個程序可以有多個執行緒,執行緒又叫輕量級程序。

三:資料庫基礎

1.不考慮資料庫的隔離性會發生什麼?

  1. 髒讀:
    髒讀是指一個事務在處理資料的過程中,讀取到另一個未提交事務的資料。
    例:
--原資料
--id    name
--1     lisi
 
--事務1
START TRANSACTION;
updata t_table set name = 'wangwu' where id = 1;    --此時事務2查詢id = 1
ROLLBACK--事務2 select * from t_table where id = 1; --查詢到 id = 1, name = 'wangwu'

事務1並沒有提交,name 還是 lisi,但是事務2卻讀到了 name = wangwu,這就是髒讀。
2. 不可重複讀:
不可重複讀是指對於資料庫中的某個資料,一個事務範圍內的多次查詢卻返回了不同的結果,這是由於在查詢過程中,資料被另外一個事務修改並提交了。

--原資料
--id    name
--1     lisi
 
--事務1
select * from t_table where id = 1;
-- 查詢到 id = 1, name = list, 事務2在此時提交 select * from t_table where id = 1; -- 查詢到 id = 1, name = wangwu --事務2 start transaction; update t_table set name = 'wangwu' where id = 1; COMMIT;

不可重複讀和髒讀的區別是,髒讀讀取到的是一個未提交的資料,而不可重複讀讀取到的是前一個事務提交的資料。
3. 幻讀:
幻讀是事務非獨立執行時發生的一種現象。例如事務T1對一個表中所有的行的某個資料項做了從“1”修改為“2”的操作,這時事務T2又對這個表中插入了一行資料項,而這個資料項的數值還是為“1”並且提交給資料庫。而操作事務T1的使用者如果再檢視剛剛修改的資料,會發現還有一行沒有修改,其實這行是從事務T2中新增的,就好像產生幻覺一樣,這就是發生了幻讀。

幻讀和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同一個資料項,而幻讀針對的是一批資料整體(比如資料的個數)。

2.資料庫的隔離級別?

  • 讀未提交(Read Uncommitted):
    在該隔離級別中,所有事務都可以看到其他未提交事務的執行結果。讀取未提交的資料(髒讀)。
  • 讀已提交(Read Committed):
    這是大多數資料庫系統預設的隔離級別(但不是MySQL預設的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。
  • 可重複讀(Repeable Read):
    這是MySQL的預設事務隔離級別,它確保同一事務的多個例項在併發讀取資料時,會看到同樣的資料行。
  • 可序列化(Serializable):
    這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。
    在MySQL中,實現了這四種隔離級別,分別有可能產生的問題如下圖所示:
    在這裡插入圖片描述