Spring 依赖查找
Spring 依赖查找依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或标准 API 实现。 IoC 依赖查找大致可以分为以下几类: 根据 Bean 名称查找 根据 Bean 类型查找 根据 Bean 名称 + 类型查找 根据 Java 注解查找 此外,根据查找的 Bean 对象是单一或集合对象,是否需要延迟查找等特定常见,有相应不同的 API。 单一类型依赖查找单一类型依赖查找接口- BeanFactory 根据 Bean 名称查找 getBean(String) Spring 2.5 覆盖默认参数:getBean(String,Object...) 根据 Bean 类型查找 Bean 实时查找 Spring 3.0 getBean(Class) Spring 4.1 覆盖默认参数:getBean(Class,Object...) Spring 5.1 Bean 延迟查找 getBeanProvider(Class) getBeanProvider(ResolvableType) 根据 Bean 名称 + 类型查找:getBean(String,Cla...
Spring IoC
IoC 简介IoC 是什么IoC 即控制反转(Inversion of Control,缩写为 IoC)。IoC 又称为依赖倒置原则(设计模式六大原则之一),它的要点在于:程序要依赖于抽象接口,不要依赖于具体实现。它的作用就是用于降低代码间的耦合度。 IoC 的实现方式有两种: 依赖注入(Dependency Injection,简称 DI):不通过 new() 的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。 依赖查找(Dependency Lookup):容器中的受控对象通过容器的 API 来查找自己所依赖的资源和协作对象。 IoC 能做什么IoC(控制反转)是一种设计思想,它的核心是:将对象的创建、依赖管理和生命周期的控制权从程序员手中转移到容器(框架)中。 IoC 和 DIDI(依赖注入)是 IoC(控制反转)的一种具体实现方式。 IoC是思想、是原则、是目标 DI是技术、是手段、是实现 IoC 容器IoC 容器就是具有依赖注入功能的容器。IoC 容器负责实例化、定位、配置应用程序中的对象及建立...
Mysql 面试
基础EXISTS 和 IN 有什么区别? EXISTS - 先对外表进行循环查询,再将查询结果放入 EXISTS 的子查询中进行条件比较,确定外层查询数据是否保留; IN - 先查询内表,将内表的查询结果作为条件,提供给外表查询语句进行比较; 索引是个前提,其实选择与否还是要看表的大小。你可以将选择的标准理解为小表驱动大表。在这种方式下效率是最高的。 比如下面这样: 12SELECT * FROM A WHERE cc IN (SELECT cc FROM B)SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc) 当 A 小于 B 时,用 EXISTS。因为 EXISTS 的实现,相当于外表循环,实现的逻辑类似于: 123for i in A for j in B if j.cc == i.cc then ... 当 B 小于 A 时用 IN,因为实现的逻辑类似于: 123for i in B for j in A if j.cc == i.cc then .....
mysqldump 基本使用
mysqldump 介绍此工具的目的是将数据库导出到备份文件或将数据库移动到另一个 Web 主机。其他带分隔符的文本格式(如 XML 和 CSV)也可以使用 mysqldump 生成。这些简单的查询使备份过程更加容易。文件中的文本显示为一组 SQL 语句,以后可以将其重建为原始状态。 mysqldump 是做什么的? MySQL 数据库备份:使用 mysqldump 创建安全备份,保护您的数据免遭丢失或损坏。 MySQL 数据库版本控制:创建数据库版本,有点像您可以在任何阶段恢复到的 GIT 标签 MySQL 数据库迁移:mysqldump 简化了数据库传输,确保了服务器或环境转换期间的数据完整性。 设置开发环境:mysqldump 有助于复制生产数据,以实现一致且可靠的开发和测试设置。 导出数据的格式 SQL 语句:默认格式会生成一个 SQL 脚本,该脚本可用于重新创建数据库结构和数据。 压缩文件:mysqldump 可以生成 .gz (gzip,linux内置,windows需要单独下载exe文件) 或 .bz2 (bzip2) 等格式的压缩输出文件,从而节省空间。 XML...
Mysql 运维
Mysql 运维 如果你的公司有 DBA,那么我恭喜你,你可以无视 Mysql 运维。如果你的公司没有 DBA,那你就好好学两手 Mysql 基本运维操作,行走江湖,防身必备。 安装部署Windows 安装(1)下载 Mysql 5.7 免安装版 下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads (2)解压并创建 my.ini 在根目录 my.ini 文件示例: 123456789101112131415[mysqld]#设置3306端口port = 3306# 设置mysql的安装目录 这块换成自己解压的路径basedir=D:\\Tools\\DB\\mysql\\mysql-5.7.31# 允许最大连接数max_connections=200# 服务端使用的字符集默认为8比特编码的latin1字符集character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB[client]# 设置mysql客户端默认字符集defaul...
Mysql 优化
慢查询慢查询日志可以帮我们找到执行慢的 SQL。 可以通过以下命令查看慢查询日志是否开启: 1234567mysql> show variables like '%slow_query_log';+----------------+-------+| Variable_name | Value |+----------------+-------+| slow_query_log | ON |+----------------+-------+1 row in set (0.02 sec) 启停慢查询日志开关: 12345# 开启慢查询日志mysql > set global slow_query_log='ON';# 关闭慢查询日志mysql > set global slow_query_log='OFF'; 查看慢查询的时间阈值: 1234567mysql> show variables like '%long_query_time%';+----------...
Mysql 高可用
高可用高可用 指的是通过技术手段,确保数据库服务在出现各种故障时,能够快速、自动地恢复服务,从而保证业务的连续可用性。 复制复制是解决系统高可用的常见手段。其思路就是:不要把鸡蛋都放在一个篮子里。 复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。主库和备库之 间可以有多种不同的组合方式。 MySQL 支持两种复制方式:基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录 bin log、在备库重放日志的方式来实现异步的数据复制。这意味着:复制过程存在时延,这段时间内,主从数据可能不一致。 复制如何工作在 Mysql 中,复制分为三个步骤,分别由三个线程完成: binlog dump 线程 - 主库上有一个特殊的 binlog dump 线程,负责将主服务器上的数据更改写入 binlog 中。 I/O 线程 - 备库上有一个 I/O 线程,负责从主库上读取 binlog,并写入备库的中继日志(relay log)中。 SQL 线程 - 备库上有一个 SQL 线程...
Mysql 锁
Mysql 锁 不同存储引擎对于锁的支持粒度是不同的,由于 InnoDB 是 Mysql 的默认存储引擎,所以本文以 InnoDB 对于锁的支持进行阐述。 锁的分类为了解决并发一致性问题,Mysql 支持了很多种锁来实现不同程度的隔离性,以保证数据的安全性。 独享锁和共享锁InnoDB 实现标准行级锁定,根据是否独享资源,可以把锁分为两类: 独享锁(Exclusive),简写为 X 锁,又称为“写锁”、“排它锁”。 独享锁锁定的数据只允许进行锁定操作的事务使用,其他事务无法对已锁定的数据进行查询或修改。 使用方式:SELECT ... FOR UPDATE; 共享锁(Shared),简写为 S 锁,又称为“读锁”。 共享锁锁定的资源可以被其他用户读取,但不能修改。在进行 SELECT 的时候,会将对象进行共享锁锁定,当数据读取完毕之后,就会释放共享锁,这样就可以保证数据在读取时不被修改。 使用方式:SELECT ... LOCK IN SHARE MODE; 为什么要引入读写锁机制? 实际上,读写锁是一种通用的锁机制,并非 Mysql 的专利。在很多软件领域,都...
Mysql 事务
Mysql 事务 不是所有的 Mysql 存储引擎都实现了事务处理。支持事务的存储引擎有:InnoDB 和 NDB Cluster。不支持事务的存储引擎,代表有:MyISAM。 用户可以根据业务是否需要事务处理(事务处理可以保证数据安全,但会增加系统开销),选择合适的存储引擎。 事务简介事务概念“事务”指的是满足 ACID 特性的一组操作。事务内的 SQL 语句,要么全执行成功,要么全执行失败。可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。 ACIDACID 是数据库事务正确执行的四个基本要素。 原子性(Atomicity) 事务被视为不可分割的最小单元,事务中的所有操作要么全部提交成功,要么全部失败回滚。 回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。 一致性(Consistency) 数据库在事务执行前后都保持一致性状态。 在一致性状态下,所有事务对一个数据的读取结果都是相同的。 隔离性(Isolation) 一个事务所做的修改在最终提交以前,对其它事务是不可见的。 持久性(Durabi...
Mysql 索引
索引简介MySQL 索引是一种数据结构,用于加快数据库查询的速度和性能 索引的优缺点B 树是最常见的索引,按照顺序存储数据,所以 Mysql 可以用来做 ORDER BY 和 GROUP BY 操作。因为数据是有序的,所以 B 树也就会将相关的列值都存储在一起。最后,因为索引中存储了实际的列值,所以某些查询只使用索引就能够完成全部查询。 ✔️️️️ 索引的优点: 索引大大减少了服务器需要扫描的数据量,从而加快检索速度。 索引可以帮助服务器避免排序和临时表。 索引可以将随机 I/O 变为顺序 I/O。 支持行级锁的数据库,如 InnoDB 会在访问行的时候加锁。使用索引可以减少访问的行数,从而减少锁的竞争,提高并发。 唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。 ❌ 索引的缺点: 创建和维护索引要耗费时间,这会随着数据量的增加而增加。 索引需要占用额外的物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立组合索引那么需要的空间就会更大。 写操作(INSERT/UPD...