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

歡迎訪問 生活随笔!

生活随笔

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

java

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

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

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

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

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

2. JVM內(nèi)存劃分

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

3. 會發(fā)生OOM的區(qū)域

  • 堆:內(nèi)存泄漏
  • JVM虛擬機棧和本地方法棧:遞歸循環(huán)
  • 方法區(qū):早期類加載過多會OOM,現(xiàn)在一般不會

4. 類加載過程

1.加載:將字節(jié)碼數(shù)據(jù)從不同的數(shù)據(jù)源讀取到JVM內(nèi)存,并映射為JVM認可的數(shù)據(jù)結(jié)構(gòu)

2.鏈接:

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

    5. 雙親委派模型

    1.類加載器分類

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

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

    6. HashMap的原理

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

    7. HashMap需要關(guān)注的4個方法

    1.hash方法

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

    2.put方法(步驟)

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

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

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

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

    9. final、finally、finalize的區(qū)別

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

    10. 常見的單例模式

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

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

    11. java中引用類型的區(qū)別

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

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

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

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

    14. https的加密算法

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

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

    ?

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

    轉(zhuǎn)載于:https://www.cnblogs.com/lanxingren/p/9830911.html

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。