基礎筆記

Float 和 Double 不會有緩存,其他包裝類都有緩存。
Integer 是唯一一個可以修改緩存範圍的包裝類,在 VM optons 加入參數:
-XX:AutoBoxCacheMax=666 即修改緩存最大值爲 666 。

Set<Short> set = new HashSet<>();
for (short i = 0; i < 5; i++) {
    set.add(i);
    set.remove(i - 1);
}
System.out.println(set.size()); //5

Short 類型 -1 之後轉換成了 Int 類型,remove() 的時候在集合中找不到 Int 類型的數據,所以就沒有刪除任何元素,執行的結果就是 5。

泛型可以爲基本類型嗎?爲什麼?
答:泛型不能使用基本數據類型。泛型在 JVM(Java虛擬機)編譯的時候會類型檫除,比如代碼 List list 在 JVM 編譯的時候會轉換爲 List list ,因爲泛型是在 JDK 5 時提供的,而 JVM 的類型檫除是爲了兼容以前代碼的一個折中方案,類型檫除之後就變成了 Object,而 Object 不能存儲基本數據類型,但可以使用基本數據類型對應的包裝類,所以像 List list 這樣的代碼是不被允許的,編譯器階段會檢查報錯,而 List list 是被允許的。

final 類型的數據類型,不能通過傳參改變原變量值

  1. SimpleDateFormat 是線程安全的嗎?爲什麼?
    答:SimpleDateFormat 是非線程安全的。因爲查看 SimpleDateFormat 的源碼可以得知,所有的格式化和解析,都需要通過一箇中間對象進行轉換,這個中間對象就是 Calendar,這樣的話就造成非線程安全。試想一下當我們有多個線程操作同一個 Calendar 的時候後來的線程會覆蓋先來線程的數據,那最後其實返回的是後來線程的數據,因此 SimpleDateFormat 就成爲了非線程的了。

7.類加載順序
執行父類的靜態成員;
執行子類的靜態成員;
父類的實例成員和實例初始化;(構造代碼塊)
執行父類構造方法;
子類的實例成員和實例初始化;
子類構造方法。

8.子父類方法調用
對於父類接收子類的實例時,然後用判斷調用方法是父類的方法還是子類的。邏輯是先調用父類的方法,如果子類覆蓋了父類這個方法,就調用子類的,否則就調用父類的。

9.對於ArrayList,因爲底層是基於數組,所以插入,刪除,查找的時間爲o(n),讀取性能爲o(1),爲啥是o(1)呢:
假設我們的數組內存起始地址爲start,而元素類型的長度爲size,數組索引爲i,那麼我們很容易得到這個數組內存地址的尋址公式:
arr[i]_address = start + size * i
比如我們要讀取arr[3]的值,那麼只需要把3代入尋址公式,計算機就可以一步查詢到對應的元素,因此數組讀取的時間複雜度只有O(1).
簡而言之就是因爲數組數據地址是連續的,通過(起始地址+元素類型長度x索引)就能得到數據的地址了,所以讀取性能爲o(1)

10.通過本文可以知道 JDK 原生動態代理是使用反射實現的,但動態代理的實現方式不止有反射,還可以是 ASM(一個短小精悍的字節碼操作框架)、cglib(基於 ASM)等。其中 JDK 原生的動態代理是通過接口實現的,而 cglib 是通過子類實現的,因此 cglib 不能代理最終類(final)。而反射不但可以反射調用靜態方法,還可以反射調用普通方法和私有方法,其中調用私有方法時要設置 setAccessible 爲 true。

11.線程池的問題講的很好:
https://gitbook.cn/gitchat/column/5d493b4dcb702a087ef935d9/topic/5d4e13ae69004b174cd00140

12.鎖池和等待池
在java中,每個對象都有兩個池,鎖(monitor)池和等待池
鎖池:假設線程A已經擁有了某個對象(注意:不是類)的鎖,而其它的線程想要調用這個對象的某個synchronized方法(或者synchronized塊),由於這些線程在進入對象的synchronized方法之前必須先獲得該對象的鎖的擁有權,但是該對象的鎖目前正被線程A擁有,所以這些線程就進入了該對象的鎖池中。
等待池:假設一個線程A調用了某個對象的wait()方法,線程A就會釋放該對象的鎖後,進入到了該對象的等待池中
https://blog.csdn.net/weixin_42504145/article/details/85329386

13.數據庫三範式
1.每個列都得是原子性,不能再分割
2.表中非主屬性的列都完全依賴於主屬性類,(主屬性可能是聯合索引,如果某個列只依賴了聯合索引中部分列,這就不符合了)
3.要求每張表的主鍵之外的其它字段都只能和主鍵有直接決定依賴關係(不能有傳遞依賴,比如 :學號 姓名 所在系 系名稱 系地址 ;學號可以決定所在系,所在系又可以決定系地址存在傳遞依賴,也就是說學號不能直接決定系地址

char類型是使用固定長度空間進行存儲,範圍0-255。比如CHAR(30)能放30個字節,存放abcd時,尾部會以空格補齊,實際佔用空間 30bytes 。檢索它的時候尾部空格會被去除。
char善於存儲經常改變的值,或者長度相對固定的值,比如type、ip地址或md5之類的數據,不容易產生碎片。關於它的效率可以參考這裏。
varchar類型保存可變長度字符串,範圍0-65535(但受到單行最大64kb的限制)。比如用varchar(30)去存放abcd,實際使用5個字節,因爲還需要使用額外1個字節來標識字串長度(0-255使用1個字節,超過255需要2個字節)。

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