Spring IOC & DI

IoC (Inverse of Control)

IOC,即控制反转(Inverse of Control)是一种设计思想,并不是一个具体的技术实现。

  • 控制:控制对象的创建及销毁(生命周期)。
  • 反转:将对象的控制权交给 IoC 容器。

所有类的创建、销毁都由 Spring 来控制,也就是说控制对象生命周期的不是引用它的对象,而是 Spring。对于某个具体对象而言,以前是它控制其他对象,现在所有对象都被 Spring 控制。

阅读更多

Spring 概述

Spring 的特性

Spring 基于 J2EE 技术实现了一套轻量级的 Java Web Service 系统应用框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 的特性包括:

  • 轻量级

    从 Jar 包的大小上来说,核心 Jar 包 spring-web-5.0.11.RELEASE.jarspring-core-5.0.11.RELEASE.jar均为 1.2 M 左右;

阅读更多

中介者模式

用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互.

Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.

1.适用场景

中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构。

阅读更多

MySQL 查询缓存

MySQL 查询缓存介绍

MySQL 体系架构如下图所示:

为了提高完全相同的查询语句的响应速度,MySQL Server 会对查询语句进行 Hash 计算得到一个 Hash 值。MySQL Server 不会对 SQL 做任何处理,SQL 必须完全一致 Hash 值才会一样。得到 Hash 值之后,通过该 Hash 值到查询缓存中匹配该查询的结果。

阅读更多

MySQL 锁相关面试题

MySQL锁相关面试题

为什么需要加锁

如果有多个并发请求存取数据,在数据就可能会产生多个事务同时操作同一行数据。如果并发操作不加控制,不加锁的话,就可能写入了不正确的数据,或者导致读取了不正确的数据,破坏了数据的一致性。因此需要考虑加锁。

表级锁和行级锁有什么区别?

MyISAM 仅仅支持表级锁,一锁就锁整张表,这在并发写的情况下性非常差。

阅读更多

MySQL 执行计划分析

什么是执行计划?

执行计划 是指一条 SQL 语句在经过 MySQL 查询优化器 的优化会后,具体的执行方式。

执行计划通常用于 SQL 性能分析、优化等场景。通过 EXPLAIN 的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实际会命中、每个数据表有多少行记录被查询等信息。

如何获取执行计划?

MySQL 为我们提供了 EXPLAIN 命令,来获取执行计划的相关信息。

阅读更多

MySQL 优化

SQL 语句优化

查询优化

1. Explain 分析

  • 先开启慢查询日志
1
2
set global slow_query_log = on # 开启慢查询日志,默认是关闭的
set global long_qurey_time=0.5 # 设置慢查询时间阈值,单位:秒
阅读更多

MySQL 数据类型

数据类型

整型

TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 分别使用 8, 16, 24, 32, 64 位存储空间,一般情况下越小的列越好。

INT(11) 中的数字只是规定了交互工具显示字符的个数,对于存储和计算来说是没有意义的。

浮点数

FLOAT 和 DOUBLE 为浮点类型,DECIMAL 为高精度小数类型。CPU 原生支持浮点运算,但是不支持 DECIMAl 类型的计算,因此 DECIMAL 的计算比浮点类型需要更高的代价。

阅读更多

MySQL 索引

定义

索引是对数据库表中一列或者多列的值进行排序的结构。

目的

数据库索引好比一本书的目录,提高查询效率。但是为表设置索引要付出相应的代价:

  • 增加了数据库的存储空间
  • 在插入和修改时需花费更多的时间(因为索引也要随之变动)

分类

1. 聚集索引

索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储其真实的数据行,不再有另外单独的数据页。

阅读更多

MySQL 架构

MySQL 基本架构

简单来说 MySQL 主要分为 Server 层存储引擎层

  • Server 层

    主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。

  • 存储引擎层

    主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了

阅读更多