红黑树学习笔记-删除节点
概述
根据前一篇文章中介绍的红黑树性质,现在我们需要考虑如何删除一个节点以及删除一个节点后,是否还能够满足它的5个特性,如果不满足我们需要如何调整使之满足红黑树的特性。
根据前一篇文章中介绍的红黑树性质,现在我们需要考虑如何删除一个节点以及删除一个节点后,是否还能够满足它的5个特性,如果不满足我们需要如何调整使之满足红黑树的特性。
今天读到一篇文章: 真实存在的超能力者,蝙蝠侠Daniel Kish, Daniel在幼儿时由于视网膜母细胞瘤失去了视力,但是他发明了一种方法,依靠嘴发出的短促的声音的回声,判断周围物体的方位,以此来躲避行走时后的障碍物。 他依靠这个能力,独立一个人已经去过40个国家。
看了这个新闻还有什么事情可以怨天尤人?没有人可以阻止你生命之花的怒放,除非你自己放弃。
利用过年放假的空闲时间,把红黑树又复习了一遍,在复习的过程中又有了一些新的收获,红黑树暴露给外部有查询、 增加、删除功能接口,同时提供了一个非功能性功能,保证所有的查询、增加、删除操作都在O(lgN)的时间内返回结果。这个非功能性特性就是依靠红黑树内部的动态平衡的机制来保持的。我们做系统开发,产品设计的时候,或者设计一个时间阶段的人生目标,都可以参考红黑树的动态平衡思想。本文会解释红黑树的一些特性和新增加节点的时候,它内部维持动态平衡的过程, 然后再另一篇文章里介绍如何在删除节点的时候维持动态平衡,最后会有一篇文章,是基于红黑树的发散思考,我们如何将红黑树的动态平衡思想应用到技术以外的世界里。
1 每个节点必须是红色或者黑色
2 根节点必须是黑色
3 每个路径不能同时包含连续两个红色节点
用drupal搭建博客之后,写文章的时候需要贴一些代码作为示例,drupal默认的ckeditor编辑器中不包含代码样式插件, 因此如果要支持代码格式化显示,需要手动安装一个code snippet插件,具体如何安装参考本文的如下步骤。
关于codesnippet的介绍可以参考 codesnippet介绍 这里不做过多描述。
从 codesnippet 中下载
1 将下载后的安装包解压缩后放入 drupal的module子目录中
首先我不是孩子问题的专家,这里记录的是我从各种渠道学习到的一些育儿知识,在这里我把认为是很好的一些观点,我记录下来,分享给大家。我会尽量保持这些知识的出处,如果实在找不到,那会注明出处不详。这篇文章是这几天听李玫瑾老师的讲座,整理下来的笔记。小孩在3-6岁之间,会有自私、任性、没有耐心的问题,我们如何引导、教育孩子,是需要学习的,即使学习了也需要实践,通过实践再反馈学习到的知识,调整学习到的知识,然后再进行实践,如此迭代循环,才能找到适合自己的一套教育方式,方法。所以本文给的一些观点和建议不一定就是正确的,只是引导大家去思考这件事,并反思自己如何做在这件事情上可以做的更好一点。
Java应用的数据库服务从MySQL Server 5.7升级到MySQL Server 8后, 同时升级了对应的mysql的驱动, 之后就出现了Java应用写入数据库的时间比当前的时间少了13个小时,这个问题是由于mysql server没有指定时区, 而导致mysql使用了system的默认时区,默认时区:CST,即美国中部时间。最后是通过在mysql 的配置文件my.cnf中加入了时区的配置后,问题得到解决。下面是问题的解决分析过程描述。
Redmine 是一个项目管理软件,对于那些付不起Jira费用的公司来讲是一个 很不错的选择。我个人用redmine来管理自己的知识体系,很多方面的知识都会记录到Redmin中。因此我这里讲解 一下如何搭建一个Redmine系统,以及如何备份和恢复。本文是基于docker-compose的方式进行安装和备份的。
安装方式参考 TestLink的搭建过程和使用介绍
继续之前的文章如何高质量交付的一些思考 讲到要用TestLink 管理测试用例,这里记录下如何快速的搭建TestLink的一个过程,以及对TestLink的一点使用方面的个人总结
我是用用docker-compose 来安装,因为不想配置一堆的环境参数,所以我先在服务器上安装了一个docker-compose
在2018年12月26日和2018年12月28日发布版本的时后出了两次故障: 一次是由于新旧权限兼容,基于新旧权限的数据,程序在做联合计算时,产生了一些空数据导致的问题 ,另一次是由于两个月前的一次发布,将相同的节点的数据配置了两份,导致新添加的配置在spring cloud config没有生效而引起的问题。 这两次的问题,引起自己反思,结合软件工程的方法论,反思平时的工作中有哪些不足的地方:
如上是问题,下面就要基于这个现状进行思考如何提高交付质量
在Druid数据库连接池中有两个参数,分别为: testWhileIdle,timeBetweenEvictionRunsMillis 根据字面意思理解是连接池会定时的对处于idle状态的连接进行一次存活检测, 目的是为了防止返回一个已经关闭的JDBC的连接给应用使用。 但是在本地验证该参数的行为的时后,发现并不是如上的期望。 如果配置了该参数,Druid会在每一次应用获取连接的时后,进行一次存活检测, 如果发现连接不可用,那么就从connection pool中重新获取一个connection返回给应用。 如下是本地的验证的一个过程。
在本地启动Java应用,应用直连数据库,配置Druid每间隔30秒进行一次链接检测, 配置数据库的max_timeout为60秒,validationQuery为SELECT 1,如下: