数据结构 AVL树

定义:Avl树在二叉查找树的基础上加了一个平衡条件:对于任意节点,其左右子树的高度差最多为1。

数据结构 二叉树

前面介绍线性数据结构时提到,如果数据本身有序,那么可以用二分法来降低查找的时间复杂度,但是在线性结构上实现二分法总有一些局限,比如链表不好定位中间元素,而数组又免不了拷贝成本。

因此,有人提出了树这种结构,树本身也是一种链式数据结构,但它巧妙地解决了链式数据只能从头或者从尾开始查找的问题,而是从中间开始向两边查找。不管是下文要介绍的二叉树,还是后面的Avl树、红黑树或者B树,其基本思想都是二分法,区别只在于通过不同的规则来维持树的平衡,以便使查找的复杂度更接近于二分法。

数据结构 线性结构

从百科中可以找到定义:数据结构即计算机存储、组织数据的方式,它的目标是反映数据元素之间的逻辑关系,其中的逻辑关系是指数据元素之间的前后关系,而与他们在计算机中的存储位置无关。

常见的数据结构可以分为四种:

  1. 集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
  2. 线性结构:数据结构中的元素存在一对一的相互关系;
  3. 树形结构:数据结构中的元素存在一对多的相互关系;
  4. 图形结构:数据结构中的元素存在多对多的相互关系。

《spring源码深度解析》spring Boot

Spring Boot被设计用来简化spring应用的搭建和开发,其使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。这里主要介绍下springBoot的启动和自动化配置,以及如何集成Tomcat服务的。

《spring源码深度解析》spring Jdbc(事务)

事务一般指数据库事务,是由一系列对系统中数据进行访问或更新操作组成的一个执行单元。主要是当发生并发操作时,事务可以起到一个隔离作用,即避免各个操作相互影响,另外为数据库提供了一个从失败中恢复到正常状态的方法,同时保证了数据库即使在异常状态下仍能保持数据的一致性。

以上可以概括成事务的四个特性,简称ACID

  • 原子性:即事务是原子性操作,要么不执行,要么全部执行成功;

  • 一致性:事务的执行不能破坏数据的完整性和一致性,即事务的执行没有中间状态,数据只有事务执行前的状态或执行后的状态;

  • 隔离性:在并发场景下,事务之间应该是相互隔离的,如果不同的事务同时访问相同的数据,则每个事务应该有各自完整的数据空间,即一个事务内部的操作及使用的数据对于其它事务是隔离的。在标准SQL规范中,定义了4种事务隔离级别,spring分别提供了对应的设置:

  1. 未授权读(READ_UNCOMMITTED):最低隔离级别,运行脏读,即一个事务可以读取别的事务还没有提交的数据;
  2. 授权读(READ_COMMITTED):保证一个事务的修改只有提交后才能被另外一个事务读取;
  3. 可重复读(REPEATABLE_READ):保证一个事务在处理的过程中,多次读取同一个数据时,其值都是与事务开始时一致的,即便在过程中有其它的事务进行了提交;
  4. 串行化(SERIALIZABLE):事务被要求顺序执行;
  • 持久性:事务一旦提交,其对数据的状态变更将是永久性的;