區(qū)塊鏈常見問(wèn)題

1:以太坊的共識(shí)算法

在以太坊中镊辕,默認(rèn)使用ethash(pow)共識(shí)算法進(jìn)行網(wǎng)絡(luò)正確性的保障,這種共識(shí)算法采用的是工作量證明的機(jī)制泻拦,也就是我們所熟知的“挖礦”谎僻。
在使用pow算法一段時(shí)間之后產(chǎn)生了一系列問(wèn)題,大家把目光轉(zhuǎn)向了casper(POS)共識(shí)算法膛锭,產(chǎn)生了共識(shí)算法Clique粮坞,這種算法的原理十分簡(jiǎn)單,即網(wǎng)絡(luò)中的每一個(gè)區(qū)塊是由某一個(gè)認(rèn)證節(jié)點(diǎn)進(jìn)行認(rèn)證的初狰,其他節(jié)點(diǎn)僅需要驗(yàn)證認(rèn)證信息來(lái)判斷該區(qū)塊是否合法莫杈。

2:POS以及拜占庭算法,共識(shí)算法研究

POS:POS就是“股權(quán)證明”,Proof of stake奢入,即直接證明你持有的份額筝闹。除了混合性的PPC之外,真正的POS幣是沒(méi)有挖礦過(guò)程的,也就是在創(chuàng)世區(qū)塊內(nèi)就寫明了股權(quán)證明关顷,之后的股權(quán)證明只能轉(zhuǎn)讓肩杈,不能挖礦。
也稱股權(quán)證明解寝,類似于財(cái)產(chǎn)儲(chǔ)存在銀行,這種模式會(huì)根據(jù)你持有數(shù)字貨幣的量和時(shí)間艘儒,分配給你相應(yīng)的利息聋伦。簡(jiǎn)單來(lái)說(shuō),就是一個(gè)根據(jù)你持有貨幣的量和時(shí)間界睁,給你發(fā)利息的一個(gè)制度觉增,在股權(quán)證明POS模式下,有一個(gè)名詞叫幣齡翻斟,每個(gè)幣每天產(chǎn)生1幣齡逾礁,比如你持有100個(gè)幣,總共持有了30天访惜,那么嘹履,此時(shí)你的幣齡就為3000,這個(gè)時(shí)候债热,如果你發(fā)現(xiàn)了一個(gè)POS區(qū)塊砾嫉,你的幣齡就會(huì)被清空為0。你每被清空365幣齡窒篱,你將會(huì)從區(qū)塊中獲得0.05個(gè)幣的利息(假定利息可理解為年利率5%)焕刮,那么在這個(gè)案例中,利息 = 3000 * 5% / 365 = 0.41個(gè)幣墙杯,這下就很有意思了配并,持幣有利息。
拜占庭算法:
拜占庭(BFT)是一類分布式計(jì)算領(lǐng)域的容錯(cuò)技術(shù)高镐,拜占庭容錯(cuò)來(lái)源于拜占庭將軍問(wèn)題溉旋,拜占庭將軍問(wèn)題是Leslie Lamport(2013年的圖靈講得主)用來(lái)為描述分布式系統(tǒng)一致性問(wèn)題(Distributed Consensus)在論文中抽象出來(lái)一個(gè)著名的例子。
? Lamport 對(duì)拜占庭將軍的問(wèn)題的研究表明避消,當(dāng) n > 3m 時(shí)低滩,即叛徒的個(gè)數(shù) m 小于將軍總數(shù)的 n 的 1/3 時(shí),通過(guò)口頭同步通信(假設(shè)通信是可靠的)岩喷,可以構(gòu)造同時(shí)滿足“一致性”和“正確性”的解決方法恕沫,即將軍們可以達(dá)成一致的命令
? 安全性:任何已經(jīng)完成的請(qǐng)求都不會(huì)被更改,它可以在以后請(qǐng)求看到纱意。在區(qū)塊鏈系統(tǒng)中婶溯,可以理解為,已經(jīng)生成的賬本不可篡改,并且可以被節(jié)點(diǎn)隨時(shí)查看迄委。
活性:可以接受并且執(zhí)行非拜占庭客戶端的請(qǐng)求褐筛,不會(huì)被任何因素影響而導(dǎo)致非拜占庭客戶端的請(qǐng)求不能執(zhí)行。在區(qū)塊鏈系統(tǒng)中叙身,可以理解為渔扎,系統(tǒng)需要持續(xù)生成區(qū)塊,為用戶記賬信轿,這主要靠挖礦的激勵(lì)機(jī)制來(lái)保證晃痴。

3、智能合約Gas計(jì)算

交易消耗的gas數(shù)量(gasUsed)與交易中單位gas的價(jià)格(gasPrice)的積(用以太幣計(jì)算)
交易費(fèi) = gasUsed * gasPrice

4财忽、回退函數(shù)

一個(gè)合約只能有一個(gè)回退函數(shù)倘核,無(wú)參無(wú)返回值,為了接受ether即彪,需要有payable標(biāo)識(shí)紧唱,當(dāng)調(diào)用的函數(shù)名錯(cuò)誤或有ether交易時(shí)會(huì)調(diào)用回退函數(shù)

五、send函數(shù)附屬的gas隶校,transfer函數(shù)

1.使用call調(diào)用函數(shù)的時(shí)候漏益,可以附加以太幣和gas,分別用.value()和.gas()表示惠况。
2.直接使用函數(shù)名稱和使用bytes4和keccak算法調(diào)用函數(shù)本質(zhì)上是一樣的遭庶,都可以附加以太幣和gas。
3.直接調(diào)用address.call()函數(shù)不帶任何參數(shù)稠屠,相當(dāng)于調(diào)用了一個(gè)不存在的函數(shù)峦睡,會(huì)調(diào)用對(duì)應(yīng)的回退函數(shù)。如果有附加的value权埠,則回退函數(shù)必須添加payable關(guān)鍵字榨了,否則執(zhí)行失敗。
4.call函數(shù)的返回值為 bool攘蔽;

send()發(fā)送調(diào)用:
1.如果我們要在合約中通過(guò)send()函數(shù)接收龙屉,就必須定義fallback函數(shù),否則會(huì)拋出異常满俗;
2.fallback函數(shù)必須增加payable關(guān)鍵字转捕,否則send()執(zhí)行結(jié)果將會(huì)始終為false;
3.調(diào)用發(fā)送函數(shù)的函數(shù)不能推薦view和constant修飾唆垃,否則發(fā)送失斘逯ァ;

transfer(uint256 amount):
發(fā)送給定數(shù)量的ether到某個(gè)地址辕万,以wei為單位枢步。失敗時(shí)拋出異常沉删。

六、智能合約安全接觸過(guò)哪些

1.重入漏洞
當(dāng)以太坊智能合約將Ether發(fā)送給未知地址(地址來(lái)源于輸入或是調(diào)用者)時(shí)醉途,可能會(huì)發(fā)生此攻擊矾瑰。
攻擊者可以在地址對(duì)應(yīng)合約的Fallback函數(shù)中,構(gòu)建一段惡意代碼隘擎。當(dāng)易受攻擊的合約將Ether發(fā)送給攻擊者構(gòu)建的惡意合約地址時(shí)殴穴,將執(zhí)行Fallback函數(shù),執(zhí)行惡意代碼货葬。惡意代碼可以是重新進(jìn)入易受攻擊的合約的相關(guān)代碼推正,這樣攻擊者可以重新進(jìn)入易受攻擊合約,執(zhí)行一些開發(fā)人員不希望執(zhí)行的合約邏輯
*解決方式:
1.在將Ether發(fā)送給外部合約時(shí)使用內(nèi)置的transfer() 函數(shù)宝惰。transfer轉(zhuǎn)賬功能只發(fā)送2300 gas不足以使目的地址/合約調(diào)用另- -份合約(即重入發(fā)送合約)。
2.確保所有改變狀態(tài)變量的邏輯發(fā)生在Ether被發(fā)送出合約(或任何外部調(diào)用)之前再沧。
3.引入互斥鎖尼夺。也就是說(shuō),要添加一個(gè)在代碼執(zhí)行過(guò)程中鎖定合約的狀態(tài)變量炒瘸,阻止重入調(diào)用淤堵。
2、算法溢出漏洞
以太坊虛擬機(jī)(EVM)為整數(shù)指定固定大小的數(shù)據(jù)類型顷扩。這意味著一個(gè)整型變量只能有一定范圍的數(shù)字表示拐邪。例如,一個(gè)uint8隘截,只能存儲(chǔ)在范圍[O, 255]的數(shù)字扎阶。試圖存儲(chǔ)256到一個(gè)uint8將變成0。不加注意的話婶芭,只要沒(méi)有檢查用戶輸入又執(zhí)行計(jì)算东臀,導(dǎo)致數(shù)字超出存儲(chǔ)它們的數(shù)據(jù)類型允許的范圍,Solidity中的變量就可以被用來(lái)組織攻擊犀农。當(dāng)執(zhí)行操作需要固定大小的變量來(lái)存儲(chǔ)超出變量數(shù)據(jù)類型范圍的數(shù)字(或數(shù)據(jù))時(shí)惰赋,會(huì)發(fā)生數(shù)據(jù)上溢/下溢。

*解決方式:防止溢出漏洞的(當(dāng)前)常規(guī)技術(shù)是使用或建立取代標(biāo)準(zhǔn)數(shù)學(xué)運(yùn)算符的數(shù)學(xué)庫(kù);加法呵哨,減法和乘法(除法被排除在外赁濒,因?yàn)樗粫?huì)導(dǎo)致上溢/下溢,并且EVM除以0時(shí)會(huì)丟出錯(cuò)誤)孟害。
0ppenZepplin在構(gòu)建和審計(jì)Ethereum 社區(qū)可以利用的安全庫(kù)方面
做得非常出色拒炎。特別是,他們的SafeMath 是一個(gè)用來(lái)避免.上溢/下溢漏洞的參考或庫(kù)纹坐。

3枝冀、可見性漏洞
函數(shù)的可見性默認(rèn)是public舞丛。因此,不指定任何可見性的函數(shù)就可以由用戶在外部調(diào)用果漾。當(dāng)開發(fā)人員錯(cuò)誤地忽略應(yīng)該是私有的功能(或只能在合約本身內(nèi)調(diào)用)的可見性說(shuō)明符時(shí)球切,問(wèn)題就出現(xiàn)了。
*解決方式:總是指定合約中所有功能的可見性绒障、即便這些函數(shù)的可見性本就有意設(shè)計(jì)成public吨凑,這是一種很好的做法。最近版本的Solidity 將在編譯過(guò)程中為沒(méi)有明確設(shè)置可見性的函數(shù)顯示警告户辱,以鼓勵(lì)這種做法鸵钝。
*解決方式:總是指定合約中所有功能的可見性、即便這些函數(shù)的可見性本就有意設(shè)計(jì)成public庐镐,這是一種很好的做法恩商。最近版本的Solidity 將在編譯過(guò)程中為沒(méi)有明確設(shè)置可見性的函數(shù)顯示警告,以鼓勵(lì)這種做法必逆。

4怠堪、條件競(jìng)爭(zhēng)/搶先提交
與大多數(shù)區(qū)塊鏈一樣,以太坊節(jié)點(diǎn)匯集交易并將其打包成塊名眉。一旦礦工獲得了共識(shí)機(jī)制(目前以太坊上實(shí)行的是ETHASH 工作量證明算法)的一個(gè)解粟矿,這些交易就被認(rèn)為是有效的。挖出該區(qū)塊的礦工同時(shí)也選擇將交易池中的哪些交易包含在該區(qū)塊中损拢,一般來(lái)說(shuō)是根據(jù)交易的gasPr ice來(lái)排序陌粹。在這里有一個(gè)潛在的攻擊媒介。攻擊者可以監(jiān)測(cè)交易池福压,看看其,中是否存在問(wèn)題的解決方案(如下合約所示)掏秩、修改或撤銷攻擊者的權(quán)限的交易或攻擊者不想要的合約狀態(tài)變更然后攻擊者可以從該中獲取數(shù)據(jù)并創(chuàng)建一個(gè)gasPrice 更高的交易,(讓自己的交易) 搶在原始交易之前被打包到一個(gè)區(qū)塊中荆姆。
*解決方式:可以采用的一種方法是在合約中創(chuàng)建邏輯哗讥,設(shè)置gasPrice的上限,可以防止用戶增加 gasPrice 并因超出上限而獲得優(yōu)先的交易排序胞枕。這種預(yù)防措施只能緩解任意用戶杆煞。在這種情況下,曠工仍然可以攻擊合約腐泻,因?yàn)闊o(wú)論Gas價(jià)格如何决乎,他們都可以安排包含在他們的塊中的交易。
一個(gè)更強(qiáng)大的方法是盡可能使用 commit-reveal 方案派桩。這種方案規(guī) 定用戶使用隱藏信息(通常是哈希值)發(fā)送交易构诚。在交易已包含在塊中后, 用戶將發(fā)送一個(gè)交易來(lái)顯示已發(fā)送的數(shù)據(jù)(reveal 階段)铆惑。這種方法可 以防止礦工和用戶從事?lián)屜冉灰追吨觯驗(yàn)樗麄儫o(wú)法確定交易的內(nèi)容送膳。然而, 這種方法不能隱藏交易價(jià)值(在某些情況下丑蛤,這是需要隱藏的有價(jià)值的信 息)叠聋。ENS 智能合約允許用戶發(fā)送交易,其 commit 數(shù)據(jù)包括他們?cè)敢饣?費(fèi)的金額受裹。用戶可以發(fā)送任意值的交易碌补。在 reveal 階段,用戶可以取出 交易中發(fā)送的金額與他們?cè)敢饣ㄙM(fèi)的金額之間的差額棉饶。

谷歌給出了解決方案:https://docs.google.com/document/d/ 1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/edit冒版,大家翻墻查看 即可赋续。

7葡公、眾籌合約彼水,發(fā)幣合約

發(fā)幣合約:要求我們?cè)趯?shí)現(xiàn)代幣的時(shí)候必須要遵守的協(xié)議,如指定代幣名稱幸缕、總量囊骤、實(shí)現(xiàn)代幣交易函數(shù)等,只有支持了協(xié)議才能被以太坊錢包支持冀值。
眾籌合約:眾籌就是我需要做一件事需要錢,我就把我的想法告訴大家宫屠,看看大家有沒(méi)有興趣投錢列疗,在規(guī)定的時(shí)間內(nèi)投夠那些錢,到時(shí)候大家都是原始股東浪蹂,如果在規(guī)定的時(shí)間內(nèi)沒(méi)有幕到那么多錢抵栈,然后就把那些錢退給大家。為了解決信任問(wèn)題運(yùn)用區(qū)塊鏈技術(shù)坤次,借助于智能合約古劲。可以實(shí)現(xiàn)當(dāng)募資完成時(shí)缰猴,募資款自動(dòng)打到指定賬戶产艾,募資未完成時(shí),自動(dòng)退還到各自的賬戶滑绒。這就不用依靠第三方信用擔(dān)保了闷堡。

8、事件使用

事件使用:事件強(qiáng)調(diào)功能疑故,一種行為杠览;事件發(fā)生后被記錄到區(qū)塊鏈上成為日志。事件可以用來(lái)做操作記錄纵势,存儲(chǔ)日志踱阿。
在solidity中管钳,使用event關(guān)鍵字來(lái)定義一個(gè)事件,并且事件在合約中可以被繼承软舌。

9才漆、內(nèi)存區(qū)域如何劃分

storage 會(huì)永久保存合約狀態(tài)變量,永久存貯在區(qū)塊鏈中葫隙,開銷最大
memory 僅保存臨時(shí)變量栽烂,函數(shù)調(diào)用之后釋放,開銷很小 stack 保存很小的局部變量恋脚,幾乎免費(fèi)使用腺办,但有數(shù)量限制。

10糟描、library(庫(kù))

庫(kù)與合約類似怀喉,它也部署在一個(gè)指定的地址上,然后通過(guò)EVM的特性DELEGATECALL來(lái)復(fù)用代碼船响。
(1)如果一個(gè)庫(kù)里只包含內(nèi)部函數(shù)或結(jié)構(gòu)體或枚舉躬拢,則不需要部署庫(kù),因?yàn)橐驗(yàn)閹?kù)合約是一個(gè)獨(dú)立的代碼见间,它僅可以訪問(wèn)主調(diào)合約明確提供的狀態(tài)變量聊闯。
(2)無(wú)狀態(tài)變量,不能繼承或被繼承米诉,不能接收以太幣菱蔬,不能銷毀一個(gè)庫(kù)。不會(huì)修改狀態(tài)變量庫(kù)函數(shù)只能通過(guò)直接調(diào)用(不用DELEGATECALL)史侣,是因?yàn)槠浔徽J(rèn)為是狀態(tài)無(wú)關(guān)的拴泌。

11、geth客戶端使用過(guò)嗎

(1)Geth是以太坊的客戶端惊橱。
(2)常用的API:Admin(管理員)蚪腐、 eth(以太幣)、web3税朴、miner(礦工)回季、net(網(wǎng)絡(luò))、personal(個(gè)人)正林、shh茧跋、debug(調(diào)試)和 txpool(工具)。
(3)geth客戶端的帳戶存儲(chǔ)在keystore目錄中卓囚。
(4)為了進(jìn)行交易瘾杭,必須先解鎖該賬戶 ,可以傳入賬戶地址或賬戶序號(hào)來(lái)解鎖哪亿。

12粥烁、熟悉以太坊底層源碼
13贤笆、什么是重入攻擊,如何避免

調(diào)用外部合約或?qū)⒁蕴珟虐l(fā)送到地址的操作要求合約提交外部調(diào)用讨阻。這些外部調(diào)用可以被攻擊者劫持芥永,從而迫使合約執(zhí)行更多的代碼(即通過(guò) fallback 回退函數(shù)),包括回調(diào)原合約本身钝吮。所以埋涧,合約代碼執(zhí)行過(guò)程中將可以“重入”該合約,有點(diǎn)像編程語(yǔ)言里面的間接遞歸函數(shù)調(diào)用奇瘦。
解決方案:
1棘催、(在可能的情況下)將 ether 發(fā)送到外部合約時(shí)使用內(nèi)置的 transfer() 函數(shù)。transfer() 函數(shù)僅發(fā)送 2300 Gas 給外部調(diào)用耳标,這不足以使目的地址合約調(diào)用另一個(gè)合約(即重入原合約)醇坝。

2、確保所有改變狀態(tài)變量的邏輯次坡,都發(fā)生在以太幣被發(fā)送出合約(或任何外部調(diào)用)之前呼猪。最好將對(duì)未知地址的外部調(diào)用,作為本地函數(shù)或代碼的最后一個(gè)操作砸琅。這在以太坊文檔中稱為檢查-效果- 交互(checks-effects-interactions)模式宋距。

3、引入互斥鎖症脂。也就是說(shuō)谚赎,添加一個(gè)狀態(tài)變量,在代碼執(zhí)行期間鎖定合約摊腋,防止重入調(diào)用。

14嘁傀、智能合約安全問(wèn)題

算術(shù)溢出問(wèn)題兴蒸,當(dāng)執(zhí)行操作需要固定大小的變量來(lái)存儲(chǔ)超出變量數(shù)據(jù)類型范圍的數(shù) 字(或數(shù)據(jù))時(shí),會(huì)發(fā)生數(shù)據(jù)上溢/下溢 细办,使用OppenZepplin.safeMath庫(kù)解決
重入攻擊問(wèn)題橙凳,向以太坊合約賬戶進(jìn)行轉(zhuǎn)賬,發(fā)送Ether的時(shí)候笑撞,會(huì)執(zhí)行合約賬戶對(duì) 應(yīng)合約代碼的回調(diào)函數(shù)(fallback)岛啸。 在以太坊智能合約中,進(jìn)行轉(zhuǎn)賬操作茴肥,一旦向被攻擊者劫持的合約地址發(fā)起轉(zhuǎn)賬操作坚踩,迫使執(zhí)行攻擊合約的回調(diào)函數(shù),回調(diào)函數(shù)中包含回調(diào)自身代碼瓤狐,將會(huì)導(dǎo)致代碼執(zhí)行“重新進(jìn)入”合約瞬铸。這種合約漏洞批幌,被稱為“重入漏洞”,
第一種技術(shù)是(在可能的情況下)將 ether 發(fā)送到外部合約時(shí)使用內(nèi)置的 transfer() 函數(shù)嗓节。transfer() 函數(shù)僅發(fā)送 2300 Gas 給外部調(diào)用荧缘,這不足以使目的地址合約調(diào)用另一個(gè)合約(即重入原合約)。

第二種拦宣,是確保所有改變狀態(tài)變量的邏輯截粗,都發(fā)生在以太幣被發(fā)送出合約(或任何外部調(diào)用)之前。在 EtherStore 示例中鸵隧,EtherStore.sol 的第18和19行應(yīng)放在第17行之前绸罗。最好將對(duì)未知地址的外部調(diào)用,作為本地函數(shù)或代碼的最后一個(gè)操作掰派。這在以太坊文檔中稱為檢查-效果- 交互(checks-effects-interactions)模式从诲。

第三種是引入互斥鎖。也就是說(shuō)靡羡,添加一個(gè)狀態(tài)變量系洛,在代碼執(zhí)行期間鎖定合約,防止重入調(diào)用略步。
Ether漏洞
(1)自毀selfdestruct(address)刪除所有字節(jié)碼描扯,并將Ether發(fā)送到指定地址
(2)預(yù)先發(fā)送的Ether:可以提前計(jì)算出地址,并且將Ether存入到合約中趟薄,避免依賴合約的余額的確切值绽诚,用狀態(tài)變量來(lái)記錄
可見性漏洞
函數(shù)的功能為public 解決:指定合約功能的可見性
隨機(jī)數(shù)誤區(qū)
Solidity沒(méi)有rand()功能,暫時(shí)沒(méi)有很好的解決方案
外部合約的引用
外部消息調(diào)用時(shí)被攻擊者利用
解決:1杭煎、new創(chuàng)建合約 2恩够、已知外部合約地址。對(duì)所有外部地址進(jìn)行硬編碼
短地址攻擊
第三方應(yīng)用程序不驗(yàn)證輸入時(shí)羡铲,交易所不驗(yàn)證ERC20 Token的地址
解決:將所有輸入發(fā)送到區(qū)塊鏈之前進(jìn)行驗(yàn)證
未檢查返回值
call函數(shù)調(diào)用時(shí)蜂桶,不會(huì)發(fā)生回滾
解決:使用transfer()功能,transfer會(huì)出發(fā)回滾
條件競(jìng)爭(zhēng)/搶先提交
攻擊之后設(shè)置gasPrice更高的交易使自己的先被驗(yàn)證
解決:1也切、設(shè)置gasPrice的上限扑媚,防止超出2、使用commit-reveal方案

15雷恃、函數(shù)調(diào)用方式疆股,view和pure的區(qū)別,constant修飾符的含義

view是只讀的倒槐,能看到某個(gè)值旬痹,而pure即不可讀也不可寫,constant修飾符等同于view

16、solidity多繼承怎么實(shí)現(xiàn)唱凯,接口的使用

(1)solidity使用is繼承羡忘,多繼承(一個(gè)子類同時(shí)集成多個(gè)父類),多個(gè)父類里有重名的函數(shù)和方法時(shí)磕昼,遵循最遠(yuǎn)機(jī)制卷雕。
(2)使用interface關(guān)鍵詞修飾。這樣的合約不能被編譯票从,但它們可以用作父合約被繼承漫雕。
無(wú)法繼承其他合約或接口、 無(wú)法定義構(gòu)造函數(shù)峰鄙、無(wú)法定義變量浸间、無(wú)法定義結(jié)構(gòu)體、無(wú)法定義枚舉吟榴。

17魁蒜、函數(shù)修飾器

使用關(guān)鍵字modifier定義,使用函數(shù)修飾器修飾的代碼吩翻,會(huì)默認(rèn)追加在函數(shù)修飾器 “_” 位置兜看,當(dāng)修飾器沒(méi)有執(zhí)行時(shí),函數(shù)會(huì)返回對(duì)應(yīng)類型的默認(rèn)值狭瞎。有多個(gè)函數(shù)修飾器時(shí)细移,會(huì)按照書寫順序依次執(zhí)行。

18熊锭、https與Http區(qū)別

HTTP:是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議弧轧,是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP),用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議碗殷,它可以使瀏覽器更加高效精绎,使網(wǎng)絡(luò)傳輸減少。
HTTPS:是以安全為目標(biāo)的HTTP通道锌妻,簡(jiǎn)單講是HTTP的安全版代乃,即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL从祝,因此加密的詳細(xì)內(nèi)容就需要SSL襟己。
HTTPS和HTTP的區(qū)別主要如下
1引谜、https協(xié)議需要到ca申請(qǐng)證書牍陌,一般免費(fèi)證書較少,因而需要一定費(fèi)用员咽。
  2毒涧、http是超文本傳輸協(xié)議,信息是明文傳輸贝室,https則是具有安全性的ssl加密傳輸協(xié)議契讲。
  3仿吞、http和https使用的是完全不同的連接方式,用的端口也不一樣捡偏,前者是80唤冈,后者是443。
  4银伟、http的連接很簡(jiǎn)單你虹,是無(wú)狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸彤避、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議傅物,比http協(xié)議安全。

19琉预、守護(hù)進(jìn)程

守護(hù)進(jìn)程的工作原理
守護(hù)進(jìn)程就是一個(gè)在后臺(tái)運(yùn)行的一個(gè)程序董饰,主要功能就是提供一些系統(tǒng)的服務(wù)。
守護(hù)進(jìn)程分為兩種類型:獨(dú)立(Standalone)守護(hù)進(jìn)程和臨時(shí)(Transient)守護(hù)進(jìn)程圆米,由超級(jí)守護(hù)進(jìn)程(super daemon)控制的守護(hù)進(jìn)程卒暂。
獨(dú)立守護(hù)進(jìn)程的工作方式是:當(dāng)用戶或程序提出需求時(shí),獨(dú)立守護(hù)進(jìn)程會(huì)自己為用戶或程序提供所需的服務(wù)榨咐。
臨時(shí)守護(hù)進(jìn)程的工作方式是:當(dāng)用戶或程序提出需求時(shí)會(huì)向 xinetd 超級(jí)守護(hù)進(jìn)程要求服務(wù)介却,之后,xinetd 再調(diào)用相應(yīng)的臨時(shí)守護(hù)進(jìn)程块茁,最后再由這個(gè)臨時(shí)守護(hù)進(jìn)程為用戶或程序提供所需的服務(wù)齿坷。

20、TCP和UDP的區(qū)別

TCP---傳輸控制協(xié)議,提供的是面向連接数焊、可靠的字節(jié)流服務(wù)永淌。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接佩耳,之后才能傳輸數(shù)據(jù)遂蛀。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù)干厚,檢驗(yàn)數(shù)據(jù)李滴,流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端蛮瞄。
UDP—用戶數(shù)據(jù)報(bào)協(xié)議所坯,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性挂捅,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去芹助,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制状土,故而傳輸速度很快

21无蜂、其他的公鏈,比如MOAC ,EOS ,NEO等蒙谓,他們用的什么共識(shí)算法斥季?

MOAC:POW工作量共識(shí)機(jī)制。優(yōu):完全去中心化累驮,節(jié)點(diǎn)自由進(jìn)出泻肯。缺:共識(shí)達(dá)成的周期較長(zhǎng),不適合商業(yè)應(yīng)用慰照。
EOS:DPos股份授權(quán)證明機(jī)制灶挟。優(yōu):大幅縮小參與驗(yàn)證和記賬節(jié)點(diǎn)的數(shù)量,可以達(dá)到秒級(jí)的共識(shí)驗(yàn)證毒租。缺:整個(gè)共識(shí)機(jī)制還是依賴于代幣稚铣,很多商業(yè)應(yīng)用是不需要代幣存在的。
NEO:dBFT拜占庭容錯(cuò)算法墅垮。優(yōu):可以容忍任意類型的錯(cuò)誤惕医,記賬由多人協(xié)同完成,每個(gè)區(qū)塊不會(huì)有最終性算色,無(wú)分叉抬伺。缺:當(dāng)1/3或以上記賬人停止工作后,系統(tǒng)將無(wú)法提供服務(wù)灾梦。

22峡钓、子鏈、側(cè)鏈:

側(cè)鏈:指的是與主鏈相平行的單獨(dú)一個(gè)區(qū)塊鏈若河,但是它和主鏈之間可以通過(guò)相互了解的協(xié)議互聯(lián)能岩。作為主鏈的補(bǔ)充,側(cè)鏈可以提供一些主鏈不能提供的功能萧福。但是這個(gè)互聯(lián)對(duì)共識(shí)機(jī)制有要求拉鹃,而且側(cè)鏈必須有與主鏈相當(dāng)?shù)乃懔Σ拍鼙WC側(cè)鏈貨幣的安全性。

子鏈:指的是在主鏈的平臺(tái)來(lái)派生出來(lái)的具有其他功能的區(qū)塊鏈鲫忍。這些子鏈不能單獨(dú)存在膏燕,必須通過(guò)主鏈提供的基礎(chǔ)設(shè)施才能運(yùn)行,并且免費(fèi)獲得主鏈的全部用戶悟民。

23坝辫、單例模式

單例模式:是一種常用的軟件設(shè)計(jì)模式。在它的核心結(jié)構(gòu)中只包含一個(gè)被稱為單例的特殊類逾雄。通過(guò)單例模式可以保證系統(tǒng)中阀溶,應(yīng)用該模式的類一個(gè)類只有一個(gè)實(shí)例。即一個(gè)類只有一個(gè)對(duì)象實(shí)例
懶漢:在初始化類的時(shí)候鸦泳,不創(chuàng)建唯一的實(shí)例银锻,而是等到真正需要用到的時(shí)候才創(chuàng)建。必須加上同步做鹰,否則有可能依然創(chuàng)建多個(gè)實(shí)例击纬。
餓漢:在初始化的時(shí)候,就創(chuàng)建了唯一的實(shí)例钾麸,不管是否需要用到更振。不需要自己加同步,一定產(chǎn)生唯一的實(shí)例饭尝。
懶漢模式下肯腕,不適合使用太頻繁的對(duì)象。
而在餓漢模式下钥平,不管是否用到实撒,都會(huì)初始化實(shí)例。
餓漢式是線程安全的,在類創(chuàng)建的同時(shí)就已經(jīng)創(chuàng)建好一個(gè)靜態(tài)的對(duì)象供系統(tǒng)使用,以后不在改變
詳情:https://blog.csdn.net/qq_34207444/article/details/79341334

24涉瘾、觀察者模式知态,

觀察者模式:觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)觀察一個(gè)主題對(duì)象立叛。這個(gè)主題對(duì)象在發(fā)生變化時(shí)负敏,會(huì)通知所有的觀察者對(duì)象,使它們能夠更新自己秘蛇。
觀察者:將自己注冊(cè)到被觀察對(duì)象中其做,被觀察對(duì)象將觀察者存放在一個(gè)容器里。
被觀察:被觀察對(duì)象發(fā)生了某種變化赁还,從容器中得到所有注冊(cè)過(guò)的觀察者庶柿,將變化通知觀察者。
撤銷觀察:觀察者告訴被觀察者要撤銷觀察秽浇,被觀察者從容器中將觀察者去除浮庐。

25、STO 柬焕、ICO审残、IPO、USDT

IPO(Initial Public Offerings)首次公開募股
ICO(是Initial Coin Offering縮寫)斑举,首次幣發(fā)行
STO(Security Token Offer)指的是證券型通證發(fā)行搅轿,STO就像是ICO與IPO的一種折中,既受到一定程度監(jiān)管富玷,又可以使證券實(shí)通證化璧坟,使流通方式更靈活既穆,降低項(xiàng)目方的募資門檻
USDT:中文名稱為泰達(dá)幣,等價(jià)于法幣的代幣雀鹃,和美元一比一幻工,相當(dāng)于數(shù)字貨幣的法幣。

26黎茎、golang高并發(fā)實(shí)現(xiàn)的基礎(chǔ)

協(xié)程

27囊颅、死鎖和死鎖解決方案

使用信道是要考慮的一個(gè)重要因素是死鎖(Deadlock)只讀未寫與只寫未讀都會(huì)觸發(fā)死鎖,并觸發(fā) panic 傅瞻。
用select方式阻止踢代,在default中放置處理方式。
使用緩沖信道嗅骄。
簡(jiǎn)單來(lái)講胳挎。把沒(méi)取走的數(shù)據(jù)取走,沒(méi)放入的數(shù)據(jù)放入溺森, 因?yàn)闊o(wú)緩沖信道不能承載數(shù)據(jù)串远。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市儿惫,隨后出現(xiàn)的幾起案子澡罚,更是在濱河造成了極大的恐慌,老刑警劉巖肾请,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件留搔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铛铁,警方通過(guò)查閱死者的電腦和手機(jī)隔显,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饵逐,“玉大人括眠,你說(shuō)我怎么就攤上這事”度ǎ” “怎么了掷豺?”我有些...
    開封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)薄声。 經(jīng)常有香客問(wèn)我当船,道長(zhǎng),這世上最難降的妖魔是什么默辨? 我笑而不...
    開封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任德频,我火速辦了婚禮,結(jié)果婚禮上缩幸,老公的妹妹穿的比我還像新娘壹置。我一直安慰自己竞思,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開白布钞护。 她就那樣靜靜地躺著盖喷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪患亿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天押逼,我揣著相機(jī)與錄音步藕,去河邊找鬼。 笑死挑格,一個(gè)胖子當(dāng)著我的面吹牛咙冗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漂彤,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼雾消,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了挫望?” 一聲冷哼從身側(cè)響起立润,我...
    開封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎媳板,沒(méi)想到半個(gè)月后桑腮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛉幸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年破讨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奕纫。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡提陶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匹层,到底是詐尸還是另有隱情隙笆,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布升筏,位于F島的核電站仲器,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仰冠。R本人自食惡果不足惜乏冀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洋只。 院中可真熱鬧辆沦,春花似錦昼捍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蔚晨,卻和暖如春乍钻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铭腕。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工银择, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人累舷。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓浩考,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親被盈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子析孽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容