最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

計(jì)算機(jī)組成原理(六)——系統(tǒng)總線

2023-02-23 20:16 作者:UCLmsc  | 我要投稿

一、系統(tǒng)總線的特性及其應(yīng)用

總線:是計(jì)算機(jī)體系結(jié)構(gòu)的重要組成部分,通過(guò)它可以將計(jì)算機(jī)系統(tǒng)中各個(gè)功能部件連接起來(lái),構(gòu)成一個(gè)完整的系統(tǒng)。

二、總線性能和總線事務(wù)

三、總線連接方式


四、總線仲裁、操作和定時(shí)

?

五、總線標(biāo)準(zhǔn)

*快速面經(jīng)(from七牛云 go面經(jīng))


https加密過(guò)程

(1)首先,客戶端發(fā)起握手請(qǐng)求,以明文傳輸請(qǐng)求信息,包含版本信息,加密-套件候選列表,壓縮算法候選列表,隨機(jī)數(shù),擴(kuò)展字段等信息(這個(gè)沒(méi)什么好說(shuō)的,就是用戶在瀏覽器里輸入一個(gè)HTTPS網(wǎng)址,然后連接到服務(wù)端的443端口)。

(2)服務(wù)端的配置,采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書(shū),可以自己制作,也可以向組織申請(qǐng)。區(qū)別就是自己頒發(fā)的證書(shū)需要客戶端驗(yàn)證通過(guò),才可以繼續(xù)訪問(wèn),而使用受信任的公司CA申請(qǐng)的證書(shū)則不會(huì)彈出提示頁(yè)面。這套證書(shū)其實(shí)就是一對(duì)公鑰和私鑰。如果對(duì)公鑰不太理解,可以想象成一把鑰匙和一個(gè)鎖頭,只是世界上只有你一個(gè)人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個(gè)鎖把重要的東西鎖起來(lái),然后發(fā)給你,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來(lái)的東西。

(3)服務(wù)端返回協(xié)商的信息結(jié)果,包括選擇使用的協(xié)議版本 version,選擇的加密套件 cipher suite,選擇的壓縮算法 compression method、隨機(jī)數(shù) random_S 以及證書(shū)。(這個(gè)證書(shū)其實(shí)就是公鑰,只是包含了很多信息,如證書(shū)的頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等)。

(4)客戶端驗(yàn)證證書(shū)的合法性,包括可信性,是否吊銷(xiāo),過(guò)期時(shí)間和域名。(這部分工作是由客戶端的SSL/TLS來(lái)完成的,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警示框,提示證書(shū)存在的問(wèn)題。如果證書(shū)沒(méi)有問(wèn)題,那么就生成一個(gè)隨機(jī)值。然后用證書(shū)(也就是公鑰)對(duì)這個(gè)隨機(jī)值進(jìn)行加密。就好像上面說(shuō)的,把隨機(jī)值用鎖頭鎖起來(lái),這樣除非有鑰匙,不然看不到被鎖住的內(nèi)容)。

(5)客戶端使用公匙對(duì)對(duì)稱(chēng)密匙加密,發(fā)送給服務(wù)端。(這部分傳送的是用證書(shū)加密后的隨機(jī)值,目的是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了)。

(6)服務(wù)器用私鑰解密,拿到對(duì)稱(chēng)加密的密匙。(服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值,然后把內(nèi)容通過(guò)該隨機(jī)值進(jìn)行對(duì)稱(chēng)加密,將信息和私鑰通過(guò)某種算法混合在一起,這樣除非知道私鑰,不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全)。

(7)傳輸加密后的信息,這部分信息就是服務(wù)端用私鑰加密后的信息,可以在客戶端用隨機(jī)值解密還原。

(8)客戶端解密信息,客戶端用之前生產(chǎn)的私鑰解密服務(wù)端傳過(guò)來(lái)的信息,于是獲取了解密后的內(nèi)容。整個(gè)過(guò)程第三方即使監(jiān)聽(tīng)到了數(shù)據(jù),也束手無(wú)策。

三次握手為什么是三次,四次揮手為什么是四次?

(1)三次握手才可以阻止重復(fù)歷史連接的初始化(主要原因),三次握手才可以同步雙方的初始序列號(hào),三次握手才可以避免資源浪費(fèi)。

(2)關(guān)閉連接時(shí),客戶端向服務(wù)端發(fā)送 FIN 時(shí),僅僅表示客戶端不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù)。服務(wù)器收到客戶端的 FIN 報(bào)文時(shí),先回一個(gè) ACK 應(yīng)答報(bào)文,而服務(wù)端可能還有數(shù)據(jù)需要處理和發(fā)送,等服務(wù)端不再發(fā)送數(shù)據(jù)時(shí),才發(fā)送 FIN 報(bào)文給客戶端來(lái)表示同意現(xiàn)在關(guān)閉連接。從上面過(guò)程可知,服務(wù)端通常需要等待完成數(shù)據(jù)的發(fā)送和處理,所以服務(wù)端的 ACKFIN 一般都會(huì)分開(kāi)發(fā)送,從而比三次握手導(dǎo)致多了一次。

go channel的使用場(chǎng)景

把channel用在數(shù)據(jù)流動(dòng)的地方:

(1)消息傳遞、消息過(guò)濾

(2)信號(hào)廣播

(3)事件訂閱與廣播

(4)請(qǐng)求、響應(yīng)轉(zhuǎn)發(fā)

(5)任務(wù)分發(fā)

(6)結(jié)果匯總

(7)并發(fā)控制

(8)同步與異步

goroutine泄漏問(wèn)題

goroutine泄漏是指客戶端生成一個(gè)goroutine來(lái)做一些異步任務(wù),并在任務(wù)完成后將一些數(shù)據(jù)寫(xiě)入一個(gè)channel,但是沒(méi)有監(jiān)聽(tīng)程序消耗該channel的數(shù)據(jù)寫(xiě)入。

channel關(guān)閉后再寫(xiě)入會(huì)怎樣,讀寫(xiě)過(guò)程分別是怎樣的?

①讀已關(guān)閉的channel

讀已經(jīng)關(guān)閉的channel無(wú)影響。

如果在關(guān)閉前,通道內(nèi)部有元素,會(huì)正確讀到元素的值;如果關(guān)閉前通道無(wú)元素,則會(huì)讀取到通道內(nèi)元素類(lèi)型對(duì)應(yīng)的零值。

若遍歷通道,如果通道未關(guān)閉,讀完元素后,會(huì)報(bào)死鎖的錯(cuò)誤。

fatal error: all goroutines are asleep - deadlock!

②寫(xiě)已關(guān)閉的通道

會(huì)引發(fā)panic: send on closed channel

③關(guān)閉已關(guān)閉的通道

會(huì)引發(fā)panic: close of closed channel

總結(jié):對(duì)于一個(gè)已初始化,但并未關(guān)閉的通道來(lái)說(shuō),收發(fā)操作一定不會(huì)引發(fā) panic。但是通道一旦關(guān)閉,再對(duì)它進(jìn)行發(fā)送操作,就會(huì)引發(fā) panic。如果我們?cè)噲D關(guān)閉一個(gè)已經(jīng)關(guān)閉了的通道,也會(huì)引發(fā) panic。

slice切片底層

Go 的 slice 底層數(shù)據(jù)結(jié)構(gòu)是由一個(gè) array 指針指向底層數(shù)組,len 表示切片長(zhǎng)度,cap 表示切片容量。
slice 的主要實(shí)現(xiàn)是擴(kuò)容。對(duì)于 append 向 slice 添加元素時(shí),假如 slice 容量夠用,則追加新元素進(jìn)去,slice.len++,返回原來(lái)的 slice。當(dāng)原容量不夠,則 slice 先擴(kuò)容,擴(kuò)容之后 slice 得到新的 slice,將元素追加進(jìn)新的 slice,slice.len++,返回新的 slice。
對(duì)于切片的擴(kuò)容規(guī)則:當(dāng)切片比較小時(shí)(容量小于 1024),則采用較大的擴(kuò)容倍速進(jìn)行擴(kuò)容(新的擴(kuò)容會(huì)是原來(lái)的 2 倍),避免頻繁擴(kuò)容,從而減少內(nèi)存分配的次數(shù)和數(shù)據(jù)拷貝的代價(jià)。當(dāng)切片較大的時(shí)(原來(lái)的 slice 的容量大于或者等于 1024),采用較小的擴(kuò)容倍速(新的擴(kuò)容將擴(kuò)大大于或者等于原來(lái) 1.25 倍),主要避免空間浪費(fèi),網(wǎng)上其實(shí)很多總結(jié)的是 1.25 倍,那是在不考慮內(nèi)存對(duì)齊的情況下,實(shí)際上還要考慮內(nèi)存對(duì)齊,擴(kuò)容是大于或者等于 1.25 倍。

MySQL索引類(lèi)別 ?優(yōu)點(diǎn)缺點(diǎn)

普通索引:僅加速查詢

唯一索引:加速查詢 + 列值唯一(可以有null)+?表中可以多個(gè)唯一索引

主鍵索引:加速查詢 + 列值唯一(不允許有null)+ 表中只有一個(gè)主鍵(特殊的唯一索引)

組合索引:多列值組成一個(gè)索引,專(zhuān)門(mén)用于組合搜索,其效率大于索引合并

全文索引:對(duì)文本的內(nèi)容進(jìn)行分詞,進(jìn)行搜索

一、索引的優(yōu)點(diǎn)

1)創(chuàng)建索引可以大幅提高系統(tǒng)性能,幫助用戶提高查詢的速度;

2)通過(guò)索引的唯一性,可以保證數(shù)據(jù)庫(kù)表中的每一行數(shù)據(jù)的唯一性;

3)可以加速表與表之間的鏈接;

4)降低查詢中分組和排序的時(shí)間。

二、索引的缺點(diǎn)? ? ? ??

1)索引的存儲(chǔ)需要占用磁盤(pán)空間;

2)當(dāng)數(shù)據(jù)的量非常巨大時(shí),索引的創(chuàng)建和維護(hù)所耗費(fèi)的時(shí)間也是相當(dāng)大的;

3)當(dāng)每次執(zhí)行CRU操作時(shí),索引也需要?jiǎng)討B(tài)維護(hù),降低了數(shù)據(jù)的維護(hù)速度。

Redis有哪些數(shù)據(jù)類(lèi)型 ?以及各種數(shù)據(jù)類(lèi)型的底層結(jié)構(gòu)

Redis是一款基于鍵值對(duì)的NoSQL數(shù)據(jù)庫(kù),它的值支持多種數(shù)據(jù)結(jié)構(gòu):字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等隨著Redis版本的更新迭代,還有四種數(shù)據(jù)類(lèi)型:bitmap、GEO、HyperLogLog,以及Redis5.0中的Streams。

Redis集群查詢數(shù)據(jù)保存在哪里

Redis集群查詢數(shù)據(jù)保存在每個(gè)節(jié)點(diǎn)的內(nèi)存中,并可以通過(guò)復(fù)制機(jī)制在節(jié)點(diǎn)之間進(jìn)行同步。

Redis集群哨兵搭建

1 為什么要使用哨兵模式

主從模式下,主機(jī)會(huì)自動(dòng)將數(shù)據(jù)同步到從機(jī),為了分載Master的讀操作壓力,Slave服務(wù)器可以為客戶端提供只讀操作的服務(wù),寫(xiě)服務(wù)依然必須由Master來(lái)完成,實(shí)現(xiàn)讀寫(xiě)分離。當(dāng)主服務(wù)器宕機(jī)后,需要手動(dòng)把一臺(tái)從服務(wù)器切換為主服務(wù)器,這就需要人工干預(yù),費(fèi)事費(fèi)力,還會(huì)造成一段時(shí)間內(nèi)服務(wù)不可用。

2 哨兵模式的工作原理

在主從模式下,redis同時(shí)提供了哨兵命令redis-sentinel,哨兵是一個(gè)獨(dú)立的進(jìn)程,作為進(jìn)程,它會(huì)獨(dú)立運(yùn)行。其原理是哨兵進(jìn)程向所有的redis機(jī)器發(fā)送命令,等待Redis服務(wù)器響應(yīng),從而監(jiān)控運(yùn)行的多個(gè)Redis實(shí)例。

哨兵可以有多個(gè),一般為了便于決策選舉,使用奇數(shù)個(gè)哨兵。哨兵可以和redis機(jī)器部署在一起,也可以部署在其他的機(jī)器上。多個(gè)哨兵構(gòu)成一個(gè)哨兵集群,哨兵直接也會(huì)相互通信,檢查哨兵是否正常運(yùn)行,同時(shí)發(fā)現(xiàn)master宕機(jī)哨兵之間會(huì)進(jìn)行決策選舉新的master。

項(xiàng)目 項(xiàng)目設(shè)計(jì)表設(shè)計(jì) 怎么解決支付失敗 原子性問(wèn)題

支付失敗,可以進(jìn)行重試的機(jī)制,重試一定的次數(shù),并且為了防止重復(fù)支付,做冪等處理,冪等處理可以用全局唯一的key做表示,比較有名的是雪花算法,雪花算法利用到集群、機(jī)器、隨機(jī)數(shù)等關(guān)鍵信息防止重復(fù)。

DNS協(xié)議 ?詳細(xì)過(guò)程

dns協(xié)議是域名協(xié)議,將域名解析成IP地址,常用的有兩種方式,遞歸方法和迭代方式,遞歸方式是,先根據(jù)域名查詢機(jī)器的dns緩存,判斷是否查找,查不到的話,在去根域名進(jìn)行查找頂層域名服務(wù)器在哪,在下發(fā)到子層域名服務(wù)器,一直找到后,在發(fā)送給本地。迭代的方式,需要發(fā)送多次報(bào)文。具體流程是:先查詢host文件,在判斷本地dns緩存或者瀏覽器緩存有沒(méi)有,沒(méi)有的話,在通過(guò)域名服務(wù)器去查詢。

https四次握手詳細(xì)過(guò)程

https是一個(gè)比較安全的協(xié)議,在http基礎(chǔ)之前添加了一層tls、ssl層用于安全校驗(yàn),https先進(jìn)行非對(duì)稱(chēng)加密交換對(duì)稱(chēng)加密的密鑰,后續(xù)的數(shù)據(jù)傳輸采用對(duì)稱(chēng)加密進(jìn)行傳輸。大體流程是:客戶端首次連接服務(wù)器,會(huì)帶上自己支持加密算法的集合、隨機(jī)數(shù)1,服務(wù)端收到隨機(jī)數(shù)1之后,發(fā)送自己的隨機(jī)數(shù)2和加密算法(這個(gè)加密算法必須是客戶端發(fā)送的子集),服務(wù)端會(huì)把自己的ca證書(shū)發(fā)送給客戶端,客戶端收到ca證書(shū)之后,會(huì)拿著ca證書(shū)去ca機(jī)構(gòu)認(rèn)證一下ca證書(shū)的合法性,合法之后,會(huì)取出ca證書(shū)的非對(duì)稱(chēng)加密的公鑰,自己生成一個(gè)預(yù)密鑰,通過(guò)公鑰加密之后傳輸給服務(wù)端,服務(wù)端通過(guò)私鑰進(jìn)行解密,獲取隨機(jī)數(shù)1、隨機(jī)數(shù)2、預(yù)密鑰,服務(wù)端將之組裝成對(duì)稱(chēng)加密的密鑰,在客戶端和服務(wù)端游共同的密鑰之后,以后的數(shù)據(jù)傳輸都采用對(duì)稱(chēng)加密傳輸。

go channel詳細(xì)底層結(jié)構(gòu) ?有無(wú)緩沖并發(fā)數(shù)據(jù)讀寫(xiě)問(wèn)題 ?底層鎖?

chan是go語(yǔ)言并發(fā)通信的核心之一,chan可以類(lèi)比成一個(gè)queue加上mutex的組合,chan名字為管道或者通道,chan的底層是是一個(gè)循環(huán)數(shù)組,有讀寫(xiě)標(biāo)志位,還有讀寫(xiě)等待隊(duì)列,數(shù)據(jù)類(lèi)型標(biāo)志,還有Mutex用于處理并發(fā)問(wèn)題,chan分為兩類(lèi),一種是無(wú)緩沖的,另一種是有緩沖的,無(wú)緩沖的chan必須以有一個(gè)協(xié)程讀,一個(gè)協(xié)程負(fù)責(zé)寫(xiě),處理不好的話,很容易出現(xiàn)死鎖,而有緩沖的chan,只有在緩沖區(qū)寫(xiě)完了才會(huì)進(jìn)行寫(xiě)阻塞。

go interface接口 ?GMP模型

Golang在底層實(shí)現(xiàn)了混合型線程模型。M即系統(tǒng)線程,由系統(tǒng)調(diào)用產(chǎn)生,一個(gè)M關(guān)聯(lián)一個(gè)KSE,即兩級(jí)線程模型中的系統(tǒng)線程。G為Groutine,即兩級(jí)線程模型的的應(yīng)用及線程。M與G的關(guān)系是N:M。

G-M-P分別代表:

  1. G - Goroutine,Go協(xié)程,是參與調(diào)度與執(zhí)行的最小單位

  2. M - Machine,指的是系統(tǒng)級(jí)線程

  3. P - Processor,指的是邏輯處理器,P關(guān)聯(lián)了的本地可運(yùn)行G的隊(duì)列(也稱(chēng)為L(zhǎng)RQ),最多可存放256個(gè)G。

GMP調(diào)度流程

  1. 線程M要想運(yùn)行任務(wù),就要先獲取P,即M先與P關(guān)聯(lián)

  2. P從本地隊(duì)列(local p) 中獲取G

  3. 若本地隊(duì)列中沒(méi)有可供運(yùn)行的G,M會(huì)先嘗試從全局隊(duì)列獲取一批G放到P的本地隊(duì)列

  4. 若全局隊(duì)列也沒(méi)有找到可以運(yùn)行的G,M會(huì)隨機(jī)從其他P的本地隊(duì)列中偷一半的G放到自己的P本地隊(duì)列

  5. 拿到可以運(yùn)行的G后,M先運(yùn)行G,G執(zhí)行以后,M會(huì)從P中獲取下一個(gè)G,一直不斷重復(fù)

GMP調(diào)度策略

  1. 復(fù)用線程:?work stealing?和?hand off?機(jī)制保證M線程的高效復(fù)用

  2. 利用并行: GOMAXPROCS 設(shè)置P的數(shù)量,充分利用CPU的多核和m多線程

  3. 搶占:完全公平的時(shí)間片輪轉(zhuǎn),每個(gè)G只能占用10ms,防止其他G餓死


計(jì)算機(jī)組成原理(六)——系統(tǒng)總線的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
双鸭山市| 武山县| 广河县| 巢湖市| 贺州市| 永登县| 固始县| 明光市| 高邑县| 清流县| 延边| 大埔区| 广昌县| 莒南县| 大港区| 南靖县| 景洪市| 河间市| 长汀县| 东港市| 桐梓县| 淮北市| 文成县| 酒泉市| 花莲县| 扶沟县| 特克斯县| 本溪| 西贡区| 海南省| 云浮市| 凤翔县| 从化市| 会宁县| 含山县| 五峰| 枝江市| 曲水县| 菏泽市| 辽源市| 镇巴县|