日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

阅读笔记:基础知识(Java篇)

發布時間:2023/12/2 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阅读笔记:基础知识(Java篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. GC機制(垃圾回收機制)

  • 找到垃圾的方法:引用計數法、可達性分析法

  • 回收垃圾的方法:標記清除算法、復制算法、標記整理法、分代算法

2. JVM內存劃分

  • 線程私有:程序計數器、JVM虛擬機棧、本地方法棧
  • 線程公有:堆、方法區、運行時常量池

3. 會發生OOM的區域

  • 堆:內存泄漏
  • JVM虛擬機棧和本地方法棧:遞歸循環
  • 方法區:早期類加載過多會OOM,現在一般不會

4. 類加載過程

1.加載:將字節碼數據從不同的數據源讀取到JVM內存,并映射為JVM認可的數據結構

2.鏈接:

  • 驗證:校驗字節信息是否符合規范,避免惡意信息和不規范數據危害JVM運行安全
  • 準備:創建靜態變量,并為靜態變量開辟內存空間
  • 解析:將符號引用替換為直接引用
  • 3.初始化:為靜態變量賦值,并執行靜態代碼塊中的邏輯

    5. 雙親委派模型

    1.類加載器分類

      • 啟動類加載器:主要加載jre/lib下的jar文件
      • 擴展類加載器:主要加載jre/lib/ext下的jar文件
      • 應用程序類加載器:主要加載classpath下的文件

    2.雙親委派模型:當加載一個類時,優先使用父類加載器加載,當父類加載器無法加載時才使用子類加載器去加載

    6. HashMap的原理

    • 可以看作是數組+鏈表的組合。數組被分為一個個的桶。哈希值決定了鍵值對在數組中的尋址。具有相同哈希值的鍵值對會組成鏈表(避免哈希沖突)。當鏈表長度超過閾值(默認是8)的時候會觸發樹化,鏈表會變成樹形結構。

    7. HashMap需要關注的4個方法

    1.hash方法

      • 將key的hashCode值的高位數據移位到低位進行異或運算。這么做的原因是有些key的hashCode值的差異集中在高位,而哈希尋址是忽略容量以上高位的,這種做法可以有效避免哈希沖突

    2.put方法(步驟)

  • 通過hash方法獲取hash值,根據hash值尋址
  • 如果未發生碰撞,直接放到桶中
  • 如果發生碰撞,則以鏈表形式放在桶后
  • 當鏈表長度大于閾值后會觸發樹化,將鏈表轉換為紅黑樹
  • 如果數組長度達到閾值,會調用resize方法擴容
  • 3.get方法(步驟)

  • 通過hash方法獲取hash值,根據hash值尋址
  • 如果與尋址到桶的key相同,直接返回對應的value
  • 如果發生沖突,分兩種情況。如果是樹,則調用getTreeNode獲取value;如果是鏈表,則循環遍歷查找對應的value
  • 4.resize方法(步驟)

  • 將原數組擴展為原來的2倍
  • 重新計算index索引值,將原節點重新放到新的數組中。這一步可以將原先沖突的節點分散到新的桶中?
  • 8. sleep和wait的區別

    • sleep方法是Thread類中的靜態方法,wait是Object類中的方法
    • sleep并不會釋放同步鎖,而wait會釋放同步鎖
    • sleep可以在任何地方使用,而wait方法只能在同步方法或者同步方法塊中使用
    • sleep中必須傳入時間,而wait可以傳也可以不傳,不傳時間的話只有notify或者notifyAll才能喚醒,傳時間的話在時間之后會自動喚醒

    9. final、finally、finalize的區別

    • final可以修飾類、變量和方法。修飾類代表這個類不可被繼承,修飾變量代表此變量不可被改變,修飾方法表示此方法不可被重寫(override)
    • finally是保證重點代碼一定會執行的一種機制。通常是使用try-finally或者try-catch-finally來進行文件流的關閉等操作
    • finalize是Object類中的一個方法。它的設計目的是保證對象在垃圾回收前完成特定資源的回收。finalize機制已不推薦使用,并且在JDK9已經被標記為deprecated

    10. 常見的單例模式

    • 餓漢式、雙重判斷的懶漢式、靜態內部類實現的單例(最推薦的方式)、枚舉實現的單例

    單例對象實例需要有volatile修飾,是因為:mInstance = new SingleTon()包含三個操作(給mInstance分配內存,調用SingleTon的構造方法初始化成員變量,將mInstance指向分配的內存空間),又由于JVM會發生指令重排,所以可能調用順序會發生錯誤。這樣會導致報錯。而volatile的作用有保持可見性和禁止指令重排

    11. java中引用類型的區別

    • 強引用:指的是通過new對象創建的引用,垃圾回收器即使在內存不足的情況下也不會回收具有強引用的對象
    • 軟引用:是通過SoftRefrence實現的,在內存不足之前會被垃圾回收器回收。可用于存儲一些內存敏感的緩存
    • 弱引用:是通過WeakRefrence實現的,垃圾回收器只要掃描到就會將其回收。可用于存儲一些內存敏感的緩存
    • 虛引用:是通過FanttomRefrence實現的,隨時有可能被回收。可用于跟蹤對象被垃圾回收的活動,當一個虛引用關聯的對象被GC回收之前會受到一條系統通知

    12. volatile的原理是在生成的匯編代碼中多了一個lock前綴指令,這個前綴指令相當于一個內存屏障,這個屏障有三個作用

  • 確保指令重排的時候不會把屏障后的指令排在屏障前,確保不會把屏障前的指令排在屏障后
  • 修改緩存中的共享變量后立即刷新到主存中
  • 當執行寫操作時會導致其他CPU中的緩存無效
  • 13. http與https的區別

    • https需要CA證書,很少免費,需要一定費用
    • http是明文傳輸,安全性低;而https是http的基礎上通過ssl加密,安全性高
    • 默認端口不同。http是80,https是443

    14. https的加密算法

    • 稱加密:加密和解密用的都是相同的秘鑰,優點是速度快,缺點是安全性低。常見的算法有DES、AES等等
    • 非對稱加密:非對稱加密有一個密鑰對,分為公鑰和私鑰。一般來說,私鑰自己持有,公鑰可以公開給對方,優點是安全性比對稱加密高,缺點是數據傳輸效率比對稱加密低。采用公鑰加密的信息只有對應的私鑰可以解密。常見的算法有RSA等

    正式場景中一般都是采用對稱加密和非對稱加密結合的方式,使用非對稱加密來完成秘鑰的傳遞,然后使用對稱加密實現數據的傳遞。這樣保證了安全性又提高了傳輸效率

    ?

    大家如果有什么疑問或者建議可以通過評論或者郵件的方式聯系我,歡迎大家的評論~

    轉載于:https://www.cnblogs.com/lanxingren/p/9830911.html

    總結

    以上是生活随笔為你收集整理的阅读笔记:基础知识(Java篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。