首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

程序查看全文
Java程序的编译和运行.png
程序有多个层次的概念,比如开发人员依据编程语言的语法实现的可以执行特定的功能的代码叫程序,代码通过编译之后运行物理设备上的进程也叫程序。

软件就是运行在一定硬件之上的程序,它可以完成预先设计好的指令。比如我们常用的微信、淘宝、视频播放器、浏览器都是软件,这些软件一般执行在我们熟悉的手机、电脑等硬件之上,除了这些常见的硬件平台之外,还有一些其他平台也可以运行软件,例如现在的摄像头、游戏机等。 程序在生命周期的不同阶段有不同的表现形式。在软件工作人员开发完成之后,一般而言,程序是可以阅读的符合一定语法规范的文本,这时候的程序是静态的,但是当程序在一定硬件上启动之后,程序根据外部输入或者自动执行特定的功能,此时的程序是动态的。 静态的程序一般采用C、C++、PHP、Python、Golang等语言编写。其中有一些语言是静态语言,静态语言是指其程序有固定的内存布局,通过编译和链接程序的地址空间都是明确的。动态语言是程序在运行的时候才能决定程序的内存布局。 因为静态语言的特性,静态语言在编写的时候,所有的变量需要有明确的类型,而且除了强制转换之外,类型不能发生变化,而动态语言可以在程序运行的时候才给变量赋值,所以动态语言不需要提前制定类型。 解释执行 解释执行需要解释器程序来运行程序,解释器执行程序分为下列过程: 词法分析:扫描器(Scanner)将源代码分割成一系列的记号(Token),词法分析的工具有lex。 语法分析:语法分析器将记号(Token)生成语法树(Syntax Tree),yacc是常用的语法分析工具。 语义分析:分析语法树的语义,进行类型的匹配、转换、标识等。

解释执行:解释型语言一般都有虚拟机来执行特定格式的字节码…
Raft查看全文
简化的共识算法Raft.jpg
CAP模型指出分布式系统不能同时满足分区容忍性,可用性,一致性这三个特性,而最多只能满足其中的两个特性。

一致性是指分布式系统在跨节点场景下数据达成一致性的过程,一致性可以分为线性一致性,顺序一致性等 Raft是一种一致性算法,也称为共识算法。但相比于Paxos而言,Raft的工程实现更加简单,容易理解。 Paxos是无主的共识算法,无主算法对容灾的处理更加复杂,而且因为每个节点都可以发起请求,所以需要复杂的机制从并发的请求中选择一个作为选中的值写入集群。 Raft的角色除了Paxos中的Candidate和Follow之外,还有Leader角色。 在运行过程中,Raft只允许Leader节点提交数据,所以Raft第一个步骤是Leader的选举。在Leader宕机的时候会重新进行Leader选举。 有了Leader之后,Leader会提交数据,进行日志同步。 除了Leader之外,集群中其他成员的变更也需要处理。 Raft将共识算法分为几个环节,Leader的选举,日志同步,日志压缩,成员变更等。 Leader选举 raft算法把时间轴分为不同的任期(term),每个Term拥有唯一的ID,termId,该ID全局唯一单调递增。如果选举成功,则进入维持任务term阶段,此时leader负责接收客户端请求并负责复制日志,同时Leader和所有的follower都保持通信,如果follower发现通信超时,TermId递增并发起新的选举。如果选举成功,则进入新的任期。如果选举失败,termId递增,然后重新发起选举直到成功。

Leader在任期内会向其他follower节点发送心跳来维持地位,follower如果发现心跳超时…
二叉树遍历查看全文
二叉树的遍历,从和根节点的关系来看,可以分为前序遍历,中序遍历,后序遍历三种方式,这三种遍历形式在部分场景也被称之为先根遍历,中根遍历,后根遍历。从遍历的方式来看,可以分为广度优先遍历和深度优先遍历。

先序遍历 前序遍历二叉树是先遍历根节点,然后遍历左子树,最后遍历右子树。可以想象是绕着二叉树外围转一圈的路径。 非递归算法: 中序遍历 中序遍历是把先遍历左子树,然后遍历根节点,最后遍历右子树,所以中序遍历是从左到右遍历的,二叉树在平面上的投影就是中序遍历的结果。 非递归算法: 后序遍历 后序遍历是先遍历左子树,然后遍历右子树,最后遍历根节点,可以认为是和摘葡萄的过程类似,先从左到右把下面的葡萄摘了,然后再摘上面的葡萄。 递归算法:

非递归算法:

热门分类

算法题库

精选内容