精华内容
下载资源
问答
  • (一)导向性原则 1、基本概念 导向性原则是指进行德育时要有一定的理想性和方向性,以指导学生向正确的方向发展。 2、贯彻要求 (1)要有坚定正确的政治方向。 (2)德育目标必须符合新时期的方针政策和总任务的...

    中学教师资格证《教育知识与能力》——中学德育原则

    德育原则是根据教育目的、德育目标和德育过程规律提出的指导德育工作的基本要求。

    (一)导向性原则

    1、基本概念
    导向性原则是指进行德育时要有一定的理想性和方向性,以指导学生向正确的方向发展。
    2、贯彻要求
    (1)要有坚定正确的政治方向。
    (2)德育目标必须符合新时期的方针政策和总任务的要求。
    (3)要把德育的理想性和现实性结合起来。

    (二)疏导原则

    1、基本概念
    疏导原则是指进行德育要循循善诱,以理服人,从提高学生认识入手,调动学生的主动性,使他们积极向上。
    常考名言——“夫子循循然善诱人,博我以文,约我以礼,欲罢不能。”
    2、贯彻要求
    (1)讲明道理,疏导思想。
    (2)因势利导,循循善诱。
    (3)以表扬激励为主,坚持正面教育。

    (三)严格要求与尊重学生相结合原则

    1、基本概念
    严格要求与尊重学生相结合原则是指进行德育要把对学生个人的尊重和信赖与对他们的思想和行为的严格要求结合起来,使教育者对学生的影响与要求易于转化为学生的品德。
    常考名言——“要尽量多地要求一个人,也要尽可能地尊重一个人。”
    2、贯彻要求
    (1)爱护、尊重和信赖学生。
    (2)教育者对学生提出的要求要做到合理正确、明确具体和严宽适度。
    (3)教育者对学生提出的要求要认真执行,坚定不移地贯彻到底,督促学生切实做到。

    (四)教育影响一致性与连贯性原则

    1、基本概念
    教育影响一致性与连贯性原则是指进行德育应当有目的、有计划地把来自各方面对学生的教育影响加以组织、调节,使其相互配合,协调一致,前后连贯地进行,以保障学生的品德能按教育目的的要求发展。
    2、贯彻要求
    (1)充分发挥教师集体的作用,统一学校内部各方面的教育力量。
    (2)要统一学校、家庭和社会各方面的教育影响,争取家长和社会的配合,逐步形成以学校为中心的“三位一体”德育网络。
    (3)处理好衔接工作,保持德育工作的经常性、制度化、连续性、系统性。

    (五)因材施教原则

    1、基本概念
    因材施教原则是指进行德育要从学生的思想认识和品德发展的实际出发,根据他们的年龄特征和个性差异进行不同的教育,使每个学生的品德都能得到最好的发展。
    常考名言——“一把钥匙开一把锁。”、孔子的“视其所以,观其所由,察其所安。”
    2、贯彻要求
    (1)深入了解学生的个性特点和内心世界。
    (2)根据学生个人特点有的放矢地进行教育,努力做到“一把钥匙开一把锁”。
    (3)根据学生的年龄特征有计划地进行教育。

    (六)知行统一原则(理论与实践相结合原则)

    1、基本概念
    知行统一原则是指进行德育既要重视思想道德的理论教育,又要重视组织学生参加实践锻炼,把提高认知和行为养成结合起来,使学生做到言行一致、表里如一。
    常考名言——“纸上得来终觉浅,绝知此事要躬行。”、孔子的“力行而近乎仁”(意思是无论何事都竭尽所能去做的人,离仁者也就不远了)
    2、贯彻要求
    (1)加强思想道德的理论教育,提高学生的思想道德认识。
    (2)组织和引导学生参加各种社会实践活动,促使他们在接触社会的实践活动中加深情感体验,养成良好的行为习惯。
    (3)对学生的评价和要求要坚持知行统一的原则。
    (4)教育者要以身作则,严于律己。

    (七)依靠积极因素与克服消极因素相结合原则(长善救失原则)

    1、基本概念
    依靠积极因素与克服消极因素相结合原则(长善救失原则)是指在德育工作中,教育者要善于依靠、发扬学生自身的积极因素,调动学生自我教育的积极性,克服消极因素。
    常考名言——“教者也,长善而救其失者也。”、““一分为二”地看待学生。”
    2、贯彻要求
    (1)用“一分为二”的观点,全面分析,客观地评价学生的优点和不足。
    (2)有意识地创造条件,因势利导、扬长避短,将学生思想中的消极因素转化为积极因素。
    (3)提高学生自我认识、自我评价的能力,启发他们自觉地开展思想斗争,克服缺点,发扬优点。

    (八)正面教育与纪律约束相结合的原则

    1、基本概念
    正面教育与纪律约束相结合的原则是指德育工作既要正面引导、说服教育、启发自觉,调动学生接受教育的内在动力,又要辅之以必要的纪律约束,并使两者有机结合起来。
    2、贯彻要求
    (1)坚持正面教育原则。
    (2)坚持摆事实、讲道理,以理服人。
    (3)建立健全学校规章制度和集体组织的公约、守则等,并且严格管理,认真执行。

    (九)集体教育与个别教育相结合原则

    1、基本概念
    集体教育与个别教育相结合原则是指在德育过程中,教育者要善于组织和教育学生集体,并依靠集体教育每个学生;同时又通过个别学生的教育来促进集体的形成和发展,把集体教育和个别教育有机地结合起来。——“平行教育原则”
    2、贯彻要求
    (1)建立健全的学生集体。
    (2)开展丰富多彩的集体活动,充分发挥集体的教育作用。
    (3)加强个别教育,将集体教育和个别教育辩证统一起来。

    展开全文
  • Raft一致性算法分析与总结

    千次阅读 2016-09-18 23:25:40
    为了强调可理解性,Raft将一致性算法分解为几个关键流程(模块),例如选主,安全性,日志复制,通过将分布式一致性这个复杂的问题转化为一系列的小问题进而各个击破的方式来解决问题。同时它通过实施一个更强的一

    Raft简介

    Raft是一个用于日志复制,同步的一致性算法。它提供了和Paxos一样的功能和性能,但是它的算法结构与Paxos不同。这使得Raft相比Paxos更好理解,并且更容易构建实际的系统。为了强调可理解性,Raft将一致性算法分解为几个关键流程(模块),例如选主,安全性,日志复制,通过将分布式一致性这个复杂的问题转化为一系列的小问题进而各个击破的方式来解决问题。同时它通过实施一个更强的一致性来减少一些不必要的状态,进一步降低了复杂性。Raft还包括了一个新机制,允许线上进行动态的集群扩容,利用有交集的大多数机制来保证安全性。

    ####一些背景知识

    #####A. 一致性算法简单回顾

    一致性算法允许一个集群像一个整体一样工作,即使其中一些机器出现故障也不会影响正常服务。正因为如此,一致性算法在构建可信赖的大型分布式系统中都扮演着重要的角色。Paxos算法在过去10年中统治着这一领域:绝大多数实现都是基于Paxos,同时在教学领域讲解一致性问题时Paxos也经常拿来作为范例。但是不幸的是,尽管有很多工作都在试图降低它的复杂性,但是Paxos仍然难以理解。并且,Paxos自身算法的结构不能直接用于实际系统中,想要使用必须要进行大幅度改变,这些都导致无论在工业界还是教育界,Paxos都让人很DT。

    时势造英雄,在这样的背景下Raft应运而生。Raft算法使用了一些特别的技巧使得它易于理解,包括算法分解(Raft主要分为选主,日志复制和安全三个大模块),同时在不影响功能的情况下,减少复制状态机的状态,降低复杂性。Raft算法或多或少的和已经存在的一些一致性算法有着相似之处,但是也具有如下特征:

    • 强leader语义:相比其他一致性算法,Raft使用增强形式的leader语义。举个例子,日志只能由leader复制给其它节点。这简化了日志复制需要的管理工作,使得Raft易于理解。
    • leader的选择:Raft使用随机计时器来选择leader,它的实现只是在心跳机制(任何一致性算法中都必须实现)上多做了一点“文章”,不会增加延迟和复杂性。
    • 关系改变:Raft使用了一个新机制joint consensus允许集群动态在线扩容,保障Raft的可持续服务能力。

    Raft算法已经被证明是安全正确的,同时也有实验支撑Raft的效率不比其他一致性算法差。最关键是Raft算法要易于理解,在实际系统应用中易于实现的特点使得它成为了解决分布式系统一致性问题上新的“宠儿”。

    #####B. 复制状态机

    一致性算法是从复制状态机中提出的。简单地讲,复制状态机就是通过彼此之间的通信来将一个集群从一个一致性状态转向下一个一致性状态,它要能容忍很多错误情形。经典如GFS,HDFS都是使用了单独的复制状态机负责选主,存储一些能够在leader crash情况下进行恢复的配置信息等,比如Chubby和ZooKeeper。

    复制状态机的典型实现是基于复制日志,如下图所示:

    每个server上存储了一个包含一系列指令的日志,这些指令,状态机要按序执行。每一个日志在相同的位置存放相同的指令(可以理解成一个log包含一堆entry,这些entry组成一个数组,每个entry是一个command,数组相同偏移处的command相同),所以每一个状态机都执行了相同序列的指令。一致性算法就是基于这样一个简单的前提:集群中所有机器当前处于一个一致性状态,如果它们从该状态出发执行相同序列的指令走状态机的话,那么它们的下一个状态一定一致。但由于分布式系统中存在三态(成功,失败,无响应),如何来确保每台机器上的日志一致就非常复杂,也是一致性算法需要解决的问题。通常来讲,一致性算法需要具有以下特征:

    • 安全性:在非拜占庭故障下,包括网络分区,延迟,丢包,乱序等等情况下都保证正确。
    • 绝对可用:只要集群中大多数机器正常,集群就能错误容忍,进行正常服务。
    • 不依赖时序保证一致性:由于使用逻辑时钟,所以物理时钟错误或者极端的消息延迟都不影响可用性。
    • 通常情况下,一个指令可以在一轮RPC周期内由大多数节点完成,宕机或者运行速度慢的少数派不影响系统整体性能。

    ####Raft算法

    前面对Raft算法进行了简要的介绍,这里开始对它进行深入分析。Raft实现一致性的机制是这样的:首先选择一个leader全权负责管理日志复制,leader从客户端接收log entries,将它们复制给集群中的其它机器,然后负责告诉其它机器什么时候将日志应用于它们的状态机。举个例子,leader可以在无需询问其它server的情况下决定把新entries放在哪个位置,数据永远是从leader流向其它机器。一个leader可以fail或者与其他机器失去连接,这种情形下会有新的leader被选举出来。

    通过leader机制,Raft将一致性难题分解为三个相对独立的子问题:

    • Leader选举:当前leader跪了的情况下,新leader被选举出来。
    • 日志复制:leader必须能够从客户端接收log entries,然后将它们复制给其他机器,强制它们与自己一致。
    • 安全性:如果任何节点将偏移x的log entry应用于自己的状态机,那么其他节点改变状态机时使用的偏移x的指令必须与之相同。

    #####A. Raft基本知识

    一个Raft集群包含单数个server,5个是一个典型配置,允许该系统最多容忍两个机器fail。在任何时刻,每个server有三种状态:leader,follower,candidate。正常运行时,只有一个leader,其余全是follower。follower是被动的:它们不主动提出请求,只是响应leader和candidate的请求。leader负责处理所有客户端请求(如果客户端先连接某个follower,该follower要负责把它重定向到leader)。第三种状态candidate用于选主。下图展示了这些状态以及它们之间的转化:

    Raft将时间分解成任意长度的terms,如下图所示:

    terms有连续单调递增的编号,每个term开始于选举,这一阶段每个candidate都试图成为leader。如果一个candidate选举成功,它就在该term剩余周期内履行leader职责。在某种情形下,可能出现选票分散,没有选出leader的情况,这时新的term立即开始。Raft确保在任何term都只可能存在一个leader。term在Raft用作逻辑时钟,servers可以利用term判断一些过时的信息:比如过时的leader。每台server都存储当前term号,它随时间单调递增。term号可以在任何server通信时改变:如果某台server的当前term号小于其它servers,那么这台server必须更新它的term号,与它人保持一致;如果一个candidate或者leader发现自己的term过期,它就必须要“放下身段”变成follower;如果某台server收到一个过时的请求(拥有过时的term号),它会拒绝该请求。Raft servers使用RPC交互,基本的一致性算法只需要两种RPC。RequestVote RPCs由candidate在选举阶段发起。AppendEntries RPCs在leader复制数据时发起,leader在和其他人做心跳时也用该RPC。servers发起一个RPC,如果在没得到响应,则需要不断重试。另外,发起RPC是并行的。

    #####B. leader选举

    Raft使用心跳机制来触发选举。当server启动时,初始状态都是follower。每一个server都有一个定时器,超时时间为election timeout,如果某server没有超时的情况下收到来自leader或者candidate的任何RPC,定时器重启,如果超时,它就开始一次选举。leader给其他人发RPC要么复制日志,要么就是用来告诉followers老子是leader,你们不用选举的心跳(告诉followers对状态机应用日志的消息夹杂在心跳中)。如果某个candidate获得了大多数人的选票,它就赢得了选举成为新leader。每个server在某个term周期内只能给最多一个人投票,按照先来先给的原则。新leader要给其他人发送心跳,阻止新选举。

    在等待选票过程中,一个candidate,假设为A,可能收到它人的声称自己是leader的AppendEntries RPC,如果那家伙的term号大于等于A的,那么A承认他是leader,自己重新变成follower。如果那家伙比自己小,那么A拒绝该RPC,继续保持candidate状态。

    还有第三种可能性就是candidate既没选举成功也没选举失败:如果多个followers同时成为candidate去拉选票,导致选票分散,任何candidate都没拿到大多数选票,这种情况下Raft使用超时机制来解决。Raft给每一个server都分配一个随机长度的election timeout(一般是150——300ms),所以同时出现多个candidate的可能性不大,即使机缘巧合同时出现了多个candidate导致选票分散,那么它们就等待自己的election timeout超时,重新开始一次新选举(再一再二不能再三再四,不可能每次都同时出现多个candidate),实验也证明这个机制在选举过程中收敛速度很快。

    #####C. 日志复制

    一旦选举出了一个leader,它就开始负责服务客户端的请求。每个客户端的请求都包含一个要被复制状态机执行的指令。leader首先要把这个指令追加到log中形成一个新的entry,然后通过AppendEntries RPCs并行的把该entry发给其他servers,其他server如果发现没问题,复制成功后会给leader一个表示成功的ACK,leader收到大多数ACK后应用该日志,返回客户端执行结果。如果followers crash或者丢包,leader会不断重试AppendEntries RPC。Logs按照下图组织:

    每个log entry都存储着一条用于状态机的指令,同时保存从leader收到该entry时的term号。该term号可以用来判断一些log之间的不一致状态。每一个entry还有一个index指明自己在log中的位置。

    leader需要决定什么时候将日志应用给状态机是安全的,被应用的entry叫committed。Raft保证committed entries持久化,并且最终被其他状态机应用。一个log entry一旦复制给了大多数节点就成为committed。同时要注意一种情况,如果当前待提交entry之前有未提交的entry,即使是以前过时的leader创建的,只要满足已存储在大多数节点上就一次性按顺序都提交。leader要追踪最新的committed的index,并在每次AppendEntries RPCs(包括心跳)都要捎带,以使其他server知道一个log entry是已提交的,从而在它们本地的状态机上也应用。

    Raft的日志机制提供两个保证,统称为Log Matching Property:

    • 不同机器的日志中如果有两个entry有相同的偏移和term号,那么它们存储相同的指令。
    • 如果不同机器上的日志中有两个相同偏移和term号的日志,那么日志中这个entry之前的所有entry保持一致。

    第一个保证是由于一个leader在指定的偏移和指定的term,只能创建一个entry,log entries不能改变位置。第二个保证通过AppendEntries RPC的一个简单的一致性检查机制完成。当发起一个AppendEntries RPC,leader会包含正好排在新entries之前的那个entry的偏移和term号,如果follower发现在相同偏移处没有相同term号的一个entry,那么它拒绝接受新的entries。这个一致性检查以一种类似归纳法的方式进行:初始状态大家都没有日志,不需要进行Log Matching Property检查,但是无论何时followers只要日志要追加都要进行此项检查。因此,只要AppendEntries返回成功,leader就知道这个follower的日志一定和自己的完全一样。

    在正常情形下,leader和follower的日志肯定是一致的,所以AppendEntries一致性检查从不失败。然而,如果leader crash,那么它们的日志很可能出现不一致。这种不一致会随着leader或者followers的crash变得非常复杂。下图展示了所有日志不一致的情形:

    如上图(a)(b)followers可能丢失日志,(c)(d)有多余的日志,或者是(e)(f)跨越多个terms的又丢失又多余。在Raft里,leader强制followers和自己的日志严格一致,这意味着followers的日志很可能被leader的新推送日志所覆盖。

    leader为了强制它人与自己一致,势必要先找出自己和follower之间存在分歧的点,也就是我的日志与你们的从哪里开始不同。然后令followers删掉那个分歧点之后的日志,再将自己在那个点之后的日志同步给followers。这个实现也是通过AppendEntries RPCs的一致性检查来做的。leader会把发给每一个follower的新日志的偏移nextIndex也告诉followers。当新leader刚开始服务时,它把所有follower的nextIndex都初始化为它最新的log entry的偏移+1(如上图中的11)。如果一个follower的日志和leader的不一致,AppendEntries RPC会失败,leader就减小nextIndex然后重试,直到找到分歧点,剩下的就好办了,移除冲突日志entries,同步自己的。当然这里有很大的优化余地,完全不需要一步一步回溯,怎么玩请自己看论文 1,很简单。

    #####D. 安全性

    前文讲解了Raft如何选主和如何进行日志复制,然而这些还不足以保证不同节点能执行严格一致的指令序列,需要额外的一些安全机制。比如,一个follower可能在当前leader commit日志时不可用,然而过会它又被选举成了新leader,这样这个新leader可能会用新的entries覆盖掉刚才那些已经committed的entries。结果不同的复制状态机可能会执行不同的指令序列,产生不一致的状况。这里Raft增加了一个可以确保新leader一定包含任何之前commited entries的选举机制。

    (1) 选举限制

    Raft使用了一个投票规则来阻止一个不包含所有commited entries的candidate选举成功。一个candidate为了选举成功必须联系大多数节点,假设它们的集合叫A,而一个entry如果能commit必然存储在大多数节点,这意味着对于每一个已经committed的entry,A集合中必然有一个节点持有它。如果这个candidate的Log不比A中任何一个节点旧才有机会被选举为leader,所以这个candidate如果要成为leader一定已经持有了所有commited entries(注意我说的持有指只是储存,不一定被应用到了复制状态机中。比如一个老的leader将一个entry发往大多数节点,它们都成功接收,老leader随即就commit这个entry,然后挂掉,此时这个entry叫commited entry,但是它不一定应用在了集群中所有的复制状态机上)。这个实现在RequestVote RPC中:该RPC包含了candidate log的信息,选民如果发现被选举人的log没有自己新,就拒绝投票。Raft通过比较最近的日志的偏移和term号来决定谁的日志更新。如果两者最近的日志term号不同,那么越大的越新,如果term号一样,越长的日志(拥有更多entries)越新。

    (2) 提交早期terms的entries

    正如前面所述的那样,一个leader如果知道一个当前term的entry如果储在大多数节点,就认为它可以commit。但是,一个leader不能也认为一个早于当前term的entry如果存在大多数节点,那么也是可以commit的。下图展示了这样一种状况,一个老的log存储在大多数节点上,但是仍有可能被新leader覆盖掉:

    要消除上图中的问题,Raft采取针对老term的日志entries绝不能仅仅通过它在集群中副本的数量满足大多数,就认为是可以commit的。完整的commit语义也演变成:一个日志entry如果能够被认为是可以提交的,必须同时满足两个条件:

    • 这个entry存储在大多数节点上
    • 当前term至少有一个entry存储在大多数节点。

    以上图为例,这两个条件确保一旦当前leader将term4的entry复制给大多数节点,那么S5不可能被选举为新leader了(日志term号过时)。综合考虑,通过上述的选举和commit机制,leaders永远不会覆盖已提交entries,并且leader的日志永远绝对是”the truth”。

    (3) 调解过期leader

    在Raft中有可能同一时刻不只一个server是leader。一个leader突然与集群中其他servers失去连接,导致新leader被选出,这时刚才的老leader又恢复连接,此时集群中就有了两个leader。这个老leader很可能继续为客户端服务,试图去复制entries给集群中的其它servers。但是Raft的term机制粉碎了这个老leader试图造成任何不一致的行为。每一个RPC servers都要交换它们的当前term号,新leader一旦被选举出来,肯定有一个大多数群体包含了最新的term号,老leader的RPC都必须要联系一个大多数群体,它必然会发现自己的term号过期,从而主动让贤,退变为follower状态。

    然而有可能是老leader commit一个entry后失去连接,这时新leader必然有那个commit的entry,只是新leader可能还没commit它,这时新leader会在初次服务客户端前先把这个entry再commit一次,followers如果已经commit过直接返回成功,没commit就commit后返回成功而已,不会造成不一致。

    #####E. Follower 或者candidate crash

    Followers和candidate的crash比起leader来说处理要简单很多,它们的处理流程是相同的,如果某个follower或者candidate crash了,那么未来发往它的RequestVote和AppendEntries RPCs 都会失败,Raft采取的策略就是不停的重发,如果crash的机器恢复就会执行成功。另外,如果server crash是在完成一个RPC但在回复之前,那么在它恢复之后仍然会收到相同的RPC(让它重试一次),Raft的所有RPC都是幂等操作,如果follower已经有了某个entry,但是leader又让它复制,follower直接忽略即可。

    #####F. 时间与可用性

    Raft集群的可用性需要满足一个时间关系,即下面的公式:

    broadcastTime代表平均的广播延迟(从并行发起RPC开始,直到收到大多数的回复为止)。electionTimeout就是前文所述的超时时间间隔,MTBF代表一个机器两次宕机时间间隔的平均值。broadcastTime必须远远小于electionTimeout,否则会频繁触发无意义的选举重启。electionTimeout远远小于MTBF就很好理解了。

    ####集群扩容

    迄今为止的讨论都是假设集群配置不变的情况下(参与一致性算法的机器数目不变),但是实际中集群扩容(广义概念,泛指集群容量变化,可增可减)有时是必须的。比如业务所需,集群需要扩容,或者某机器永久损坏,需要从集群中剔除等等。

    扩容最大的挑战就是保证一致性很困难,因为扩容不是原子的,有可能集群中一部分机器用老配置信息,另一部分用新配置信息,如上图所示,因此究竟多少算大多数在集群中可能存在分歧。扩容一般都分为两个阶段,有很多实现方法,比较典型的就是第一阶段,使所有旧配置信息失效,这段时间不对外提供服务;第二阶段允许新配置信息,重新对外服务。在Raft中集群第一阶段首先使集群转向一个被称作联合一致性(joint consensus)的状态;一旦这个联合一致性(有一个特殊的Cold,new entry表征)被提交,这个系统就开始向新配置迁移。joint consensus既包含老配置信息,又包含新配置信息,它的规则(Cold,new规则)如下:

    • log entries复制给集群中所有机器,不管配置信息新旧
    • 任何配置的server都有权利当leader
    • 达成一致所需要的大多数(不管是选举还是entry提交),既要包括老配置中的一个大多数也要包括新配置机器中的一个大多数。

    joint consensus允许集群配置平滑过渡而不失去安全和一致性,同时集群可正常对外服务。集群配置信息以一个特殊的entry表征,存储在log中并和其他entry语义一样。当一个leader收到扩容请求,它就创建一个Cold,new的entry,并复制给集群其它其它机器,一旦有某个follower收到此entry并追加到自己的日志中,它就使用Cold,new规则(不需要committed)。leader按照Cold,new 规则对Cold,new进行commit。如果一个leader crash了,新leader既可能是没收到Cold,new的又可能是收到的,但是这两种情况都不会出现leader用Cnew规则做决策。

    一旦Cold,new被提交,就开始向新配置转换。Raft保证只有拥有Cold,new的节点才会被选举为leader。现在leader可以很安全地创建一个叫Cnew的entry,然后复制给集群中属于新配置的节点。配置信息还是节点一收到就可以用来做决策。Cnew的commit使用Cnew 规则,旧配置已经与集群无关,新配置中不存在的机器可以着手关闭,Raft通过保证不让Cold和Cnew的节点有机会同时做决策来保障安全性。配置改变示意图如下:

    有三个要注意的点:

    (1) 新server加入进集群时也许没有存储任何log entries,它们需要很长时间来追上原有机器的“进度”,为了防止集群性能出现巨大的抖动,Raft在配置改变前又引入了一个特殊的阶段,当新机器加入集群时,它们作为无投票权的节点,即leader还是会将log entries复制给它们,但是不会被当做大多数对待。一旦这些“新人”追上了其他机器的进度,动态扩容可以像上述一样执行。

    (2) 当前leader也许不是集群新配置中的一份子,在这种情况下,一旦Cnew被提交,这个leader就主动退出。这意味着当Cnew提交过程中这个leader要管理一个不包括它自己的集群。这时,它在给其他节点复制log entries时不把自己计入大多数。当Cnew提交成功,这个leader的使命就光荣完成了,在这个时间点前,只有Cold的节点才会被选举为leader。

    (3) 第三个问题是被移除的机器可能会影响集群服务。这些机器不会再接收到心跳信息,它们因此可能重启选举,结果是它们用一个更新的term号发起RequestVote RPCs,当前leader无奈的退化为follower。新leader(拥有新配置的)还是会被选举出来,但是那些被移除的机器还是继续超时,开启选举,导致系统可用性降低。为解决这一问题,需要有一个机制让集群中节点能够忽略这种RequestVote RPCs,相信当前leader正在正常工作。Raft使用最小超时延迟(前面说过,Raft会随机为每个节点指定一个随机的election timeout,典型的是150ms到300ms,最小超时延迟就是它们之间的最小值)来保证,如果一个节点在最小超时延迟前收到一个RequestVote RPCs,那么该节点不会提升term号,也不会为其投票。这个不会影响正常的选举,因为正常选举中都是至少等待一个最小超时延迟才开始下一次选举的。

    ####Raft新集群扩容方案

    为了降低集群扩容的复杂性,Raft还有一个可以备选的方案。它增强了扩容的限制:一次只允许一台机器加入或移除集群。复杂的扩容可以通过一系列的单机增加或删除变向实现。

    当从集群中添加或删除一台机器时,任何旧配置集群中的大多数和任何新配置集群中的大多数必然存在一个交集,如下图所示。

    注意就是这个交集让集群不可能存在两个互相独立,没有交集的大多数群体。因此系统中不会同时存在两个leader(一个由旧配置集群选举出来,一个由新配置集群选举出来),因此扩容是安全的,集群可以直接从旧配置转向新配置。

    当leader收到添加或删除一台机器的请求,它将该Cnew添加到自己的log中,然后使用一样的复制机制,把这个entry复制给属于新配置集群的所有节点。只要节点把Cnew添加进log,就马上使用新配置信息,无需等到该entry提交。leader使用Cnew规则对Cnew进行提交,一旦提交完成,扩容就宣告完成,leader就知道任何没有Cnew的节点都不可能形成一个大多数,这样的节点也不可能成为集群的leader。Cnew的提交暗示了以下三件事情:

    1. leader获知扩容成功完成
    2. 如果新配置移除一台机器,那么这台机器可以着手关闭
    3. 新的扩容可以开始

    正如上面所讲的那样,servers永远使用log中最新的配置,不管这个配置entry是否被提交。这样leader知道一

    展开全文
  • 从小,父母就教育我们,做事情要有始有终,不能半途而废。 事务也是这样,不能做一半就不做了,要么做完,要么就不做。也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的...

    Transaction 也就是所谓的事务了,通俗理解就是一件事情。从小,父母就教育我们,做事情要有始有终,不能半途而废。 事务也是这样,不能做一半就不做了,要么做完,要么就不做。也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。于是,人们就归纳出事务的第一个特性:原子性(Atomicity)。我靠,一点都不神秘嘛。

    特别是在数据库领域,事务是一个非常重要的概念,除了原子性以外,它还有一个极其重要的特性,那就是:一致性(Consistency)。也就是说,执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而 B 账户没有加钱吧。如果出现了这类事情,您一定会非常气愤,什么 diao 银行啊!

    当我们编写了一条 update 语句,提交到数据库的一刹那间,有可能别人也提交了一条 delete 语句到数据库中。也许我们都是对同一条记录进行操作,可以想象,如果不稍加控制,就会出大麻烦来。我们必须保证数据库操作之间是“隔离”的(线程之间有时也要做到隔离),彼此之间没有任何干扰。这就是:隔离性(Isolation)。要想真正的做到操作之间完全没有任何干扰是很难的,于是乎,每天上班打酱油的数据库专家们,开始动脑筋了,“我们要制定一个规范,让各个数据库厂商都支持我们的规范!”,这个规范就是:务隔离级别(Transaction Isolation Level)能定义出这样牛逼的规范真的挺不容易的,其实说白了就四个级别:

    1. READ_UNCOMMITTED
    2. READ_COMMITTED
    3. REPEATABLE_READ
    4. SERIALIZABLE

    千万不要去翻译,那只是一个代号而已。从上往下,级别越来越高,并发性越来越差,安全性越来越高,反之则反。

    当我们执行一条 insert 语句后,数据库必须要保证有一条数据永久地存放在磁盘中,这个也算事务的一条特性, 它就是:持久性(Durability)

    归纳一下,以上一共提到了事务的 4 条特性,把它们的英文单词首字母合起来就是:ACID,这个就是传说中的“事务 ACID 特性”!

    真的是非常牛逼的特性啊!这 4 条特性,是事务管理的基石,一定要透彻理解。此外还要明确,这四个家伙当中,谁才是老大?

    其实想想也就清楚了:原子性是基础,隔离性是手段,持久性是目的,真正的老大就是一致性。数据不一致了,就相当于“江湖乱套了”。所以说,这三个小弟都是跟着“一致性”这个老大混,为他全心全意服务。

    这四个家伙当中,其实最难理解的反倒不是一致性,而是隔离性。因为它是保证一致性的重要手段,是工具,使用它不能有半点差池,否则后果自负!怪不得数据库行业专家们都要来研究所谓的事务隔离级别了。其实,定义这四个级别就是为了解决数据在高并发下所产生的问题,那又有哪些问题呢?

    三类数据读问题

    1. Dirty Read(脏读)
    2. Unrepeatable Read(不可重复读)
    3. Phantom Read(幻读)

    两类数据更新问题

    1. 第一类丢失更新
    2. 第二类丢失更新

    首先看看“脏读”,看到“脏”这个字,我就想到了恶心、肮脏。数据怎么可能脏呢?其实也就是我们经常说的“垃圾数据”了。比如说,有两个事务,它们在并发执行(也就是竞争)。看看以下这个表格,您一定会明白我在说什么:



    余额应该为 1100 元才对!请看 T6 时间点,事务 A 此时查询余额为 900 元,这个数据就是脏数据,它是事务 A 造成的,明显事务没有进行隔离,渗过来了,乱套了。

    所以脏读这件事情是非常要不得的,一定要解决掉!让事务之间隔离起来才是硬道理。


    不可重复读又怎么解释呢?还是用类似的例子来说明:



    事务 A 其实除了查询了两次以外,其他什么事情都没有做,结果钱就从 1000 变成 0 了,这就是重复读了。可想而知,这是别人干的,不是我干的。其实这样也是合理的,毕竟事务 B 提交了事务,数据库将结果进行了持久化,所以事务 A 再次读取自然就发生了变化。

    这种现象基本上是可以理解的,但在有些变态的场景下却是不允许的。毕竟这种现象也是事务之间没有隔离所造成的,但我们对于这种问题,似乎可以忽略。


    幻读。我去!Phantom 这个单词不就是“幽灵、鬼魂”吗?刚看到这个单词时,真的把我的小伙伴们都给惊呆了。怪不得这里要翻译成“幻读”了,总不能翻译成“幽灵读”、“鬼魂读”吧。其实意义就是鬼在读,不是人在读,或者说搞不清楚为什么,它就变了,很晕,真的很晕。还是用一个示例来说话吧:



    银行工作人员,每次统计总存款,都看到不一样的结果。不过这也确实也挺正常的,总存款增多了,肯定是这个时候有人在存钱。但是如果银行系统真的这样设计,那算是玩完了。这同样也是事务没有隔离所造成的,但对于大多数应用系统而言,这似乎也是正常的,可以理解,也是允许的。银行里那些恶心的那些系统,要求非常严密,统计的时候,甚至会将所有的其他操作给隔离开,这种隔离级别就算非常高了(估计要到 SERIALIZABLE 级别了)。


    第一类丢失更新,A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错误可能造成很严重的问题,通过下面的账户取款转账就可以看出来:


    但是,在当前的四种任意隔离级别中,都不会发生该情况,不然绝对乱套,我都没提交事务只是撤销,就把别人的给覆盖了,这也太恐怖了。


    第二类丢失更新,B事务覆盖A事务已经提交的数据,造成A事务所做操作丢失



    归纳一下,以上提到了事务并发所引起的跟读取数据有关的问题,各用一句话来描述一下:

    1. 脏读:事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。
    2. 不可重复读:事务 A 读取了事务 B 已提交的更改数据。
    3. 幻读:事务 A 读取了事务 B 已提交新增数据。

    第一条是坚决抵制的,后两条在大多数情况下可不作考虑。

    这就是为什么必须要有事务隔离级别这个东西了,它就像一面墙一样,隔离不同的事务。看下面这个表格,您就清楚了不同的事务隔离级别能处理怎样的事务并发问题:



    根据您的实际需求,再参考这张表,最后确定事务隔离级别,应该不再是一件难事了。

    JDBC 也提供了这四类事务隔离级别,但默认事务隔离级别对不同数据库产品而言,却是不一样的。我们熟知的 MySQL 数据库的默认事务隔离级别就是 READ_COMMITTED,Oracle、SQL Server、DB2等都有有自己的默认值。我认为 READ_COMMITTED 已经可以解决绝大多数问题了,其他的就具体情况具体分析吧。

    提示:在 Java.sql.Connection 类中可查看所有的隔离级别。

    我们知道 JDBC 只是连接 Java 程序与数据库的桥梁而已,那么数据库又是怎样隔离事务的呢?其实它就是“锁”这个东西。当插入数据时,就锁定表,这叫“锁表”;当更新数据时,就锁定行,这叫“锁行”。当然这个已经超出了我们今天讨论的范围,所以还是留点空间给我们的 DBA 同学吧,免得他没啥好写的了。

    除了 JDBC 给我们提供的事务隔离级别这种解决方案以外,还有哪些解决方案可以完善事务管理功能呢?

    不妨看看 spring 的解决方案吧,其实它是对 JDBC 的一个补充或扩展。它提供了一个非常重要的功能,就是:事务传播行为(Transaction Propagation Behavior)

    确实够牛逼的,Spring 一下子就提供了 7 种事务传播行为,这 7 种行为一出现,真的是亮瞎了!

    1. PROPAGATION_REQUIRED
    2. RROPAGATION_REQUIRES_NEW
    3. PROPAGATION_NESTED
    4. PROPAGATION_SUPPORTS
    5. PROPAGATION_NOT_SUPPORTED
    6. PROPAGATION_NEVER
    7. PROPAGATION_MANDATORY

    看了 Spring 参考手册之后,更是晕了,这到底是在干嘛?

    首先要明确的是,事务是从哪里来?传播到哪里去?答案是,从方法 A 传播到方法 B。Spring 解决的只是方法之间的事务传播,那情况就多了,比如:

    1. 方法 A 有事务,方法 B 也有事务。
    2. 方法 A 有事务,方法 B 没有事务。
    3. 方法 A 没有事务,方法 B 有事务。
    4. 方法 A 没有事务,方法 B 也没有事务。 

    这样就是 4 种了,还有 3 种特殊情况。还是用我的 Style 给大家做一个分析吧:

    [java] view plain copy
     print?在CODE上查看代码片派生到我的代码片
    1. @Transactional  
    2. void A(){  
    3. }  
    4. @Transactional  
    5. void B(){  
    6.    A();  
    7. }  

    假设事务从方法 A 传播到方法 B,您需要面对方法 B,问自己一个问题:

    方法 A 有事务吗?

    1. 如果没有,就开启一个事务如果有,就加入当前事务(方法A加入到方法B)。这就是 PROPAGATION_REQUIRED,它也是 Spring 提供的默认事务传播行为,适合绝大多数情况。
    2. 如果没有,就开启一个事务如果有,就将当前事务挂起。这就是 RROPAGATION_REQUIRES_NEW,意思就是创建了一个新事务,它和原来的事务没有任何关系了。
    3. 如果没有,就开启一个事务;如果有,在当前事务中嵌套其他事务。这就是 PROPAGATION_NESTED,也就是传说中的“嵌套事务”了,所嵌套的子事务与主事务之间是有关联的(当主事务提交或回滚,子事务也会提交或回滚)。
    4. 如果没有,就以非事务方式执行如果有,就使用当前事务。这就是 PROPAGATION_SUPPORTS,这种方式非常随意,没有就没有,有就有,有点无所谓的态度,反正我是支持你的。
    5. 如果没有,就非事务方式执行如果有,就将当前事务挂起。这就是 PROPAGATION_NOT_SUPPORTED,这种方式非常强硬,没有就没有,有我也不支持你,把你挂起来,不鸟你。
    6. 如果没有,就非事务方式执行;如果有,就抛出异常。这就是 PROPAGATION_NEVER,这种方式更猛,没有就没有,有了反而报错,确实够牛的,它说:我从不支持事务!
    7. 如果没有,就抛出异常;如果有,就使用当前事务。这就是 PROPAGATION_MANDATORY,这种方式可以说是牛逼中的牛逼了,没有事务直接就报错,确实够狠的,它说:我必须要有事务!

    看到我上面这段解释,小伙伴们是否已经感受到,被打通任督二脉的感觉?多读几遍,体会一下,就是您自己的东西了。

    需要注意的是 PROPAGATION_NESTED,不要被它的名字所欺骗,Nested(嵌套),所以凡是在类似方法 A 调用方法 B 的时候,在方法 B 上使用了这种事务传播行为,如果您真的那样做了,那您就错了。因为您错误地以为 PROPAGATION_NESTED 就是为方法嵌套调用而准备的,其实默认的 PROPAGATION_REQUIRED 就可以帮助您,做您想要做的事情了。

    Spring 给我们带来了事务传播行为,这确实是一个非常强大而又实用的功能。除此以外,也提供了一些小的附加功能,比如:

    1. 事务超时(Transaction Timeout)为了解决事务时间太长,消耗太多的资源,所以故意给事务设置一个最大时常,如果超过了,就回滚事务。
    2. 只读事务(Readonly Transaction)为了忽略那些不需要事务的方法,比如读取数据,这样可以有效地提高一些性能。

    最后,推荐大家使用 Spring 的注解式事务配置,而放弃 XML 式事务配置。因为注解实在是太优雅了,当然这一切都取决于您自身的情况了。

    在 Spring 配置文件中使用:

    ?
    [html] view plain copy
     print?在CODE上查看代码片派生到我的代码片
    1. ...  
    2. <tx:annotation-driven/>  
    3. ...  

    在需要事务的方法上使用:

    [html] view plain copy
     print?在CODE上查看代码片派生到我的代码片
    1. @Transactional  
    2. public void xxx() {  
    3.     ...  
    4. }  

    可在 @Transactional 注解中设置:事务隔离级别、事务传播行为、事务超时时间、是否只读事务。

    简直是太完美了,太优雅了!

    最后,有必要对本文的内容做一个总结,免费赠送一张高清无码思维导图:



    展开全文
  • 所以幼儿园应当坚持探究、互动、过程的发展原则,重视科学教育环境的创设,努力为幼儿营造具有科学意义的成长环境。本文将通过对幼儿园科学教育环境创设现状的分析,在总结经验的基础上,提出相应的创设原则和...

    摘 要:幼儿园科学环境创设是培养幼儿科学探索精神的隐性教育,具有趣味性和科学性的日常环境,不仅可以培养幼儿对科学知识的学习兴趣,还能充分激发幼儿创新思维能力的综合发展。所以幼儿园应当坚持探究性、互动性、过程性的发展原则,重视科学教育环境的创设,努力为幼儿营造具有科学意义的成长环境。本文将通过对幼儿园科学教育环境创设现状的分析,在总结经验的基础上,提出相应的创设原则和策略。

    关键词:幼儿园;科学教育;环境创设

    良好的环境教育可以培养幼儿积极向上的精神情绪,幼儿园科学环境教育创设对幼儿的智力发展具有非常重要的价值和意义。不仅可以培养幼儿对科学探索的兴趣和爱好,还能充分开发幼儿的智力,使幼儿的想象力和创造力得以全面发展。所以,幼儿园在创设科学教育环境时,应坚持以幼儿为主体,重视幼儿主体作用的发挥,考虑幼儿的特点发展需求,进而建立适合幼儿智力发展的科学体现形式。

    一、 幼儿园科学教育环境创设的原则

    (一) 探究性原则

    幼儿园科学教育环境创设应当坚持探究性原则,探究是幼儿的本能表现,所以科学教育环境应当以培养幼儿探究能力和科学兴趣为目的,为幼儿建立丰富自由的活动空间,同时幼儿教师在布置环境时,还要为幼儿留下难度适中的探索任务,让幼儿可以充分感受探究的乐趣,教师对幼儿的探究活动尽量做到不干预,让幼儿在开放的空间去探索问题。

    (二) 互动性原则

    互动是科学教育环境创设的重要原则,幼儿园应当尊重幼儿的主体性,要让幼儿在科学教育环境下具有发表意见的权力。因为,科学环境在创设之初就具备较强的教育功能,环境布置是幼师与幼儿之间相互启发的创造过程,幼儿园可以邀请家长共同参与进来,通过多向交流来增强科学教育活动的丰富性与探索性。

    (三) 过程性原则

    科学教育环境是幼儿体验探究的一个过程,由于幼儿思维能力正处于成长发育阶段,其认知特点难以快速获取科学概念,所以,教师应当以过程为主,积极引导幼儿参与到知识形成的过程中来,让科学环境的教育实现拓展探究知识的功能,教师应当以幼儿的视角来考虑教育的结果,并给予幼儿充足探究过程的空间和时间。

    (四) 一致性原则

    幼儿园环境作为课程教学重要的组成内容,在创设的过程中,不仅要充分考虑环境本身的教育性,同时也要发挥环境课程功能。现在,幼儿园尽管非常重视环境的创设,可是从一定意义上看过分注重美观,对于环境本身的教育意义考虑过少。为了提升环境为教育服务的根本性目标,幼儿园需要从以下三个方面切入。首先,创设的环境要有利于实现教育目标,所以在环境创设的过程中,要均衡看待幼儿的综合素质,不能做到顾此失彼。如果教师过分关注与幼儿认知活动,设置一些读写算区域,而忽视了幼儿的社会行为发展以及情感体验等方面的内容,将会不利于幼儿综合素质全面发展。其次,要按照幼儿的教育目标,系统规划幼儿园教育环境。幼儿园每制订一个活動计划,都需要考虑为了实现教育目标,需要有什么样的环境能够与其相配合,只有将这些问题都考虑进去,才能够确保教育计划顺利实现。

    二、 幼儿园科学教育环境创设的途径

    (一) 科普教育环境的创设

    公共环境是幼儿接触最多的环境,所以公共环境是开展科学教育的理想平台,在这里幼儿可以进行广泛的互动交流,教师在这里开展科学教育,可以更好地培养幼儿的探究精神,不同年龄的幼儿之间通过广泛的交往合作开展不同层次的科学探究活动。比如,教师组织幼儿在幼儿园的走廊或者楼梯中一起利用图画、照片、文字等来布置科学教育环境。此外,教师还要为幼儿开辟不同的科学活动体验场,充分利用幼儿园已有的教育资源,建立具有系统性、完整性的活动,比如,将幼儿园的水池作为蝌蚪饲养体验场,在这里可以感受生命的成长和水流的特性,在做好充分安全措施的情况下可以使幼儿获取更好的科学体验。

    (二) 科学实践活动环境的创设

    幼儿园科学教育环境的创设要积极向外发展,探寻稳定的科学实践基地,用以拓展儿童的科学活动空间,使幼儿园的科学教育资源更加丰富,进而有效提升科学活动的教育质量。比如,幼儿园和少年科技馆、农业科普示范园等组建合作单位,作为幼儿实践活动的基地,教师定期带幼儿走出校园开展环保宣传、记录天气等有意义的活动,培养幼儿对科学的热爱之情。同时幼儿园也可以定期邀请幼儿家长来参加科学教育活动,利用地球日或科普宣传周等开展各类科技体验的亲子活动。其次,幼儿园要定期组织科技节展示活动,制定鲜明主题,通过科技节展示科学教育活动成果。比如,“绿色生活”和“一起来实验”等都是非常好的主题活动,在活动比赛中要充分挖掘活动的科学价值,体现出科学实践的自主性和趣味性。

    (三) 科学区角环境的创设

    教师要积极组织幼儿在班级内进行科学区角环境创设,班级作为幼儿最基本的学习场所,可以更好地培养幼儿的科学探究精神,不同班级要制定独具特色的科学区角,并实现科学区角的开放共享。比如,有些班级重视材料科学实验,有些班级重视科学种植实验,各班级教师在组织科学体验活动时,可进行适当的更换,从而使科学教育探究活动更加丰富多元化。幼儿园同时还可以创设独立的科学教育体验室,集中幼儿园科学教育资源,从而为科学探究活动提供技术保障,使幼儿可以更加深入全面地体验科学活动。

    三、 结语

    综上所述,幼儿园科学教育环境创设的原则与策略,通过分析可以看出,科学教育环境是幼儿教育的重要组成部分,对幼儿的成长发展具有重要的价值和意义。因此,幼儿园应当创设科学引导功能环境,为幼儿提供多元化的科学探索空间,使幼儿在丰富自由的科学环境下,可以充分了解科学的知识性与趣味性,形成科学探索精神进而有效激活幼儿思维的创造力和想象力。

    参考文献:

    [1]孙刚成,何晓溪。全面发展教育目的观下的幼儿园游戏环境创设[J].青岛职业技术学院学报,2015(3):55-60.

    [2]梁向红。幼儿园科学活动中支持性环境创设的策略研究[J].学术评论,2016(3):69-70.

    [3]吴慧敏。幼儿园科学教育环境创设与儿童发展[J].华章,2016(26)。​​​​​​​​

    展开全文
  • “陶行知”即知行统一原则,“正面”和“守纪律”即正面教育与纪律约束相结合的原则,“疏”即疏导原则,“导”即导向原则,“一连”即教育影响的一致性与连贯性原则,“积极”即依靠积极因素、克服消极因素的原则,...
  • 关于职业教育

    千次阅读 2012-03-13 13:52:26
    为了完成这本书,黄达人用了半年时间,走访了国内21所著名高校,对24位校长和书记进行了访谈,记录下这些中国教育精英深刻的思想和理念,展示了高校领导者生动的个性和风采,相信这本书一定会给关注中国高等教育发展...
  • A 生活原则   A1 生活原则概要与列表   独立思考并决定:(1)你想要什么;(2)事实是什么;(3)面对事实,你如何实现自己的愿望,而且要保持谦逊和心胸开阔,以便你能动用自己的最佳思维。   A2 生活...
  • 前言 一个人无论是求职也好,晋升也罢,成功率和简历的质量强相关。...保持一致性和向上的趋势 注意用词:在简历中要用好主题词。(多用名词,少用形容词) I 、四点忌讳 1.1.切忌把小成绩当大成就夸 有些
  • 远程教育两周,家长崩溃简史

    千次阅读 2020-02-21 13:56:40
    远程教育两周了,不过在线的课堂经常被误封,而且老师们也大多还没太合
  • 爆裂:未来社会的 9 大生存原则

    千次阅读 2018-04-12 10:41:39
    内容介绍 今天的世界比我们历史上的任何其他时候都更加复杂和充满不确定。现代社会目前使用的工具...复杂和不确定碰撞时,将释放出一种爆炸极强的力量,冲击和改变社会的各个方面,从商业到文化,从公共领...
  • 中国教育问题随想:教育何为

    千次阅读 2005-03-17 16:14:00
    中国教育问题随想:教育何为 徐友渔 紧张、不安、孤注一掷般的期待。中国人“望子成龙”的心态,在每年7月使社会氛围扭曲到了极点。 当我们思考中国的教育危机时,我们不能只盯住城里的那几所名牌大学、中学,不...
  • 《卡尔·威特的教育》书摘

    千次阅读 2013-10-29 13:44:13
    断断续续花了两个月的时间才把这本书看完,好书不沉底,作为100多年前的教育类图书,至今还源远流长,必须给它打五星好评。这本书详细地讲述了老威特的教子过程,记载了小卡尔的成长历程,以及老威特的教子心得。老...
  • 通用设计的原则

    千次阅读 2005-12-15 09:07:00
    [来 源] UIGarden [作 者] The Center for Universal Design [发表时间] 2005-11-18 8:27:56 本文的作者, 一群架构设计师,产品设计师,工程师和环境设计研究人员,一起共同建立了以下一些通用设计的原则以引领...
  • 有赞产品设计原则

    千次阅读 2019-08-21 11:06:36
    于是,我们需要一个大家共同理解、遵循、迭代的《产品设计原则》,从而保障我们可以在不偏离的情况下肆意挥洒、充分创新。 原则概要 有赞的《产品设计原则》,根据客户需求、有赞的使命和愿景、当前生态环境,...
  • 选择在哪层上进行Cache,譬如数据层Cache、应用层Cache和Web层Cache,越靠近数据,Cache的通用性越高,越容易保持 Cache数据的一致性,但相应的处理流程也越长,而越靠近用户,Cache的通用性越差,越难保证Cache数据...
  • 文章提出,希望可以创建一套新型的电子支付系统,这套系统“基于密码学原理而不是基于信用,使得任何达成一致的双方能够直接进行支付,从而不需要第三方中介参与”。 2009 年 1 月 3 日,区块链的第一个区块诞生,该...
  • 最近,教育部发布《3-6岁儿童学习与发展指南》(征求意见稿)(以下简称《指南》),公开征求社会各界意见 。  《指南》分别对3~4岁、4~5岁、5~6岁三个年龄段末期幼儿应该知道什么、能做什么,大致可以达到什么...
  • Ken Robinson概括了使人类生活繁荣的三大关键原则,而现行的教育文化又如何与其背道而驰。他以风趣幽默,激动人心的演说告诉我们如何逃出目前教育所面临的“死亡谷”,以及如何以开放的文化氛围培育年轻的一代。
  • 工作原则概要与列表

    千次阅读 2018-05-30 15:37:00
    工作原则概要与列表我将工作原则概要陈列于此, 以便你浏览, 选择你感兴趣的阅读。你也可以跳过这部分, 直接读正文。第三部分 工作原则● 一个机构就像一部机器, 主要由两组部件构成: 文化和人a. 优秀的机构拥有...
  • 交互设计原则

    千次阅读 2013-11-18 11:21:12
    交互设计原则:基于定性数据研究支持的模型,一旦有了稳定的设计想法,要判断你所做出设计选择是否有效,可用测试是个有效的工具,而定性研究能帮助你们在设计中这一艰难的过程中有一个好的开始。 交互设计...
  • 在ISO9000族标准2000年版的制订过程中,引入了质量管理的八项原则,并将其作为标准制订的基础。ISO和IAF的联合工作组就ISO9000标准向2000年版的过渡,对认证注册/机构的审核员以及其他与认证/注册工作相关的人员提出...
  • 像这张图,如果让美工合成这个背景其实难度还是蛮大的,这张图整体感觉很不错,这里也采用了本文没有提到的一个原则“色系一致原则,整体传递的感觉很温馨,让人有一种代入感。 注意,每一张图片都要传递出一种...
  • 改善简历的47条原则

    千次阅读 2015-08-14 16:39:09
    这篇文章围绕着技术简历这个话题,从版式、个人信息、技术能力、项目经历和教育背景等方面出发,给出了编写高质量技术简历所应遵循的47条原则。它们既有益于求职者编写高质量的简历,也有助于招聘者筛选合
  • 瑞士军刀 VS 单一职责原则

    千次阅读 2011-09-23 12:32:33
    转自:http://www.cnblogs.com/ldp615/archive/2009/08/28/1555952.html “单一职责原则”是面向对象软件开发的基本原则之一,面向对象的思想又是从现实...可最近发现面向对象的单一职责原则与现实好似有些冲突。 我们
  • 美国计算机教育对中国的启示

    千次阅读 2008-07-14 17:27:00
    美国计算机教育对中国的启示 林晓冬 美国范登堡大学计算机教育助理教授 美国普度大学教育学博士 曾任职于国家水电部外事处 鄢利群 美国田纳西州立大学新闻助理教授 美国密苏里新闻学院博士 曾任职于北京周报社。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,988
精华内容 6,395
关键字:

一致性原则教育