阅读笔记:基础知识(Java篇)
生活随笔
收集整理的這篇文章主要介紹了
阅读笔记:基础知识(Java篇)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. GC機(jī)制(垃圾回收機(jī)制)
-
找到垃圾的方法:引用計(jì)數(shù)法、可達(dá)性分析法
- 回收垃圾的方法:標(biāo)記清除算法、復(fù)制算法、標(biāo)記整理法、分代算法
2. JVM內(nèi)存劃分
- 線程私有:程序計(jì)數(shù)器、JVM虛擬機(jī)棧、本地方法棧
- 線程公有:堆、方法區(qū)、運(yùn)行時(shí)常量池
3. 會(huì)發(fā)生OOM的區(qū)域
- 堆:內(nèi)存泄漏
- JVM虛擬機(jī)棧和本地方法棧:遞歸循環(huán)
- 方法區(qū):早期類加載過多會(huì)OOM,現(xiàn)在一般不會(huì)
4. 類加載過程
1.加載:將字節(jié)碼數(shù)據(jù)從不同的數(shù)據(jù)源讀取到JVM內(nèi)存,并映射為JVM認(rèn)可的數(shù)據(jù)結(jié)構(gòu)
2.鏈接:
3.初始化:為靜態(tài)變量賦值,并執(zhí)行靜態(tài)代碼塊中的邏輯
5. 雙親委派模型
1.類加載器分類
-
- 啟動(dòng)類加載器:主要加載jre/lib下的jar文件
- 擴(kuò)展類加載器:主要加載jre/lib/ext下的jar文件
- 應(yīng)用程序類加載器:主要加載classpath下的文件
2.雙親委派模型:當(dāng)加載一個(gè)類時(shí),優(yōu)先使用父類加載器加載,當(dāng)父類加載器無(wú)法加載時(shí)才使用子類加載器去加載
6. HashMap的原理
- 可以看作是數(shù)組+鏈表的組合。數(shù)組被分為一個(gè)個(gè)的桶。哈希值決定了鍵值對(duì)在數(shù)組中的尋址。具有相同哈希值的鍵值對(duì)會(huì)組成鏈表(避免哈希沖突)。當(dāng)鏈表長(zhǎng)度超過閾值(默認(rèn)是8)的時(shí)候會(huì)觸發(fā)樹化,鏈表會(huì)變成樹形結(jié)構(gòu)。
7. HashMap需要關(guān)注的4個(gè)方法
1.hash方法
-
-
將key的hashCode值的高位數(shù)據(jù)移位到低位進(jìn)行異或運(yùn)算。這么做的原因是有些key的hashCode值的差異集中在高位,而哈希尋址是忽略容量以上高位的,這種做法可以有效避免哈希沖突
-
2.put方法(步驟)
3.get方法(步驟)
4.resize方法(步驟)
8. sleep和wait的區(qū)別
- sleep方法是Thread類中的靜態(tài)方法,wait是Object類中的方法
- sleep并不會(huì)釋放同步鎖,而wait會(huì)釋放同步鎖
- sleep可以在任何地方使用,而wait方法只能在同步方法或者同步方法塊中使用
- sleep中必須傳入時(shí)間,而wait可以傳也可以不傳,不傳時(shí)間的話只有notify或者notifyAll才能喚醒,傳時(shí)間的話在時(shí)間之后會(huì)自動(dòng)喚醒
9. final、finally、finalize的區(qū)別
- final可以修飾類、變量和方法。修飾類代表這個(gè)類不可被繼承,修飾變量代表此變量不可被改變,修飾方法表示此方法不可被重寫(override)
- finally是保證重點(diǎn)代碼一定會(huì)執(zhí)行的一種機(jī)制。通常是使用try-finally或者try-catch-finally來(lái)進(jìn)行文件流的關(guān)閉等操作
- finalize是Object類中的一個(gè)方法。它的設(shè)計(jì)目的是保證對(duì)象在垃圾回收前完成特定資源的回收。finalize機(jī)制已不推薦使用,并且在JDK9已經(jīng)被標(biāo)記為deprecated
10. 常見的單例模式
- 餓漢式、雙重判斷的懶漢式、靜態(tài)內(nèi)部類實(shí)現(xiàn)的單例(最推薦的方式)、枚舉實(shí)現(xiàn)的單例
單例對(duì)象實(shí)例需要有volatile修飾,是因?yàn)?#xff1a;mInstance = new SingleTon()包含三個(gè)操作(給mInstance分配內(nèi)存,調(diào)用SingleTon的構(gòu)造方法初始化成員變量,將mInstance指向分配的內(nèi)存空間),又由于JVM會(huì)發(fā)生指令重排,所以可能調(diào)用順序會(huì)發(fā)生錯(cuò)誤。這樣會(huì)導(dǎo)致報(bào)錯(cuò)。而volatile的作用有保持可見性和禁止指令重排
11. java中引用類型的區(qū)別
- 強(qiáng)引用:指的是通過new對(duì)象創(chuàng)建的引用,垃圾回收器即使在內(nèi)存不足的情況下也不會(huì)回收具有強(qiáng)引用的對(duì)象
- 軟引用:是通過SoftRefrence實(shí)現(xiàn)的,在內(nèi)存不足之前會(huì)被垃圾回收器回收。可用于存儲(chǔ)一些內(nèi)存敏感的緩存
- 弱引用:是通過WeakRefrence實(shí)現(xiàn)的,垃圾回收器只要掃描到就會(huì)將其回收。可用于存儲(chǔ)一些內(nèi)存敏感的緩存
- 虛引用:是通過FanttomRefrence實(shí)現(xiàn)的,隨時(shí)有可能被回收。可用于跟蹤對(duì)象被垃圾回收的活動(dòng),當(dāng)一個(gè)虛引用關(guān)聯(lián)的對(duì)象被GC回收之前會(huì)受到一條系統(tǒng)通知
12. volatile的原理是在生成的匯編代碼中多了一個(gè)lock前綴指令,這個(gè)前綴指令相當(dāng)于一個(gè)內(nèi)存屏障,這個(gè)屏障有三個(gè)作用
13. http與https的區(qū)別
- https需要CA證書,很少免費(fèi),需要一定費(fèi)用
- http是明文傳輸,安全性低;而https是http的基礎(chǔ)上通過ssl加密,安全性高
- 默認(rèn)端口不同。http是80,https是443
14. https的加密算法
- 稱加密:加密和解密用的都是相同的秘鑰,優(yōu)點(diǎn)是速度快,缺點(diǎn)是安全性低。常見的算法有DES、AES等等
- 非對(duì)稱加密:非對(duì)稱加密有一個(gè)密鑰對(duì),分為公鑰和私鑰。一般來(lái)說(shuō),私鑰自己持有,公鑰可以公開給對(duì)方,優(yōu)點(diǎn)是安全性比對(duì)稱加密高,缺點(diǎn)是數(shù)據(jù)傳輸效率比對(duì)稱加密低。采用公鑰加密的信息只有對(duì)應(yīng)的私鑰可以解密。常見的算法有RSA等
正式場(chǎng)景中一般都是采用對(duì)稱加密和非對(duì)稱加密結(jié)合的方式,使用非對(duì)稱加密來(lái)完成秘鑰的傳遞,然后使用對(duì)稱加密實(shí)現(xiàn)數(shù)據(jù)的傳遞。這樣保證了安全性又提高了傳輸效率
?
大家如果有什么疑問或者建議可以通過評(píng)論或者郵件的方式聯(lián)系我,歡迎大家的評(píng)論~
轉(zhuǎn)載于:https://www.cnblogs.com/lanxingren/p/9830911.html
總結(jié)
以上是生活随笔為你收集整理的阅读笔记:基础知识(Java篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记本电脑连接不上WIFI解决方法(笔记
- 下一篇: Java 中Thread的sleep、j