# my-notes
**Repository Path**: sunshine002/my-notes
## Basic Information
- **Project Name**: my-notes
- **Description**: my-notes is a record for development, it's not be used.
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-09-28
- **Last Updated**: 2021-09-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## Summary
my-notes is a record for development, it's not be used.
* [Software](#Software)
* [JavaLibrary](#JavaLibrary)
* [MyBatis](#MyBatis)
* [SpringBoot](#SpringBoot)
* [SQL](#SQL)
* [Transaction](#Transaction)
* [java-guava](#java-guava)
* [Canvas](#Canvas)
* [SVG](#SVG)
* [Map](#Map)
* [ECharts](#ECharts)
* [3D](#3D)
---
### Software
* HeidiSQL
* Termius
* Fluent Terminal
* VSCode
* Intellij ideas
* WinSCP
---
### JavaLibrary
* apache commons
* guava
---
### MyBatis
详细介绍
#### 解决时间小于括号解析问题
```
and time #{time}
```
#### like操作
```
like concat('%', #{value}, '%')
```
#### 自动判断插入或更新
```
ON DUPLICATE KEY UPDATE
```
#### 自动忽略重复插入
```
insert ignore into
```
#### 替换插入
```
replace into
```
#### 获取生成的自增id
```
SELECT LAST_INSERT_ID()
```
#### 增加sql超时判断
```
```
#### 时间处理
```
str_to_date(#{time}, '%Y-%m-%d %H:%i:%s')
```
---
### SpringBoot
##### 优雅的参数校验
```
function(@RequestBody @Validated Bean bean)
分组复用:@Validated(Create.class)
```
##### 全局异常
```
@RestControllerAdvice
```
#### 异步任务
```
@EnableAsync
@Async
```
---
### Transaction
#### 什么是事务
数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
#### 事务的特性
* 原子性
* 一致性
* 隔离性
* 持久性
#### 隔离级别
* 未提交读 | 已提交读 | 可重复读 | 可串行化
* InnoDB默认是可重复读级别的(可能会出现幻读)
#### 脏读
读取了前一事务未提交的数据。
#### 不可重复读
读取了前一事务提交的数据。
#### 幻读
指因为其它事务对表做了增删导致某事务两次读取的表记录数不一致问题。
#### Spring事务
事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式
* 在Mybatis中使用事务,只需在函数增加注解@Transactional
* 编程式事务管理使用TransactionTemplate
#### 分布式事务处理
* 两阶段提交(2PC)
* 三阶段提交(3PC)
---
### SQL
```
> explain sql's type
all: 全表扫描
index: 全表索引扫描
range: 有限范围的索引扫描
ref: 索引中存在重复
const: 主键为where的查询条件
```
#### Explain
explain能告诉我们mysql优化器将会如何运行你的sql语句。详细介绍
#### 索引
索引可以加快搜索的速度,类似于书的目录,但是索引对一些小表意义不大。当你需要读取表中大部分数据时,直接读取反而比索引读取更快,因为它只需要更少的磁盘定位。
索引一般采用BTree数进行存储,数据库支持单表最大16个索引。
#### 回表
通过索引获取到需要查询的数据行时,此时索引包含的字段如果无法满足要求,则需要回到主索引表进行查询,这称之为回表操作。
#### 覆盖索引
当索引中的字段完全覆盖需要查询的数据时,此时不涉及回表操作,称为覆盖索引。
#### 索引选择
一条sql语句进行查询时,如果不指定具体的索引,mysql会根据查询的行数最少、索引字段的长短等条件进行索引的选择。
#### 索引失效的几种可能
* 索引字段是字符串类型,传入的查询值是数组,反之则可;
* or查询中有字段不存在索引;
* 联合索引不满足最左匹配原则;
* like查询以%开头;
* 不满足mysql索引的选择条件。
#### 聚簇索引
将数据存储与索引放到了一块,找到索引也就找到了数据。
#### 非聚簇索引
将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,当需要访问数据时,通过索引找到磁盘相应数据,也称二级索引。
#### 数据类型
详细介绍
#### 运算符和方法
详细介绍
---
### java-guava
```
io.github.sunshine001
guava
1.0.3
```
---
### Canvas
* fabricjs
* konvajs
### SVG
* svg
* svg.js
* snap.svg
* svg editor
### Map
* 百度地图
* 百度坐标拾取
* 个性化地图
* 镂空面绘制
* 3D棱柱绘制
* 地面叠加层
* 文本标记
* 轨迹动画
* 出行线路规划
* 高德地图
### ECharts
* echarts
* 快速手册
* geojson
### 3D
* babylonjs
* three.js
* babylonjs支持: .glTF 、 .obj 、 .stl 、 .babylon