参考答案: Array.prototype.distinct = function() { var ret = []; for (var i =...
Vue中如何创建新的跳转界面 由于自己在线教育网站距离上线的日子越来越近了,之前专注研究的都是有关如何用k8s部署相关的东西,没有太关注一些页面的东西。...component被很多界面引入使用 如果你不想新建文件用于创建component,你可以用let声明的方式,之后把它声明到应用界面的components部分,这样,let指定的变量名称就直接可以在界面中当...beforeCreate:创建之前,已经完成了初始化事件和生命周期 beforeMouted:已经完成了模板渲染 beforeDestory:摧毁之前,整个vue处在实时监控浸染和更新 destroyed...我的作法是在src/components下创建对应业务的xx.vue文件,在使用的界面中通过类似import {VideoPlayer} from "components/VideoPlayer.vue...而requestpackage在请求层面相对比较原生,在响应层面,axios会根据responseType响应数据,而request返回值类型只有String和Buffer,当指定返回值的encoding
IndexedDB 参考链接:阮一峰 网道API MDN 基本概念 IndexedDB 是一个比较复杂的 API,涉及不少概念。它把不同的实体,抽象成一个个对象接口。...IDBIndex.multiEntry:布尔值,针对keyPath为数组的情况,如果设为true,创建数组时,每个数组成员都会有一个条目,否则每个数组都只有一个条目。...IDBCursor.update():用来更新当前位置的记录,返回一个 IDBRequest 对象。它的参数是要写入数据库的新的值。...'); }; request.onerror = function (event) { console.log('数据更新失败'); } } update(); 上面代码中,put...如果不建立索引,默认只能搜索主键(即从主键取值)。 假定新建表格的时候,对name字段建立了索引。
【因为indexedDB 是异步的,所以它所有的操作都必须建立一个请求(request),请求的结果将被封装在request实例中返回】 如果不存在指定的数据库,则创建数据库,然后连接数据库,返回...会发生对象污染——当你存入一个对象时,如果该对象中并没有对应的 keyPath,那么,它会在存入时被自动加上这个keyPath 创建表 if (!...onsuccess方法中创建,另注意:数据库实例db 需要从成功回调的结果的target.result中获取。...如果为true,索引将不允许单个键的值重复。 multiEntry 。如果为 true,则当 Path 解析为数组时,索引将为每个数组元素在索引中添加一个条目。...如果为 false,它将添加一个包含数组的条目。 locale。
如果你是首次调用 requestFileSystem(),系统会为你的应用创建新的存储。请注意,这是沙箱文件系统,也就是说,一个网络应用无法访问另一个应用的文件。...你需要在你的脚本 (例如,在 ServiceWorker 中)中处理缓存更新的方式。除非明确地更新缓存,否则缓存将不会被更新;除非删除,否则缓存数据不会过期。...IndexedDB ? IndexedDB 是一种在用户浏览器中持久存储数据的方法。因为它允许你创建具有丰富查询功能的 Web 应用程序,无论网络可用性如何,这些应用程序都可以在线和离线工作。...你可以对对象的某个属性创建索引(index)以实现快速查询和列举排序。key可以是二进制对象。 IndexedDB 是事务模式的数据库 — 任何操作都发生在事务(transaction)中。...要存储应用程序状态和用户生成的内容,请使用IndexedDB。这使得用户可以在更多的浏览器中离线工作,而不仅仅是那些支持缓存API的浏览器。
有时候我们希望找到一个提交历史,然后从这个提交历史中创建一个分支。很多人应该都会使用命令行工具来做,其实 IDEA 已经帮你做了。IDEA首先在 IDEA 中找到 Git,然后找到你的提交历史。...然后选择新分支。你就可以从当前的提交历史中来创建一个新的分支了。Source Tree使用 SourceTree 也是一样的。...通过在提交历史中单击右键,然后选择分支,你就可在当前指定的提交历史中来创建一个新的分支了。https://www.ossez.com/t/git/13981
PostgreSQL 14新特性--减少索引膨胀 PG12中索引的存储更加高效,PG13添加索引条目去重功能进一步提升存储效率。...为什么会出现索引膨胀 对于B-tree索引,表中每个行版本都有一个未死的索引条目(对所有人可见)。执行vacuum删除死记录时,也会删除对应的索引条目。和表一样,同样会在索引页中创建空的空间。...这是一个昂贵的操作,VACUUM执行完清理,我们最终会得到2个臃肿的页面而不是一个。 当前用于改善索引膨胀和性能的特性 HOT元组 HOT元组的创建可能是PG对抗索引中不必要条目的强大武器。...使用此功能UPDATE创建产生的元组不会被索引条目引用,它还会引用元组的老版本。通过这种方法,不需要创建新的索引条目,可以避免索引膨胀。...UPDATE不扫扫描那个索引,因此没有killed的索引条目,“自底向上的删除”可以删除足够的这样的条目避免分裂。 也可以衡量testtab_pkey。
如果归档中的条目与操作系统上的文件不匹配,则删除该条目 -g, --grow 向已存在的 zip 归档文件追加内容。如果此操作失败,zip 将尝试还原存档文件到其原始状态。...OUTPUT-FILE 不更改现有 zip 文件,指定新输出的 zip 文件 -p, --paths 在 zip 文件中存储文件的路径信息。...例如,如果创建一个新的存档,它将列出将要添加的文件。如果该选项后跟 -,即 -sf-,仅输出到打开的日志文件。...更新 zip 归档文件中被更新的条目 -U, --copy-entries 将条目从一个 zip 存档复制到另一个存档。...--wild-stop-dirs 通配符 * 只用于替换文件而不包含目录。
2、日志的组成 日志由有序编号(log index)的日志条目组成。每个日志条目包含它被创建时的任期号(term)和用于状态机执行的命令。...在这里插入图片描述 (1)日志复制的两条保证 如果不同日志中的两个条目有着相同的索引和任期号,则它们所存储的命令是相同的(原因:leader 最多在一个任期里的一个日志索引位置创建一条日志条目,日志条目在日志的位置从来不会改变...消息时,如果发现自己的日志比RPC中的更新,就拒绝投票。...发生了网络分区或者网络通信故障,使得Leader不能访问大多数Follwer了,那么Leader只能正常更新它能访问的那些Follower,而大多数的Follower因为没有了Leader,他们重新选出一个...如果这时网络故障修复 了,那么原先的Leader就变成Follower,在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新(递减查询匹配日志)。
选举安全:在一次任期内最多只有一个领导者被选出 leader 只添加操作:领导者在其日志中只添加新条目,不覆盖删除条目 日志匹配:如果两个log包含拥有相同索引和任期的条目,那么这两个log从之前到给定索引处的所有日志条目都是相同的...领导者重试此操作,直到所有追随者安全地复制了新条目。 当创建条目的领导者将条目复制到大多数服务器时,就会认为该条目已提交。所有之前的条目,包括以前领导者创建的条目,也被认为是提交的。...如果投票者发现它的日志比候选人更新得更及时,那么它不会投票给候选人。 Raft通过比较日志中最后一个条目的索引和任期来确定两个日志中哪个是最新的。...然后,一旦提交,它就切换到新的配置。 joint consensus允许各个服务器在不同的时间在不同的配置之间进行转换,而不会损害安全性。...当joint consensus被提交时,只有日志中包含C的服务器才能成为领导者。 现在,对于领导者来说,创建一个描述C 的日志条目并将其复制到集群中是安全的。
不匹配,则返回 false (5.3 节) 3 如果已经存在的日志条目和新的产生冲突(索引值相同但是任期号不同),删除这一条和之后所有的 (5.3 节) 4附加日志中尚未存在的任何新条目 5如果...开始的所有日志条目: - 如果成功:更新相应跟随者的 nextIndex 和 matchIndex - 如果因为日志不一致而失败,减少 nextIndex 重试 如果存在一个满足N > commitIndex...第一个问题是,新的服务器可能初始化没有存储任何的日志条目。当这些服务器以这种状态加入到集群中,那么他们需要一段时间来更新追赶,这时还不能提交新的日志条目。...第二个影响性能的问题就是写入快照需要花费显著的一段时间,并且我们还不希望影响到正常操作。解决方案是通过写时复制的技术,这样新的更新就可以被接收而不影响到快照。...只读的操作可以直接处理而不需要记录日志。但是,在不增加任何限制的情况下,这么做可能会冒着返回脏数据的风险,因为领导人响应客户端请求时可能已经被新的领导人作废了,但是他还不知道。
Cookie的大小不超过4KB,而且每次请求都会发送到服务器。 LocalStorage在2.5~10MB之间,浏览器不同,存储的大小还不一样,而且不提供搜索功能,也不能建立自定义索引......在你准备用原生indexedDB之前,不妨先看看如下这些问题: 原生所有操作都是在回调中进行的 原生所有操作都需要不断地创建事务,判断表和索引的存在性 原生为表建立索引很繁琐 原生查询支持的较为简单,复杂的查询需要自己去实现...原生不支持批量操作 原生的错误需要在每个失败回调中接收处理 ......网上有很多对IndexedDB原生接口进行包装的其它库,但相较而言,Dexie.js具有以下明显的优点: Promise 异步支持 和 IndexedDB 原生 API 一样,Dexie.js的操作也是异步的...官方地址: https://dexie.org/ 小结 Dexie.js 提供简洁的 API,让我们可以轻松创建、打开、查询和管理 IndexedDB 数据库。
最后,我们展示了领导者完整性的证明草图,并展示了它如何保证复制状态机的正确行为。选举限制在任何基于领导者的共识算法中,领导者最终必须存储所有已提交的日志条目。...在一些共识算法中,例如 Viewstamped Replication,即使它最初不包含所有已提交的条目,也可以选出一个领导者。...这意味着日志条目仅沿一个方向流动,从领导者到追随者,而领导者永远不会覆盖其日志中的现有条目。没有包含所有己提交日志条目的候选者成为不了领导者 。...这是一个矛盾,因为投票者包含已提交的条目 $a$,而 leader#subU 被假定为不包含 $a$。否则,leader#subU 的最后一个日志条目一定比投票者的大。...创建 leader#subU 的最后一个日志条目的较早领导者必须在其日志中包含已提交的条目(根据假设)。
如果我们能够提供记录(record)级别的索引(recordKey -> FileId, partition)而不增加太多延迟的话,这将会让Hudi性能更快。...每个Bucket包含N个HFile,另外,所有写入单个HFile的记录需要进行排序,每批新写入会在对应桶中创建新的HFile,因此每个桶会包含N个HFile。...对于压缩而言,一个FileGroup中的所有HFile将会被压缩成一个HFile,所以如果不扩展到其他FileGroup,那么同一时间一个HFile文件中可能包含200W个条目,这会导致性能下降,所以当达到...但新的FileGroup被创建时,老的FileGroup将会被密封(sealed),即不再写入新的条目,新的写入将写入新的FileGroup,读取也不会变化,可以并发查找所有HFile文件。...每一批新的摄取要么将新的HFile作为新的数据块附加到现有的delta文件中,要么创建一个新的增量文件并将新的HFile作为第一个数据块写入。
如果领导者没有新条目要发送到特定对等方,则 AppendEntries RPC 不包含任何条目,并被视为心跳。 我们的许多学生都认为心跳在某种程度上是“特殊的”。...AppendEntries 的最后一步(#5)中的最小值是必需的,并且需要使用最后一个新条目的索引进行计算。...不遵守规则 尽管 Raft 论文非常明确地说明了如何实现每个 RPC 处理程序,但它也保留了许多未指定的规则和不变量的实现。 它们在 Figure 2 右侧的“服务器规则”块中列出。...这意味着应用程序需要与 Raft 通信该快照所对应的索引,或者 Raft 需要延迟应用其他日志条目,直到快照完成为止。 本文不讨论服务器崩溃时的恢复协议,并且由于涉及快照而重新出现。...一个半途而废的解决方案是只使用冲突索引(并忽略冲突term),这简化了实现,但是领导者有时最终会向追随者发送比严格更新最新日志条目更多的日志条目。
因此,这就导致了很难对single-decree protocol是如何工作的建立起直觉。而multi-Paxos的composition rule则更加添加了复杂性。...选举安全性:一个任期只能有一个leader当选 leader 只追加:leader不覆盖或者删除自身的日志条目,只追加新条目 日志匹配:如果两个日志包含一个索引和任期都相同的条目,那么日志中此条目索引之后的所有条目都相同...这是一个矛盾,因为voter包含了committed entry而leaderU假设是不包含的。 7、除非,leaderU的last log term必须比voter的大。...在配置转换期间存在着三方面的问题,第一个就是新的服务器初始化启动的时候不包含任何日志条目,当他们加入集群中时,需要花费相当的时间同步到最新的状态,在此期间,它将不能提交任何日志条目。...对于第二个问题,因为创建快照会耗费一定的时间,为了避免影响正常的系统运行,我们可以采用copy-on-write机制,这样新的请求,日志条目的更新不会影响快照的创建。
单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!"...;就搞定了,但是如果在一个新线程中这么做,比如: private void btnSet_Click(object sender, EventArgs e) { Thread t = new...: 线程间操作无效: 从不是创建控件“textBox1”的线程访问它。...究其原因,winform中的UI控件不是线程安全的,如果可以随意在任何线程中改变其值,你创建一个线程,我创建一个线程,大家都来抢着更改"TextBox1"的值,没有任何秩序的话,天下大乱......(Winform/Silverlight能用) 之所以说它神秘,是因为msdn官方对它的解释据说也是不清不楚 using System; using System.Threading; using
2、日志的组成 日志由有序编号(log index)的日志条目组成。每个日志条目包含它被创建时的任期号(term)和用于状态机执行的命令。...3、日志的一致性 (1)日志复制的两条保证 如果不同日志中的两个条目有着相同的索引和任期号,则它们所存储的命令是相同的(原因:leader 最多在一个任期里的一个日志索引位置创建一条日志条目...消息时,如果发现自己的日志比RPC中的更新,就拒绝投票。...发生了网络分区或者网络通信故障,使得Leader不能访问大多数Follwer了,那么Leader只能正常更新它能访问的那些Follower,而大多数的Follower因为没有了Leader,他们重新选出一个...如果这时网络故障修复 了,那么原先的Leader就变成Follower,在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新(递减查询匹配日志)。
HashMap 是一种简单而强大的存储和获取数据的方法。但是有多少开发人员知道 HashMap 在内部是如何工作的?...在 put(K key, V value) 的情况下,如果条目存在,则函数将其替换为新值,否则它会在单链表的头部创建一个新条目(根据参数中的键和值)。...为此,地图存储了 2 个数据: map的大小:表示HashMap中的条目数。每次添加或删除条目时都会更新此值。...因此,数组的大小调整创建了两倍的桶(即链表)并将 所有现有条目重新分配到桶中(旧的和新创建的)。...因为在自动调整大小机制期间,如果一个线程试图放入或获取一个对象,映射可能会使用旧的索引值,而不会找到该条目所在的新存储桶。
如果它被缓存,它只会更新项目的值。否则,它将创建一个新的CacheItem,它将封装实际值,它将设置密钥,它将把项添加到bykey哈希表,它将增加缓存的大小。...其次,我们必须弄清楚对于新频率,频率列表中是否已经存在节点。如果有,我们将不得不将该项添加到其条目列表中并分配其新的访问频率(即当前访问频率+ 1)。...如果没有,我们将不得不在频率列表中创建一个新的频率节点(并设置其所有合理的默认值),然后将该项添加到其条目列表中 第三,一旦我们检测到FrequencyParent,我们的函数就必须将新的父项设置为正在递增的项...一旦它确定E节点的新频率应为5而不是7,它将在节点4和7之间的列表中追加一个新的频率节点: 将5节点添加到列表后,该函数将设置节点正常运行所需的默认值。...由于频率列表是按升序排列的,因此它将开始从第一个频率节点开始删除条目,直到它删除与传入的任意数字一样多的项目。 如果频率节点由于逐出而不包含条目,则Evict函数也必须从频率列表中移除频率节点。
领取专属 10元无门槛券
手把手带您无忧上云