AI筆試面試題庫-什麼是區塊鏈?
為方便大家及時檢視和學習AI相關課程的筆試和麵試題目,小七會在公眾號上陸續釋出七月線上官網的題庫試題帶解析,歡迎大家及時溝通學習,有紕漏的地方也請大家及時指正,我們會逐漸完善題庫資訊,給大家提供更多更好的試題資源。
官網連結:
https://www.julyedu.com/question/big/kp_id/29
解析:
本題解析來源:
@阮一峰,連結:http://www.ruanyifeng.
com/blog/2017/12/blockchain-tutorial.
htm
一、區塊鏈的本質
區塊鏈是什麼?一句話,它是一種特殊的分散式數
據庫。
首先,區塊鏈的主要作用是儲存資訊。任何需要保
存的資訊,都可以寫入區塊鏈,也可以從裡面讀取
,所以它是資料庫。 其次,任何人都可以架設伺服器,加入區塊鏈網路,
成為一個節點。區塊鏈的世界裡面,沒有中心節點,
每個節點都是平等的,都儲存著整個資料庫。你可
以向任何一個節點,寫入/讀取資料,因為所有節點
最後都會同步,保證區塊鏈一致。
二、區塊鏈的最大特點
分散式資料庫並非新發明,市場上早有此類產品。
但是,區塊鏈有一個革命性特點。 區塊鏈沒有管理員,它是徹底無中心的。其他的數
據庫都有管理員,但是區塊鏈沒有。如果有人想對
區塊鏈新增稽核,也實現不了,因為它的設計目標
就是防止出現居於中心地位的管理當局。 正是因為無法管理,區塊鏈才能做到無法被控制。
否則一旦大公司大集團控制了管理權,他們就會
控制整個平臺,其他使用者就都必須聽命於他們
了。 但是,沒有了管理員,人人都可以往裡面寫入資料,
怎麼才能保證資料是可信的呢?被壞人改了怎麼辦?
請接著往下讀,這就是區塊鏈奇妙的地方。
三、區塊
區塊鏈由一個個區塊(block)組成。區塊很像數
據庫的記錄,每次寫入資料,就是建立一個區塊。
每個區塊包含兩個部分。 區塊頭(Head):記錄當前區塊的元資訊 區塊體(Body):實際資料 區塊頭包含了當前區塊的多項元資訊。 生成時間 實際資料(即區塊體)的 Hash 上一個區塊的 Hash ... 這裡,你需要理解什麼叫 Hash,這是理解區塊鏈
必需的。
所謂 Hash 就是計算機可以對任意內容,計算出
一個長度相同的特徵值。區塊鏈的 Hash 長度是
256位,這就是說,不管原始內容是什麼,最後都
會計算出一個256位的二進位制數字。而且可以保證,
只要原始內容不同,對應的 Hash 一定是不同的。 舉例來說,字串123的 Hash 是a8fdc205a9
f19cc1c7507a60c4f01b13d11d7fd0(十六進
制),轉成二進位制就是256位,而且只有123
能得到這個 Hash。 因此,就有兩個重要的推論。 推論1:每個區塊的 Hash 都是不一樣的,可以
通過 Hash 標識區塊。 推論2:如果區塊的內容變了,它的 Hash 一定
會改變。
四、 Hash 的不可修改性
區塊與 Hash 是一一對應的,每個區塊的 Hash
都是針對"區塊頭"(Head)計算的。 Hash = SHA256(區塊頭) 上面就是區塊 Hash 的計算公式,Hash 由區塊
頭唯一決定,SHA256是區塊鏈的 Hash 演算法。 前面說過,區塊頭包含很多內容,其中有當前區
塊體的 Hash(注意是"區塊體"的 Hash,而不是
整個區塊),還有上一個區塊的 Hash。這意味著,
如果當前區塊的內容變了,或者上一個區塊的
Hash變了,一定會引起當前區塊的 Hash 改變。 這一點對區塊鏈有重大意義。如果有人修改了一個
區塊,該區塊的 Hash 就變了。為了讓後面的區
塊還能連到它,該人必須同時修改後面所有的區
塊,否則被改掉的區塊就脫離區塊鏈了。由於後
面要提到的原因,Hash 的計算很耗時,同時修
改多個區塊幾乎不可能發生,除非有人掌握了全
網51%以上的計算能力。 正是通過這種聯動機制,區塊鏈保證了自身的可
靠性,資料一旦寫入,就無法被篡改。這就像歷
史一樣,發生了就是發生了,從此再無法改變。
每個區塊都連著上一個區塊,這也是"區塊鏈"這個
名字的由來。
五、採礦
由於必須保證節點之間的同步,所以新區塊的
新增速度不能太快。試想一下,你剛剛同步了
一個區塊,準備基於它生成下一個區塊,但這
時別的節點又有新區塊生成,你不得不放棄做
了一半的計算,再次去同步。因為每個區塊的
後面,只能跟著一個區塊,你永遠只能在最新
區塊的後面,生成下一個區塊。所以,你別無
選擇,一聽到訊號,就必須立刻同步。 所以,區塊鏈的發明者中本聰(這是假名,真
實身份至今未知)故意讓新增新區塊,變得很
困難。他的設計是,平均每10分鐘,全網才能
生成一個新區塊,一小時也就六個。 這種產出速度不是通過命令達成的,而是故意
設定了海量的計算。也就是說,只有通過極其
大量的計算,才能得到當前區塊的有效 Hash,
從而把新區塊新增到區塊鏈。由於計算量太大,
所以快不起來。 這個過程就叫做採礦(mining),因為計算有
效 Hash 的難度,好比在全世界的沙子裡面,
找到一粒符合條件的沙子。計算 Hash 的機器
就叫做礦機,操作礦機的人就叫做礦工。
六、難度係數
讀到這裡,你可能會有一個疑問,人們都說採礦
很難,可是採礦不就是用計算機算出一個 Hash
嗎,這正是計算機的強項啊,怎麼會變得很難,
遲遲算不出來呢? 原來不是任意一個 Hash 都可以,只有滿足條件
的 Hash 才會被區塊連結受。這個條件特別苛
刻,使得絕大部分 Hash 都不滿足要求,必須
重算。 原來,區塊頭包含一個難度係數(difficulty),
這個值決定了計算 Hash 的難度。舉例來說,
第100000個區塊的難度係數是 14484.162361
22。
區塊鏈協議規定,使用一個常量除以難度係數,
可以得到目標值(target)。顯然,難度係數越
大,目標值就越小。
Hash 的有效性跟目標值密切相關,只有小於目標
值的 Hash 才是有效的,否則 Hash 無效,必
須重算。由於目標值非常小,Hash 小於該值的
機會極其渺茫,可能計算10億次,才算中一次。
這就是採礦如此之慢的根本原因。 區塊頭裡面還有一個 Nonce 值,記錄了 Hash
重算的次數。第 100000 個區塊的 Nonce 值是
274148111,即計算了 2.74 億次,才得到了一
個有效的 Hash,該區塊才能加入區塊鏈。
七、難度係數的動態調節
就算採礦很難,但也沒法保證,正好十分鐘產出
一個區塊,有時一分鐘就算出來了,有時幾個小
時可能也沒結果。總體來看,隨著硬體裝置的提
升,以及礦機的數量增長,計算速度一定會越來
越快。 為了將產出速率恆定在十分鐘,中本聰還設計了
難度係數的動態調節機制。他規定,難度係數每
兩週(2016個區塊)調整一次。如果這兩週裡面,
區塊的平均生成速度是9分鐘,就意味著比法定速
度快了10%,因此難度係數就要調高10%;如果平
均生成速度是11分鐘,就意味著比法定速度慢了
10%,因此難度係數就要調低10%。 難度係數越調越高(目標值越來越小),導致了
採礦越來越難。
八、區塊鏈的分叉
即使區塊鏈是可靠的,現在還有一個問題沒有
解決:如果兩個人同時向區塊鏈寫入資料,也
就是說,同時有兩個區塊加入,因為它們都連
著前一個區塊,就形成了分叉。這時應該採納
哪一個區塊呢?
現在的規則是,新節點總是採用最長的那條區塊
鏈。如果區塊鏈有分叉,將看哪個分支在分叉點
後面,先達到6個新區塊(稱為"六次確認")。
按照10分鐘一個區塊計算,一小時就可以確認。
由於新區塊的生成速度由計算能力決定,所以這
條規則就是說,擁有大多數計算能力的那條分支,
就是正宗的位元鏈。
九、總結
區塊鏈作為無人管理的分散式資料庫,從2009年
開始已經執行了8年,沒有出現大的問題。這證
明它是可行的。 但是,為了保證資料的可靠性,區塊鏈也有自己
的代價。一是效率,資料寫入區塊鏈,最少要等
待十分鐘,所有節點都同步資料,則需要更多的
時間;二是能耗,區塊的生成需要礦工進行無數
無意義的計算,這是非常耗費能源的。 因此,區塊鏈的適用場景,其實非常有限。 不存在所有成員都信任的管理當局 寫入的資料不要求實時使用 挖礦的收益能夠彌補本身的成本 如果無法滿足上述的條件,那麼傳統的資料庫
是更好的解決方案。
目前,區塊鏈最大的應用場景(可能也是唯一
的應用場景),就是以比特幣為代表的加密貨
幣。下一篇文章,我將會介紹比特幣的入門知
識。
十、參考連結
1.How does blockchain really work?
by Sean Han 2.Bitcoin mining the hard way: the
algorithms, protocols, and bytes,
by Ken Shirriff
為了讓大家順利轉行AI相關崗位,七月線上特意推出機器學習集訓營課程,迄今為止,「機器學習集訓營」已經舉辦了四期,每一期都湧現出了不少優秀offer,特別是上一期很多同學從Java、Android、iOS等傳統IT行業成功轉崗AI拿到年薪三四十萬,部分甚至超過四十萬拿到五十萬。
本第五期,在第四期的基礎上,除了繼續維持“入學測評、直播答疑、佈置作業、階段考試、畢業考核、一對一批改、線上線下結合、CPU&GPU雙雲平臺、面試輔導、就業推薦”十位一體的教學模式,本期特地推出機器學習工程師的聯合認證。且線下在北京、上海、深圳、廣州、杭州、瀋陽、濟南、鄭州、成都的基礎上,新增武漢、西安兩個線下點,十一城同步開營。
現推出特惠價格,2人及2人以上組團報名,可各減500元。想組團者請加微信客服:julyedukefu_02。課程詳情可點選 閱讀原文。
掃碼加客服微信
相關文章
- AI筆試面試題庫-Python題目解析1AI筆試面試題Python
- AI筆試面試題庫-Python題目解析3AI筆試面試題Python
- AI筆試面試題庫-Python題目解析4AI筆試面試題Python
- 區塊鏈「橋」是什麼?區塊鏈
- 什麼是區塊鏈,簡單瞭解區塊鏈區塊鏈
- 區塊鏈鏈重組是什麼?區塊鏈
- 什麼是區塊鏈改革“鏈改”?區塊鏈
- 區塊鏈每日一問 | 什麼是區塊鏈的“分叉”?區塊鏈
- 區塊鏈的原理是什麼?區塊鏈
- 白話區塊鏈是什麼區塊鏈
- 什麼是區塊鏈錢包區塊鏈
- 區塊鏈到底是什麼區塊鏈
- 漫畫 | 什麼是區塊鏈?區塊鏈
- 區塊鏈是做什麼的?區塊鏈
- Nginx 常用面試題-什麼是NginxNginx面試題
- 你知道什麼是區塊鏈嗎?區塊鏈
- 區塊鏈是什麼通俗解釋區塊鏈
- 區塊鏈EOS到底是什麼?區塊鏈
- 區塊鏈智慧合約是什麼?區塊鏈
- 9.1 什麼是聯盟區塊鏈區塊鏈
- 什麼是高效能區塊鏈?區塊鏈
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 什麼是區塊鏈,區塊鏈技術研發解決方案區塊鏈
- 區塊鏈101:區塊鏈的應用和用例是什麼?區塊鏈
- 區塊鏈100講:區塊鏈為什麼叫“區塊”“鏈”?區塊鏈
- 區塊鏈面試工作招聘過程中的40個問題區塊鏈面試
- 區塊鏈溯源技術是什麼?區塊鏈溯源技術開發區塊鏈
- 區塊鏈含義是什麼 區塊鏈搭建開發公司哪家好區塊鏈
- 圖解區塊鏈:14張圖看懂什麼是“區塊鏈技術”?圖解區塊鏈
- 什麼是區塊鏈錢包開發區塊鏈
- 區塊鏈的概念定義是什麼區塊鏈
- 為什麼區塊鏈是不可篡改的區塊鏈
- 區塊鏈的核心技術是什麼?區塊鏈
- 面試題:談談什麼是Zab協議?面試題協議
- 測試面試題:cookie/session/token 分別表示什麼意思,有什麼區別?面試題CookieSession
- 【Java面試】Mybatis中#{}和${}的區別是什麼?Java面試MyBatis
- Python 筆試 面試題Python筆試面試題
- 區塊鏈大火?區塊鏈究竟是什麼?區塊鏈