Skip to content

Commit 69fb29c

Browse files
author
chufan
committed
Merge branch 'next' into feat/add-comment-plugin
2 parents e2d047f + 6690508 commit 69fb29c

File tree

110 files changed

+918
-1097
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+918
-1097
lines changed
File renamed without changes.

docs/.vuepress/config/navbar.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,17 @@ export default [
3232
text: "读书整理",
3333
link: "/manuscripts/read-books",
3434
},
35-
35+
// {
36+
// text: "网站",
37+
// children:[
38+
// "/manuscripts/other/公众号文章.md",
39+
// "/manuscripts/other/技术文档.md",
40+
// {
41+
// text:"RoadMap",
42+
// link:"https://142vip-cn.feishu.cn/share/base/view/shrcnxtFKV2JfBZbqFh0GUxzTOg"
43+
// }
44+
// ],
45+
// },
3646
{
3747
text: "其他",
3848
link: "/manuscripts/other",

docs/.vuepress/config/theme.config.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -141,27 +141,27 @@ export default {
141141
"XiGua"
142142
],
143143
rootComponents: {
144-
// 公告
145-
notice: [
146-
{
147-
path: "/",
148-
title: "在线浏览",
149-
content: "网站无法访问时,建议通过科学上网访问备用网络",
150-
actions: [
151-
{
152-
text: "尝鲜版",
153-
link: "https://142vip.github.io/JavaScriptCollection",
154-
type: "default",
155-
},
156-
{
157-
text: "稳定版",
158-
link: "https://142vip.cn/JavaScriptCollection",
159-
type: "primary",
160-
},
161-
],
162-
fullscreen: false,
163-
},
164-
],
144+
// 公告 参考:https://plugin-components.vuejs.press/zh/guide/notice.html
145+
// notice: [
146+
// {
147+
// path: "/",
148+
// title: "在线浏览",
149+
// content: "网站无法访问时,建议通过科学上网访问备用网络",
150+
// actions: [
151+
// {
152+
// text: "尝鲜版",
153+
// link: "https://142vip.github.io/JavaScriptCollection",
154+
// type: "default",
155+
// },
156+
// {
157+
// text: "稳定版",
158+
// link: "https://142vip.cn/JavaScriptCollection",
159+
// type: "primary",
160+
// },
161+
// ],
162+
// fullscreen: false,
163+
// },
164+
// ],
165165
},
166166
},
167167
}
Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
export const battleInterviewSidebar = [
22
{
33
text: '面经分享',
4-
link: 'introduce-share',
4+
prefix: 'problems',
55
children: [
66
{
77
text: '接口幂等',
8-
link: 'problems/接口幂等.md'
8+
link: '接口幂等.md'
99
},
1010
{
11-
text: 'Node面试',
12-
link: 'problems/Node面试.md'
11+
text: 'Node',
12+
link: 'Node面试.md'
1313
},
1414
{
15-
text: 'Nginx面试',
16-
link: 'problems/Nginx面试.md'
15+
text: 'Nginx',
16+
link: 'Nginx面试.md'
1717
},
1818
{
19-
text: 'MySQL面试',
20-
link: 'problems/MySQL面试.md'
19+
text: 'MySQL',
20+
link: 'MySQL面试.md'
2121
}
2222
]
2323
},
@@ -35,11 +35,7 @@ export const battleInterviewSidebar = [
3535
]
3636
},
3737
{
38-
text: '工作机会',
39-
link: 'social-recruit'
40-
},
41-
{
42-
text: '小技巧',
38+
text: '面试技巧',
4339
link: 'social-recruit'
4440
}
4541
]

docs/manuscripts/battle-interview/problems/MySQL面试.md

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
# MySQL面试
22

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

7-
### 基础架构
4+
## 基础架构
85

96
> 由外向里,逐步深入
107
@@ -15,7 +12,7 @@
1512

1613

1714

18-
### 存储引擎
15+
## 存储引擎
1916

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

3027

3128

32-
#### 查看存储引擎
29+
### 查看存储引擎
3330

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

5653

5754

58-
### 数据类型
55+
## 数据类型
5956

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

7269

7370

74-
### 索引(单独重点来)
71+
## 索引(单独重点来)
7572

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

80-
##### 优点
81-
77+
优点:
8278
- **提高数据检索效率,降低数据库IO成本**
8379
- **降低数据排序的成本,降低CPU的消耗**
8480

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

9085

9186

9287

9388

94-
### 事务
89+
## 事务
9590

9691
> 主要用于处理操作量大,复杂度高的数据
9792
98-
#### 基本要素(ACID)
93+
### 基本要素(ACID)
9994

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

124-
### 事务隔离级别
119+
## 事务隔离级别
125120

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

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

166161

167162

168-
#### MVCC 多版本并发控制
163+
### MVCC 多版本并发控制
169164

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

189184

190185

191-
### 事务的实现
186+
## 事务的实现
192187

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

202-
##### MySQL日志分类
197+
### MySQL日志分类
203198

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

239-
### MySQL锁机制
234+
## MySQL锁机制
240235

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

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

@@ -268,7 +263,7 @@ general log 普通日志
268263
| InnoDB ||| |
269264
| Memory | || |
270265

271-
### MyISAM 表锁
266+
## MyISAM 表锁
272267

273268
MyISAM 的表锁有两种模式:
274269

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

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

282-
### InnoDB 行锁
277+
## InnoDB 行锁
283278

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

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

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

296-
#### 加锁机制
291+
### 加锁机制
297292

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

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

306301

307302

308-
#### 锁模式(InnoDB有三种行锁的算法)
303+
### 锁模式(InnoDB有三种行锁的算法)
309304

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

348343

349344

350-
#### 死锁
345+
### 死锁
351346

352347
**死锁产生**
353348

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

380375

381376

382-
### MySQL分区
377+
## 分区
383378

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

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

411406

412407

413-
### MySQL分表
408+
## 分表
414409

415410
**垂直拆分**
416411

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

434429

435430

436-
### MySQL分库
431+
## 分库
437432

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

455450

456451

457-
### 主从复制
452+
## 主从复制
458453

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

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

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

465-
#### 复制的基本原则
460+
### 复制的基本原则
466461

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

473468

474469

475-
### 三个范式
470+
## 三个范式
476471

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

481476

482477

483-
### 百万级别或以上的数据如何删除
478+
## 百万级别或以上的数据如何删除
484479

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

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

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

489+
## 参考资料
493490

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

0 commit comments

Comments
 (0)