hexo + butterfly 搭建记录
认识 hexo简单来说,就是一个博客框架。社区很活跃,里面有很懂框架可以直接使用和自定义。更多详情,直接查看官网: https://hexo.io/zh-cn/docs/index.html 🚀 markdown 语法可以查看 本地搭建 hexo 记录1.git 安装:略2.node.js 安装:版本 22,详情略3.启动终端安装框架:npm install -g hexo-cli4.初始化 hexo 123hexo init <folder>cd <folder>npm install 5.在 hexo 根目录终端输入: hexo server,启动程序,访问 http://localhost:4000/ 不报错即成功。 常用命令1.在终端输入 hexo new page 导航栏名字,如:hexo new page about 配置 github pages注意: 创建github 仓库的时候,必须要一个 README.md,不然会失败。 详情查看官网文档:https://hexo.io/zh-cn/docs/github-pages 进阶 Ne...
理解 Java 类加载器
深度理解 Java SPISPI 简介SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。它的作用是让程序能够自动发现、加载和使用第三方提供的实现,从而实现基于接口的解耦和可插拔的扩展架构。 Java SPI 有四个要素: SPI 接口:为服务提供者实现类约定的接口或抽象类。 SPI 实现类:实际提供服务的实现类。 SPI 配置:Java SPI 机制约定的配置文件,提供查找服务实现类的逻辑。配置文件必须置于 META-INF/services 目录中,并且,文件名应与服务提供者接口的完全限定名保持一致。文件中的每一行都有一个实现服务类的详细信息,同样是服务提供者类的完全限定名称。 ServiceLoader:Java SPI 的核心类,用于加载 SPI 实现类。 ServiceLoader 中有各种实用方法来获取特定实现、迭代它们或重新加载服务。 SPI 示例 定义接口需要定义一个 SPI 接口,和普通接口并没有什么差别。 123public interface Dat...
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...