ARTS挑戰打卡第六週

 打卡第六週,兩個21天

01-Algorthm

   

leetcode-1302[Deepest Leaves Sum] https://leetcode.com/problems/deepest-leaves-sum

思路1:遍歷樹(PostOrder Traversal),計算最高高度,再次遍歷樹,根據找到的最高高度求和。(Runtime: 1 ms Memory Usage: 41.5 MB)

思路2:遍歷樹(PreOrder Traversal),一次遍歷,計算高度的同時求和。當遇到葉子節點時,判斷當前高度是否大於等於最高高度。如果是,就可能要更新最高高度或者求和(Runtime: 0 ms Memory Usage: 41.7 MB)

02-Review

——————

[Why do we need distributed systems?] https://brooker.co.za/blog/2020/01/02/why-distributed.html

描述需要分佈式系統的原因,在某個時間單機很穩定,不代表就不需要分佈式系統了,分佈式系統主要解決:

1、提供更好的可用性

主要還是解決單點故障,比如單臺機器的性能有限,平均失敗率受硬件影響、機器掛了恢復時間過長(Time To Recovery)

2、提高系統的耐用性

跟可用性類似,系統提供多份備份的數據/軟件,在某一個節點失敗的時候系統還有其他節點可以服務。

3、提高系統可擴展性

有了可用性和耐用性後,系統的擴展變得更加方便。但是對於有狀態的系統,狀態如何分佈以及請求需要到哪個地方獲取需要的狀態,這兩個在分佈式系統領域中仍然是佔比很高的問題。目前有很多開源的項目在研究,比如Raft協議可以保證分佈式系統數據一致性。

4、提供更好的效率

整個分佈式系統能做更多的事情,保持系統不斷地運轉,提高系統的效率。

沒有銀彈

沒有任何一個分佈式架構設計能解決所有的系統問題,在生產環節上構建分佈式系統還是一件比較困難的事情,因爲需要從可用性、可擴展性等去折中考慮如何設計或調整整個系統,以及不能影響到業務的正常使用,但是整體來說還是充滿挑戰的。

之前也寫過一篇爲什麼需要分佈式系統,顯然這篇更細地描述了需要分佈式系統的原因,贊。

03-Tip

——————

進程和線程會共享什麼數據?堆和棧的區別是什麼?

是進程和線程共有的空間,分全局堆和局部堆。全局堆就是所有沒有分配的空間,局部堆就是用戶分配的空間。堆在操作系統對進程初始化的時候分配,運行過程中也可以向系統要額外的堆,但是用完了要還給操作系統,要不然就是內存泄漏。

是每個線程獨有的,保存其運行狀態和局部自動變量的。棧在線程開始的時候初始化,每個線程的棧互相獨立,因此,棧是線程安全的。操作系統在切換線程的時候會自動切換棧。棧空間不需要在高級語言裏面顯式的分配和釋放。

進程佔有的資源:地址空間,全局變量,打開的文件,子進程,信號量,賬戶信息

線程佔有的資源:棧,寄存器,狀態,程序計數器

進程是操作系統進行資源分配和調度的一個獨立單位,不會共享資源,通過進程間通信共享資源,而線程可以共享部分資源,獨自佔有的資源不共享。

線程共享的數據包括:

  1. 進程代碼段

  2. 進程的公有數據

04-Share

—————

Blog-Raft探索歷程-Part1(見第二篇推送)

原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

如果本文對你有幫助,請點個贊吧,謝謝

更多精彩內容,請關注個人公衆號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章