设计模式之设计原则(一) 简介什么是设计模式? 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样,你就能不必一次又一次地使用该方案而不必重复劳动。 深入理解面向对象向下:三大面向对象机制 封装:隐藏内部实现 继承:复用现有代码 多态:改写对象行为 现上:深刻把握面向对象机制带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计” 软件设计复杂的根本原因变化: 2020-05-03 设计模式 #设计模式
深入MySQL索引细节 索引基本概念维基百科对索引的定义:数据库索引是一种数据结构,它以额外的写入和存储空间为代价来提高数据库表上数据索引操作的速度。 MySQL官方对索引的定义是用于快速查找记录的一种数据结构。 索引是一个以空间换时间的经典案例。 索引是物理数据页,数据页大小决定了一个页可以存储多少个索引行,以及需要多少页来存储指定大小的索引。 索引可以加快检索速度,也可以降低索引列插入、删除、更新的速度,索引维护需 2020-05-01 MySQL #MySQL
探索MySQL的事务与锁机制 事务概念简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。MySQL中事务支持是在存储引擎层实现的。事务拥有四个重要的特性:原子性、一致性、隔离性、持久性,简称为ACID特性,下文将逐一解释。 ACID特性 原子性(Atomicity) 事务开始后所有操作步骤,要么全部完成,要么全部不做,不存在只执行一部分的情况。 一致性(Consistency) 事务执行前后,数据从一个合 2020-04-29 MySQL #MySQL
ThreadLocalRondom原理剖析 ThreadLocalRondom是JDK 7在并发包中新增的随机数生成器,该类弥补了Random类在并发环境下的缺陷。 Random的局限性Random生成随机数的方法如下: public int nextInt(int bound) { //参数校验 if (bound <= 0) throw new IllegalArgume 2020-04-28 Java > Java并发 #Java #并发
MySQL数据存储结构 索引组织表在InnoDB存储引擎中,表是根据主键顺序组织存放的,这种存储方式的表称为索引组织表,每张表都有一个主键,如果创建时没有显式定义主键,InnoDB存储引擎会按照如下方式进行创建主键: 判断表中是否有非空的唯一索引,如果有,则该列为主键。 如果不符合上列条件,InnoDB存储引擎会自动创建一个6字节大小的指针。 当表中有多个非空唯一索引,InnoDB会选择第一个定义的非空唯一索引作为主键 2020-04-17 MySQL #MySQL
MySQL文件种类分析 参数文件当MySQL实例启动,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及部分初始化参数。 可以通过SHOW VARIABLES查看数据库中所有参数,可以通过LIKE过滤参数名。 参数类型MySQL中参数分为两类: 动态参数 在MySQL实例运行中进行更改。 静态参数 在实例的整个生命周期内都不得进行更改。 可以通过set命令对动态参数进行修改,例如SET re 2020-04-15 MySQL #MySQL
AQS原理与源码分析 简介队列同步器AbstractQueuedSynchronizer,是用来构建锁或者其他同步组键的基础框架,它使用了一个int成员变量state表示同步状态,通过CLH队列完成获取资源的线程排队工作。 AQS的主要使用方式是继承,字类通过继承同步器并实现它的抽象方法来管理同步状态。AQS本身只是定义若干同步状态获取和释放的方法提供给字类来实现。 锁是面向使用者的,它定义了使用者与锁交互的接口,隐藏 2020-04-13 Java > Java并发 #Java #并发
解析Java中的锁 简介锁是用来控制多个线程访问共享资源的方式,在Lock接口出现之前,Java是靠synchronized关键字实现锁功能的。而Java 1.5之后,并发包中新增了Lock接口与其实现类用来实现锁功能,只是需要手动获取释放锁,虽然它缺少了同步关键字隐式获取释放的便捷性,但却拥有了可操作性,可中断的获取锁以及超时获取锁等功能。 分类Java中会按照是否有某一特性来定义锁,下图通过各种特性对锁进行分类: 2020-04-10 Java > Java并发 #Java #并发