文章目录
修改完代码自测一下
单元测试
及时关闭IO流等资源
public void testIO() throws IOException {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("");
} catch (IOException e) {
log.error("IOException:{}", e);
} finally {
if (fos != null) {
fos.close();
}
}
}
代码采取措施,避免允许错误
写完代码,模拟一下多线程执行会怎样,注意并发一致性问题
比如下面这段代码:
先查询 可不可以 操作,再进行 对应的操作,比如 增加金额
但是 查询+增加金额 不是 原子操作,多线程 下会有问题~
if (isAvailable(ticketId)) {
1. 给现金增加操作
2. deleteTicketById(ticketId)
} else {
return "没有可用现金券";
}
写完 SQL 去数据库跑一下,用explain查看执行计划
封装方法形参
方法参数过多,可以封装一个对象出来
//反例
public void getUserInfo(String name, String age, String sex, String idNo) {
}
// 正确
public void getUserInfo2(UserInfoParamDTO paramDTO) {
}
@NoArgsConstructor
@Setter
@Getter
// 开启 链式调用set方法
@Accessors(chain = true)
class UserInfoParamDTO {
private String name;
private String age;
private String sex;
private String idNo;
}
封装复杂的逻辑判断条件
public void test(UserStatus userStatus) {
if (isUserActive(userStatus)) {
//doSomeThing
}
}
private boolean isUserActive(UserStatus userStatus) {
return userStatus != UserStatus.BANNED && userStatus != UserStatus.DELETED && userStatus != UserStatus.NOACCESS && userStatus != UserStatus.NOTEXISTS
}
用String.format()拼接字符串
String requestUrl = "http://susan.sc.cn?userName=%s&age=%s&address=%s&sex=%s&roledId=%s";
String url = String.format(requestUrl,userName,age,address,sex,roledId);
注释尽可能全面,写有意义的注释
项目拆分合理的目录结构
不在 循环中操作数据库,优先批量
保持 优化性能的嗅觉
会使用工具类!
可以抽取方法中的一些代码
抽取代码:可复用的、优化代码逻辑的