前言
跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。这么说,我们可能很难理解,我们可以先回忆一下链表。
Redis链表为双向无环链表!
图解Redis之数据结构篇——简单动态字符串SDS提到Redis使用了简单动态字符串,链表,字典(散列表),跳跃表,整数集合,压缩列表这些数据结构来操作内存,并且简单介绍了Redis简单动态字符串。本篇文章我们继续来分析链表。
链表是一种非常常见的数据结构,在Redis中使用非常广泛,列表对象的底层实现之一就是链表。其它如慢查询,发布订阅,监视器等功能也用到了链表。
软件开发中如何合理的预估项目的开发时间始终是一个难题。因为项目中不确定性的因素太多。这里我们根据日常项目中开发的规律总结出一种工作量预估的模型。该模型参考物理学中时间的计算方式:
得到我们的软件开发时间计算公式:
前面我们已经初步实现了开发集成环境、测试环境的持续集成(自动化构建、自动化测试、自动化部署)。但生产环境自动化部署迟迟没有推进。其原因主要在以下几个方面:
只要解决以上三个问题,我们就可以初步实现生产环境的自动化部署。
Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。这是维基百科中的定义,实际上Nuget就是一个包管理器,类似于Java的Maven,可以帮助我们更方便的管理dll。
相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛。由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,由于当时对系统划分的不合理等等原因导致每次发版都会设计到多个系统的发布,小的版本三五个,大的版本十几个甚至几十个系统的同时发布!而我们也没有相应的基础设施的支撑,发版方式更是最传统的,开发人员将发布包发给运维人员,由其讲各个发布包一个一个覆盖到生产环境。因此每次上线仅仅发版就需要2-3个小时。这种方式不仅仅耗时、耗力,更是由于人工操作经常导致一些丢、落的现象。
我们公司的程序日志之前都是采用log4net记录文件日志的方式(有关log4net的简单使用可以看我另一篇博客),但是随着后来我们团队越来越大,项目也越来越大,我们的用户量也越来越多。慢慢系统就暴露了很多问题,这个时候我们的日志系统已经不能满足我们的要求。其主要有下面几个问题: