Skip to main content

红黑树学习笔记-新增节点

Submitted by taotao on Fri, 02/15/2019 - 12:21

概述

利用过年放假的空闲时间,把红黑树又复习了一遍,在复习的过程中又有了一些新的收获,红黑树暴露给外部有查询、 增加、删除功能接口,同时提供了一个非功能性功能,保证所有的查询、增加、删除操作都在O(lgN)的时间内返回结果。这个非功能性特性就是依靠红黑树内部的动态平衡的机制来保持的。我们做系统开发,产品设计的时候,或者设计一个时间阶段的人生目标,都可以参考红黑树的动态平衡思想。本文会解释红黑树的一些特性和新增加节点的时候,它内部维持动态平衡的过程, 然后再另一篇文章里介绍如何在删除节点的时候维持动态平衡,最后会有一篇文章,是基于红黑树的发散思考,我们如何将红黑树的动态平衡思想应用到技术以外的世界里。

红黑树解释

红黑树的标准

1 每个节点必须是红色或者黑色

2 根节点必须是黑色

3 每个路径不能同时包含连续两个红色节点

Tags

如何在drupal中安装代码格式插件

Submitted by taotao on Tue, 02/12/2019 - 12:59

概述

用drupal搭建博客之后,写文章的时候需要贴一些代码作为示例,drupal默认的ckeditor编辑器中不包含代码样式插件, 因此如果要支持代码格式化显示,需要手动安装一个code snippet插件,具体如何安装参考本文的如下步骤。

安装步骤

codesnippet介绍

关于codesnippet的介绍可以参考 codesnippet介绍 这里不做过多描述。

下载安装包

codesnippet 中下载

在drupal中安装

1 将下载后的安装包解压缩后放入 drupal的module子目录中

如何合理引导孩子的任性自私和没有耐心的学习

Submitted by taotao on Wed, 01/09/2019 - 21:59

概述

首先我不是孩子问题的专家,这里记录的是我从各种渠道学习到的一些育儿知识,在这里我把认为是很好的一些观点,我记录下来,分享给大家。我会尽量保持这些知识的出处,如果实在找不到,那会注明出处不详。这篇文章是这几天听李玫瑾老师的讲座,整理下来的笔记。小孩在3-6岁之间,会有自私、任性、没有耐心的问题,我们如何引导、教育孩子,是需要学习的,即使学习了也需要实践,通过实践再反馈学习到的知识,调整学习到的知识,然后再进行实践,如此迭代循环,才能找到适合自己的一套教育方式,方法。所以本文给的一些观点和建议不一定就是正确的,只是引导大家去思考这件事,并反思自己如何做在这件事情上可以做的更好一点。

Tags

Java应用升级使用MySQL8后遇到的时区问题的解决过程

Submitted by taotao on Tue, 01/08/2019 - 12:57

问题的场景描述

Java应用的数据库服务从MySQL Server 5.7升级到MySQL Server 8后, 同时升级了对应的mysql的驱动, 之后就出现了Java应用写入数据库的时间比当前的时间少了13个小时,这个问题是由于mysql server没有指定时区, 而导致mysql使用了system的默认时区,默认时区:CST,即美国中部时间。最后是通过在mysql 的配置文件my.cnf中加入了时区的配置后,问题得到解决。下面是问题的解决分析过程描述。

Redmine的搭建和数据备份

Submitted by taotao on Tue, 01/08/2019 - 12:27

概述

Redmine 是一个项目管理软件,对于那些付不起Jira费用的公司来讲是一个 很不错的选择。我个人用redmine来管理自己的知识体系,很多方面的知识都会记录到Redmin中。因此我这里讲解 一下如何搭建一个Redmine系统,以及如何备份和恢复。本文是基于docker-compose的方式进行安装和备份的。

步骤

  • 本地安装docker-compose

安装方式参考 TestLink的搭建过程和使用介绍

Tags

TestLink的搭建过程和使用介绍

Submitted by taotao on Mon, 01/07/2019 - 22:17

概述

继续之前的文章如何高质量交付的一些思考 讲到要用TestLink 管理测试用例,这里记录下如何快速的搭建TestLink的一个过程,以及对TestLink的一点使用方面的个人总结

安装步骤:

  • 安装docker-compose

我是用用docker-compose 来安装,因为不想配置一堆的环境参数,所以我先在服务器上安装了一个docker-compose

Tags

如何高质量交付的一些思考

Submitted by taotao on Wed, 01/02/2019 - 20:46

在2018年12月26日和2018年12月28日发布版本的时后出了两次故障: 一次是由于新旧权限兼容,基于新旧权限的数据,程序在做联合计算时,产生了一些空数据导致的问题 ,另一次是由于两个月前的一次发布,将相同的节点的数据配置了两份,导致新添加的配置在spring cloud config没有生效而引起的问题。 这两次的问题,引起自己反思,结合软件工程的方法论,反思平时的工作中有哪些不足的地方:

  • 目前公司的测试资源不足,没有专门的测试人员测试
  • 项目维护的周期超过了两年,开发人员对某些不常用的功能也生疏了,导致在做自测的时后,也不能比较全面的进行测试
  • 没有人专门的负责更新和维护文档,导致大部分的文档都过时了

如上是问题,下面就要基于这个现状进行思考如何提高交付质量

Tags

Druid的存活检测问题

Submitted by taotao on Sun, 12/30/2018 - 10:52

概述

在Druid数据库连接池中有两个参数,分别为: testWhileIdle,timeBetweenEvictionRunsMillis 根据字面意思理解是连接池会定时的对处于idle状态的连接进行一次存活检测, 目的是为了防止返回一个已经关闭的JDBC的连接给应用使用。 但是在本地验证该参数的行为的时后,发现并不是如上的期望。 如果配置了该参数,Druid会在每一次应用获取连接的时后,进行一次存活检测, 如果发现连接不可用,那么就从connection pool中重新获取一个connection返回给应用。 如下是本地的验证的一个过程。

验证过程

在本地启动Java应用,应用直连数据库,配置Druid每间隔30秒进行一次链接检测, 配置数据库的max_timeout为60秒,validationQuery为SELECT 1,如下:

kingshard的连接问题调查(二)

Submitted by taotao on Wed, 12/26/2018 - 12:35

继续之前的分析 kingshard的连接问题调查(一) 中的推测,是由于JDBC的connection pool中的链接失效导致发生如下错误

communications link failure the last packet sent successfully to the server was 0 milliseconds ago

为了验证这个推测,在本地模拟了一个测试场景,具体如下:

  • 将Mysql Server的超时时间调整为30秒
  • 将应用中JDBC连接池(Druid)连接最大闲置检查时间间隔设置为60秒
  • 应用启动后,等待30秒之后再去访问一个有数据库查询的Http接口

当过了30秒之后,Mysql服务端就有如下的日志信息:

ApacheHttpClient的连接池引起Jetty工作线程被耗尽后的TCP的连接状态分析

Submitted by taotao on Tue, 12/25/2018 - 19:10

文章ApacheHttpClient的连接池引起Jetty工作线程被耗尽 中提到的,

如果应用中没有对如下代码中:

HttpResponse response = httpClient.execute(httpHost, httpPost);

response 对象执行如下方法,释放链接:

EntityUtils.consumeQuietly(response.getEntity());

就会导致connection不能回归到connection pool中。

今天对这些不能回归的connection从系统层面进行分析,

看看是处于什么状态。

模拟多次接口调用后,Jetty的工作线程都阻塞在 connectionPool中的get方法调用上: