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(见第二篇推送)

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

如果本文对你有帮助,请点个赞吧,谢谢

更多精彩内容,请关注个人公众号。

你可能感兴趣的:(ARTS挑战打卡第六周)