写点什么

ARTS 挑战打卡第六周(200615-200621)

发布于: 2020 年 08 月 24 日
ARTS挑战打卡第六周(200615-200621)

Algorthm

leetcode-1302Deepest Leaves Sum]



思路1:遍历树(PostOrder Traversal),计算最高高度,再次遍历树,根据找到的最高高度求和。(Runtime: 1 ms Memory Usage: 41.5 MB)



思路2:遍历树(PreOrder Traversal),一次遍历,计算高度的同时求和。当遇到叶子节点时,判断当前高度是否大于等于最高高度。如果是,就可能要更新最高高度或者求和(Runtime: 0 ms Memory Usage: 41.7 MB)



Review

Why do we need distributed systems?]

描述需要分布式系统的原因,在某个时间单机很稳定,不代表就不需要分布式系统了,分布式系统主要解决:

1、提供更好的可用性

主要还是解决单点故障,比如单台机器的性能有限,平均失败率受硬件影响、机器挂了恢复时间过长(Time To Recovery)



2、提高系统的耐用性

跟可用性类似,系统提供多份备份的数据/软件,在某一个节点失败的时候系统还有其他节点可以服务。



3、提高系统可扩展性

有了可用性和耐用性后,系统的扩展变得更加方便。但是对于有状态的系统,状态如何分布以及请求需要到哪个地方获取需要的状态,这两个在分布式系统领域中仍然是占比很高的问题。目前有很多开源的项目在研究,比如Raft协议可以保证分布式系统数据一致性。



4、提供更好的效率

整个分布式系统能做更多的事情,保持系统不断地运转,提高系统的效率。



没有银弹

没有任何一个分布式架构设计能解决所有的系统问题,在生产环节上构建分布式系统还是一件比较困难的事情,因为需要从可用性、可扩展性等去折中考虑如何设计或调整整个系统,以及不能影响到业务的正常使用,但是整体来说还是充满挑战的。



之前也写过一篇为什么需要分布式系统,显然这篇更细地描述了需要分布式系统的原因,赞。



Tip

进程和线程会共享什么数据?堆和栈的区别是什么?



是进程和线程共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是用完了要还给操作系统,要不然就是内存泄漏。



是每个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是线程安全的。操作系统在切换线程的时候会自动切换栈。栈空间不需要在高级语言里面显式的分配和释放。



进程占有的资源:地址空间,全局变量,打开的文件,子进程,信号量,账户信息

线程占有的资源:栈,寄存器,状态,程序计数器



进程是操作系统进行资源分配和调度的一个独立单位,不会共享资源,通过进程间通信共享资源,而线程可以共享部分资源,独自占有的资源不共享。



线程共享的数据包括:

  1. 进程代码段

  2. 进程的公有数据

Share

Blog-Raft探索历程-Part1



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

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



发布于: 2020 年 08 月 24 日阅读数: 42
用户头像

公众号【老胡爱分享】 2018.03.13 加入

一个热爱分享,热爱分享的普通人。 追求终身成长,希望用文字的力量服务大众。

评论

发布
暂无评论
ARTS挑战打卡第六周(200615-200621)