Skip to content

Commit 3ba778f

Browse files
committed
2020.7.30
1 parent fdf63e5 commit 3ba778f

13 files changed

Lines changed: 225 additions & 348 deletions

ReadMe.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ todo
248248
### MySQL
249249
* [Mysql原理与实践总结](docs/database/Mysql原理与实践总结.md)
250250
* [重新学习Mysql数据库1:无废话MySQL入门](docs/database/重新学习Mysql数据库1:无废话MySQL入门.md)
251-
* [重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB](docs/database/重新学习Mysql数据库2:MySQL 和 InnoDB.md)
251+
* [重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB](docs/database/重新学习Mysql数据库2:MySQL%20和%20InnoDB.md)
252252
* [重新学习Mysql数据库3:Mysql存储引擎与数据存储原理](docs/database/重新学习Mysql数据库3:Mysql存储引擎与数据存储原理.md)
253253
* [重新学习Mysql数据库4:Mysql索引实现原理和相关数据结构算法](docs/database/重新学习Mysql数据库4:Mysql索引实现原理和相关数据结构算法.md)
254254
* [重新学习Mysql数据库5:根据MySQL索引原理进行分析与优化](docs/database/重新学习Mysql数据库5:根据MySQL索引原理进行分析与优化.md)
@@ -345,6 +345,8 @@ todo
345345

346346
### 典例问题
347347

348+
* [熟记算法](docs/code/code.md)
349+
348350
* [Java面试大纲](https://www.jianshu.com/p/a07d1d4004b0)
349351
* [校招Java后端](https://www.zhihu.com/question/403508943/answer/1311334943)
350352
* [常见SSM](https://zhuanlan.zhihu.com/p/140394330)
@@ -354,6 +356,7 @@ todo
354356
todo
355357

356358
### 面经
359+
357360
todo
358361

359362
## 工具

docs/cache/Redis原理与实践总结.md

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,10 @@
1515
* [总结](#总结)
1616
* [分布式方案](#分布式方案)
1717
* [redis事务](#redis事务)
18+
1819
* [redis脚本事务](#redis脚本事务)
19-
* [微信公众号](#微信公众号)
20-
* [Java技术江湖](#java技术江湖)
21-
* [个人公众号:黄小斜](#个人公众号:黄小斜)
22-
23-
24-
---
25-
title: Redis原理与实践总结
26-
date: 2018-07-08 22:15:12
27-
tags:
28-
- Redis
29-
categories:
30-
- 后端
31-
- 技术总结
32-
---
33-
34-
本文主要对Redis的设计和实现原理做了一个介绍很总结,有些东西我也介绍的不是很详细准确,尽量在自己的理解范围内把一些知识点和关键性技术做一个描述。如有错误,还望见谅,欢迎指出。
35-
这篇文章主要还是参考我之前的技术专栏总结而来的。欢迎查看:
36-
37-
重新学习Redis
38-
39-
https://blog.csdn.net/column/details/21877.html
40-
<!-- more -->
20+
21+
4122

4223
## 使用和基础数据结构(外观)
4324

docs/database/Mysql原理与实践总结.md

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,6 @@
2323
* [分布式数据库](#分布式数据库)
2424

2525

26-
---
27-
title: Mysql原理与实践总结
28-
date: 2018-07-08 22:15:04
29-
tags:
30-
- Mysql
31-
categories:
32-
- 后端
33-
- 技术总结
34-
---
35-
36-
本文根据自己对MySQL的学习和实践以及各类文章与书籍总结而来。
37-
囊括了MySQL数据库的基本原理和技术。本文主要是我的一个学习总结,基于之前的系列文章做了一个概括,如有错误,还望指出,谢谢。
38-
39-
详细内容请参考我的系列文章:
40-
41-
重新学习MySQL与Redis
42-
43-
https://blog.csdn.net/column/details/21877.html
44-
<!-- more -->
4526

4627
# 数据库原理
4728
Mysql是关系数据库。
@@ -82,6 +63,8 @@ Mysql是关系数据库。
8263

8364
隔离性:两个事务之间互不相干,不能互相影响。
8465

66+
持久性:事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
67+
8568
事务的隔离级别
8669
读未提交:事务A和事务B,A事务中执行的操作,B也可以看得到,因为级别是未提交读,别人事务中还没提交的数据你也看得到。这是没有任何并发措施的级别,也是默认级别。这个问题叫做脏读,为了解决这个问题,提出了读已提交。
8770

@@ -99,7 +82,7 @@ Mysql是关系数据库。
9982

10083
# mysql原理
10184

102-
MySQL是oracle公司的免费数据库,作为关系数据库火了很久了。所以我们要学他
85+
MySQL是oracle公司的免费数据库,作为关系数据库火了很久了。所以我们要学它
10386

10487
## mysql客户端,服务端,存储引擎,文件系统
10588

@@ -197,15 +180,15 @@ User Records 就是整个页面中真正用于存放行记录的部分,而 Fre
197180

198181
## mysql的索引,b树,聚集索引
199182

200-
1 MySQL的innodb支持聚簇索引,myisam不支持聚簇索引。
183+
1. MySQL的innodb支持聚簇索引,myisam不支持聚簇索引。
201184

202185
innodb在建表时自动按照第一个非空字段或者主键建立聚簇索引。mysql使用B+树建立索引。
203186

204187
每一个非叶子结点只存储主键值,而叶子节点则是一个数据页,这个数据页就是上面所说的存储数据的page页。
205188

206189
一个节点页对应着多行数据,每个节点按照顺序使用指针连成一个链表。mysql使用索引访问一行数据时,先通过log2n的时间访问到叶子节点,然后在数据页中按照行数链表执行顺序查找,直到找到那一行数据。
207190

208-
2 b+树索引可以很好地支持范围搜索,因为叶子节点通过指针相连。
191+
2. b+树索引可以很好地支持范围搜索,因为叶子节点通过指针相连。
209192

210193
## mysql的explain 慢查询日志
211194

@@ -233,8 +216,8 @@ mysql慢查询日志可以在mysql的,my.cnf文件中配置开启,然后执行
233216
234217
​ EXPLAIN SELECT * FROM vote_record WHERE id > 0 AND vote_num > 1000;
235218
236-
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
237-
219+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
220+
238221
1 SIMPLE vote_record \N range PRIMARY,votenum,vote PRIMARY 4 \N 498253 50.00 Using where
239222

240223

@@ -313,7 +296,7 @@ innodb支持行级锁和事务,而myisam只支持表锁,它的所有操作
313296

314297
通过时间戳来判断先后顺序,并且是无锁的。但是需要额外存一个字段。
315298

316-
读操作比较自己的版本号,自动读取比自己版本号新的版本。不读
299+
读操作比较自己的版本号,自动读取比自己版本号新的版本。否则不读
317300

318301
写操作自动覆盖写版本号比自己的版本号早的版本。否则不写。
319302

docs/database/重新学习MySQL数据库10:MySQL里的那些日志们.md

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,6 @@
99
* [总结](#总结)
1010

1111

12-
本文转自互联网
13-
14-
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
15-
> https://github.com/h2pl/Java-Tutorial
16-
17-
喜欢的话麻烦点下Star哈
18-
19-
本也将整理到我的个人博客:
20-
> www.how2playlife.com
21-
22-
更多Java技术文章将陆续在微信公众号【Java技术江湖】更新,敬请关注。
23-
24-
本文是《重新学习MySQL数据库》系列其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。
25-
26-
该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时间,通过执行计划对SQL性能进行分析,再到MySQL的主从复制、主备部署等内容,以便让你更完整地了解整个MySQL方面的技术体系,形成自己的知识框架。
27-
28-
如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。
29-
30-
<!-- more -->
31-
32-
<!-- more -->
3312

3413

3514
## 重新学习MySQL数据库10:MySQL里的那些日志们

docs/database/重新学习MySQL数据库11:以Java的视角来聊聊SQL注入.md

Lines changed: 7 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,60 +3,24 @@
33
* [前言](#前言)
44
* [靶场准备](#靶场准备)
55
* [SQL注入测试](#sql注入测试)
6+
67
* [注入原理分析](#注入原理分析)
7-
* [JDBC的预处理](#jdbc的预处理)
8-
* [Mybatis下注入防范](#mybatis下注入防范)
9-
* [JPA注入防范](#jpa注入防范)
10-
* [SQL注入的其他防范办法](#sql注入的其他防范办法)
11-
* [小结](#小结)
12-
13-
14-
本文转自互联网
15-
16-
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
17-
> https://github.com/h2pl/Java-Tutorial
18-
19-
喜欢的话麻烦点下Star哈
20-
21-
本也将整理到我的个人博客:
22-
> www.how2playlife.com
23-
24-
更多Java技术文章将陆续在微信公众号【Java技术江湖】更新,敬请关注。
25-
26-
本文是《重新学习MySQL数据库》系列其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。
27-
28-
该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时间,通过执行计划对SQL性能进行分析,再到MySQL的主从复制、主备部署等内容,以便让你更完整地了解整个MySQL方面的技术体系,形成自己的知识框架。
298

30-
如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。
31-
32-
<!-- more -->
33-
34-
<!-- more -->
35-
36-
本文转自互联网
37-
38-
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
39-
> https://github.com/h2pl/Java-Tutorial
40-
41-
喜欢的话麻烦点下Star哈
42-
43-
文章首发于我的个人博客:
44-
> www.how2playlife.com
9+
* [JDBC的预处理](#jdbc的预处理)
4510

46-
本文是微信公众号【Java技术江湖】的《重新学习MySQL数据库》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。
11+
* [Mybatis下注入防范](#mybatis下注入防范)
4712

48-
该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时间,通过执行计划对SQL性能进行分析,再到MySQL的主从复制、主备部署等内容,以便让你更完整地了解整个MySQL方面的技术体系,形成自己的知识框架。
13+
* [JPA注入防范](#jpa注入防范)
4914

50-
如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。
15+
* [SQL注入的其他防范办法](#sql注入的其他防范办法)
5116

52-
<!-- more -->
17+
* [小结](#小结)
5318

19+
5420

5521
## 前言
5622

5723

58-
59-
6024
### 靶场准备
6125

6226
首先我们来准备一个web接口服务,该服务可以提供管理员的信息查询,这里我们采用springboot + jersey 来构建web服务框架,数据库则采用最常用的mysql。下面,我们来准备测试环境,首先建立一张用户表jwtk_admin,SQL如下:

docs/database/重新学习MySQL数据库6:浅谈MySQL的中事务与锁.md

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,6 @@
3535
* [PostgreSQL 与 MVCC](#postgresql-与-mvcc)
3636

3737

38-
本文转自互联网
39-
40-
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
41-
> https://github.com/h2pl/Java-Tutorial
42-
43-
喜欢的话麻烦点下Star哈
44-
45-
本也将整理到我的个人博客:
46-
> www.how2playlife.com
47-
48-
更多Java技术文章将陆续在微信公众号【Java技术江湖】更新,敬请关注。
49-
50-
本文是《重新学习MySQL数据库》系列其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。
51-
52-
该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时间,通过执行计划对SQL性能进行分析,再到MySQL的主从复制、主备部署等内容,以便让你更完整地了解整个MySQL方面的技术体系,形成自己的知识框架。
53-
54-
如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。
55-
56-
<!-- more -->
57-
58-
<!-- more -->
59-
60-
6138

6239
## 『浅入深出』MySQL 中事务的实现
6340

@@ -375,9 +352,9 @@ MySQL 中实现的多版本两阶段锁协议(Multiversion 2PL)将 MVCC 和
375352

376353
MySQL 在InnoDB引擎下有当前读和快照读两种模式。
377354

378-
1 当前读即加锁读,读取记录的最新版本号,会加锁保证其他并发事物不能修改当前记录,直至释放锁。插入/更新/删除操作默认使用当前读,显示的为select语句加lock in share mode或for update的查询也采用当前读模式。
355+
1 当前读即加锁读,读取记录的最新版本号,会加锁保证其他并发事务不能修改当前记录,直至释放锁。插入/更新/删除操作默认使用当前读,显式的为select语句加lock in share mode或for update的查询也采用当前读模式。
379356

380-
2 快照读:不加锁,读取记录的快照版本,而非最新版本,使用MVCC机制,最大的好处是读取不需要加锁,读写不冲突,用于读操作多于写操作的应用,因此在不显示加[lock in share mode]/[for update]的select语句,即普通的一条select语句默认都是使用快照读MVCC实现模式。所以楼主的为了让大家明白所做的演示操作,既有当前读也有快照读……
357+
2 快照读:不加锁,读取记录的快照版本,而非最新版本,使用MVCC机制,最大的好处是读取不需要加锁,读写不冲突,用于读操作多于写操作的应用,因此在不显式加[lock in share mode]/[for update]的select语句,即普通的一条select语句默认都是使用快照读MVCC实现模式。所以楼主的为了让大家明白所做的演示操作,既有当前读也有快照读……
381358

382359
1.1 什么是MVCC
383360

@@ -395,7 +372,7 @@ MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储
395372

396373
2.MVCC 具体实现分析
397374

398-
下面,我们通过InnoDB的MVCC实现来分析MVCC使怎样进行并发控制的.  InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),没开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID.下面看一下在REPEATABLE READ隔离级别下,MVCC具体是如何操作的.
375+
下面,我们通过InnoDB的MVCC实现来分析MVCC使怎样进行并发控制的.  InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),每开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID.下面看一下在REPEATABLE READ隔离级别下,MVCC具体是如何操作的.
399376

400377
2.1简单的小例子
401378

docs/database/重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系.md

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
* [Innodb中的事务隔离级别和锁的关系](#innodb中的事务隔离级别和锁的关系)
44
* [事务中的加锁方式](#事务中的加锁方式)
5+
56
* [](#)
67
* [MySQL中锁的种类](#mysql中锁的种类)
78
* [Read Committed(读取提交内容)](#read-committed(读取提交内容))
@@ -12,31 +13,12 @@
1213
* [MVCC在MySQL的InnoDB中的实现](#mvcc在mysql的innodb中的实现)
1314
* [“读”与“读”的区别](#读与读的区别)
1415
* [](#-2)
16+
1517
* [](#-3)
16-
* [](#-4)
17-
18-
19-
本文转自互联网
20-
21-
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
22-
> https://github.com/h2pl/Java-Tutorial
23-
24-
喜欢的话麻烦点下Star哈
25-
26-
本也将整理到我的个人博客:
27-
> www.how2playlife.com
28-
29-
更多Java技术文章将陆续在微信公众号【Java技术江湖】更新,敬请关注。
30-
31-
本文是《重新学习MySQL数据库》系列其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。
32-
33-
该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时间,通过执行计划对SQL性能进行分析,再到MySQL的主从复制、主备部署等内容,以便让你更完整地了解整个MySQL方面的技术体系,形成自己的知识框架。
34-
35-
如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。
36-
37-
<!-- more -->
38-
39-
<!-- more -->
18+
19+
* [](#-4)
20+
21+
4022

4123

4224
## Innodb中的事务隔离级别和锁的关系

0 commit comments

Comments
 (0)