From 3e3026e13126d74061587c7904e1739c7888c8df Mon Sep 17 00:00:00 2001 From: Charles7c Date: Tue, 17 Sep 2024 17:36:01 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20pages=20from=20@=20Charles7c/c?= =?UTF-8?q?harles7c.github.io@dc5e1596160edcea70f8aa2e6e64cd639d397888=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 2 +- about/index.html | 2 +- about/me.html | 2 +- archives.html | 2 +- ...5\214\226\346\212\200\345\267\247.md.s7o9_T92.js" | 6 +++--- ...\226\346\212\200\345\267\247.md.s7o9_T92.lean.js" | 2 +- ...0\267\265\346\200\273\347\273\223.md.wqjobhXQ.js" | 12 ++++++------ ...\265\346\200\273\347\273\223.md.wqjobhXQ.lean.js" | 2 +- ...274\230\345\214\226\346\212\200\345\267\247.html" | 4 ++-- ...275\277\347\224\250\346\212\200\345\267\247.html" | 2 +- ...0Hutool\345\267\245\345\205\267\347\261\273.html" | 2 +- ...70\347\224\250Linux\345\221\275\344\273\244.html" | 2 +- ...\267\245\345\205\267\347\261\273-BigDecimal.html" | 2 +- ...215\225\344\276\213\346\250\241\345\274\217.html" | 2 +- ...\270\347\224\250SQL\345\207\275\346\225\260.html" | 2 +- ...217\220\344\272\244\350\256\260\345\275\225.html" | 2 +- ...200\205\345\222\214\351\202\256\347\256\261.html" | 2 +- ...200\205\345\222\214\351\202\256\347\256\261.html" | 2 +- ...220\215\345\222\214\351\202\256\347\256\261.html" | 2 +- ...275\221\347\273\234\344\273\243\347\220\206.html" | 2 +- ...0\347\224\250Docker\345\221\275\344\273\244.html" | 2 +- ...\270\347\224\250Git\345\221\275\344\273\244.html" | 2 +- ...224\250\345\277\253\346\215\267\351\224\256.html" | 2 +- .../26/Docker\345\256\211\350\243\205OpenLDAP.html" | 2 +- .../10/27/Docker\345\256\211\350\243\205Consul.html" | 2 +- .../10/28/Docker\345\256\211\350\243\205MinIO.html" | 2 +- .../10/31/CentOS\345\256\211\350\243\205Docker.html" | 2 +- ...250\213\345\272\217\350\260\203\350\257\225.html" | 2 +- ...201\260\350\211\262\346\230\276\347\244\272.html" | 2 +- ...256\236\350\267\265\346\200\273\347\273\223.html" | 4 ++-- ...216\245\345\217\243\345\256\236\347\216\260.html" | 2 +- categories/fragments/index.html | 2 +- ...232\204\345\233\236\346\224\266\347\253\231.html" | 2 +- ...227\217\347\232\204\351\231\267\351\230\261.html" | 2 +- ...r also for Spring Boot default configuration.html | 2 +- ...224\273\345\207\273\351\243\216\351\231\251.html" | 2 +- ...227\240\346\263\225\350\257\273\345\217\226.html" | 2 +- ...225\260\346\215\256\351\227\256\351\242\230.html" | 2 +- ...275\225\346\211\247\350\241\214\357\274\237.html" | 2 +- ...7\274\214\346\212\245java command not found.html" | 2 +- ...227\240\346\263\225\345\220\257\345\212\250.html" | 2 +- ...32Permission denied\351\224\231\350\257\257.html" | 2 +- ...275\223\347\232\204\351\227\256\351\242\230.html" | 2 +- ...231\275\347\232\204\351\227\256\351\242\230.html" | 2 +- ...256\211\350\243\205\346\212\245\351\224\231.html" | 2 +- ...275\221\347\273\234\344\273\243\347\220\206.html" | 2 +- ...224\231\347\232\204\351\227\256\351\242\230.html" | 2 +- ...224\231\347\232\204\351\227\256\351\242\230.html" | 2 +- ...237\223\347\232\204\351\227\256\351\242\230.html" | 2 +- categories/issues/index.html | 2 +- ...77\221N\345\244\251\346\227\245\346\234\237.html" | 2 +- ...273\237\350\256\241\344\277\241\346\201\257.html" | 2 +- ...274\230\345\214\226\346\226\271\346\241\210.html" | 2 +- categories/solutions/index.html | 2 +- .../2021/01/14/\345\210\235\350\257\206Lombok.html" | 2 +- ...277\253\351\200\237\345\205\245\351\227\250.html" | 2 +- ...277\253\351\200\237\345\205\245\351\227\250.html" | 2 +- ...277\253\351\200\237\345\205\245\351\227\250.html" | 2 +- ...277\253\351\200\237\345\205\245\351\227\250.html" | 2 +- categories/tools/index.html | 2 +- ...216\257\345\242\203\346\220\255\345\273\272.html" | 2 +- ...200\344\270\252Java\347\250\213\345\272\217.html" | 2 +- .../03-\345\210\235\350\257\206Eclipse.html" | 2 +- ...202\243\347\202\271\344\272\213\345\204\277.html" | 2 +- ...207\217\345\222\214\345\270\270\351\207\217.html" | 2 +- ...232\204\350\277\220\347\256\227\347\254\246.html" | 2 +- ...222\214\346\265\201\347\250\213\345\233\276.html" | 2 +- ...200\211\346\213\251\347\273\223\346\236\204.html" | 2 +- ...200\211\346\213\251\347\273\223\346\236\204.html" | 2 +- ...276\252\347\216\257\347\273\223\346\236\204.html" | 2 +- ...244\232\351\207\215\345\276\252\347\216\257.html" | 2 +- ...260\203\350\257\225\345\205\245\351\227\250.html" | 2 +- ...270\200\347\273\264\346\225\260\347\273\204.html" | 2 +- ...244\232\347\273\264\346\225\260\347\273\204.html" | 2 +- ...261\273\345\222\214\345\257\271\350\261\241.html" | 2 +- ...0\210\344\270\216\346\263\233\345\236\213-1.html" | 2 +- .../01-CentOS\345\256\211\350\243\205JDK.html" | 2 +- courses/java/index.html | 2 +- ...277\253\351\200\237\345\205\245\351\227\250.html" | 2 +- ...240\270\345\277\203\345\257\271\350\261\241.html" | 2 +- ...205\215\347\275\256\346\226\207\344\273\266.html" | 2 +- ...237\245\350\257\242\345\205\203\347\264\240.html" | 2 +- ...210\240\346\224\271\345\205\203\347\264\240.html" | 2 +- ...230\240\345\260\204\345\205\203\347\264\240.html" | 2 +- ...274\223\345\255\230\345\205\203\347\264\240.html" | 2 +- .../08-\345\212\250\346\200\201SQL.html" | 2 +- ...277\253\351\200\237\345\205\245\351\227\250.html" | 2 +- ...210\240\346\224\271\346\223\215\344\275\234.html" | 2 +- ...237\245\350\257\242\346\223\215\344\275\234.html" | 2 +- ...273\266\346\236\204\351\200\240\345\231\250.html" | 2 +- ...240\201\347\224\237\346\210\220\345\231\250.html" | 2 +- courses/mybatis/index.html | 2 +- ...243\205\344\270\216\351\205\215\347\275\256.html" | 2 +- .../01-CentOS\345\256\211\350\243\205MySQL.html" | 2 +- .../02-Docker\345\256\211\350\243\205MySQL.html" | 2 +- courses/mysql/index.html | 2 +- hashmap.json | 2 +- index.html | 2 +- tags.html | 2 +- 99 files changed, 108 insertions(+), 108 deletions(-) rename "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.js" => "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.js" (90%) rename "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.lean.js" => "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.lean.js" (67%) rename "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.js" => "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.js" (98%) rename "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.lean.js" => "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.lean.js" (83%) diff --git a/404.html b/404.html index d58dd07f07..6e1051265a 100644 --- a/404.html +++ b/404.html @@ -29,7 +29,7 @@
- + \ No newline at end of file diff --git a/about/index.html b/about/index.html index eaf060d55f..7875cef7ec 100644 --- a/about/index.html +++ b/about/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/about/me.html b/about/me.html index 5cf553c828..ef8c7b18e0 100644 --- a/about/me.html +++ b/about/me.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/archives.html b/archives.html index e5b8c694ea..9e53050a5a 100644 --- a/archives.html +++ b/archives.html @@ -36,7 +36,7 @@
- + \ No newline at end of file diff --git "a/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.js" "b/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.js" similarity index 90% rename from "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.js" rename to "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.js" index 4dc90fbdf6..20bb7198ab 100644 --- "a/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.js" +++ "b/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.js" @@ -1,10 +1,10 @@ -import{_ as g}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as c,D as p,o as k,c as o,k as s,a as i,I as a,w as y,R as e,b as A,e as F}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const z=JSON.parse('{"title":"个人 SQL 优化技巧","description":"","frontmatter":{"title":"个人 SQL 优化技巧","author":"查尔斯","date":"2019/12/28 10:00","isTop":true,"categories":["杂碎逆袭史"],"tags":["SQL","SQL优化"]},"headers":[],"relativePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","filePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","lastUpdated":1671423875000}'),_={name:"categories/fragments/2019/12/28/个人SQL优化技巧.md"},D={id:"个人-sql-优化技巧",tabindex:"-1"},C=s("a",{class:"header-anchor",href:"#个人-sql-优化技巧","aria-label":'Permalink to "个人 SQL 优化技巧 "'},"​",-1),u=s("h2",{id:"查询优化",tabindex:"-1"},[i("查询优化 "),s("a",{class:"header-anchor",href:"#查询优化","aria-label":'Permalink to "查询优化"'},"​")],-1),b={id:"如果确定结果只有一条-使用-limit-1",tabindex:"-1"},E=s("a",{class:"header-anchor",href:"#如果确定结果只有一条-使用-limit-1","aria-label":'Permalink to "如果确定结果只有一条,使用 LIMIT 1 "'},"​",-1),m=e('

我们在根据一个或多个条件查询数据时,如果确定查询结果只有一条,可以在结尾处添加 LIMIT 1 进行限制。

这样既可以让 EXPLAIN 中的 type 达到 const 类型,又可以免去担忧在程序中出现接收是单个对象却返回了一个集合对象的异常问题。

sql
# email 不是主键,也没有设置唯一约束,根据熵增定律,查询结果是有可能会出现多条的\nSELECT * FROM `sys_user` WHERE `email` = 'charles7c@126.com' LIMIT 1;
sql
# user_id 是主键,主键是非空唯一的,那么不需要添加 LIMIT 进行限制\nSELECT * FROM `sys_user` WHERE `user_id` = 1;
',3),v={id:"避免隐式类型转换",tabindex:"-1"},B=s("a",{class:"header-anchor",href:"#避免隐式类型转换","aria-label":'Permalink to "避免隐式类型转换 "'},"​",-1),T=e('

我们在使用 MySQL 时,或多或少都感受过 MySQL 的隐式类型转换。例如:user_id 是整数类型,但是依然可以使用字符串类型数据来进行判断。MySQL 帮你做完这种隐式类型转换是有代价的,什么代价呢? 索引不再生效了而已

sql
SELECT * FROM `sys_user` WHERE `user_id` = 10;
sql
SELECT * FROM `sys_user` WHERE `user_id` = '10';

数据库表设计

',3),f={id:"列名带上前缀",tabindex:"-1"},N=s("a",{class:"header-anchor",href:"#列名带上前缀","aria-label":'Permalink to "列名带上前缀 "'},"​",-1),x=e('

部分列名带上前缀或缩写,可以有效减少在连接查询、ORM 映射等场景下刻意起别名或思考区分不同的问题。

sql
CREATE TABLE `sys_customer` (\n  `customer_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '客户ID',\n  `customer_name` varchar(255) NOT NULL COMMENT '客户名称',\n  PRIMARY KEY (`customer_id`) USING BTREE,\n) COMMENT = '客户表';\n\nCREATE TABLE `sys_contact_user` (\n  `contact_user_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '联系人ID',\n  `contact_user_name` varchar(255) NOT NULL COMMENT '联系人名称',\n  `customer_id` bigint(20) UNSIGNED NOT NULL COMMENT '客户ID',\n  PRIMARY KEY (`contact_user_id`) USING BTREE,\n) COMMENT = '联系人表';\n\n# 连接查询,你完全不需要用脑去考虑到底是 c.`id` 还是 cu.`customer_id` 的问题,都是 `customer_id`\nSELECT * FROM `sys_customer` c \nLEFT JOIN `sys_contact_user` cu ON c.`customer_id` = cu.`customer_id`
',2),I={id:"非负数列添加unsigned无符号约束",tabindex:"-1"},S=s("a",{class:"header-anchor",href:"#非负数列添加unsigned无符号约束","aria-label":'Permalink to "非负数列添加UNSIGNED无符号约束 "'},"​",-1),L=e(`

在大部分的数据存储场景中,我们只会使用正整数,如果能确定该列为非负数,建议添加 UNSIGNED 无符号约束。

sql
# 不添加 UNSIGNED 约束,取值范围
+import{_ as c}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as g,D as p,o as k,c as o,k as s,a as i,I as a,w as y,R as e,b as A,e as F}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const X=JSON.parse('{"title":"个人 SQL 优化技巧","description":"","frontmatter":{"title":"个人 SQL 优化技巧","author":"查尔斯","date":"2019/12/28 10:00","isTop":true,"categories":["杂碎逆袭史"],"tags":["SQL","SQL优化"]},"headers":[],"relativePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","filePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","lastUpdated":1671423875000}'),_={name:"categories/fragments/2019/12/28/个人SQL优化技巧.md"},D={id:"个人-sql-优化技巧",tabindex:"-1"},C=s("a",{class:"header-anchor",href:"#个人-sql-优化技巧","aria-label":'Permalink to "个人 SQL 优化技巧 "'},"​",-1),b=s("h2",{id:"查询优化",tabindex:"-1"},[i("查询优化 "),s("a",{class:"header-anchor",href:"#查询优化","aria-label":'Permalink to "查询优化"'},"​")],-1),u={id:"如果确定结果只有一条-使用-limit-1",tabindex:"-1"},E=s("a",{class:"header-anchor",href:"#如果确定结果只有一条-使用-limit-1","aria-label":'Permalink to "如果确定结果只有一条,使用 LIMIT 1 "'},"​",-1),m=e('

我们在根据一个或多个条件查询数据时,如果确定查询结果只有一条,可以在结尾处添加 LIMIT 1 进行限制。

这样既可以让 EXPLAIN 中的 type 达到 const 类型,又可以免去担忧在程序中出现接收是单个对象却返回了一个集合对象的异常问题。

sql
# email 不是主键,也没有设置唯一约束,根据熵增定律,查询结果是有可能会出现多条的\nSELECT * FROM `sys_user` WHERE `email` = 'charles7c@126.com' LIMIT 1;
sql
# user_id 是主键,主键是非空唯一的,那么不需要添加 LIMIT 进行限制\nSELECT * FROM `sys_user` WHERE `user_id` = 1;
',3),v={id:"避免隐式类型转换",tabindex:"-1"},B=s("a",{class:"header-anchor",href:"#避免隐式类型转换","aria-label":'Permalink to "避免隐式类型转换 "'},"​",-1),T=e('

我们在使用 MySQL 时,或多或少都感受过 MySQL 的隐式类型转换。例如:user_id 是整数类型,但是依然可以使用字符串类型数据来进行判断。MySQL 帮你做完这种隐式类型转换是有代价的,什么代价呢? 索引不再生效了而已

sql
SELECT * FROM `sys_user` WHERE `user_id` = 10;
sql
SELECT * FROM `sys_user` WHERE `user_id` = '10';

数据库表设计

',3),N={id:"列名带上前缀",tabindex:"-1"},f=s("a",{class:"header-anchor",href:"#列名带上前缀","aria-label":'Permalink to "列名带上前缀 "'},"​",-1),I=e('

部分列名带上前缀或缩写,可以有效减少在连接查询、ORM 映射等场景下刻意起别名或思考区分不同的问题。

sql
CREATE TABLE `sys_customer` (\n  `customer_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '客户ID',\n  `customer_name` varchar(255) NOT NULL COMMENT '客户名称',\n  PRIMARY KEY (`customer_id`) USING BTREE,\n) COMMENT = '客户表';\n\nCREATE TABLE `sys_contact_user` (\n  `contact_user_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '联系人ID',\n  `contact_user_name` varchar(255) NOT NULL COMMENT '联系人名称',\n  `customer_id` bigint(20) UNSIGNED NOT NULL COMMENT '客户ID',\n  PRIMARY KEY (`contact_user_id`) USING BTREE,\n) COMMENT = '联系人表';\n\n# 连接查询,你完全不需要用脑去考虑到底是 c.`id` 还是 cu.`customer_id` 的问题,都是 `customer_id`\nSELECT * FROM `sys_customer` c \nLEFT JOIN `sys_contact_user` cu ON c.`customer_id` = cu.`customer_id`
',2),x={id:"非负数列添加unsigned无符号约束",tabindex:"-1"},S=s("a",{class:"header-anchor",href:"#非负数列添加unsigned无符号约束","aria-label":'Permalink to "非负数列添加UNSIGNED无符号约束 "'},"​",-1),L=e(`

在大部分的数据存储场景中,我们只会使用正整数,如果能确定该列为非负数,建议添加 UNSIGNED 无符号约束。

sql
# 不添加 UNSIGNED 约束,取值范围
 TINYINT:[-128, 127]
 # 添加 UNSIGNED 约束,取值范围
-TINYINT:[0, 255]
`,2),M={id:"合理采用整数类型",tabindex:"-1"},P=s("a",{class:"header-anchor",href:"#合理采用整数类型","aria-label":'Permalink to "合理采用整数类型 "'},"​",-1),O=e('

例如:状态类的信息,状态再多能有多少个,采用 TINYINT 即可,减少存储空间占用。

下方表数据整理于:MySQL 5.7官方文档/数据类型/数值数据类型/整数类型

类型存储(字节)取值范围取值范围(无符号)
TINYINT1[-128, 127][0, 255]
SMALLINT2[-32768, 32767][0, 65535]
MEDIUMINT3[-8388608, 8388607][0, 16777215]
INT4[-2147483648, 2147483647][0, 4294967295]
BIGINT8[-2^63^, 2^63^-1][0, 2^64^-1]
',3),R={id:"布尔列采用bit类型",tabindex:"-1"},q=s("a",{class:"header-anchor",href:"#布尔列采用bit类型","aria-label":'Permalink to "布尔列采用bit类型 "'},"​",-1),U=e(`

例如:是否删除这种只有两种状态的信息,在表设计时建议对该列设置 bit 类型(0表示否/假/false,1表示是/真/true),在程序语言中可以采用 boolean 类型对应。

sql
\`is_deleted\` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已删除(0否 1是)'
java
@Data
+TINYINT:[0, 255]
`,2),M={id:"合理采用整数类型",tabindex:"-1"},P=s("a",{class:"header-anchor",href:"#合理采用整数类型","aria-label":'Permalink to "合理采用整数类型 "'},"​",-1),O=e('

例如:状态类的信息,状态再多能有多少个,采用 TINYINT 即可,减少存储空间占用。

下方表数据整理于:MySQL 5.7官方文档/数据类型/数值数据类型/整数类型

类型存储(字节)取值范围取值范围(无符号)
TINYINT1[-128, 127][0, 255]
SMALLINT2[-32768, 32767][0, 65535]
MEDIUMINT3[-8388608, 8388607][0, 16777215]
INT4[-2147483648, 2147483647][0, 4294967295]
BIGINT8[-2^63^, 2^63^-1][0, 2^64^-1]
',3),R={id:"布尔列采用bit类型",tabindex:"-1"},U=s("a",{class:"header-anchor",href:"#布尔列采用bit类型","aria-label":'Permalink to "布尔列采用bit类型 "'},"​",-1),q=e(`

例如:是否删除这种只有两种状态的信息,在表设计时建议对该列设置 bit 类型(0表示否/假/false,1表示是/真/true),在程序语言中可以采用 boolean 类型对应。

sql
\`is_deleted\` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已删除(0否 1是)'
java
@Data
 public class User {
     /**
      * 是否已删除(0否 1是)
      */
     private Boolean isDeleted;
-}

数据库设计

`,3),Q={id:"采用utf8mb4编码",tabindex:"-1"},V=s("a",{class:"header-anchor",href:"#采用utf8mb4编码","aria-label":'Permalink to "采用utf8mb4编码 "'},"​",-1),Y=e('

如果要存储特殊字符(例如:emoij表情符),使用 utf8mb4 编码。

MySQL 5.5.3 后增加了一个新的编码: utf8mb4 ,其中 mb4 是 most bytes 4 的意思,用于兼容四字节的 unicode。

utf8mb4 是 utf8 的超集,除了将编码改为 utf8mb4 外不需要做其他转换。

设计数据库时如果想要允许用户使用特殊符号,最好使用 utf8mb4 编码来存储,使得数据库有更好的兼容性,但是这样设计会导致耗费更多的存储空间。

',1);function w(l,G,K,J,W,X){const t=p("Badge"),d=g,r=p("ClientOnly");return k(),o("div",null,[s("h1",D,[i("个人 SQL 优化技巧 "),a(t,{text:"持续更新",type:"warning"}),i(),C]),a(r,null,{default:y(()=>{var n,h;return[(((n=l.$frontmatter)==null?void 0:n.aside)??!0)&&(((h=l.$frontmatter)==null?void 0:h.showArticleMetadata)??!0)?(k(),A(d,{key:0,article:l.$frontmatter},null,8,["article"])):F("",!0)]}),_:1}),u,s("h3",b,[i("如果确定结果只有一条,使用 LIMIT 1 "),a(t,{text:"建议"}),i(),E]),m,s("h3",v,[i("避免隐式类型转换 "),a(t,{text:"强制",type:"danger"}),i(),B]),T,s("h3",f,[i("列名带上前缀 "),a(t,{text:"建议"}),i(),N]),x,s("h3",I,[i("非负数列添加UNSIGNED无符号约束 "),a(t,{text:"建议"}),i(),S]),L,s("h3",M,[i("合理采用整数类型 "),a(t,{text:"建议"}),i(),P]),O,s("h3",R,[i("布尔列采用bit类型 "),a(t,{text:"建议"}),i(),q]),U,s("h3",Q,[i("采用utf8mb4编码 "),a(t,{text:"建议"}),i(),V]),Y])}const Z=c(_,[["render",w]]);export{z as __pageData,Z as default}; +}

数据库设计

`,3),V={id:"采用utf8mb4编码",tabindex:"-1"},Q=s("a",{class:"header-anchor",href:"#采用utf8mb4编码","aria-label":'Permalink to "采用utf8mb4编码 "'},"​",-1),G=e('

如果要存储特殊字符(例如:emoij表情符),使用 utf8mb4 编码。

MySQL 5.5.3 后增加了一个新的编码: utf8mb4 ,其中 mb4 是 most bytes 4 的意思,用于兼容四字节的 unicode。

utf8mb4 是 utf8 的超集,除了将编码改为 utf8mb4 外不需要做其他转换。

设计数据库时如果想要允许用户使用特殊符号,最好使用 utf8mb4 编码来存储,使得数据库有更好的兼容性,但是这样设计会导致耗费更多的存储空间。

',1);function H(l,Y,$,K,W,Z){const t=p("Badge"),d=c,r=p("ClientOnly");return k(),o("div",null,[s("h1",D,[i("个人 SQL 优化技巧 "),a(t,{text:"持续更新",type:"warning"}),i(),C]),a(r,null,{default:y(()=>{var n,h;return[(((n=l.$frontmatter)==null?void 0:n.aside)??!0)&&(((h=l.$frontmatter)==null?void 0:h.showArticleMetadata)??!0)?(k(),A(d,{key:0,article:l.$frontmatter},null,8,["article"])):F("",!0)]}),_:1}),b,s("h3",u,[i("如果确定结果只有一条,使用 LIMIT 1 "),a(t,{text:"建议"}),i(),E]),m,s("h3",v,[i("避免隐式类型转换 "),a(t,{text:"强制",type:"danger"}),i(),B]),T,s("h3",N,[i("列名带上前缀 "),a(t,{text:"建议"}),i(),f]),I,s("h3",x,[i("非负数列添加UNSIGNED无符号约束 "),a(t,{text:"建议"}),i(),S]),L,s("h3",M,[i("合理采用整数类型 "),a(t,{text:"建议"}),i(),P]),O,s("h3",R,[i("布尔列采用bit类型 "),a(t,{text:"建议"}),i(),U]),q,s("h3",V,[i("采用utf8mb4编码 "),a(t,{text:"建议"}),i(),Q]),G])}const z=g(_,[["render",H]]);export{X as __pageData,z as default}; diff --git "a/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.lean.js" "b/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.lean.js" similarity index 67% rename from "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.lean.js" rename to "assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.lean.js" index 1e346559f8..4ed1c764d5 100644 --- "a/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.N4LiFEiO.lean.js" +++ "b/assets/categories_fragments_2019_12_28_\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.md.s7o9_T92.lean.js" @@ -1 +1 @@ -import{_ as g}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as c,D as p,o as k,c as o,k as s,a as i,I as a,w as y,R as e,b as A,e as F}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const z=JSON.parse('{"title":"个人 SQL 优化技巧","description":"","frontmatter":{"title":"个人 SQL 优化技巧","author":"查尔斯","date":"2019/12/28 10:00","isTop":true,"categories":["杂碎逆袭史"],"tags":["SQL","SQL优化"]},"headers":[],"relativePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","filePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","lastUpdated":1671423875000}'),_={name:"categories/fragments/2019/12/28/个人SQL优化技巧.md"},D={id:"个人-sql-优化技巧",tabindex:"-1"},C=s("a",{class:"header-anchor",href:"#个人-sql-优化技巧","aria-label":'Permalink to "个人 SQL 优化技巧 "'},"​",-1),u=s("h2",{id:"查询优化",tabindex:"-1"},[i("查询优化 "),s("a",{class:"header-anchor",href:"#查询优化","aria-label":'Permalink to "查询优化"'},"​")],-1),b={id:"如果确定结果只有一条-使用-limit-1",tabindex:"-1"},E=s("a",{class:"header-anchor",href:"#如果确定结果只有一条-使用-limit-1","aria-label":'Permalink to "如果确定结果只有一条,使用 LIMIT 1 "'},"​",-1),m=e("",3),v={id:"避免隐式类型转换",tabindex:"-1"},B=s("a",{class:"header-anchor",href:"#避免隐式类型转换","aria-label":'Permalink to "避免隐式类型转换 "'},"​",-1),T=e("",3),f={id:"列名带上前缀",tabindex:"-1"},N=s("a",{class:"header-anchor",href:"#列名带上前缀","aria-label":'Permalink to "列名带上前缀 "'},"​",-1),x=e("",2),I={id:"非负数列添加unsigned无符号约束",tabindex:"-1"},S=s("a",{class:"header-anchor",href:"#非负数列添加unsigned无符号约束","aria-label":'Permalink to "非负数列添加UNSIGNED无符号约束 "'},"​",-1),L=e("",2),M={id:"合理采用整数类型",tabindex:"-1"},P=s("a",{class:"header-anchor",href:"#合理采用整数类型","aria-label":'Permalink to "合理采用整数类型 "'},"​",-1),O=e("",3),R={id:"布尔列采用bit类型",tabindex:"-1"},q=s("a",{class:"header-anchor",href:"#布尔列采用bit类型","aria-label":'Permalink to "布尔列采用bit类型 "'},"​",-1),U=e("",3),Q={id:"采用utf8mb4编码",tabindex:"-1"},V=s("a",{class:"header-anchor",href:"#采用utf8mb4编码","aria-label":'Permalink to "采用utf8mb4编码 "'},"​",-1),Y=e("",1);function w(l,G,K,J,W,X){const t=p("Badge"),d=g,r=p("ClientOnly");return k(),o("div",null,[s("h1",D,[i("个人 SQL 优化技巧 "),a(t,{text:"持续更新",type:"warning"}),i(),C]),a(r,null,{default:y(()=>{var n,h;return[(((n=l.$frontmatter)==null?void 0:n.aside)??!0)&&(((h=l.$frontmatter)==null?void 0:h.showArticleMetadata)??!0)?(k(),A(d,{key:0,article:l.$frontmatter},null,8,["article"])):F("",!0)]}),_:1}),u,s("h3",b,[i("如果确定结果只有一条,使用 LIMIT 1 "),a(t,{text:"建议"}),i(),E]),m,s("h3",v,[i("避免隐式类型转换 "),a(t,{text:"强制",type:"danger"}),i(),B]),T,s("h3",f,[i("列名带上前缀 "),a(t,{text:"建议"}),i(),N]),x,s("h3",I,[i("非负数列添加UNSIGNED无符号约束 "),a(t,{text:"建议"}),i(),S]),L,s("h3",M,[i("合理采用整数类型 "),a(t,{text:"建议"}),i(),P]),O,s("h3",R,[i("布尔列采用bit类型 "),a(t,{text:"建议"}),i(),q]),U,s("h3",Q,[i("采用utf8mb4编码 "),a(t,{text:"建议"}),i(),V]),Y])}const Z=c(_,[["render",w]]);export{z as __pageData,Z as default}; +import{_ as c}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as g,D as p,o as k,c as o,k as s,a as i,I as a,w as y,R as e,b as A,e as F}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const X=JSON.parse('{"title":"个人 SQL 优化技巧","description":"","frontmatter":{"title":"个人 SQL 优化技巧","author":"查尔斯","date":"2019/12/28 10:00","isTop":true,"categories":["杂碎逆袭史"],"tags":["SQL","SQL优化"]},"headers":[],"relativePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","filePath":"categories/fragments/2019/12/28/个人SQL优化技巧.md","lastUpdated":1671423875000}'),_={name:"categories/fragments/2019/12/28/个人SQL优化技巧.md"},D={id:"个人-sql-优化技巧",tabindex:"-1"},C=s("a",{class:"header-anchor",href:"#个人-sql-优化技巧","aria-label":'Permalink to "个人 SQL 优化技巧 "'},"​",-1),b=s("h2",{id:"查询优化",tabindex:"-1"},[i("查询优化 "),s("a",{class:"header-anchor",href:"#查询优化","aria-label":'Permalink to "查询优化"'},"​")],-1),u={id:"如果确定结果只有一条-使用-limit-1",tabindex:"-1"},E=s("a",{class:"header-anchor",href:"#如果确定结果只有一条-使用-limit-1","aria-label":'Permalink to "如果确定结果只有一条,使用 LIMIT 1 "'},"​",-1),m=e("",3),v={id:"避免隐式类型转换",tabindex:"-1"},B=s("a",{class:"header-anchor",href:"#避免隐式类型转换","aria-label":'Permalink to "避免隐式类型转换 "'},"​",-1),T=e("",3),N={id:"列名带上前缀",tabindex:"-1"},f=s("a",{class:"header-anchor",href:"#列名带上前缀","aria-label":'Permalink to "列名带上前缀 "'},"​",-1),I=e("",2),x={id:"非负数列添加unsigned无符号约束",tabindex:"-1"},S=s("a",{class:"header-anchor",href:"#非负数列添加unsigned无符号约束","aria-label":'Permalink to "非负数列添加UNSIGNED无符号约束 "'},"​",-1),L=e("",2),M={id:"合理采用整数类型",tabindex:"-1"},P=s("a",{class:"header-anchor",href:"#合理采用整数类型","aria-label":'Permalink to "合理采用整数类型 "'},"​",-1),O=e("",3),R={id:"布尔列采用bit类型",tabindex:"-1"},U=s("a",{class:"header-anchor",href:"#布尔列采用bit类型","aria-label":'Permalink to "布尔列采用bit类型 "'},"​",-1),q=e("",3),V={id:"采用utf8mb4编码",tabindex:"-1"},Q=s("a",{class:"header-anchor",href:"#采用utf8mb4编码","aria-label":'Permalink to "采用utf8mb4编码 "'},"​",-1),G=e("",1);function H(l,Y,$,K,W,Z){const t=p("Badge"),d=c,r=p("ClientOnly");return k(),o("div",null,[s("h1",D,[i("个人 SQL 优化技巧 "),a(t,{text:"持续更新",type:"warning"}),i(),C]),a(r,null,{default:y(()=>{var n,h;return[(((n=l.$frontmatter)==null?void 0:n.aside)??!0)&&(((h=l.$frontmatter)==null?void 0:h.showArticleMetadata)??!0)?(k(),A(d,{key:0,article:l.$frontmatter},null,8,["article"])):F("",!0)]}),_:1}),b,s("h3",u,[i("如果确定结果只有一条,使用 LIMIT 1 "),a(t,{text:"建议"}),i(),E]),m,s("h3",v,[i("避免隐式类型转换 "),a(t,{text:"强制",type:"danger"}),i(),B]),T,s("h3",N,[i("列名带上前缀 "),a(t,{text:"建议"}),i(),f]),I,s("h3",x,[i("非负数列添加UNSIGNED无符号约束 "),a(t,{text:"建议"}),i(),S]),L,s("h3",M,[i("合理采用整数类型 "),a(t,{text:"建议"}),i(),P]),O,s("h3",R,[i("布尔列采用bit类型 "),a(t,{text:"建议"}),i(),U]),q,s("h3",V,[i("采用utf8mb4编码 "),a(t,{text:"建议"}),i(),Q]),G])}const z=g(_,[["render",H]]);export{X as __pageData,z as default}; diff --git "a/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.js" "b/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.js" similarity index 98% rename from "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.js" rename to "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.js" index 376cc74f9f..f3ff829afc 100644 --- "a/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.js" +++ "b/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.js" @@ -1,4 +1,4 @@ -import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o as n,c as r,I as d,w as g,k as l,a as A,R as y,b as D,e as o}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const C="/assets/202301062024211.XSdkEyRK.png",c="/assets/202301062027985.qIIuam8H.png",P=JSON.parse('{"title":"阿里巴巴的Code Review方法论与实践总结","description":"","frontmatter":{"title":"阿里巴巴的Code Review方法论与实践总结","isOriginal":false,"author":"方基成(润甫)","date":"2023/01/06 20:12","articleTitle":"一文梳理Code Review方法论与实践总结","articleLink":"https://mp.weixin.qq.com/s/_4MFrQSYOIGYRdDGOJPDKQ","categories":["杂碎逆袭史"],"tags":["Code Review","卓越工程文化"]},"headers":[],"relativePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","filePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","lastUpdated":1673010072000}'),B={name:"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md"},F=l("h1",{id:"阿里巴巴的code-review方法论与实践总结",tabindex:"-1"},[A("阿里巴巴的Code Review方法论与实践总结 "),l("a",{class:"header-anchor",href:"#阿里巴巴的code-review方法论与实践总结","aria-label":'Permalink to "阿里巴巴的Code Review方法论与实践总结"'},"​")],-1),E=y('

作为卓越工程文化的一部分,Code Review 其实一直在进行中,只是各团队根据自身情况张驰有度,松紧可能也不一,这里简单梳理一下 CR 的方法和团队实践。

为什么要CR

  • 提前发现缺陷 在CodeReview阶段发现的逻辑错误、业务理解偏差、性能隐患等时有发生,CR可以提前发现问题。
  • 提高代码质量 主要体现在代码健壮性、设计合理性、代码优雅性等方面,持续CodeReview可以提升团队整体代码质量。
  • 统一规范和风格 集团编码规范自不必说,对于代码风格要不要统一,可能会有不同的看法,个人观点对于风格也不强求。但代码其实不是写给自己看的,是写给下一任看的,就像经常被调侃的“程序员不喜欢写注释,更不喜欢别人不写注释”,代码风格的统一更有助于代码的可读性及继任者的快速上手。
  • 防止架构腐烂 架构的维护者是谁?仅靠架构师或应用Owner是远远不够的,需要所有成员的努力,所谓人人都是架构师。架构防腐最好前置在设计阶段,但CodeReview作为对最终产出代码的检查,也算是最后一道关键工序。
  • 知识分享 每一次CodeReview,都是一次知识的分享,磨合一定时间后,团队成员间会你中有我、我中有你,集百家之所长,融百家之所思。同时,业务逻辑都在代码中,团队CodeReview也是一种新人业务细节学习的途径。
  • 团队共识 通过多次讨论与交流,逐步达成团队共识,特别是对架构理解和设计原则的认知,在共识的基础上团队也会更有凝聚力,特别是在较多新人加入时尤为重要。

他山之石

某大厂A

非常重视 Code Review,基本上代码需要至少有两位以上 Reviewer 审核通过后,才会让你 Check In。

代码评审规则

  • 如果变更达到可以提升系统整体代码质量的程度,就可以让它们通过,即使它们可能还不完美。这是所有代码评审准则的最高原则。
  • 世界上没有“完美”的代码,只有更好的代码。评审者不应该要求代码提交者在每个细节都写得很完美。评审者应该做好修改时间与修改重要性之间的权衡。

代码评审原则

  • 以客观的技术因素与数据为准,而非个人偏好。
  • 在代码样式上,遵从代码样式指南,所有代码都应与其保持一致,任何与代码样式指南不一致的观点都是个人偏好。但如果某项代码样式在指南中未提及,那就接受作者的样式。
  • 任务涉及软件设计的问题,都应取决于基本设计原则,而不应由个人喜好来决定。当同时有多种可行方案时,如果作者能证明(以数据或公认的软件工程原理为依据)这些方案基本差不多,那就接受作者的选项;否则,应由标准的软件设计原则为准。
  • 如果没有可用的规则,那么审核者应该让作者与当前代码库保持一致,至少不会恶化代码系统的质量。(一旦恶化代码质量,就会带来破窗效应,导致系统的代码质量逐渐下降)

代码审核者应该看什么

  • 设计:代码是否设计良好?这种设计是否适合当前系统?
  • 功能:代码实现的行为与作者的期望是否相符?代码实现的交互界面是否对用户友好?
  • 复杂性:代码可以更简单吗?如果将来有其他开发者使用这段代码,他能很快理解吗?
  • 测试:这段代码是否有正确的、设计良好的自动化测试?
  • 命名:在为变量、类名、方法等命名时,开发者使用的名称是否清晰易懂?
  • 注释:所有的注释是否都一目了然?
  • 代码样式:所有的代码是否都遵循代码样式?
  • 文档:开发者是否同时更新了相关文档?

某大厂B

  • 在开发流程上专门有这个环节,排期会明确排进日程,比如 5 天开发会排 2 天来做代码审核,分为代码自审、交叉审核、集中审核。
  • 有明确的量化指标,如 8 人时审核/每千行代码,8 个以上非提示性有效问题/每千行代码。

某大厂C

  • 推行 Code Owner 机制,每个代码变更必须有 Code Owner 审核通过才可以提交。
  • 所有的一线工程师,无论职级高低,最重要的工程输出原则是 “show me the code”,而 Code Review 是最能够反应这个客观输出的。
  • 尽量让每个人的 Code Review 参与状况都公开透明,每个变更发送给项目合作者,及转发到小组内成员,小组内任何人都可以去 Review 其他人的代码。
  • 明确每个人的考评和 Code Review 表现相关,包括 Code Review 输出状况及提交代码的质量等。

我们怎么做CR

作为代码提交者

  • 发起时机:发起 Code Review 尽量提前,开发过程小步快跑

    202301062024211

  • 代码行数:提交 Code Review 的代码行数最好在 400 行以下。根据数据分析发现,从代码行数来看,超过 400 行的 CR,缺陷发现率会急剧下降;从CR速度来看,超过 500 行/小时后,Review 质量也会大大降低,一个高质量的 CR 最好控制在一个小时以内。

  • 明确意图:编写语义明确的标题(必填)和描述(选填,可以包括背景、思路、改造点和影响面、风险等)

  • 善用工具:IDEA 打开编码规约实时检测,减少代码样式、编码规约等基础性问题 (阿里编码规约插件:https://github.com/alibaba/p3c/tree/master/idea-plugin)

作为代码评审者

评审范围

主要从两方面来评审:

  • 代码逻辑
    • 功能完整:代码实现是否满足功能需求,实现上有没有需求的理解偏差,对用户是否友好;
    • 逻辑设计:是否考虑了全局设计和兼容现有业务细节,是否考虑边界条件和并发控制;
    • 安全隐患:是否存在数据安全隐患及敏感信息泄漏,如越权、SQL 注入、CSRF、敏感信息未脱敏等;
    • 性能隐患:是否存在损害性能的隐患,如死锁、死循环、FullGC、慢 SQL、缓存数据热点等;
    • 测试用例:单元测试用例的验证逻辑是否有效,测试用例的代码行覆盖率和分支覆盖率;
  • 代码质量
    • 编码规范:命名、注释、领域术语、架构分层、日志打印、代码样式等是否符合规范
    • 可读性:是否逻辑清晰、易理解,避免使用奇淫巧技,避免过度拆分
    • 简洁性:是否有重复可简化的复杂逻辑,代码复杂度是否过高,符合 KISS 和 DRY 原则
    • 可维护性:在可读性和简洁性基础上,是否分层清晰、模块化合理、高内聚低耦合、遵从基本设计原则
    • 可扩展性:是否仅仅是满足一次性需求的代码,是否有必要的前瞻性扩展设计
    • 可测试性:代码是否方便写单元测试及分支覆盖,是否便于自动化测试

评审注意事项

  • 尽快完成评审
  • 避免过度追求完美
  • 明确评论是否要解决
  • 避免使用反问句来评价

我们主要是通过交叉 CR、集中 CR 相结合的方式,由应用 Owner + SM + 架构师 + TL 完成。

CR怎么避免流于形式

CR 流于形式的因素很多,大概如下:

  • 不认同 CodeReview

    • 评审者的姿态?有没有带来好处?有没有从中收获?这些都会直观影响团队成员的认可度
    • 每个 Review 建议的提出都是一次思想交流,评论要友好、中肯、具体,避免教条式及负面词汇,在遵守评审原则下,同时尊重个性展现
    • 团队集中 CodeReview 尽量不要太正式和严肃,轻松的气氛下更有助于互相理解,来点水果,聊聊业务聊聊代码
    • 在 Review 过程有时候会陷入谁对谁错的争论,只要是为了寻求真理辩证的去看问题,哪怕是讨论再激烈也是有收获的,注意只对事不对人。
  • CodeReview 后改动太大

    • 发布前发现问题多,改动太大,影响项目计划
    • 大项目要求编码前设计评审,小需求可以事先 Review 设计思路,避免最后的惊喜
    • 每次 Review 的代码行数最好控制在数百行以内
  • 评审者没有足够时间

    • 评审者在任务安排上尽量预留好时间
    • 尽快评审,代码在百行以内及时响应,在千行以内当日完结
  • 评审者不了解业务和代码

    • 代码提交人编写清晰的标题和描述
    • 有必要的情况下评审者需要了解 PRD
    • 评审者需要提前了解系统和代码
  • Review 建议未修改

    • 这一点极为重要,需要对修改后的代码再次 Review,确保理解一致,以及预防带问题上线
    • 应用可以设置 Review 建议需全部解决的卡点,同时对于非必需修改的建议可以进行打标或说明

CR实践中发现的几个常见代码问题

笔者对个人 CR 评论问题做了个大概统计,Bug 发现数占比约 4%(直接或潜在 Bug),重复代码数占比约 5%,其他还有规范、安全、性能、设计等问题。在 CR 代码质量时,可以参考《重构:改善既有代码的设计》,书中所列的 22 种坏味道在 CR 中基本都会遇到。而此处我们主要聚焦以下几个常见问题:

DRY

DRY 是 Don't Repeat Yourself 的缩写,DRY 是 Andy Hunt 和 Dave Thomas's 在《 The Pragmatic Programmer 》一书中提出的核心原则。DRY 原则描述的重复是知识和意图的重复,包含代码重复、文档重复、数据重复、表征重复,我们这里重点讲讲代码重复

代码重复

《重构》中对 “Duplicated Code(重复代码)” 的描述:

坏味道行列中首当其冲的就是 Duplicated Code。如果你在一个以上的地点看到相同的程序结构,那么可以肯定:设法将它们合而为一,程序会变得更好。

最单纯的 Duplicated Code 就是“同一个类的两个函数含有相同的表达式”。这时候你需要做的就是采用 Extract Method (110) 提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。

另一种常见情况就是“两个互为兄弟的子类内含相同表达式”。要避免这种情况,只需对两个类都使用 Extract Method (110),然后再对被提炼出来的代码使用 Pull Up Method (332),将它推入超类内。如果代码之间只是类似,并非完全相同,那么就得运用 Extract Method (110) 将相似部分和差异部分割开,构成单独一个函数。然后你可能发现可以运用 Form Template Method (345) 获得一个Template Method 设计模式。如果有些函数以不同的算法做相同的事,你可以选择其中较清晰的一个,并使用 Substitute Algorithm (139) 将其他函数的算法替换掉。

如果两个毫不相关的类出现 Duplicated Code,你应该考虑对其中一个使用 Extract Class (149),将重复代码提炼到一个独立类中,然后在另一个类内使用这个新类。但是,重复代码所在的函数也可能的确只应该属于某个类,另一个类只能调用它,抑或这个函数可能属于第三个类,而另两个类应该引用这第三个类。你必须决定这个函数放在哪儿最合适,并确保它被安置后就不会再在其他任何地方出现。

代码重复的几种场景:

  • 一个类中重复代码抽象为一个方法
  • 两个子类间重复代码抽象到父类
  • 两个不相关类间重复代码抽象到第三个类
java
private BillVO convertBillDTO2BillVO(BillDTO billDTO) {
+import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o as n,c as r,I as d,w as g,k as l,a as A,R as y,b as D,e as C}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const o="/assets/202301062024211.XSdkEyRK.png",c="/assets/202301062027985.qIIuam8H.png",S=JSON.parse('{"title":"阿里巴巴的Code Review方法论与实践总结","description":"","frontmatter":{"title":"阿里巴巴的Code Review方法论与实践总结","isOriginal":false,"author":"方基成(润甫)","date":"2023/01/06 20:12","articleTitle":"一文梳理Code Review方法论与实践总结","articleLink":"https://mp.weixin.qq.com/s/_4MFrQSYOIGYRdDGOJPDKQ","categories":["杂碎逆袭史"],"tags":["Code Review","卓越工程文化"]},"headers":[],"relativePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","filePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","lastUpdated":1673010072000}'),B={name:"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md"},F=l("h1",{id:"阿里巴巴的code-review方法论与实践总结",tabindex:"-1"},[A("阿里巴巴的Code Review方法论与实践总结 "),l("a",{class:"header-anchor",href:"#阿里巴巴的code-review方法论与实践总结","aria-label":'Permalink to "阿里巴巴的Code Review方法论与实践总结"'},"​")],-1),E=y('

作为卓越工程文化的一部分,Code Review 其实一直在进行中,只是各团队根据自身情况张驰有度,松紧可能也不一,这里简单梳理一下 CR 的方法和团队实践。

为什么要CR

  • 提前发现缺陷 在CodeReview阶段发现的逻辑错误、业务理解偏差、性能隐患等时有发生,CR可以提前发现问题。
  • 提高代码质量 主要体现在代码健壮性、设计合理性、代码优雅性等方面,持续CodeReview可以提升团队整体代码质量。
  • 统一规范和风格 集团编码规范自不必说,对于代码风格要不要统一,可能会有不同的看法,个人观点对于风格也不强求。但代码其实不是写给自己看的,是写给下一任看的,就像经常被调侃的“程序员不喜欢写注释,更不喜欢别人不写注释”,代码风格的统一更有助于代码的可读性及继任者的快速上手。
  • 防止架构腐烂 架构的维护者是谁?仅靠架构师或应用Owner是远远不够的,需要所有成员的努力,所谓人人都是架构师。架构防腐最好前置在设计阶段,但CodeReview作为对最终产出代码的检查,也算是最后一道关键工序。
  • 知识分享 每一次CodeReview,都是一次知识的分享,磨合一定时间后,团队成员间会你中有我、我中有你,集百家之所长,融百家之所思。同时,业务逻辑都在代码中,团队CodeReview也是一种新人业务细节学习的途径。
  • 团队共识 通过多次讨论与交流,逐步达成团队共识,特别是对架构理解和设计原则的认知,在共识的基础上团队也会更有凝聚力,特别是在较多新人加入时尤为重要。

他山之石

某大厂A

非常重视 Code Review,基本上代码需要至少有两位以上 Reviewer 审核通过后,才会让你 Check In。

代码评审规则

  • 如果变更达到可以提升系统整体代码质量的程度,就可以让它们通过,即使它们可能还不完美。这是所有代码评审准则的最高原则。
  • 世界上没有“完美”的代码,只有更好的代码。评审者不应该要求代码提交者在每个细节都写得很完美。评审者应该做好修改时间与修改重要性之间的权衡。

代码评审原则

  • 以客观的技术因素与数据为准,而非个人偏好。
  • 在代码样式上,遵从代码样式指南,所有代码都应与其保持一致,任何与代码样式指南不一致的观点都是个人偏好。但如果某项代码样式在指南中未提及,那就接受作者的样式。
  • 任务涉及软件设计的问题,都应取决于基本设计原则,而不应由个人喜好来决定。当同时有多种可行方案时,如果作者能证明(以数据或公认的软件工程原理为依据)这些方案基本差不多,那就接受作者的选项;否则,应由标准的软件设计原则为准。
  • 如果没有可用的规则,那么审核者应该让作者与当前代码库保持一致,至少不会恶化代码系统的质量。(一旦恶化代码质量,就会带来破窗效应,导致系统的代码质量逐渐下降)

代码审核者应该看什么

  • 设计:代码是否设计良好?这种设计是否适合当前系统?
  • 功能:代码实现的行为与作者的期望是否相符?代码实现的交互界面是否对用户友好?
  • 复杂性:代码可以更简单吗?如果将来有其他开发者使用这段代码,他能很快理解吗?
  • 测试:这段代码是否有正确的、设计良好的自动化测试?
  • 命名:在为变量、类名、方法等命名时,开发者使用的名称是否清晰易懂?
  • 注释:所有的注释是否都一目了然?
  • 代码样式:所有的代码是否都遵循代码样式?
  • 文档:开发者是否同时更新了相关文档?

某大厂B

  • 在开发流程上专门有这个环节,排期会明确排进日程,比如 5 天开发会排 2 天来做代码审核,分为代码自审、交叉审核、集中审核。
  • 有明确的量化指标,如 8 人时审核/每千行代码,8 个以上非提示性有效问题/每千行代码。

某大厂C

  • 推行 Code Owner 机制,每个代码变更必须有 Code Owner 审核通过才可以提交。
  • 所有的一线工程师,无论职级高低,最重要的工程输出原则是 “show me the code”,而 Code Review 是最能够反应这个客观输出的。
  • 尽量让每个人的 Code Review 参与状况都公开透明,每个变更发送给项目合作者,及转发到小组内成员,小组内任何人都可以去 Review 其他人的代码。
  • 明确每个人的考评和 Code Review 表现相关,包括 Code Review 输出状况及提交代码的质量等。

我们怎么做CR

作为代码提交者

  • 发起时机:发起 Code Review 尽量提前,开发过程小步快跑

    202301062024211

  • 代码行数:提交 Code Review 的代码行数最好在 400 行以下。根据数据分析发现,从代码行数来看,超过 400 行的 CR,缺陷发现率会急剧下降;从CR速度来看,超过 500 行/小时后,Review 质量也会大大降低,一个高质量的 CR 最好控制在一个小时以内。

  • 明确意图:编写语义明确的标题(必填)和描述(选填,可以包括背景、思路、改造点和影响面、风险等)

  • 善用工具:IDEA 打开编码规约实时检测,减少代码样式、编码规约等基础性问题 (阿里编码规约插件:https://github.com/alibaba/p3c/tree/master/idea-plugin)

作为代码评审者

评审范围

主要从两方面来评审:

  • 代码逻辑
    • 功能完整:代码实现是否满足功能需求,实现上有没有需求的理解偏差,对用户是否友好;
    • 逻辑设计:是否考虑了全局设计和兼容现有业务细节,是否考虑边界条件和并发控制;
    • 安全隐患:是否存在数据安全隐患及敏感信息泄漏,如越权、SQL 注入、CSRF、敏感信息未脱敏等;
    • 性能隐患:是否存在损害性能的隐患,如死锁、死循环、FullGC、慢 SQL、缓存数据热点等;
    • 测试用例:单元测试用例的验证逻辑是否有效,测试用例的代码行覆盖率和分支覆盖率;
  • 代码质量
    • 编码规范:命名、注释、领域术语、架构分层、日志打印、代码样式等是否符合规范
    • 可读性:是否逻辑清晰、易理解,避免使用奇淫巧技,避免过度拆分
    • 简洁性:是否有重复可简化的复杂逻辑,代码复杂度是否过高,符合 KISS 和 DRY 原则
    • 可维护性:在可读性和简洁性基础上,是否分层清晰、模块化合理、高内聚低耦合、遵从基本设计原则
    • 可扩展性:是否仅仅是满足一次性需求的代码,是否有必要的前瞻性扩展设计
    • 可测试性:代码是否方便写单元测试及分支覆盖,是否便于自动化测试

评审注意事项

  • 尽快完成评审
  • 避免过度追求完美
  • 明确评论是否要解决
  • 避免使用反问句来评价

我们主要是通过交叉 CR、集中 CR 相结合的方式,由应用 Owner + SM + 架构师 + TL 完成。

CR怎么避免流于形式

CR 流于形式的因素很多,大概如下:

  • 不认同 CodeReview

    • 评审者的姿态?有没有带来好处?有没有从中收获?这些都会直观影响团队成员的认可度
    • 每个 Review 建议的提出都是一次思想交流,评论要友好、中肯、具体,避免教条式及负面词汇,在遵守评审原则下,同时尊重个性展现
    • 团队集中 CodeReview 尽量不要太正式和严肃,轻松的气氛下更有助于互相理解,来点水果,聊聊业务聊聊代码
    • 在 Review 过程有时候会陷入谁对谁错的争论,只要是为了寻求真理辩证的去看问题,哪怕是讨论再激烈也是有收获的,注意只对事不对人。
  • CodeReview 后改动太大

    • 发布前发现问题多,改动太大,影响项目计划
    • 大项目要求编码前设计评审,小需求可以事先 Review 设计思路,避免最后的惊喜
    • 每次 Review 的代码行数最好控制在数百行以内
  • 评审者没有足够时间

    • 评审者在任务安排上尽量预留好时间
    • 尽快评审,代码在百行以内及时响应,在千行以内当日完结
  • 评审者不了解业务和代码

    • 代码提交人编写清晰的标题和描述
    • 有必要的情况下评审者需要了解 PRD
    • 评审者需要提前了解系统和代码
  • Review 建议未修改

    • 这一点极为重要,需要对修改后的代码再次 Review,确保理解一致,以及预防带问题上线
    • 应用可以设置 Review 建议需全部解决的卡点,同时对于非必需修改的建议可以进行打标或说明

CR实践中发现的几个常见代码问题

笔者对个人 CR 评论问题做了个大概统计,Bug 发现数占比约 4%(直接或潜在 Bug),重复代码数占比约 5%,其他还有规范、安全、性能、设计等问题。在 CR 代码质量时,可以参考《重构:改善既有代码的设计》,书中所列的 22 种坏味道在 CR 中基本都会遇到。而此处我们主要聚焦以下几个常见问题:

DRY

DRY 是 Don't Repeat Yourself 的缩写,DRY 是 Andy Hunt 和 Dave Thomas's 在《 The Pragmatic Programmer 》一书中提出的核心原则。DRY 原则描述的重复是知识和意图的重复,包含代码重复、文档重复、数据重复、表征重复,我们这里重点讲讲代码重复

代码重复

《重构》中对 “Duplicated Code(重复代码)” 的描述:

坏味道行列中首当其冲的就是 Duplicated Code。如果你在一个以上的地点看到相同的程序结构,那么可以肯定:设法将它们合而为一,程序会变得更好。

最单纯的 Duplicated Code 就是“同一个类的两个函数含有相同的表达式”。这时候你需要做的就是采用 Extract Method (110) 提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。

另一种常见情况就是“两个互为兄弟的子类内含相同表达式”。要避免这种情况,只需对两个类都使用 Extract Method (110),然后再对被提炼出来的代码使用 Pull Up Method (332),将它推入超类内。如果代码之间只是类似,并非完全相同,那么就得运用 Extract Method (110) 将相似部分和差异部分割开,构成单独一个函数。然后你可能发现可以运用 Form Template Method (345) 获得一个Template Method 设计模式。如果有些函数以不同的算法做相同的事,你可以选择其中较清晰的一个,并使用 Substitute Algorithm (139) 将其他函数的算法替换掉。

如果两个毫不相关的类出现 Duplicated Code,你应该考虑对其中一个使用 Extract Class (149),将重复代码提炼到一个独立类中,然后在另一个类内使用这个新类。但是,重复代码所在的函数也可能的确只应该属于某个类,另一个类只能调用它,抑或这个函数可能属于第三个类,而另两个类应该引用这第三个类。你必须决定这个函数放在哪儿最合适,并确保它被安置后就不会再在其他任何地方出现。

代码重复的几种场景:

  • 一个类中重复代码抽象为一个方法
  • 两个子类间重复代码抽象到父类
  • 两个不相关类间重复代码抽象到第三个类
java
private BillVO convertBillDTO2BillVO(BillDTO billDTO) {
     if (billDTO == null) {
         return null;
     }
@@ -34,7 +34,7 @@ import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o
         return StringUtils.EMPTY;
     }
     return String.format(MONEY_DISPLAY_TEXT_PATTERN, money.getCurrency(), money.getAmount().toPlainString());
-}

DYR实践忠告

  • 不要借用 DRY 之名,过度提前抽象,请遵循 Rule of three 原则
  • 不要过度追求 DRY,破坏了内聚性,实践中需要平衡复用与内聚

Primitive Obsession

《重构》中对 “Primitive Obsession(基本类型偏执)” 的描述:

大多数编程环境都有两种数据:结构类型允许你将数据组织成有意义的形式;基本类型则是构成结构类型的积木块。结构总是会带来一定的额外开销。它们可能代表着数据库中的表,如果只为做一两件事而创建结构类型也可能显得太麻烦。

对象的一个极大的价值在于:它们模糊(甚至打破)了横亘于基本数据和体积较大的类之间的界限。你可以轻松编写出一些与语言内置(基本)类型无异的小型类。例如,Java 就以基本类型表示数值,而以类表示字符串和日期——这两个类型在其他许多编程环境中都以基本类型表现。

对象技术的新手通常不愿意在小任务上运用小对象——像是结合数值和币种的 money 类、由一个起始值和一个结束值组成的 range 类、电话号码或邮政编码(ZIP)等的特殊字符串。你可以运用 Replace Data Valuewith Object (175) 将原本单独存在的数据值替换为对象,从而走出传统的洞窟,进入炙手可热的对象世界。如果想要替换的数据值是类型码,而它并不影响行为,则可以运用 Replace Type Code with Class (218) 将它换掉。如果你有与类型码相关的条件表达式,可运用 Replace Type Codewith Subclass (213) 或 Replace Type Code with State/Strategy (227) 加以处理。

如果你有一组应该总是被放在一起的字段,可运用 Extract Class(149)。如果你在参数列中看到基本型数据,不妨试试 IntroduceParameter Object (295)。如果你发现自己正从数组中挑选数据,可运用 Replace Array with Object (186)。

给我们的启示主要有两点:

  • 大部分业务场景和语言环境下,结构化类型导致的开销基本可以忽略
  • 结构化类型带来更清晰的语义和复用
java
@Data
+}

DYR实践忠告

  • 不要借用 DRY 之名,过度提前抽象,请遵循 Rule of three 原则
  • 不要过度追求 DRY,破坏了内聚性,实践中需要平衡复用与内聚

Primitive Obsession

《重构》中对 “Primitive Obsession(基本类型偏执)” 的描述:

大多数编程环境都有两种数据:结构类型允许你将数据组织成有意义的形式;基本类型则是构成结构类型的积木块。结构总是会带来一定的额外开销。它们可能代表着数据库中的表,如果只为做一两件事而创建结构类型也可能显得太麻烦。

对象的一个极大的价值在于:它们模糊(甚至打破)了横亘于基本数据和体积较大的类之间的界限。你可以轻松编写出一些与语言内置(基本)类型无异的小型类。例如,Java 就以基本类型表示数值,而以类表示字符串和日期——这两个类型在其他许多编程环境中都以基本类型表现。

对象技术的新手通常不愿意在小任务上运用小对象——像是结合数值和币种的 money 类、由一个起始值和一个结束值组成的 range 类、电话号码或邮政编码(ZIP)等的特殊字符串。你可以运用 Replace Data Valuewith Object (175) 将原本单独存在的数据值替换为对象,从而走出传统的洞窟,进入炙手可热的对象世界。如果想要替换的数据值是类型码,而它并不影响行为,则可以运用 Replace Type Code with Class (218) 将它换掉。如果你有与类型码相关的条件表达式,可运用 Replace Type Codewith Subclass (213) 或 Replace Type Code with State/Strategy (227) 加以处理。

如果你有一组应该总是被放在一起的字段,可运用 Extract Class(149)。如果你在参数列中看到基本型数据,不妨试试 IntroduceParameter Object (295)。如果你发现自己正从数组中挑选数据,可运用 Replace Array with Object (186)。

给我们的启示主要有两点:

  • 大部分业务场景和语言环境下,结构化类型导致的开销基本可以忽略
  • 结构化类型带来更清晰的语义和复用
java
@Data
 public class XxxConfigDTO implements Serializable {
 
     private static final long serialVersionUID = 8018480763009740953L;
@@ -186,7 +186,7 @@ import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o
     } finally {
         lockService.unlock(LockBizType.PRODUCT, orderId);
     }
-}

注意加锁类型与加锁 KEY 在同一个维度,否则加锁会失效。

分页查询

完全没有分页

java
private List<OrderDTO> queryOrderList(Long customerId) {
+}

注意加锁类型与加锁 KEY 在同一个维度,否则加锁会失效。

分页查询

完全没有分页

java
private List<OrderDTO> queryOrderList(Long customerId) {
     if (customerId == null) {
         return Lists.newArrayList();
     }
@@ -205,7 +205,7 @@ import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o
     List<OrderDO> orderDOList = orderMapper.list(query);
     List<OrderDTO> orderDTOList = orderConverter.doList2dtoList(orderDOList);
     return PageQueryUtil.buildPageData(query, orderDTOList, cnt);
-}

没有分页的列表查询对DB性能影响非常大,特别是在项目初期,因为数据量非常小问题不明显,而导致没有及时发现,会给未来留坑。

分页size太大

java
private Page<OrderDTO> queryOrderList2(OrderPageQuery query) {
+}

没有分页的列表查询对DB性能影响非常大,特别是在项目初期,因为数据量非常小问题不明显,而导致没有及时发现,会给未来留坑。

分页size太大

java
private Page<OrderDTO> queryOrderList2(OrderPageQuery query) {
     Preconditions.checkNotNull(query, "查询条件不能为空");
     query.setPageSize(10000);
     long cnt = orderMapper.count(query);
@@ -215,7 +215,7 @@ import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o
     List<OrderDO> orderDOList = orderMapper.list(query);
     List<OrderDTO> orderDTOList = orderConverter.doList2dtoList(orderDOList);
     return PageQueryUtil.buildPageData(query, orderDTOList, cnt);
-}

分页 size 的大小并没有一个固定的标准,取决于业务需求、数据量及数据库等,但动辄几千上万的分页 size,会带来性能瓶颈,而大量的慢 SQL 不但影响客户体验,对系统稳定性也是极大的隐患。

超多分页慢SQL

xml
<!-- 分页查询订单列表 -->
+}

分页 size 的大小并没有一个固定的标准,取决于业务需求、数据量及数据库等,但动辄几千上万的分页 size,会带来性能瓶颈,而大量的慢 SQL 不但影响客户体验,对系统稳定性也是极大的隐患。

超多分页慢SQL

xml
<!-- 分页查询订单列表 -->
 <select id="list" parameterType="com.xxx.OrderPageQuery" resultType="com.xxx.OrderDO">
     SELECT
         <include refid="all_columns"/>
@@ -235,4 +235,4 @@ import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o
         ORDER BY id DESC
         LIMIT #{offset},#{pageSize}
     ) b ON a.id = b.bid
-</select>

以上 bad case 的 SQL 在超多页分页查询时性能极其低下,存在多次回表甚至 Using Filesort 的问题,在阿里巴巴编码规范中也有明确的规避方案,此处不展开。

202301062027985

最后,我们工程师的智慧结晶都尽在代码之中,而 Code Review 可以促进结晶更加清莹通透、纯洁无瑕、精致完美,值得大家一起持续精进!

',68);function u(s,b,v,m,q,O){const h=p,t=e("ClientOnly");return n(),r("div",null,[F,d(t,null,{default:g(()=>{var i,a;return[(((i=s.$frontmatter)==null?void 0:i.aside)??!0)&&(((a=s.$frontmatter)==null?void 0:a.showArticleMetadata)??!0)?(n(),D(h,{key:0,article:s.$frontmatter},null,8,["article"])):o("",!0)]}),_:1}),E])}const S=k(B,[["render",u]]);export{P as __pageData,S as default}; +</select>

以上 bad case 的 SQL 在超多页分页查询时性能极其低下,存在多次回表甚至 Using Filesort 的问题,在阿里巴巴编码规范中也有明确的规避方案,此处不展开。

202301062027985

最后,我们工程师的智慧结晶都尽在代码之中,而 Code Review 可以促进结晶更加清莹通透、纯洁无瑕、精致完美,值得大家一起持续精进!

',68);function u(s,b,v,m,q,O){const h=p,t=e("ClientOnly");return n(),r("div",null,[F,d(t,null,{default:g(()=>{var i,a;return[(((i=s.$frontmatter)==null?void 0:i.aside)??!0)&&(((a=s.$frontmatter)==null?void 0:a.showArticleMetadata)??!0)?(n(),D(h,{key:0,article:s.$frontmatter},null,8,["article"])):C("",!0)]}),_:1}),E])}const P=k(B,[["render",u]]);export{S as __pageData,P as default}; diff --git "a/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.lean.js" "b/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.lean.js" similarity index 83% rename from "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.lean.js" rename to "assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.lean.js" index 8f3d3c4de0..144ba3428f 100644 --- "a/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.VIyoDPEE.lean.js" +++ "b/assets/categories_fragments_2023_01_06_CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.md.wqjobhXQ.lean.js" @@ -1 +1 @@ -import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o as n,c as r,I as d,w as g,k as l,a as A,R as y,b as D,e as o}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const C="/assets/202301062024211.XSdkEyRK.png",c="/assets/202301062027985.qIIuam8H.png",P=JSON.parse('{"title":"阿里巴巴的Code Review方法论与实践总结","description":"","frontmatter":{"title":"阿里巴巴的Code Review方法论与实践总结","isOriginal":false,"author":"方基成(润甫)","date":"2023/01/06 20:12","articleTitle":"一文梳理Code Review方法论与实践总结","articleLink":"https://mp.weixin.qq.com/s/_4MFrQSYOIGYRdDGOJPDKQ","categories":["杂碎逆袭史"],"tags":["Code Review","卓越工程文化"]},"headers":[],"relativePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","filePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","lastUpdated":1673010072000}'),B={name:"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md"},F=l("h1",{id:"阿里巴巴的code-review方法论与实践总结",tabindex:"-1"},[A("阿里巴巴的Code Review方法论与实践总结 "),l("a",{class:"header-anchor",href:"#阿里巴巴的code-review方法论与实践总结","aria-label":'Permalink to "阿里巴巴的Code Review方法论与实践总结"'},"​")],-1),E=y("",68);function u(s,b,v,m,q,O){const h=p,t=e("ClientOnly");return n(),r("div",null,[F,d(t,null,{default:g(()=>{var i,a;return[(((i=s.$frontmatter)==null?void 0:i.aside)??!0)&&(((a=s.$frontmatter)==null?void 0:a.showArticleMetadata)??!0)?(n(),D(h,{key:0,article:s.$frontmatter},null,8,["article"])):o("",!0)]}),_:1}),E])}const S=k(B,[["render",u]]);export{P as __pageData,S as default}; +import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o as n,c as r,I as d,w as g,k as l,a as A,R as y,b as D,e as C}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const o="/assets/202301062024211.XSdkEyRK.png",c="/assets/202301062027985.qIIuam8H.png",S=JSON.parse('{"title":"阿里巴巴的Code Review方法论与实践总结","description":"","frontmatter":{"title":"阿里巴巴的Code Review方法论与实践总结","isOriginal":false,"author":"方基成(润甫)","date":"2023/01/06 20:12","articleTitle":"一文梳理Code Review方法论与实践总结","articleLink":"https://mp.weixin.qq.com/s/_4MFrQSYOIGYRdDGOJPDKQ","categories":["杂碎逆袭史"],"tags":["Code Review","卓越工程文化"]},"headers":[],"relativePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","filePath":"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md","lastUpdated":1673010072000}'),B={name:"categories/fragments/2023/01/06/CodeReview方法论与实践总结.md"},F=l("h1",{id:"阿里巴巴的code-review方法论与实践总结",tabindex:"-1"},[A("阿里巴巴的Code Review方法论与实践总结 "),l("a",{class:"header-anchor",href:"#阿里巴巴的code-review方法论与实践总结","aria-label":'Permalink to "阿里巴巴的Code Review方法论与实践总结"'},"​")],-1),E=y("",68);function u(s,b,v,m,q,O){const h=p,t=e("ClientOnly");return n(),r("div",null,[F,d(t,null,{default:g(()=>{var i,a;return[(((i=s.$frontmatter)==null?void 0:i.aside)??!0)&&(((a=s.$frontmatter)==null?void 0:a.showArticleMetadata)??!0)?(n(),D(h,{key:0,article:s.$frontmatter},null,8,["article"])):C("",!0)]}),_:1}),E])}const P=k(B,[["render",u]]);export{S as __pageData,P as default}; diff --git "a/categories/fragments/2019/12/28/\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.html" "b/categories/fragments/2019/12/28/\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.html" index d3dbbf3caf..a2d288b22e 100644 --- "a/categories/fragments/2019/12/28/\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.html" +++ "b/categories/fragments/2019/12/28/\344\270\252\344\272\272SQL\344\274\230\345\214\226\346\212\200\345\267\247.html" @@ -15,7 +15,7 @@ - + @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2019/12/29/\344\270\252\344\272\272\345\270\270\347\224\250Stream\344\275\277\347\224\250\346\212\200\345\267\247.html" "b/categories/fragments/2019/12/29/\344\270\252\344\272\272\345\270\270\347\224\250Stream\344\275\277\347\224\250\346\212\200\345\267\247.html" index ff3f48c25f..3bd289929f 100644 --- "a/categories/fragments/2019/12/29/\344\270\252\344\272\272\345\270\270\347\224\250Stream\344\275\277\347\224\250\346\212\200\345\267\247.html" +++ "b/categories/fragments/2019/12/29/\344\270\252\344\272\272\345\270\270\347\224\250Stream\344\275\277\347\224\250\346\212\200\345\267\247.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2019/12/30/\344\270\252\344\272\272\345\270\270\347\224\250Hutool\345\267\245\345\205\267\347\261\273.html" "b/categories/fragments/2019/12/30/\344\270\252\344\272\272\345\270\270\347\224\250Hutool\345\267\245\345\205\267\347\261\273.html" index b29dc02079..144ec11abe 100644 --- "a/categories/fragments/2019/12/30/\344\270\252\344\272\272\345\270\270\347\224\250Hutool\345\267\245\345\205\267\347\261\273.html" +++ "b/categories/fragments/2019/12/30/\344\270\252\344\272\272\345\270\270\347\224\250Hutool\345\267\245\345\205\267\347\261\273.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2019/12/31/\344\270\252\344\272\272\345\270\270\347\224\250Linux\345\221\275\344\273\244.html" "b/categories/fragments/2019/12/31/\344\270\252\344\272\272\345\270\270\347\224\250Linux\345\221\275\344\273\244.html" index a5e6c02016..204ac386c2 100644 --- "a/categories/fragments/2019/12/31/\344\270\252\344\272\272\345\270\270\347\224\250Linux\345\221\275\344\273\244.html" +++ "b/categories/fragments/2019/12/31/\344\270\252\344\272\272\345\270\270\347\224\250Linux\345\221\275\344\273\244.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2021/03/12/\347\262\276\345\257\206\350\256\241\347\256\227\345\267\245\345\205\267\347\261\273-BigDecimal.html" "b/categories/fragments/2021/03/12/\347\262\276\345\257\206\350\256\241\347\256\227\345\267\245\345\205\267\347\261\273-BigDecimal.html" index 8333a6d3b1..fe51524d70 100644 --- "a/categories/fragments/2021/03/12/\347\262\276\345\257\206\350\256\241\347\256\227\345\267\245\345\205\267\347\261\273-BigDecimal.html" +++ "b/categories/fragments/2021/03/12/\347\262\276\345\257\206\350\256\241\347\256\227\345\267\245\345\205\267\347\261\273-BigDecimal.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2021/05/29/\350\256\276\350\256\241\346\250\241\345\274\217\344\271\213\345\215\225\344\276\213\346\250\241\345\274\217.html" "b/categories/fragments/2021/05/29/\350\256\276\350\256\241\346\250\241\345\274\217\344\271\213\345\215\225\344\276\213\346\250\241\345\274\217.html" index 1708d066ff..69f0966e2f 100644 --- "a/categories/fragments/2021/05/29/\350\256\276\350\256\241\346\250\241\345\274\217\344\271\213\345\215\225\344\276\213\346\250\241\345\274\217.html" +++ "b/categories/fragments/2021/05/29/\350\256\276\350\256\241\346\250\241\345\274\217\344\271\213\345\215\225\344\276\213\346\250\241\345\274\217.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/02/16/\344\270\252\344\272\272\345\270\270\347\224\250SQL\345\207\275\346\225\260.html" "b/categories/fragments/2022/02/16/\344\270\252\344\272\272\345\270\270\347\224\250SQL\345\207\275\346\225\260.html" index c47a01cef0..5cf786795d 100644 --- "a/categories/fragments/2022/02/16/\344\270\252\344\272\272\345\270\270\347\224\250SQL\345\207\275\346\225\260.html" +++ "b/categories/fragments/2022/02/16/\344\270\252\344\272\272\345\270\270\347\224\250SQL\345\207\275\346\225\260.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/03/25/\345\220\210\345\271\266\344\270\244\344\270\252Git\344\273\223\345\272\223\347\232\204\345\216\206\345\217\262\346\217\220\344\272\244\350\256\260\345\275\225.html" "b/categories/fragments/2022/03/25/\345\220\210\345\271\266\344\270\244\344\270\252Git\344\273\223\345\272\223\347\232\204\345\216\206\345\217\262\346\217\220\344\272\244\350\256\260\345\275\225.html" index f0fac94e66..490de929f7 100644 --- "a/categories/fragments/2022/03/25/\345\220\210\345\271\266\344\270\244\344\270\252Git\344\273\223\345\272\223\347\232\204\345\216\206\345\217\262\346\217\220\344\272\244\350\256\260\345\275\225.html" +++ "b/categories/fragments/2022/03/25/\345\220\210\345\271\266\344\270\244\344\270\252Git\344\273\223\345\272\223\347\232\204\345\216\206\345\217\262\346\217\220\344\272\244\350\256\260\345\275\225.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/03/26/\344\277\256\346\224\271Git\346\234\200\345\220\216\344\270\200\346\254\241\346\217\220\344\272\244\350\256\260\345\275\225\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" "b/categories/fragments/2022/03/26/\344\277\256\346\224\271Git\346\234\200\345\220\216\344\270\200\346\254\241\346\217\220\344\272\244\350\256\260\345\275\225\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" index 10b3f09686..acaaa9d4fa 100644 --- "a/categories/fragments/2022/03/26/\344\277\256\346\224\271Git\346\234\200\345\220\216\344\270\200\346\254\241\346\217\220\344\272\244\350\256\260\345\275\225\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" +++ "b/categories/fragments/2022/03/26/\344\277\256\346\224\271Git\346\234\200\345\220\216\344\270\200\346\254\241\346\217\220\344\272\244\350\256\260\345\275\225\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/03/27/\344\277\256\346\224\271Git\346\211\200\346\234\211\346\217\220\344\272\244\350\256\260\345\275\225\344\270\255\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" "b/categories/fragments/2022/03/27/\344\277\256\346\224\271Git\346\211\200\346\234\211\346\217\220\344\272\244\350\256\260\345\275\225\344\270\255\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" index 2a7ffbc6eb..1229e39dad 100644 --- "a/categories/fragments/2022/03/27/\344\277\256\346\224\271Git\346\211\200\346\234\211\346\217\220\344\272\244\350\256\260\345\275\225\344\270\255\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" +++ "b/categories/fragments/2022/03/27/\344\277\256\346\224\271Git\346\211\200\346\234\211\346\217\220\344\272\244\350\256\260\345\275\225\344\270\255\347\232\204\344\275\234\350\200\205\345\222\214\351\202\256\347\256\261.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/03/28/\344\270\272\346\214\207\345\256\232Git\344\273\223\345\272\223\345\215\225\347\213\254\351\205\215\347\275\256\347\224\250\346\210\267\345\220\215\345\222\214\351\202\256\347\256\261.html" "b/categories/fragments/2022/03/28/\344\270\272\346\214\207\345\256\232Git\344\273\223\345\272\223\345\215\225\347\213\254\351\205\215\347\275\256\347\224\250\346\210\267\345\220\215\345\222\214\351\202\256\347\256\261.html" index 1b1b814571..33de6d9063 100644 --- "a/categories/fragments/2022/03/28/\344\270\272\346\214\207\345\256\232Git\344\273\223\345\272\223\345\215\225\347\213\254\351\205\215\347\275\256\347\224\250\346\210\267\345\220\215\345\222\214\351\202\256\347\256\261.html" +++ "b/categories/fragments/2022/03/28/\344\270\272\346\214\207\345\256\232Git\344\273\223\345\272\223\345\215\225\347\213\254\351\205\215\347\275\256\347\224\250\346\210\267\345\220\215\345\222\214\351\202\256\347\256\261.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/08/29/\345\206\205\347\275\221CentOS\346\234\215\345\212\241\345\231\250\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" "b/categories/fragments/2022/08/29/\345\206\205\347\275\221CentOS\346\234\215\345\212\241\345\231\250\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" index 04c6819c32..78878b8363 100644 --- "a/categories/fragments/2022/08/29/\345\206\205\347\275\221CentOS\346\234\215\345\212\241\345\231\250\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" +++ "b/categories/fragments/2022/08/29/\345\206\205\347\275\221CentOS\346\234\215\345\212\241\345\231\250\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/10/01/\344\270\252\344\272\272\345\270\270\347\224\250Docker\345\221\275\344\273\244.html" "b/categories/fragments/2022/10/01/\344\270\252\344\272\272\345\270\270\347\224\250Docker\345\221\275\344\273\244.html" index 5b7e9ef750..93c80d3047 100644 --- "a/categories/fragments/2022/10/01/\344\270\252\344\272\272\345\270\270\347\224\250Docker\345\221\275\344\273\244.html" +++ "b/categories/fragments/2022/10/01/\344\270\252\344\272\272\345\270\270\347\224\250Docker\345\221\275\344\273\244.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/10/05/\344\270\252\344\272\272\345\270\270\347\224\250Git\345\221\275\344\273\244.html" "b/categories/fragments/2022/10/05/\344\270\252\344\272\272\345\270\270\347\224\250Git\345\221\275\344\273\244.html" index 0166d1698d..5e05c33f57 100644 --- "a/categories/fragments/2022/10/05/\344\270\252\344\272\272\345\270\270\347\224\250Git\345\221\275\344\273\244.html" +++ "b/categories/fragments/2022/10/05/\344\270\252\344\272\272\345\270\270\347\224\250Git\345\221\275\344\273\244.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/10/06/\344\270\252\344\272\272\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256.html" "b/categories/fragments/2022/10/06/\344\270\252\344\272\272\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256.html" index 73593399f2..5a636543f7 100644 --- "a/categories/fragments/2022/10/06/\344\270\252\344\272\272\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256.html" +++ "b/categories/fragments/2022/10/06/\344\270\252\344\272\272\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/10/26/Docker\345\256\211\350\243\205OpenLDAP.html" "b/categories/fragments/2022/10/26/Docker\345\256\211\350\243\205OpenLDAP.html" index c61d0d9802..9f133eba33 100644 --- "a/categories/fragments/2022/10/26/Docker\345\256\211\350\243\205OpenLDAP.html" +++ "b/categories/fragments/2022/10/26/Docker\345\256\211\350\243\205OpenLDAP.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/10/27/Docker\345\256\211\350\243\205Consul.html" "b/categories/fragments/2022/10/27/Docker\345\256\211\350\243\205Consul.html" index 4f4574b862..7f1d94b534 100644 --- "a/categories/fragments/2022/10/27/Docker\345\256\211\350\243\205Consul.html" +++ "b/categories/fragments/2022/10/27/Docker\345\256\211\350\243\205Consul.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/10/28/Docker\345\256\211\350\243\205MinIO.html" "b/categories/fragments/2022/10/28/Docker\345\256\211\350\243\205MinIO.html" index cd3b2b626e..4fcbbda022 100644 --- "a/categories/fragments/2022/10/28/Docker\345\256\211\350\243\205MinIO.html" +++ "b/categories/fragments/2022/10/28/Docker\345\256\211\350\243\205MinIO.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/10/31/CentOS\345\256\211\350\243\205Docker.html" "b/categories/fragments/2022/10/31/CentOS\345\256\211\350\243\205Docker.html" index f860ea9233..c83e321495 100644 --- "a/categories/fragments/2022/10/31/CentOS\345\256\211\350\243\205Docker.html" +++ "b/categories/fragments/2022/10/31/CentOS\345\256\211\350\243\205Docker.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/11/01/\344\275\277\347\224\250IDEA\350\277\233\350\241\214\350\277\234\347\250\213\347\250\213\345\272\217\350\260\203\350\257\225.html" "b/categories/fragments/2022/11/01/\344\275\277\347\224\250IDEA\350\277\233\350\241\214\350\277\234\347\250\213\347\250\213\345\272\217\350\260\203\350\257\225.html" index 4691c65c6d..2405adad01 100644 --- "a/categories/fragments/2022/11/01/\344\275\277\347\224\250IDEA\350\277\233\350\241\214\350\277\234\347\250\213\347\250\213\345\272\217\350\260\203\350\257\225.html" +++ "b/categories/fragments/2022/11/01/\344\275\277\347\224\250IDEA\350\277\233\350\241\214\350\277\234\347\250\213\347\250\213\345\272\217\350\260\203\350\257\225.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2022/12/07/\347\275\221\347\253\231\345\274\200\345\220\257\347\201\260\350\211\262\346\230\276\347\244\272.html" "b/categories/fragments/2022/12/07/\347\275\221\347\253\231\345\274\200\345\220\257\347\201\260\350\211\262\346\230\276\347\244\272.html" index bc479b0482..6256de7b01 100644 --- "a/categories/fragments/2022/12/07/\347\275\221\347\253\231\345\274\200\345\220\257\347\201\260\350\211\262\346\230\276\347\244\272.html" +++ "b/categories/fragments/2022/12/07/\347\275\221\347\253\231\345\274\200\345\220\257\347\201\260\350\211\262\346\230\276\347\244\272.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2023/01/06/CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.html" "b/categories/fragments/2023/01/06/CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.html" index a886f32da6..785d75ffe1 100644 --- "a/categories/fragments/2023/01/06/CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.html" +++ "b/categories/fragments/2023/01/06/CodeReview\346\226\271\346\263\225\350\256\272\344\270\216\345\256\236\350\267\265\346\200\273\347\273\223.html" @@ -15,7 +15,7 @@ - + @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/fragments/2023/12/21/\344\270\200\346\226\207\350\257\246\350\247\243\351\231\220\346\265\201\346\216\245\345\217\243\345\256\236\347\216\260.html" "b/categories/fragments/2023/12/21/\344\270\200\346\226\207\350\257\246\350\247\243\351\231\220\346\265\201\346\216\245\345\217\243\345\256\236\347\216\260.html" index 04b58de038..1ea706249f 100644 --- "a/categories/fragments/2023/12/21/\344\270\200\346\226\207\350\257\246\350\247\243\351\231\220\346\265\201\346\216\245\345\217\243\345\256\236\347\216\260.html" +++ "b/categories/fragments/2023/12/21/\344\270\200\346\226\207\350\257\246\350\247\243\351\231\220\346\265\201\346\216\245\345\217\243\345\256\236\347\216\260.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/categories/fragments/index.html b/categories/fragments/index.html index 5e608503b3..1e4d08e041 100644 --- a/categories/fragments/index.html +++ b/categories/fragments/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2021/12/01/F\347\233\230\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231\345\267\262\346\215\237\345\235\217\343\200\202\346\230\257\345\220\246\346\270\205\347\251\272\350\257\245\351\251\261\345\212\250\345\231\250\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231.html" "b/categories/issues/2021/12/01/F\347\233\230\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231\345\267\262\346\215\237\345\235\217\343\200\202\346\230\257\345\220\246\346\270\205\347\251\272\350\257\245\351\251\261\345\212\250\345\231\250\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231.html" index b550d3f908..fd80f1e437 100644 --- "a/categories/issues/2021/12/01/F\347\233\230\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231\345\267\262\346\215\237\345\235\217\343\200\202\346\230\257\345\220\246\346\270\205\347\251\272\350\257\245\351\251\261\345\212\250\345\231\250\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231.html" +++ "b/categories/issues/2021/12/01/F\347\233\230\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231\345\267\262\346\215\237\345\235\217\343\200\202\346\230\257\345\220\246\346\270\205\347\251\272\350\257\245\351\251\261\345\212\250\345\231\250\344\270\212\347\232\204\345\233\236\346\224\266\347\253\231.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2021/12/08/for\345\276\252\347\216\257\344\270\255\345\210\240\351\231\244\351\233\206\345\220\210\345\205\203\347\264\240\351\232\220\350\227\217\347\232\204\351\231\267\351\230\261.html" "b/categories/issues/2021/12/08/for\345\276\252\347\216\257\344\270\255\345\210\240\351\231\244\351\233\206\345\220\210\345\205\203\347\264\240\351\232\220\350\227\217\347\232\204\351\231\267\351\230\261.html" index 4723a43381..7621db2c0b 100644 --- "a/categories/issues/2021/12/08/for\345\276\252\347\216\257\344\270\255\345\210\240\351\231\244\351\233\206\345\220\210\345\205\203\347\264\240\351\232\220\350\227\217\347\232\204\351\231\267\351\230\261.html" +++ "b/categories/issues/2021/12/08/for\345\276\252\347\216\257\344\270\255\345\210\240\351\231\244\351\233\206\345\220\210\345\205\203\347\264\240\351\232\220\350\227\217\347\232\204\351\231\267\351\230\261.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/categories/issues/2021/12/10/Command line is too long. Shorten command line for XXX or also for Spring Boot default configuration.html b/categories/issues/2021/12/10/Command line is too long. Shorten command line for XXX or also for Spring Boot default configuration.html index 2d91e3a7e0..9d70b5d395 100644 --- a/categories/issues/2021/12/10/Command line is too long. Shorten command line for XXX or also for Spring Boot default configuration.html +++ b/categories/issues/2021/12/10/Command line is too long. Shorten command line for XXX or also for Spring Boot default configuration.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2021/12/11/SQL \346\263\250\345\205\245\346\224\273\345\207\273\351\243\216\351\231\251.html" "b/categories/issues/2021/12/11/SQL \346\263\250\345\205\245\346\224\273\345\207\273\351\243\216\351\231\251.html" index fd6fdafd29..7a97fe00dc 100644 --- "a/categories/issues/2021/12/11/SQL \346\263\250\345\205\245\346\224\273\345\207\273\351\243\216\351\231\251.html" +++ "b/categories/issues/2021/12/11/SQL \346\263\250\345\205\245\346\224\273\345\207\273\351\243\216\351\231\251.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2021/12/13/\346\227\240\346\263\225\350\256\277\351\227\256F\347\233\230\343\200\202\346\226\207\344\273\266\346\210\226\347\233\256\345\275\225\346\215\237\345\235\217\344\270\224\346\227\240\346\263\225\350\257\273\345\217\226.html" "b/categories/issues/2021/12/13/\346\227\240\346\263\225\350\256\277\351\227\256F\347\233\230\343\200\202\346\226\207\344\273\266\346\210\226\347\233\256\345\275\225\346\215\237\345\235\217\344\270\224\346\227\240\346\263\225\350\257\273\345\217\226.html" index 2794712f13..5f5ef0f05f 100644 --- "a/categories/issues/2021/12/13/\346\227\240\346\263\225\350\256\277\351\227\256F\347\233\230\343\200\202\346\226\207\344\273\266\346\210\226\347\233\256\345\275\225\346\215\237\345\235\217\344\270\224\346\227\240\346\263\225\350\257\273\345\217\226.html" +++ "b/categories/issues/2021/12/13/\346\227\240\346\263\225\350\256\277\351\227\256F\347\233\230\343\200\202\346\226\207\344\273\266\346\210\226\347\233\256\345\275\225\346\215\237\345\235\217\344\270\224\346\227\240\346\263\225\350\257\273\345\217\226.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/01/26/JavaScript \346\227\240\346\263\225\345\255\230\345\202\250 Java Long \347\261\273\345\236\213\346\225\260\346\215\256\351\227\256\351\242\230.html" "b/categories/issues/2022/01/26/JavaScript \346\227\240\346\263\225\345\255\230\345\202\250 Java Long \347\261\273\345\236\213\346\225\260\346\215\256\351\227\256\351\242\230.html" index 7bee441ea2..bcc2753b25 100644 --- "a/categories/issues/2022/01/26/JavaScript \346\227\240\346\263\225\345\255\230\345\202\250 Java Long \347\261\273\345\236\213\346\225\260\346\215\256\351\227\256\351\242\230.html" +++ "b/categories/issues/2022/01/26/JavaScript \346\227\240\346\263\225\345\255\230\345\202\250 Java Long \347\261\273\345\236\213\346\225\260\346\215\256\351\227\256\351\242\230.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/03/24/\345\210\233\345\273\272\344\270\200\344\270\252\350\207\252\350\272\253\347\261\273\347\232\204\351\235\231\346\200\201\345\257\271\350\261\241\345\217\230\351\207\217\357\274\214\347\251\266\347\253\237\344\274\232\345\246\202\344\275\225\346\211\247\350\241\214\357\274\237.html" "b/categories/issues/2022/03/24/\345\210\233\345\273\272\344\270\200\344\270\252\350\207\252\350\272\253\347\261\273\347\232\204\351\235\231\346\200\201\345\257\271\350\261\241\345\217\230\351\207\217\357\274\214\347\251\266\347\253\237\344\274\232\345\246\202\344\275\225\346\211\247\350\241\214\357\274\237.html" index 32d52b0474..18baa72bb6 100644 --- "a/categories/issues/2022/03/24/\345\210\233\345\273\272\344\270\200\344\270\252\350\207\252\350\272\253\347\261\273\347\232\204\351\235\231\346\200\201\345\257\271\350\261\241\345\217\230\351\207\217\357\274\214\347\251\266\347\253\237\344\274\232\345\246\202\344\275\225\346\211\247\350\241\214\357\274\237.html" +++ "b/categories/issues/2022/03/24/\345\210\233\345\273\272\344\270\200\344\270\252\350\207\252\350\272\253\347\261\273\347\232\204\351\235\231\346\200\201\345\257\271\350\261\241\345\217\230\351\207\217\357\274\214\347\251\266\347\253\237\344\274\232\345\246\202\344\275\225\346\211\247\350\241\214\357\274\237.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/08/11/\346\211\247\350\241\214Shell\350\204\232\346\234\254\357\274\214\346\212\245java command not found.html" "b/categories/issues/2022/08/11/\346\211\247\350\241\214Shell\350\204\232\346\234\254\357\274\214\346\212\245java command not found.html" index c2430ba587..605270a87a 100644 --- "a/categories/issues/2022/08/11/\346\211\247\350\241\214Shell\350\204\232\346\234\254\357\274\214\346\212\245java command not found.html" +++ "b/categories/issues/2022/08/11/\346\211\247\350\241\214Shell\350\204\232\346\234\254\357\274\214\346\212\245java command not found.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/08/31/SpringBoot\351\241\271\347\233\256\345\274\225\345\205\245OpenFeign\345\220\216\346\227\240\346\263\225\345\220\257\345\212\250.html" "b/categories/issues/2022/08/31/SpringBoot\351\241\271\347\233\256\345\274\225\345\205\245OpenFeign\345\220\216\346\227\240\346\263\225\345\220\257\345\212\250.html" index 8ab3d19cd2..f7471ad0c8 100644 --- "a/categories/issues/2022/08/31/SpringBoot\351\241\271\347\233\256\345\274\225\345\205\245OpenFeign\345\220\216\346\227\240\346\263\225\345\220\257\345\212\250.html" +++ "b/categories/issues/2022/08/31/SpringBoot\351\241\271\347\233\256\345\274\225\345\205\245OpenFeign\345\220\216\346\227\240\346\263\225\345\220\257\345\212\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/09/05/Nginx\350\275\254\345\217\221\350\257\267\346\261\202\357\274\214\346\212\24513\357\274\232Permission denied\351\224\231\350\257\257.html" "b/categories/issues/2022/09/05/Nginx\350\275\254\345\217\221\350\257\267\346\261\202\357\274\214\346\212\24513\357\274\232Permission denied\351\224\231\350\257\257.html" index b9ff69aee9..0e76ca9dbb 100644 --- "a/categories/issues/2022/09/05/Nginx\350\275\254\345\217\221\350\257\267\346\261\202\357\274\214\346\212\24513\357\274\232Permission denied\351\224\231\350\257\257.html" +++ "b/categories/issues/2022/09/05/Nginx\350\275\254\345\217\221\350\257\267\346\261\202\357\274\214\346\212\24513\357\274\232Permission denied\351\224\231\350\257\257.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/09/23/\350\247\243\345\206\263\346\227\240\346\263\225\351\207\215\345\244\215\350\257\273\345\217\226\350\257\267\346\261\202\344\275\223\345\222\214\345\223\215\345\272\224\344\275\223\347\232\204\351\227\256\351\242\230.html" "b/categories/issues/2022/09/23/\350\247\243\345\206\263\346\227\240\346\263\225\351\207\215\345\244\215\350\257\273\345\217\226\350\257\267\346\261\202\344\275\223\345\222\214\345\223\215\345\272\224\344\275\223\347\232\204\351\227\256\351\242\230.html" index c14c3892ca..634575d96c 100644 --- "a/categories/issues/2022/09/23/\350\247\243\345\206\263\346\227\240\346\263\225\351\207\215\345\244\215\350\257\273\345\217\226\350\257\267\346\261\202\344\275\223\345\222\214\345\223\215\345\272\224\344\275\223\347\232\204\351\227\256\351\242\230.html" +++ "b/categories/issues/2022/09/23/\350\247\243\345\206\263\346\227\240\346\263\225\351\207\215\345\244\215\350\257\273\345\217\226\350\257\267\346\261\202\344\275\223\345\222\214\345\223\215\345\272\224\344\275\223\347\232\204\351\227\256\351\242\230.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/10/15/\350\247\243\345\206\263Windows\346\241\214\351\235\242\351\203\250\345\210\206\345\277\253\346\215\267\346\226\271\345\274\217\345\233\276\346\240\207\345\217\230\344\270\272\347\251\272\347\231\275\347\232\204\351\227\256\351\242\230.html" "b/categories/issues/2022/10/15/\350\247\243\345\206\263Windows\346\241\214\351\235\242\351\203\250\345\210\206\345\277\253\346\215\267\346\226\271\345\274\217\345\233\276\346\240\207\345\217\230\344\270\272\347\251\272\347\231\275\347\232\204\351\227\256\351\242\230.html" index d1fb7b4742..a1c9ea0fd9 100644 --- "a/categories/issues/2022/10/15/\350\247\243\345\206\263Windows\346\241\214\351\235\242\351\203\250\345\210\206\345\277\253\346\215\267\346\226\271\345\274\217\345\233\276\346\240\207\345\217\230\344\270\272\347\251\272\347\231\275\347\232\204\351\227\256\351\242\230.html" +++ "b/categories/issues/2022/10/15/\350\247\243\345\206\263Windows\346\241\214\351\235\242\351\203\250\345\210\206\345\277\253\346\215\267\346\226\271\345\274\217\345\233\276\346\240\207\345\217\230\344\270\272\347\251\272\347\231\275\347\232\204\351\227\256\351\242\230.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/10/25/\350\247\243\345\206\263CentOS8\346\211\247\350\241\214yum\345\256\211\350\243\205\346\212\245\351\224\231.html" "b/categories/issues/2022/10/25/\350\247\243\345\206\263CentOS8\346\211\247\350\241\214yum\345\256\211\350\243\205\346\212\245\351\224\231.html" index bfe7b725a2..2a3c9cdf3e 100644 --- "a/categories/issues/2022/10/25/\350\247\243\345\206\263CentOS8\346\211\247\350\241\214yum\345\256\211\350\243\205\346\212\245\351\224\231.html" +++ "b/categories/issues/2022/10/25/\350\247\243\345\206\263CentOS8\346\211\247\350\241\214yum\345\256\211\350\243\205\346\212\245\351\224\231.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/10/29/Docker\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" "b/categories/issues/2022/10/29/Docker\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" index 2e2c2d9885..4bb6d63586 100644 --- "a/categories/issues/2022/10/29/Docker\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" +++ "b/categories/issues/2022/10/29/Docker\350\256\276\347\275\256\347\275\221\347\273\234\344\273\243\347\220\206.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/11/04/\350\247\243\345\206\263Docker\345\256\211\350\243\205Prometheus\345\220\257\345\212\250\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" "b/categories/issues/2022/11/04/\350\247\243\345\206\263Docker\345\256\211\350\243\205Prometheus\345\220\257\345\212\250\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" index 2bd74f6fb0..38a5928c97 100644 --- "a/categories/issues/2022/11/04/\350\247\243\345\206\263Docker\345\256\211\350\243\205Prometheus\345\220\257\345\212\250\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" +++ "b/categories/issues/2022/11/04/\350\247\243\345\206\263Docker\345\256\211\350\243\205Prometheus\345\220\257\345\212\250\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/11/06/\350\247\243\345\206\263DotNET\345\256\211\350\243\205\345\220\216\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" "b/categories/issues/2022/11/06/\350\247\243\345\206\263DotNET\345\256\211\350\243\205\345\220\216\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" index f0e8139ee2..467d6b7c5f 100644 --- "a/categories/issues/2022/11/06/\350\247\243\345\206\263DotNET\345\256\211\350\243\205\345\220\216\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" +++ "b/categories/issues/2022/11/06/\350\247\243\345\206\263DotNET\345\256\211\350\243\205\345\220\216\346\212\245\351\224\231\347\232\204\351\227\256\351\242\230.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/issues/2022/11/23/\350\247\243\345\206\263Maven\344\274\240\351\200\222\344\276\235\350\265\226\346\261\241\346\237\223\347\232\204\351\227\256\351\242\230.html" "b/categories/issues/2022/11/23/\350\247\243\345\206\263Maven\344\274\240\351\200\222\344\276\235\350\265\226\346\261\241\346\237\223\347\232\204\351\227\256\351\242\230.html" index 285f62a589..e9dee1ddec 100644 --- "a/categories/issues/2022/11/23/\350\247\243\345\206\263Maven\344\274\240\351\200\222\344\276\235\350\265\226\346\261\241\346\237\223\347\232\204\351\227\256\351\242\230.html" +++ "b/categories/issues/2022/11/23/\350\247\243\345\206\263Maven\344\274\240\351\200\222\344\276\235\350\265\226\346\261\241\346\237\223\347\232\204\351\227\256\351\242\230.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/categories/issues/index.html b/categories/issues/index.html index 5f349d195c..28cd3d3c7d 100644 --- a/categories/issues/index.html +++ b/categories/issues/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/solutions/2021/11/18/\347\224\250Java8\350\216\267\345\217\226\350\277\221N\345\244\251\346\227\245\346\234\237.html" "b/categories/solutions/2021/11/18/\347\224\250Java8\350\216\267\345\217\226\350\277\221N\345\244\251\346\227\245\346\234\237.html" index 03a2bece42..d8b25f33af 100644 --- "a/categories/solutions/2021/11/18/\347\224\250Java8\350\216\267\345\217\226\350\277\221N\345\244\251\346\227\245\346\234\237.html" +++ "b/categories/solutions/2021/11/18/\347\224\250Java8\350\216\267\345\217\226\350\277\221N\345\244\251\346\227\245\346\234\237.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/solutions/2021/11/22/\344\270\200\346\235\241SQL\346\237\245\350\257\242\344\273\212\345\271\264\346\257\217\346\234\210\347\273\237\350\256\241\344\277\241\346\201\257.html" "b/categories/solutions/2021/11/22/\344\270\200\346\235\241SQL\346\237\245\350\257\242\344\273\212\345\271\264\346\257\217\346\234\210\347\273\237\350\256\241\344\277\241\346\201\257.html" index b2bfef3633..4602c48f5c 100644 --- "a/categories/solutions/2021/11/22/\344\270\200\346\235\241SQL\346\237\245\350\257\242\344\273\212\345\271\264\346\257\217\346\234\210\347\273\237\350\256\241\344\277\241\346\201\257.html" +++ "b/categories/solutions/2021/11/22/\344\270\200\346\235\241SQL\346\237\245\350\257\242\344\273\212\345\271\264\346\257\217\346\234\210\347\273\237\350\256\241\344\277\241\346\201\257.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/solutions/2022/09/07/\351\200\222\345\275\222\346\237\245\350\257\242\346\240\221\345\236\213\347\273\223\346\236\204\346\225\260\346\215\256\347\232\204\346\200\247\350\203\275\344\274\230\345\214\226\346\226\271\346\241\210.html" "b/categories/solutions/2022/09/07/\351\200\222\345\275\222\346\237\245\350\257\242\346\240\221\345\236\213\347\273\223\346\236\204\346\225\260\346\215\256\347\232\204\346\200\247\350\203\275\344\274\230\345\214\226\346\226\271\346\241\210.html" index ed7d6a8473..ee42d8b14c 100644 --- "a/categories/solutions/2022/09/07/\351\200\222\345\275\222\346\237\245\350\257\242\346\240\221\345\236\213\347\273\223\346\236\204\346\225\260\346\215\256\347\232\204\346\200\247\350\203\275\344\274\230\345\214\226\346\226\271\346\241\210.html" +++ "b/categories/solutions/2022/09/07/\351\200\222\345\275\222\346\237\245\350\257\242\346\240\221\345\236\213\347\273\223\346\236\204\346\225\260\346\215\256\347\232\204\346\200\247\350\203\275\344\274\230\345\214\226\346\226\271\346\241\210.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/categories/solutions/index.html b/categories/solutions/index.html index de8cc7a2d8..f420992162 100644 --- a/categories/solutions/index.html +++ b/categories/solutions/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/tools/2021/01/14/\345\210\235\350\257\206Lombok.html" "b/categories/tools/2021/01/14/\345\210\235\350\257\206Lombok.html" index 0c817a6b75..bc71e98a59 100644 --- "a/categories/tools/2021/01/14/\345\210\235\350\257\206Lombok.html" +++ "b/categories/tools/2021/01/14/\345\210\235\350\257\206Lombok.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/tools/2021/02/22/RDM\345\277\253\351\200\237\345\205\245\351\227\250.html" "b/categories/tools/2021/02/22/RDM\345\277\253\351\200\237\345\205\245\351\227\250.html" index 5de5bafd07..954aea852a 100644 --- "a/categories/tools/2021/02/22/RDM\345\277\253\351\200\237\345\205\245\351\227\250.html" +++ "b/categories/tools/2021/02/22/RDM\345\277\253\351\200\237\345\205\245\351\227\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/tools/2021/03/04/ARDM\345\277\253\351\200\237\345\205\245\351\227\250.html" "b/categories/tools/2021/03/04/ARDM\345\277\253\351\200\237\345\205\245\351\227\250.html" index d68a343de4..23c78426bd 100644 --- "a/categories/tools/2021/03/04/ARDM\345\277\253\351\200\237\345\205\245\351\227\250.html" +++ "b/categories/tools/2021/03/04/ARDM\345\277\253\351\200\237\345\205\245\351\227\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/tools/2021/03/06/Postman\345\277\253\351\200\237\345\205\245\351\227\250.html" "b/categories/tools/2021/03/06/Postman\345\277\253\351\200\237\345\205\245\351\227\250.html" index 46d282dae5..23ad043dd1 100644 --- "a/categories/tools/2021/03/06/Postman\345\277\253\351\200\237\345\205\245\351\227\250.html" +++ "b/categories/tools/2021/03/06/Postman\345\277\253\351\200\237\345\205\245\351\227\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/categories/tools/2021/03/10/Quartz\345\277\253\351\200\237\345\205\245\351\227\250.html" "b/categories/tools/2021/03/10/Quartz\345\277\253\351\200\237\345\205\245\351\227\250.html" index 39325f4556..881c9e0d5b 100644 --- "a/categories/tools/2021/03/10/Quartz\345\277\253\351\200\237\345\205\245\351\227\250.html" +++ "b/categories/tools/2021/03/10/Quartz\345\277\253\351\200\237\345\205\245\351\227\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/categories/tools/index.html b/categories/tools/index.html index 5ee23b7fa1..967d2c3017 100644 --- a/categories/tools/index.html +++ b/categories/tools/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/01-\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/01-\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.html" index 772ca4e6ae..51277bb174 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/01-\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/01-\345\274\200\345\217\221\347\216\257\345\242\203\346\220\255\345\273\272.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/02-\347\254\254\344\270\200\344\270\252Java\347\250\213\345\272\217.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/02-\347\254\254\344\270\200\344\270\252Java\347\250\213\345\272\217.html" index db68141a44..2858450886 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/02-\347\254\254\344\270\200\344\270\252Java\347\250\213\345\272\217.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/02-\347\254\254\344\270\200\344\270\252Java\347\250\213\345\272\217.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/03-\345\210\235\350\257\206Eclipse.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/03-\345\210\235\350\257\206Eclipse.html" index cddde6d1ea..b530a27e52 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/03-\345\210\235\350\257\206Eclipse.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/03-\345\210\235\350\257\206Eclipse.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/04-\347\250\213\345\272\217\345\222\214\350\256\241\347\256\227\346\234\272\347\232\204\351\202\243\347\202\271\344\272\213\345\204\277.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/04-\347\250\213\345\272\217\345\222\214\350\256\241\347\256\227\346\234\272\347\232\204\351\202\243\347\202\271\344\272\213\345\204\277.html" index 69e2a2a595..75edb5749c 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/04-\347\250\213\345\272\217\345\222\214\350\256\241\347\256\227\346\234\272\347\232\204\351\202\243\347\202\271\344\272\213\345\204\277.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/04-\347\250\213\345\272\217\345\222\214\350\256\241\347\256\227\346\234\272\347\232\204\351\202\243\347\202\271\344\272\213\345\204\277.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/05-\345\217\230\351\207\217\345\222\214\345\270\270\351\207\217.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/05-\345\217\230\351\207\217\345\222\214\345\270\270\351\207\217.html" index 1a840b9a67..a8417a196c 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/05-\345\217\230\351\207\217\345\222\214\345\270\270\351\207\217.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/05-\345\217\230\351\207\217\345\222\214\345\270\270\351\207\217.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/06-\345\270\270\347\224\250\347\232\204\350\277\220\347\256\227\347\254\246.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/06-\345\270\270\347\224\250\347\232\204\350\277\220\347\256\227\347\254\246.html" index 54a0cc1e05..4b8903a317 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/06-\345\270\270\347\224\250\347\232\204\350\277\220\347\256\227\347\254\246.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/06-\345\270\270\347\224\250\347\232\204\350\277\220\347\256\227\347\254\246.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/07-\346\216\247\345\210\266\350\257\255\345\217\245\345\222\214\346\265\201\347\250\213\345\233\276.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/07-\346\216\247\345\210\266\350\257\255\345\217\245\345\222\214\346\265\201\347\250\213\345\233\276.html" index 0e185f56f1..f3a93701f7 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/07-\346\216\247\345\210\266\350\257\255\345\217\245\345\222\214\346\265\201\347\250\213\345\233\276.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/07-\346\216\247\345\210\266\350\257\255\345\217\245\345\222\214\346\265\201\347\250\213\345\233\276.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/08-if\351\200\211\346\213\251\347\273\223\346\236\204.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/08-if\351\200\211\346\213\251\347\273\223\346\236\204.html" index 4611ec1bcb..f41fde00f6 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/08-if\351\200\211\346\213\251\347\273\223\346\236\204.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/08-if\351\200\211\346\213\251\347\273\223\346\236\204.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/09-switch\351\200\211\346\213\251\347\273\223\346\236\204.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/09-switch\351\200\211\346\213\251\347\273\223\346\236\204.html" index 758659c7ee..072d3ee89d 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/09-switch\351\200\211\346\213\251\347\273\223\346\236\204.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/09-switch\351\200\211\346\213\251\347\273\223\346\236\204.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/10-\345\276\252\347\216\257\347\273\223\346\236\204.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/10-\345\276\252\347\216\257\347\273\223\346\236\204.html" index e3290f3621..b324834245 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/10-\345\276\252\347\216\257\347\273\223\346\236\204.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/10-\345\276\252\347\216\257\347\273\223\346\236\204.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/11-\345\244\232\351\207\215\345\276\252\347\216\257.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/11-\345\244\232\351\207\215\345\276\252\347\216\257.html" index 5404807357..478a97dfdd 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/11-\345\244\232\351\207\215\345\276\252\347\216\257.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/11-\345\244\232\351\207\215\345\276\252\347\216\257.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/12-\347\250\213\345\272\217\350\260\203\350\257\225\345\205\245\351\227\250.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/12-\347\250\213\345\272\217\350\260\203\350\257\225\345\205\245\351\227\250.html" index be18d586d7..4b2f1454ec 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/12-\347\250\213\345\272\217\350\260\203\350\257\225\345\205\245\351\227\250.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/12-\347\250\213\345\272\217\350\260\203\350\257\225\345\205\245\351\227\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/13-\344\270\200\347\273\264\346\225\260\347\273\204.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/13-\344\270\200\347\273\264\346\225\260\347\273\204.html" index d935afa099..bbdf44c1b5 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/13-\344\270\200\347\273\264\346\225\260\347\273\204.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/13-\344\270\200\347\273\264\346\225\260\347\273\204.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/14-\345\244\232\347\273\264\346\225\260\347\273\204.html" "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/14-\345\244\232\347\273\264\346\225\260\347\273\204.html" index c2eb4fd2fa..58b663e73a 100644 --- "a/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/14-\345\244\232\347\273\264\346\225\260\347\273\204.html" +++ "b/courses/java/01-Java\350\257\255\346\263\225\345\205\245\351\227\250/14-\345\244\232\347\273\264\346\225\260\347\273\204.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/02-Java\351\235\242\345\220\221\345\257\271\350\261\241/01-\347\261\273\345\222\214\345\257\271\350\261\241.html" "b/courses/java/02-Java\351\235\242\345\220\221\345\257\271\350\261\241/01-\347\261\273\345\222\214\345\257\271\350\261\241.html" index 5fdf95d838..863d378c8e 100644 --- "a/courses/java/02-Java\351\235\242\345\220\221\345\257\271\350\261\241/01-\347\261\273\345\222\214\345\257\271\350\261\241.html" +++ "b/courses/java/02-Java\351\235\242\345\220\221\345\257\271\350\261\241/01-\347\261\273\345\222\214\345\257\271\350\261\241.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/03-Java\351\253\230\347\272\247\347\211\271\346\200\247/01-\351\233\206\345\220\210\344\270\216\346\263\233\345\236\213-1.html" "b/courses/java/03-Java\351\253\230\347\272\247\347\211\271\346\200\247/01-\351\233\206\345\220\210\344\270\216\346\263\233\345\236\213-1.html" index 34afd31323..eece163054 100644 --- "a/courses/java/03-Java\351\253\230\347\272\247\347\211\271\346\200\247/01-\351\233\206\345\220\210\344\270\216\346\263\233\345\236\213-1.html" +++ "b/courses/java/03-Java\351\253\230\347\272\247\347\211\271\346\200\247/01-\351\233\206\345\220\210\344\270\216\346\263\233\345\236\213-1.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/java/04-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205JDK.html" "b/courses/java/04-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205JDK.html" index 4b9e344e2f..aa50b77ce1 100644 --- "a/courses/java/04-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205JDK.html" +++ "b/courses/java/04-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205JDK.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/courses/java/index.html b/courses/java/index.html index 5e80b0c74d..25b9156e1e 100644 --- a/courses/java/index.html +++ b/courses/java/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" index 9d7e8f977c..00d573b619 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/02-\346\240\270\345\277\203\345\257\271\350\261\241.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/02-\346\240\270\345\277\203\345\257\271\350\261\241.html" index 10b605d389..fdfff20572 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/02-\346\240\270\345\277\203\345\257\271\350\261\241.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/02-\346\240\270\345\277\203\345\257\271\350\261\241.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/03-\346\240\270\345\277\203\351\205\215\347\275\256\346\226\207\344\273\266.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/03-\346\240\270\345\277\203\351\205\215\347\275\256\346\226\207\344\273\266.html" index 0c629c927b..f20265bd19 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/03-\346\240\270\345\277\203\351\205\215\347\275\256\346\226\207\344\273\266.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/03-\346\240\270\345\277\203\351\205\215\347\275\256\346\226\207\344\273\266.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/04-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\346\237\245\350\257\242\345\205\203\347\264\240.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/04-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\346\237\245\350\257\242\345\205\203\347\264\240.html" index 6755d0efbd..4abe88f9c0 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/04-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\346\237\245\350\257\242\345\205\203\347\264\240.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/04-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\346\237\245\350\257\242\345\205\203\347\264\240.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/05-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\345\242\236\345\210\240\346\224\271\345\205\203\347\264\240.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/05-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\345\242\236\345\210\240\346\224\271\345\205\203\347\264\240.html" index f272f6cb7e..a588160c6d 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/05-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\345\242\236\345\210\240\346\224\271\345\205\203\347\264\240.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/05-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\345\242\236\345\210\240\346\224\271\345\205\203\347\264\240.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/06-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\350\207\252\345\256\232\344\271\211\346\230\240\345\260\204\345\205\203\347\264\240.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/06-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\350\207\252\345\256\232\344\271\211\346\230\240\345\260\204\345\205\203\347\264\240.html" index 0b14734c12..40e71e0b24 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/06-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\350\207\252\345\256\232\344\271\211\346\230\240\345\260\204\345\205\203\347\264\240.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/06-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\350\207\252\345\256\232\344\271\211\346\230\240\345\260\204\345\205\203\347\264\240.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/07-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\347\274\223\345\255\230\345\205\203\347\264\240.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/07-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\347\274\223\345\255\230\345\205\203\347\264\240.html" index 2c054958c0..ee8513df2a 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/07-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\347\274\223\345\255\230\345\205\203\347\264\240.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/07-SQL\346\230\240\345\260\204\346\226\207\344\273\266\344\271\213\347\274\223\345\255\230\345\205\203\347\264\240.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/08-\345\212\250\346\200\201SQL.html" "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/08-\345\212\250\346\200\201SQL.html" index 24b26f61b3..0fbb8e376f 100644 --- "a/courses/mybatis/01-MyBatis\345\237\272\347\241\200/08-\345\212\250\346\200\201SQL.html" +++ "b/courses/mybatis/01-MyBatis\345\237\272\347\241\200/08-\345\212\250\346\200\201SQL.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" index 74d55bd740..e9d3c05b08 100644 --- "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" +++ "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/01-\345\277\253\351\200\237\345\205\245\351\227\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/02-\345\242\236\345\210\240\346\224\271\346\223\215\344\275\234.html" "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/02-\345\242\236\345\210\240\346\224\271\346\223\215\344\275\234.html" index 85c58d2568..e8fb3f18be 100644 --- "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/02-\345\242\236\345\210\240\346\224\271\346\223\215\344\275\234.html" +++ "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/02-\345\242\236\345\210\240\346\224\271\346\223\215\344\275\234.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/03-\347\256\200\345\215\225\346\237\245\350\257\242\346\223\215\344\275\234.html" "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/03-\347\256\200\345\215\225\346\237\245\350\257\242\346\223\215\344\275\234.html" index b77de7f6a9..66a3c0b6a4 100644 --- "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/03-\347\256\200\345\215\225\346\237\245\350\257\242\346\223\215\344\275\234.html" +++ "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/03-\347\256\200\345\215\225\346\237\245\350\257\242\346\223\215\344\275\234.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/04-\346\235\241\344\273\266\346\236\204\351\200\240\345\231\250.html" "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/04-\346\235\241\344\273\266\346\236\204\351\200\240\345\231\250.html" index 92399264c2..eead9320fa 100644 --- "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/04-\346\235\241\344\273\266\346\236\204\351\200\240\345\231\250.html" +++ "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/04-\346\235\241\344\273\266\346\236\204\351\200\240\345\231\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/05-\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250.html" "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/05-\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250.html" index 179a72b24c..0630014e1c 100644 --- "a/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/05-\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250.html" +++ "b/courses/mybatis/02-MyBatis-Plus\345\237\272\347\241\200/05-\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/courses/mybatis/index.html b/courses/mybatis/index.html index b9703b3908..498d3ddd48 100644 --- a/courses/mybatis/index.html +++ b/courses/mybatis/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mysql/01-MySQL\345\237\272\347\241\200/01-MySQL\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.html" "b/courses/mysql/01-MySQL\345\237\272\347\241\200/01-MySQL\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.html" index 5ba170a80c..b60e856176 100644 --- "a/courses/mysql/01-MySQL\345\237\272\347\241\200/01-MySQL\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.html" +++ "b/courses/mysql/01-MySQL\345\237\272\347\241\200/01-MySQL\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mysql/03-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205MySQL.html" "b/courses/mysql/03-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205MySQL.html" index a505eef5fc..4935d8b5e2 100644 --- "a/courses/mysql/03-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205MySQL.html" +++ "b/courses/mysql/03-\351\231\204\345\275\225/01-CentOS\345\256\211\350\243\205MySQL.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git "a/courses/mysql/03-\351\231\204\345\275\225/02-Docker\345\256\211\350\243\205MySQL.html" "b/courses/mysql/03-\351\231\204\345\275\225/02-Docker\345\256\211\350\243\205MySQL.html" index c90ce919ee..a28cdf0571 100644 --- "a/courses/mysql/03-\351\231\204\345\275\225/02-Docker\345\256\211\350\243\205MySQL.html" +++ "b/courses/mysql/03-\351\231\204\345\275\225/02-Docker\345\256\211\350\243\205MySQL.html" @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/courses/mysql/index.html b/courses/mysql/index.html index 3e8f82aee5..9473616f84 100644 --- a/courses/mysql/index.html +++ b/courses/mysql/index.html @@ -35,7 +35,7 @@
- + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 93b37acf4b..e941b382e5 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"about_index.md":"aZfz3sjq","categories_fragments_2022_03_27_修改git所有提交记录中的作者和邮箱.md":"OvDDBZd4","categories_issues_2022_10_25_解决centos8执行yum安装报错.md":"vWOngd9g","categories_fragments_2022_03_28_为指定git仓库单独配置用户名和邮箱.md":"qMYHQNJe","categories_fragments_2022_10_31_centos安装docker.md":"aS1qV9Oq","categories_fragments_2019_12_30_个人常用hutool工具类.md":"8YjnAagp","categories_fragments_2019_12_31_个人常用linux命令.md":"lx3qwmph","categories_fragments_2022_10_26_docker安装openldap.md":"mcPLxA8n","categories_fragments_2022_08_29_内网centos服务器设置网络代理.md":"Wz9Gyo3N","categories_fragments_2022_02_16_个人常用sql函数.md":"3XF3Onqb","categories_fragments_2022_11_01_使用idea进行远程程序调试.md":"0r_fvBId","categories_fragments_2022_12_07_网站开启灰色显示.md":"ALiJge8d","categories_fragments_2022_03_26_修改git最后一次提交记录的作者和邮箱.md":"hSvi24NU","categories_fragments_2022_10_27_docker安装consul.md":"LIu1Q7_o","categories_issues_2021_12_01_f盘上的回收站已损坏。是否清空该驱动器上的回收站.md":"dANDLbnx","categories_issues_2021_12_13_无法访问f盘。文件或目录损坏且无法读取.md":"ly-jJhLg","categories_fragments_2023_01_06_codereview方法论与实践总结.md":"VIyoDPEE","categories_issues_2022_03_24_创建一个自身类的静态对象变量,究竟会如何执行?.md":"_sjVm5kR","categories_issues_2022_01_26_javascript 无法存储 java long 类型数据问题.md":"IO54X60W","categories_issues_2022_11_06_解决dotnet安装后报错的问题.md":"skCbcShV","categories_issues_2022_11_04_解决docker安装prometheus启动报错的问题.md":"wlwkdFKi","categories_issues_2022_10_29_docker设置网络代理.md":"5gbvC2uf","categories_issues_index.md":"Yzlc8cBS","categories_fragments_2021_05_29_设计模式之单例模式.md":"Q_Kk2HQh","courses_mysql_03-附录_02-docker安装mysql.md":"Qay1Rxzf","courses_java_01-java语法入门_05-变量和常量.md":"wVbb047E","courses_mybatis_01-mybatis基础_07-sql映射文件之缓存元素.md":"9orUXUze","categories_issues_2022_11_23_解决maven传递依赖污染的问题.md":"GY3psqIs","courses_mybatis_01-mybatis基础_02-核心对象.md":"J2u3OyyP","courses_mybatis_index.md":"7LMzFTpl","categories_fragments_2021_03_12_精密计算工具类-bigdecimal.md":"zBMJQ_Bo","categories_fragments_2019_12_28_个人sql优化技巧.md":"N4LiFEiO","categories_solutions_2021_11_22_一条sql查询今年每月统计信息.md":"2pLzv9Tp","courses_java_01-java语法入门_04-程序和计算机的那点事儿.md":"i4Xi0Jl0","courses_java_01-java语法入门_07-控制语句和流程图.md":"t61wREmj","courses_java_01-java语法入门_13-一维数组.md":"tyF-2IM9","categories_fragments_2022_10_05_个人常用git命令.md":"H2ehuVi6","courses_java_01-java语法入门_10-循环结构.md":"z73Bcwe8","categories_fragments_2022_10_06_个人常用快捷键.md":"7DmE2Sdn","categories_fragments_index.md":"lRTNURvo","courses_java_03-java高级特性_01-集合与泛型-1.md":"3f19_0FV","categories_issues_2022_08_11_执行shell脚本,报java command not found.md":"M4ZLKe1m","categories_issues_2021_12_10_command line is too long. shorten command line for xxx or also for spring boot default configuration.md":"PXnmw2TY","courses_java_02-java面向对象_01-类和对象.md":"A4c0BkF0","categories_issues_2021_12_11_sql 注入攻击风险.md":"rljfD_Fi","categories_tools_2021_02_22_rdm快速入门.md":"-N1bZYLN","categories_tools_2021_01_14_初识lombok.md":"DDRTdFdf","categories_issues_2022_10_15_解决windows桌面部分快捷方式图标变为空白的问题.md":"Zuxd2KdY","categories_tools_2021_03_04_ardm快速入门.md":"zbxPd0TS","courses_java_01-java语法入门_01-开发环境搭建.md":"JchJHevH","courses_java_01-java语法入门_02-第一个java程序.md":"b9EylDVG","courses_mybatis_02-mybatis-plus基础_03-简单查询操作.md":"OO_paHtp","courses_mybatis_02-mybatis-plus基础_05-代码生成器.md":"hjpH5d8x","courses_java_01-java语法入门_03-初识eclipse.md":"VIICcUYm","categories_tools_2021_03_06_postman快速入门.md":"7P3rh4Zw","index.md":"rpby8rrg","categories_tools_2021_03_10_quartz快速入门.md":"yXxsG68Z","courses_mysql_01-mysql基础_01-mysql安装与配置.md":"bXq0pYDh","categories_fragments_2022_03_25_合并两个git仓库的历史提交记录.md":"e24riSJ9","courses_java_index.md":"Vd-Tt2Gz","courses_mybatis_02-mybatis-plus基础_04-条件构造器.md":"v-MWEs-l","archives.md":"hEvO1jAg","categories_issues_2022_09_23_解决无法重复读取请求体和响应体的问题.md":"QBFvmfGv","courses_mybatis_01-mybatis基础_04-sql映射文件之查询元素.md":"UYQRCMvg","courses_java_01-java语法入门_08-if选择结构.md":"GylQ89V9","categories_fragments_2022_10_01_个人常用docker命令.md":"tQHhdswU","courses_java_01-java语法入门_09-switch选择结构.md":"p1ZypRLa","courses_java_01-java语法入门_06-常用的运算符.md":"ERU0p3Fx","categories_tools_index.md":"qDqYFV-P","categories_issues_2022_08_31_springboot项目引入openfeign后无法启动.md":"ChRCkQV5","courses_java_01-java语法入门_11-多重循环.md":"79go9ddo","courses_java_01-java语法入门_12-程序调试入门.md":"1LT3Uu5K","categories_issues_2022_09_05_nginx转发请求,报13:permission denied错误.md":"PClZAC2K","courses_mybatis_02-mybatis-plus基础_01-快速入门.md":"2M92eqRH","courses_mybatis_02-mybatis-plus基础_02-增删改操作.md":"0wJpZsHd","categories_solutions_2021_11_18_用java8获取近n天日期.md":"r9mp3BOr","courses_mybatis_01-mybatis基础_03-核心配置文件.md":"pjBK9LfV","courses_mybatis_01-mybatis基础_06-sql映射文件之自定义映射元素.md":"yafOyEf1","courses_mybatis_01-mybatis基础_08-动态sql.md":"EiHlJ807","courses_java_04-附录_01-centos安装jdk.md":"mrm2xLeJ","courses_java_01-java语法入门_14-多维数组.md":"C3Jtu4yX","categories_solutions_2022_09_07_递归查询树型结构数据的性能优化方案.md":"zWro2Zfo","courses_mysql_index.md":"6rziEA5O","categories_fragments_2019_12_29_个人常用stream使用技巧.md":"CuDwLpDP","about_me.md":"yl4MsNR1","categories_fragments_2023_12_21_一文详解限流接口实现.md":"HHXYHaRJ","courses_mybatis_01-mybatis基础_01-快速入门.md":"KXcjGx0w","courses_mysql_03-附录_01-centos安装mysql.md":"ZEGR5OmN","categories_solutions_index.md":"JPFJaff4","courses_mybatis_01-mybatis基础_05-sql映射文件之增删改元素.md":"Q1bwfP8k","categories_issues_2021_12_08_for循环中删除集合元素隐藏的陷阱.md":"HaXmdlA5","categories_fragments_2022_10_28_docker安装minio.md":"pOrH5sCo","tags.md":"TML_Ecph"} +{"categories_issues_2022_10_25_解决centos8执行yum安装报错.md":"vWOngd9g","categories_fragments_2022_10_05_个人常用git命令.md":"H2ehuVi6","categories_fragments_2022_02_16_个人常用sql函数.md":"3XF3Onqb","categories_fragments_2022_03_28_为指定git仓库单独配置用户名和邮箱.md":"qMYHQNJe","categories_fragments_2019_12_29_个人常用stream使用技巧.md":"CuDwLpDP","categories_issues_2022_09_23_解决无法重复读取请求体和响应体的问题.md":"QBFvmfGv","categories_fragments_index.md":"lRTNURvo","categories_issues_2021_12_01_f盘上的回收站已损坏。是否清空该驱动器上的回收站.md":"dANDLbnx","categories_fragments_2023_12_21_一文详解限流接口实现.md":"HHXYHaRJ","categories_fragments_2023_01_06_codereview方法论与实践总结.md":"wqjobhXQ","categories_issues_2021_12_08_for循环中删除集合元素隐藏的陷阱.md":"HaXmdlA5","categories_issues_2022_01_26_javascript 无法存储 java long 类型数据问题.md":"IO54X60W","categories_fragments_2022_10_26_docker安装openldap.md":"mcPLxA8n","categories_issues_2022_10_15_解决windows桌面部分快捷方式图标变为空白的问题.md":"Zuxd2KdY","categories_fragments_2022_10_28_docker安装minio.md":"pOrH5sCo","about_index.md":"aZfz3sjq","categories_fragments_2022_10_31_centos安装docker.md":"aS1qV9Oq","about_me.md":"yl4MsNR1","categories_fragments_2022_03_26_修改git最后一次提交记录的作者和邮箱.md":"hSvi24NU","categories_issues_2022_08_11_执行shell脚本,报java command not found.md":"M4ZLKe1m","categories_issues_2022_03_24_创建一个自身类的静态对象变量,究竟会如何执行?.md":"_sjVm5kR","categories_fragments_2022_08_29_内网centos服务器设置网络代理.md":"Wz9Gyo3N","categories_issues_2022_10_29_docker设置网络代理.md":"5gbvC2uf","categories_issues_2022_11_04_解决docker安装prometheus启动报错的问题.md":"wlwkdFKi","categories_issues_2022_11_06_解决dotnet安装后报错的问题.md":"skCbcShV","categories_issues_index.md":"Yzlc8cBS","categories_solutions_2021_11_18_用java8获取近n天日期.md":"r9mp3BOr","categories_solutions_2021_11_22_一条sql查询今年每月统计信息.md":"2pLzv9Tp","categories_issues_2022_11_23_解决maven传递依赖污染的问题.md":"GY3psqIs","categories_solutions_index.md":"JPFJaff4","categories_solutions_2022_09_07_递归查询树型结构数据的性能优化方案.md":"zWro2Zfo","courses_mysql_01-mysql基础_01-mysql安装与配置.md":"bXq0pYDh","categories_tools_2021_02_22_rdm快速入门.md":"-N1bZYLN","categories_tools_2021_03_04_ardm快速入门.md":"zbxPd0TS","categories_tools_2021_03_06_postman快速入门.md":"7P3rh4Zw","categories_tools_2021_03_10_quartz快速入门.md":"yXxsG68Z","categories_tools_index.md":"qDqYFV-P","courses_java_01-java语法入门_02-第一个java程序.md":"b9EylDVG","courses_java_01-java语法入门_01-开发环境搭建.md":"JchJHevH","courses_java_01-java语法入门_03-初识eclipse.md":"VIICcUYm","courses_java_01-java语法入门_04-程序和计算机的那点事儿.md":"i4Xi0Jl0","courses_java_01-java语法入门_08-if选择结构.md":"GylQ89V9","courses_java_01-java语法入门_06-常用的运算符.md":"ERU0p3Fx","courses_java_01-java语法入门_05-变量和常量.md":"wVbb047E","courses_java_01-java语法入门_13-一维数组.md":"tyF-2IM9","courses_java_01-java语法入门_09-switch选择结构.md":"p1ZypRLa","courses_java_01-java语法入门_12-程序调试入门.md":"1LT3Uu5K","courses_java_04-附录_01-centos安装jdk.md":"mrm2xLeJ","courses_mysql_03-附录_02-docker安装mysql.md":"Qay1Rxzf","courses_mybatis_01-mybatis基础_01-快速入门.md":"KXcjGx0w","categories_fragments_2022_03_27_修改git所有提交记录中的作者和邮箱.md":"OvDDBZd4","courses_mybatis_01-mybatis基础_05-sql映射文件之增删改元素.md":"Q1bwfP8k","categories_fragments_2019_12_31_个人常用linux命令.md":"lx3qwmph","courses_mybatis_01-mybatis基础_07-sql映射文件之缓存元素.md":"9orUXUze","categories_fragments_2021_03_12_精密计算工具类-bigdecimal.md":"zBMJQ_Bo","categories_fragments_2022_10_27_docker安装consul.md":"LIu1Q7_o","courses_mybatis_02-mybatis-plus基础_05-代码生成器.md":"hjpH5d8x","courses_mybatis_02-mybatis-plus基础_01-快速入门.md":"2M92eqRH","courses_mybatis_01-mybatis基础_08-动态sql.md":"EiHlJ807","courses_mybatis_01-mybatis基础_06-sql映射文件之自定义映射元素.md":"yafOyEf1","categories_fragments_2019_12_28_个人sql优化技巧.md":"s7o9_T92","courses_mybatis_02-mybatis-plus基础_03-简单查询操作.md":"OO_paHtp","courses_mysql_index.md":"6rziEA5O","categories_fragments_2022_03_25_合并两个git仓库的历史提交记录.md":"e24riSJ9","categories_tools_2021_01_14_初识lombok.md":"DDRTdFdf","categories_issues_2021_12_11_sql 注入攻击风险.md":"rljfD_Fi","categories_fragments_2021_05_29_设计模式之单例模式.md":"Q_Kk2HQh","categories_issues_2021_12_13_无法访问f盘。文件或目录损坏且无法读取.md":"ly-jJhLg","categories_issues_2021_12_10_command line is too long. shorten command line for xxx or also for spring boot default configuration.md":"PXnmw2TY","categories_fragments_2019_12_30_个人常用hutool工具类.md":"8YjnAagp","archives.md":"hEvO1jAg","categories_fragments_2022_12_07_网站开启灰色显示.md":"ALiJge8d","categories_issues_2022_08_31_springboot项目引入openfeign后无法启动.md":"ChRCkQV5","courses_java_01-java语法入门_11-多重循环.md":"79go9ddo","courses_java_01-java语法入门_07-控制语句和流程图.md":"t61wREmj","categories_issues_2022_09_05_nginx转发请求,报13:permission denied错误.md":"PClZAC2K","courses_java_03-java高级特性_01-集合与泛型-1.md":"3f19_0FV","categories_fragments_2022_10_01_个人常用docker命令.md":"tQHhdswU","courses_mybatis_01-mybatis基础_04-sql映射文件之查询元素.md":"UYQRCMvg","courses_java_index.md":"Vd-Tt2Gz","courses_mybatis_01-mybatis基础_03-核心配置文件.md":"pjBK9LfV","courses_mybatis_01-mybatis基础_02-核心对象.md":"J2u3OyyP","courses_mybatis_02-mybatis-plus基础_02-增删改操作.md":"0wJpZsHd","categories_fragments_2022_11_01_使用idea进行远程程序调试.md":"0r_fvBId","courses_java_02-java面向对象_01-类和对象.md":"A4c0BkF0","courses_java_01-java语法入门_14-多维数组.md":"C3Jtu4yX","courses_java_01-java语法入门_10-循环结构.md":"z73Bcwe8","courses_mybatis_index.md":"7LMzFTpl","courses_mysql_03-附录_01-centos安装mysql.md":"ZEGR5OmN","categories_fragments_2022_10_06_个人常用快捷键.md":"7DmE2Sdn","index.md":"rpby8rrg","courses_mybatis_02-mybatis-plus基础_04-条件构造器.md":"v-MWEs-l","tags.md":"TML_Ecph"} diff --git a/index.html b/index.html index 9724799ecc..f8b22e7865 100644 --- a/index.html +++ b/index.html @@ -34,7 +34,7 @@
- + \ No newline at end of file diff --git a/tags.html b/tags.html index 513e07b25b..a34f7a40f3 100644 --- a/tags.html +++ b/tags.html @@ -36,7 +36,7 @@
- + \ No newline at end of file