《面試題》

Java內存模型

Java的併發採用的是共享內存模型
Java內存模型:JMM決定一個線程對共享變量的寫入何時對另一個線程可見
共享變量的通信方法 本地內存A(共享變量的副本) 主內存
JVM對Java內存模型的實現
Java內存模型把內存分成了兩部分:線程棧區和堆區
每個線程都有自己的線程棧,線程棧包含了
1、當前線程執行的方法調用相關信息(調用棧)
2、當前方法的所有本地變量信息。
java內存模型

equals與==

  1. 對於==
    a.如果作用於基本數據類型的變量,則直接比較其存儲的 “值”是否相等;
    b.如果作用於引用類型的變量,則比較的是所指向的對象的地址

  2. 對於equals方法,注意:equals方法不能作用於基本數據類型的變量,equals繼承Object類,比較的是是否是同一個對象
    a.如果沒有對equals方法進行重寫,則比較的是引用類型的變量所指向的對象的地址;
    b.諸如String、Date等類對equals方法進行了重寫的話,比較的是所指向的對象的內容。
    測試案例:

drop、truncate和delete的區別

DROP:

DLL:data definition language-數據定義語言

操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.

drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的存儲過程/函數將保留,但是變爲invalid狀態. drop語句將表所佔用的空間全部釋放 .

TRUNCATE:
DLL:data definition language-數據定義語言

操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.

TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置爲該列的種子。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,只在事務日誌中記錄頁的釋放。 truncate 語句缺省情況下表空間釋放到 minextents個 extent,除非使用reuse storage;

DELETE:

DML:Data Manipulation Language-數據操作語言

操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.

DELETE 不帶WHERE 子句刪除表中的所有數據. DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。不影響表所佔用的extent, 高水線(high watermark)保持原位置不動 .

以下情況是TRUNCATE無法代替DELETE

1、要保留標識的情況下不能用 TRUNCATE TABLE,因爲 TRUNCATE TABLE 會重置標識。
2、需要使用觸發器的情況下不能使用 TRUNCATE TABLE ,它不會激發觸發器。
3、對於由 FOREIGN KEY 約束引用的表(即主鍵所在的表,不是外鍵所在的表)不能使用 TRUNCATE TABLE。
4、對於參與了索引視圖的表不能使用 TRUNCATE TABLE ,注意指索引視圖,並非普通視圖。

執行速度:
DROP>TRUNCATE>DELETE
https://blog.csdn.net/zxd112233/article/details/5733461

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章