add code check

This commit is contained in:
lostecho
2024-05-09 22:58:28 +08:00
parent c8f11d0488
commit 432ac9ba42
21 changed files with 163 additions and 28 deletions

View File

@@ -13,7 +13,7 @@
"state": {
"type": "markdown",
"state": {
"file": "Java 并发包中并发队列原理剖析.md",
"file": "代码规范/代码规范.md",
"mode": "source",
"backlinks": true,
"source": false
@@ -87,7 +87,7 @@
"state": {
"type": "backlink",
"state": {
"file": "Java 并发包中并发队列原理剖析.md",
"file": "代码规范/代码规范.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
@@ -112,7 +112,7 @@
"state": {
"type": "outgoing-link",
"state": {
"file": "Java 并发包中并发队列原理剖析.md",
"file": "代码规范/代码规范.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
@@ -135,7 +135,19 @@
"state": {
"type": "outline",
"state": {
"file": "Java 并发包中并发队列原理剖析.md"
"file": "代码规范/代码规范.md"
}
}
},
{
"id": "0a9c61a29e6fab2b",
"type": "leaf",
"state": {
"type": "all-properties",
"state": {
"sortOrder": "frequency",
"showSearch": false,
"searchQuery": ""
}
}
}
@@ -157,33 +169,35 @@
},
"active": "157daa1a9b93f46c",
"lastOpenFiles": [
"sql语句.md",
"代码规范/代码规范.md",
"并发.md",
"OOP规约.md",
"可读性.md",
"事务使用.md",
"控制语句.md",
"API规范.md",
"代码组织.md",
"工程结构.md",
"异常使用.md",
"索引使用.md",
"日志规范.md",
"注释规范.md",
"方法规范.md",
"命名规范.md",
"方法.md",
"变量规范.md",
"常量规范.md",
"常量.md",
"logseq-java/pages/变量.md",
"Pasted image 20230403123034.png",
"代码规范",
"Java 并发包中并发队列原理剖析.md",
"203-Java/203.1-Java面试/205.15-Redis/Redis.md",
"203-Java/203.1-Java面试/205.15-Redis/Redis设计与实现.md",
"Java 并发包中并发队列原理剖析.md",
"Java 并发包中线程同步器原理剖析.md",
"Java 并发包中并发 List 源码剖析.md",
"Java 并发包中原子操作类原理剖析.md",
"Java 并发包中 ThreadLocalRandom 类原理剖析.md",
"Java 并发包中 ScheduledThreadPoolExecutor 原理探究.md",
"HotSpot算法实现.md",
"Error.md",
"Exception.md",
"CAS.md",
"CheckedException.md",
"CompletableFuture 组合式异步编程.md",
"Brook Pointer.md",
"AQS.md",
"203-Java/tomcat.md",
"203-Java/socket编程.md",
"203-Java/Pasted image 20230613181834.png",
"203-Java/Java虚拟机.md",
"203-Java/Redis/缓存.md",
"203-Java/Mybatis/标签的使用.md",
"203-Java/203.1-Java面试/205.13-JVM/gc.md",
"203-Java/203.1-Java面试/205.19-网络&操作系统/计算机网络.md",
"203-Java/203.1-Java面试/JAVA面试-MENU.md",
"203-Java/203.1-Java面试/205.19-网络&操作系统/设计模式之禅.md",
"203-Java/203.1-Java面试/用流收集数据.md",
"203-Java/203.1-Java面试/205.19-网络&操作系统/Pasted image 20230705222905.png",
"203-Java/203.1-Java面试/205.19-网络&操作系统/Pasted image 20230708181100.png",
"203-Java/203.1-Java面试/205.19-网络&操作系统/Pasted image 20230705223627.png",
@@ -196,7 +210,6 @@
"203-Java/203.1-Java面试/205.14-MySQL",
"203-Java/203.1-Java面试/205.13-JVM",
"200-计算机/202-算法",
"203-Java/203.1-Java面试/205.12-多线程",
"203-Java/203.1-Java面试/203.11-Java基础"
"203-Java/203.1-Java面试/205.12-多线程"
]
}

4
API规范.md Normal file
View File

@@ -0,0 +1,4 @@
api 的出入参必须是结构化的,不能使用 map
api 出入参不要有多余的字段,禁止多个接口共用一个大 VO
api 都要有 swagger 注解
非公开 api 都要有功能权限校验

8
OOP规约.md Normal file
View File

@@ -0,0 +1,8 @@
所有覆写都要加@Override
接口过时必须加@Deprecated 注解,并说明新接口和服务
equals 方法,常量或确定有值对象放左边
所有整型包装类使用 equals 方法比较
禁止使用 BigDecimal(double) 将 double 转换为 BigDecimal 对象,使用字符串可保证准确性
所有的 pojo 类属性rpc 方法的返回值和参数,必须使用包装数据类型
构造方法里禁止加入任何业务逻辑,初始化逻辑放在 init 方法中
使用 StringBuilder 的 append 方法进行大量字符串拼接

10
sql语句.md Normal file
View File

@@ -0,0 +1,10 @@
小数类型使用 bigdecimal禁止使用 floag 和 double
使用 count (\*)而不是 count (列名)或 count(常量)
超过三个表禁止 join
分页时count 为 0 直接返回,避免后面分页语句
不得使用外键和级联,一切外键在应用层解决
禁止使用存储过程,难以调试和扩展,没有移植性
查询和变更涉及多个表需要在列名前加表名
in 操作尽量避免,避免不了控制在 1000 内
sql 少写逻辑,放到业务层去写
mybatis 动态语句避免导致查询全表

4
事务使用.md Normal file
View File

@@ -0,0 +1,4 @@
避免大事务,查询可考虑放在事务外
发送异步消息必须在事务结束后
仅查询的 service 不要加事务
捕获了异常,需要事务回滚,需要手动设置回滚

3
代码组织.md Normal file
View File

@@ -0,0 +1,3 @@
新建 api 是否有必要、所属领域、出入参是否合理
类放的 package 是否合理
方法放的类是否合理

View File

@@ -0,0 +1,17 @@
[[命名规范]]
[[常量规范]]
[[变量规范]]
[[方法规范]]
[[注释规范]]
[[日志规范]]
[[索引使用]]
[[异常使用]]
[[工程结构]]
[[代码组织]]
[[API规范]]
[[控制语句]]
[[事务使用]]
[[可读性]]
[[OOP规约]]
[[并发]]
[[sql语句]]

9
变量规范.md Normal file
View File

@@ -0,0 +1,9 @@
Service 中谨慎使用静态变量或成员变量全局共享Bean 为单例,并发会存在问题)
变量声明与使用不超过 5 行
精确计算使用 bigdecimal不用 float 和 double
浮点型数据判断不使用==
不要声明过多的变量
直接使用 get 方法
直接在循环中使用集合元素
条件判断直接使用方法返回值
返回语句中直接计算结果

5
可读性.md Normal file
View File

@@ -0,0 +1,5 @@
使用卫语句减少if嵌套深度
if 条件判断太复杂时,提取变量和方法
一个 for 循环只做一件事,两件事用两个 for 循环
for 循环中,如果可以,建议封装一个方法
方法里的代码保持在同一抽象层级

7
命名规范.md Normal file
View File

@@ -0,0 +1,7 @@
常量命名:全大写,不能直译 **ONE**
避免使用否定的布尔变量
抽象类命名使用 Abstract 或 Base 结尾,异常类 Exception 结尾
杜绝完全不规范的缩写,避免不望文生义
避免子类,弗雷变量名相同
方法名使用动宾结构
集合带上 List 或 s

4
工程结构.md Normal file
View File

@@ -0,0 +1,4 @@
controller 的 api 是给前端调用的不能被其他方法调用rpc 方法不能给页面调用
微服务间通过引入 spi 包,用 rpc 方法进行本地调用,避免 rest 调用
页面接口rpc 接口,外部接口需要分开入口
微服务间避免反向依赖

0
常量.md Normal file
View File

3
常量规范.md Normal file
View File

@@ -0,0 +1,3 @@
不要使用一个常量类维护所有,要按常量功能归类
如果变量值仅在一个固定范围内变化用 enum 类型定义
long 和 Long 赋值使用大写 L 结尾

11
并发.md Normal file
View File

@@ -0,0 +1,11 @@
创建线程命名有意义,方便回溯
不通过 Executor 方法创建,使用 ThreadPoolExecutor 方式
必须回收自定义的 ThreadLocal 变量,尤其在线程池场景
高并发时,同步调用应该去考虑锁的性能损耗
能无锁就不要用锁
能锁区块就不要锁方法
能用对象锁就不要用类锁
使用阻塞获取等待锁的方式中,必须在 try 代码块之外,并且在加锁方法与 try 代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在 finally 中无法解锁
try 中没有加锁 lock. lock ()就解锁 lock. unlock ()会抛出 IllegalMonitorStateException 异常
try 和加锁之间有代码报错,就不会执行 finally 方法报错释放锁
分布式锁优先使用 redis 锁,而不是数据库锁

6
异常使用.md Normal file
View File

@@ -0,0 +1,6 @@
不要通过一个空的 catch 块忽略异常
finally 不要使用 return、break、continue 非正常结束
不要直接抛出 Exception自己定义业务异常
入参 check使用异常而不是在 check 方法中返回 result
finally 必须对资源对象,流进行关闭,有异常也要 try-catch
调用 RPC、二方包、或动态生成类的相关方法时捕获异常必须使用 Throwable 类进行拦截

4
控制语句.md Normal file
View File

@@ -0,0 +1,4 @@
if/else/for/where/do 中必须要有大括号
高并发场景中,禁止使用 == 作为判断条件,使用大于等于或小于等于
避免 for 循环中调用数据库或外部 api
一个 switch 块中,每个 case 要么通过 continue/break/return 终止,都必须包含一个 default

0
方法.md Normal file
View File

8
方法规范.md Normal file
View File

@@ -0,0 +1,8 @@
避免方法过长
避免嵌套过深
使用类名调用静态方法,不要用实例
方法参数不宜过多,不超过 5 个
返回长度为 0 的数组或容器替代 null
尽量有返回值,不传参并对参数设值
方法入参,出参不使用 map 和大 VO
尽量小的访问范围,不被外部调用用 private子类访问protected

6
日志规范.md Normal file
View File

@@ -0,0 +1,6 @@
日志使用 slf4j
日志输出,字符串和变量使用占位符拼接
禁止使用 System.out 和 System.err 输出和e.printStackTrace() 打印异常堆栈
异常包含两类信息:案发现场信息和异常堆栈信息,不处理通过 throw 向上抛
info、debug 禁止整个对象 json 打印error 级别打印对象实现 toString 方法,禁止转 json
异常信息使用 error 或 warn 级别

8
注释规范.md Normal file
View File

@@ -0,0 +1,8 @@
Javadoc 用于每一个 public 或 protected
对于方法有参数,返回值,异常,需要在 javadoc 块中描述
注释的要求
准确反映设计思想和代码逻辑
能够描述业务含义,迅速了解代码背后的信息
所有类必须添加创建者和日期
所有枚举字段必须要有注释,说明每个数据项用途
好的命名,结构是自解释的,注释要精简准确、表达到位

5
索引使用.md Normal file
View File

@@ -0,0 +1,5 @@
主键索引 pk_字段名唯一索引 uk_字段名, 普通索引 idx_字段名
业务上具有唯一性的字段,即使是组合字段,也必须建成唯一索引
多表关联查询时,保证被关联字段需要有索引
varchar 建立索引建议制定长度
模糊查询禁止全模糊或左模糊