Skip to content

Commit

Permalink
feat: 大幅修改网站导航、目录结构,新增一些文档
Browse files Browse the repository at this point in the history
  • Loading branch information
chufan committed Oct 16, 2023
1 parent 8d2aa12 commit 0bf5ce8
Show file tree
Hide file tree
Showing 110 changed files with 919 additions and 1,098 deletions.
File renamed without changes.
12 changes: 11 additions & 1 deletion docs/.vuepress/config/navbar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,17 @@ export default [
text: "读书整理",
link: "/manuscripts/read-books",
},

// {
// text: "网站",
// children:[
// "/manuscripts/other/公众号文章.md",
// "/manuscripts/other/技术文档.md",
// {
// text:"RoadMap",
// link:"https://142vip-cn.feishu.cn/share/base/view/shrcnxtFKV2JfBZbqFh0GUxzTOg"
// }
// ],
// },
{
text: "其他",
link: "/manuscripts/other",
Expand Down
42 changes: 21 additions & 21 deletions docs/.vuepress/config/theme.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,27 +141,27 @@ export default {
"XiGua"
],
rootComponents: {
// 公告
notice: [
{
path: "/",
title: "在线浏览",
content: "网站无法访问时,建议通过科学上网访问备用网络",
actions: [
{
text: "尝鲜版",
link: "https://142vip.github.io/JavaScriptCollection",
type: "default",
},
{
text: "稳定版",
link: "https://142vip.cn/JavaScriptCollection",
type: "primary",
},
],
fullscreen: false,
},
],
// 公告 参考:https://plugin-components.vuejs.press/zh/guide/notice.html
// notice: [
// {
// path: "/",
// title: "在线浏览",
// content: "网站无法访问时,建议通过科学上网访问备用网络",
// actions: [
// {
// text: "尝鲜版",
// link: "https://142vip.github.io/JavaScriptCollection",
// type: "default",
// },
// {
// text: "稳定版",
// link: "https://142vip.cn/JavaScriptCollection",
// type: "primary",
// },
// ],
// fullscreen: false,
// },
// ],
},
},
}
Expand Down
22 changes: 9 additions & 13 deletions docs/manuscripts/battle-interview/battle-interview.sidebar.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
export const battleInterviewSidebar = [
{
text: '面经分享',
link: 'introduce-share',
prefix:"problems",
children: [
{
text: '接口幂等',
link: 'problems/接口幂等.md'
link: '接口幂等.md'
},
{
text: 'Node面试',
link: 'problems/Node面试.md'
text: 'Node',
link: 'Node面试.md'
},
{
text: 'Nginx面试',
link: 'problems/Nginx面试.md'
text: 'Nginx',
link: 'Nginx面试.md'
},
{
text: 'MySQL面试',
link: 'problems/MySQL面试.md'
text: 'MySQL',
link: 'MySQL面试.md'
}
]
},
Expand All @@ -35,11 +35,7 @@ export const battleInterviewSidebar = [
]
},
{
text: '工作机会',
link: 'social-recruit'
},
{
text: '小技巧',
text: '面试技巧',
link: 'social-recruit'
}
]
65 changes: 32 additions & 33 deletions docs/manuscripts/battle-interview/problems/MySQL面试.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
# MySQL面试

> 参考:https://juejin.cn/post/6850037271233331208#comment
>
> sql解析:https://juejin.cn/post/6850037271233331208#heading-52

### 基础架构
## 基础架构

> 由外向里,逐步深入
Expand All @@ -15,7 +12,7 @@



### 存储引擎
## 存储引擎

- InnoDB 【MySQL 默认的存储引擎,支持**事务、行级锁定和外键**
- MyISAM【**不支持事务,不支持外键**
Expand All @@ -29,7 +26,7 @@



#### 查看存储引擎
### 查看存储引擎

```bash
-- 查看支持的存储引擎
Expand All @@ -55,7 +52,7 @@ show table status from database where name="tablename"



### 数据类型
## 数据类型

- 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
- 浮点数类型:FLOAT、DOUBLE、DECIMAL
Expand All @@ -71,31 +68,29 @@ show table status from database where name="tablename"



### 索引(单独重点来)
## 索引(单独重点来)

> 索引(Index)是帮助MySQL高效获取数据的数据结构,所以说**索引的本质是:数据结构**
索引本身也很大,不可能全部存储在内存中,**一般以索引文件的形式存储在磁盘上**

##### 优点

优点:
- **提高数据检索效率,降低数据库IO成本**
- **降低数据排序的成本,降低CPU的消耗**

##### 缺点

缺点:
- 索引也是一张表,保存了主键和索引字段,并指向实体表的记录,所以也需要占用内存
- 虽然索引大大提高了查询速度,同时却会降低更新表的速度,【更新表的时候需要更新索引】





### 事务
## 事务

> 主要用于处理操作量大,复杂度高的数据
#### 基本要素(ACID)
### 基本要素(ACID)

- **A (Atomicity) 原子性**:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样
- **C (Consistency) 一致性**:在事务开始之前和事务结束以后,数据库的**完整性约束**没有被破坏
Expand All @@ -121,7 +116,7 @@ show table status from database where name="tablename"
- 一种是加锁:在读取数据前,对其加锁,阻止其他事务对数据进行修改。
- 另一种是数据多版本并发控制(MultiVersion Concurrency Control,简称 **MVCC** 或 MCC),也称为多版本数据库:不用加任何锁, 通过一定机制生成一个数据**请求时间点**的一致性数据快照 (Snapshot), 并用这个快照来提供一定级别 (语句级或事务级) 的一致性读取。从用户的角度来看,好象是数据库可以提供同一数据的多个版本。

### 事务隔离级别
## 事务隔离级别

数据库事务的隔离级别有4种,由低到高分别为

Expand Down Expand Up @@ -165,7 +160,7 @@ show table status from database where name="tablename"



#### MVCC 多版本并发控制
### MVCC 多版本并发控制

- **乐观(optimistic)并发控制**
- **悲观(pressimistic)并发控制**
Expand All @@ -188,7 +183,7 @@ MVCC 是行级锁的一个变种,但它在很多情况下避免了加锁操作



### 事务的实现
## 事务的实现

> 事务的实现就是如何实现ACID特性
Expand All @@ -199,7 +194,7 @@ MVCC 是行级锁的一个变种,但它在很多情况下避免了加锁操作
- **redo log(重做日志**) 实现持久化和原子性
- **undo log(回滚日志)** 实现一致性

##### MySQL日志分类
### MySQL日志分类

> 参考:https://www.cnblogs.com/myseries/p/10728533.html
Expand Down Expand Up @@ -236,11 +231,11 @@ general log 普通日志
作用:记录数据库操作明细,默认关闭,开启会降低数据库性能
```

### MySQL锁机制
## MySQL锁机制

> 锁是计算机协调多个进程或线程并发访问某一资源的机制,是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则
#### 锁的分类
### 锁的分类

**从对数据操作的类型分类**

Expand Down Expand Up @@ -268,7 +263,7 @@ general log 普通日志
| InnoDB ||| |
| Memory | || |

### MyISAM 表锁
## MyISAM 表锁

MyISAM 的表锁有两种模式:

Expand All @@ -279,7 +274,7 @@ MyISAM 的表锁有两种模式:

默认情况下,写锁比读锁具有更高的优先级:当一个锁释放时,这个锁会优先给写锁队列中等候的获取锁请求,然后再给读锁队列中等候的获取锁请求。

### InnoDB 行锁
## InnoDB 行锁

InnoDB 实现了以下两种类型的**行锁**

Expand All @@ -293,7 +288,7 @@ InnoDB 实现了以下两种类型的**行锁**:

**索引失效会导致行锁变表锁**。比如 vchar 查询不写单引号的情况。

#### 加锁机制
### 加锁机制

**乐观锁与悲观锁是两种并发控制的思想,可用于解决丢失更新问题**

Expand All @@ -305,7 +300,7 @@ InnoDB 实现了以下两种类型的**行锁**:



#### 锁模式(InnoDB有三种行锁的算法)
### 锁模式(InnoDB有三种行锁的算法)

- **记录锁(Record Locks)**
- **间隙锁(Gap Locks)**
Expand Down Expand Up @@ -347,7 +342,7 @@ InnoDB这种行锁实现特点意味着:**只有通过索引条件检索数据



#### 死锁
### 死锁

**死锁产生**

Expand Down Expand Up @@ -379,7 +374,7 @@ InnoDB这种行锁实现特点意味着:**只有通过索引条件检索数据



### MySQL分区
## 分区

一般情况下我们创建的表对应一组存储文件,使用`MyISAM`存储引擎时是一个`.MYI``.MYD`文件,使用`Innodb`存储引擎时是一个`.ibd``.frm`(表结构)文件。

Expand Down Expand Up @@ -410,7 +405,7 @@ hash 分发,好处在于说,可以平均分配每个库的数据量和请求



### MySQL分表
## 分表

**垂直拆分**

Expand All @@ -433,7 +428,7 @@ hash 分发,好处在于说,可以平均分配每个库的数据量和请求



### MySQL分库
## 分库

> 为什么要分库?
Expand All @@ -454,15 +449,15 @@ hash 分发,好处在于说,可以平均分配每个库的数据量和请求



### 主从复制
## 主从复制

- master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;

- salve 将 master 的 binary log events 拷贝到它的中继日志(relay log);

- slave 重做中继日志中的事件,将改变应用到自己的数据库中。**MySQL 复制是异步且是串行化的。**

#### 复制的基本原则
### 复制的基本原则

- 每个 slave只有一个 master
- 每个 salve只能有一个唯一的服务器 ID【mysql_id唯一性】
Expand All @@ -472,15 +467,15 @@ hash 分发,好处在于说,可以平均分配每个库的数据量和请求



### 三个范式
## 三个范式

- 第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
- 第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
- 第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如 果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段 x → 非关键字段y



### 百万级别或以上的数据如何删除
## 百万级别或以上的数据如何删除

关于索引:由于**索引需要额外的维护成本**,因为**索引文件是单独存在的文件**,所以当我们对数据的增加,修改,删除,都会产生额外的对索引文件的操作,这些操作需要消耗额外的IO,会降低增/改/删的执行效率。所以,在我们删除数据库百万级别数据的时候,查询MySQL官方手册得知删除数据的速度和创建的索引数量是成正比的。

Expand All @@ -489,7 +484,11 @@ hash 分发,好处在于说,可以平均分配每个库的数据量和请求
3. 删除完成后重新创建索引(此时数据较少了)创建索引也非常快,约十分钟左右。
4. 与之前的直接删除绝对是要快速很多,更别说万一删除中断,一切删除会回滚。那更是坑了

**先删除索引--->再删除无用数据----> 对留下来的数据重新简历索引,避免索引丢失**

## 参考资料

**先删除索引--->再删除无用数据----> 对留下来的数据重新简历索引,避免索引丢失**
- <https://juejin.cn/post/6850037271233331208#comment>

- <https://juejin.cn/post/6850037271233331208#heading-52>

0 comments on commit 0bf5ce8

Please sign in to comment.