原因
方便开发人员维护、让程序运行更快。
原则/标准
- 保持代码可读性(可维护性)
- 使用合适的数据结构和算法
- 减少重复计算
- 使用缓存、缓冲
- 优化 I/O 和网络请求
- 异步
- 批量请求而非单次请求
- 避免在循环中读取db
- 使用http下载文件时,若文件已存在就不下载了,可以先判断文件是否存在,不存在再创建http连接
- 尽可能少创建对象
- 池化对象
- 大对象复用
- 并行计算
- 锁优化
- NIO
- if-else 修改为Map/设计模式
- 双重循环可以优化为单循环+Map
- 查数据库时要加where/limit
- 懒加载
- 用完资源记得关闭
- 数据库相关
- 避免大事务
- 索引
- 批量获取、批量保存
- 查询时限制条数
- 调用rpc时要配置超时时间
代码优化
nginx开启gzip
没有并发时,使用非线程安全的对象
字符串拼接时使用StringBuilder而非StringBuffer。
使用ArrayList而不是Vector。
使用类库,如commons-lang/commons-lang3/commons-collections4
String s = str1 + "_" + str2 + "_" + str3 + "_" + str4
import org.apache.commons.lang3.StringUtils;
String s = StringUtils.joinWith("_", str1, str2, str3, str4)
字符串拆分时不使用String#split()而使用StringUtils.split()
import org.apache.commons.lang3.StringUtils;
String str = "abc,def,ghi";
// StringUtils.split()比String#split()效率高,后者是正则匹配
String[] s = StringUtils.split(str, ",");
String[] s2 = str.split(",");
不在循环中字符串+拼接
容器初始化时指定长度,减少不必要的扩容操作
Map<String, String> map = new HashMap<>(100);
Map<String, String> map2 = new HashMap<>(128);
List<String> list = new ArrayList<>(20);
不使用SimpleDateFormat,使用java8提供的DateTimeFormatter.ofPattern(pattern).withZone(targetZone)
log中使用占位符,不要拼接字符串
log.inf("userInfo=" + userInfo); // 不推荐
log.inf("userInfo={}", userInfo);// 推荐
编写更可读的代码
public void cr8User(XXX xxx) {
}
方法是createUser,但取了谐音,不利于理解。
使用redis时构建key时出现多处字符串拼接,可以优化为静态方法,并给一个业务名称。如
// 出现多处拼接
String redisUserKey = "user:" + userId;
// 可以提取成方法,并赋予业务名称
public static String buildUserKey(Long userId) {
return "user:" + userId;
}
静态变量替代多次出现的字符串
缓存
如从mysql中查数据,但数据不常变化,可以查出后放到缓存一定时间如10分钟。
redis multiGet
数据库优化
连接池
查询时限制条数
作者:张三 创建时间:2022-04-19 19:20
最后编辑:张三 更新时间:2025-04-28 16:11
最后编辑:张三 更新时间:2025-04-28 16:11