計(jì)算機(jī)組成原理(三)——存儲(chǔ)系統(tǒng)
1 存儲(chǔ)系統(tǒng)層次結(jié)構(gòu)







2 主存中的數(shù)據(jù)組織




3 靜態(tài)存儲(chǔ)器工作原理
SRAM(靜態(tài)隨機(jī)存取存儲(chǔ)器)



4 動(dòng)態(tài)存儲(chǔ)器工作原理
DRAM(動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)




5 存儲(chǔ)擴(kuò)展


















6 多體交叉存儲(chǔ)器
基本思想是在不提高存儲(chǔ)器速率、不擴(kuò)展數(shù)據(jù)總線位數(shù)的前提下,通過(guò)存儲(chǔ)芯片的交叉組織,提高CPU單位時(shí)間內(nèi)訪問(wèn)的數(shù)據(jù)量,從而緩解快速的CPU與慢速的主存之間的速度差異。


7 Cache的基本原理





8 相聯(lián)存儲(chǔ)器





9 Cache地址映射與變換方法






10 替換算法




12 虛擬存儲(chǔ)器





13 TLB



14 RAID


































快速面經(jīng)
Q: RAFT協(xié)議中,Leader寫成功日志Log20但未同步給Followers后宕機(jī),F(xiàn)ollower重新選舉后產(chǎn)生一條新日志Log20,這時(shí)Leader重啟,整個(gè)系統(tǒng)發(fā)現(xiàn)兩種不一樣的Log20的記錄,請(qǐng)問(wèn)如何區(qū)分并拒掉前面的Log20?
A: 在RAFT協(xié)議中,如果Leader寫入了一條成功日志Log20但沒(méi)有在宕機(jī)前與Followers同步,隨后Follower重新選舉產(chǎn)生了一條新日志Log20,當(dāng)原先的Leader重啟時(shí),系統(tǒng)發(fā)現(xiàn)兩種不同的Log20記錄,為了區(qū)分并拒絕先前的Log20,系統(tǒng)使用了term編號(hào)的概念。每個(gè)日志條目都被分配了一個(gè)term編號(hào),這是在創(chuàng)建條目時(shí)leader的term。具有較高term編號(hào)的日志條目被認(rèn)為是更近的,因此被采納為正確的。在這種情況下,具有較高term編號(hào)的日志將被保留,而具有較低term編號(hào)的日志將被拒絕。
Q:?在共識(shí)協(xié)議中,為什么說(shuō)允許數(shù)據(jù)被覆蓋會(huì)帶來(lái)數(shù)據(jù)一致性問(wèn)題?
A:?因?yàn)椴煌墓?jié)點(diǎn)可能會(huì)有不同的數(shù)據(jù)版本,導(dǎo)致數(shù)據(jù)不一致。
Q: 什么場(chǎng)景適合樂(lè)觀鎖?什么場(chǎng)景適合悲觀鎖?
A:?樂(lè)觀鎖適合在讀多寫少的場(chǎng)景中使用,而悲觀鎖適合在讀少寫多的場(chǎng)景中使用。
Q:?三階段提交緩和兩階段提交的哪兩個(gè)問(wèn)題?
A:?三階段提交緩解了兩階段提交中的超時(shí)問(wèn)題和單點(diǎn)故障問(wèn)題。
Q:?兩階段提交中,什么場(chǎng)景需要數(shù)據(jù)庫(kù)管理員介入?
A:?當(dāng)事務(wù)超時(shí)或者其他問(wèn)題導(dǎo)致事務(wù)無(wú)法完成時(shí),需要數(shù)據(jù)庫(kù)管理員介入。
Q:?數(shù)據(jù)庫(kù)里的一致性和分布式系統(tǒng)中的一致性有什么區(qū)別?
A:?數(shù)據(jù)庫(kù)里的一致性指的是數(shù)據(jù)庫(kù)中的數(shù)據(jù)滿足事務(wù)的ACID特性,而分布式系統(tǒng)中的一致性指的是在分布式環(huán)境中多個(gè)節(jié)點(diǎn)上的數(shù)據(jù)是相同的。
Q:?CAP理論中,請(qǐng)舉例說(shuō)明可用性和一致性的矛盾?
A:?可用性要求系統(tǒng)能夠盡可能快地響應(yīng)請(qǐng)求,而一致性要求所有節(jié)點(diǎn)的數(shù)據(jù)在某一時(shí)刻是相同的。在分布式系統(tǒng)中,如果要求高可用性,可能會(huì)犧牲一致性;如果要求高一致性,可能會(huì)犧牲可用性。
Q:?什么是最終一致性?什么是線性一致性?
A:?最終一致性是指所有節(jié)點(diǎn)最終都會(huì)達(dá)成一致的數(shù)據(jù)狀態(tài),線性一致性是指在分布式系統(tǒng)中所有節(jié)點(diǎn)的操作順序是確定的。
Q:?為什么在4將軍問(wèn)題中,增加1輪協(xié)商就可以對(duì)抗拜占庭故障?
A:?增加1輪協(xié)商可以消除拜占庭將軍的影響,因此可以達(dá)成共識(shí)。
Q:?為什么TCP采用三次握手?而不是兩次和四次?
A:?TCP采用三次握手是因?yàn)檫@樣可以確保數(shù)據(jù)傳輸?shù)目煽啃院桶踩?/strong>。第一次握手是為了確認(rèn)連接,第二次握手是為了確認(rèn)收到第一次握手的確認(rèn),第三次握手是為了確認(rèn)第二次握手已經(jīng)收到。
Q:?兩將軍問(wèn)題為什么理論上永遠(yuǎn)達(dá)不成共識(shí)?
A:?因?yàn)闆](méi)有確定哪個(gè)將軍是“好的”?,在分布式環(huán)境中可能會(huì)出現(xiàn)“惡意將軍”的情況,因此無(wú)法達(dá)成共識(shí)。
Q:?分布式系統(tǒng)有哪些優(yōu)勢(shì)和挑戰(zhàn)?
A:?優(yōu)勢(shì):可擴(kuò)展性、高可用性、冗余性、容錯(cuò)性。挑戰(zhàn):復(fù)雜性、性能、數(shù)據(jù)一致性、安全性。
Q:?SQL注入是什么,如何避免?
A:?SQL 注入(SQL Injection)是發(fā)生在 Web 程序中數(shù)據(jù)庫(kù)層的安全漏洞,是網(wǎng)站存在最多也是最簡(jiǎn)單的漏洞。主要原因是程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒(méi)有判斷和處理,導(dǎo)致攻擊者可以在 Web 應(yīng)用程序中事先定義好的 SQL 語(yǔ)句中添加額外的 SQL 語(yǔ)句,在管理員不知情的情況下實(shí)現(xiàn)非法操作,以此來(lái)實(shí)現(xiàn)欺騙數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行非授權(quán)的任意查詢,從而進(jìn)一步獲取到數(shù)據(jù)信息。簡(jiǎn)而言之,SQL 注入就是在用戶輸入的字符串中加入 SQL 語(yǔ)句,如果在設(shè)計(jì)不良的程序中忽略了檢查,那么這些注入進(jìn)去的 SQL 語(yǔ)句就會(huì)被數(shù)據(jù)庫(kù)服務(wù)器誤認(rèn)為是正常的 SQL 語(yǔ)句而運(yùn)行,攻擊者就可以執(zhí)行計(jì)劃外的命令或訪問(wèn)未被授權(quán)的數(shù)據(jù)。
SQL注入的原理:惡意拼接查詢、利用注釋執(zhí)行非法命令、傳入非法參數(shù)、添加額外條件。
避免SQL注入:過(guò)濾輸入內(nèi)容,校驗(yàn)字符串、參數(shù)化查詢、安全測(cè)試/安全審計(jì)、避免使用動(dòng)態(tài)SQL、不要將敏感數(shù)據(jù)保留在純文本中、限制數(shù)據(jù)庫(kù)權(quán)限和特權(quán)、避免直接向用戶顯示數(shù)據(jù)庫(kù)錯(cuò)誤。