java
标准化、规范化
java代码风格
【目录】java
编程-java8
编程-java9
编程-java-见过的异常
gradle
编程-java21
编程-java23
编程-java17
编程-java11
【目录】java-web-其它框架
java-vertx
quarkus
javalin
solon
Helidon
【目录】spring家族
spring
springcloud + nacos
consul
springboot启动流程
springboot使用及原理
springcloud
优化springboot
【java高级】
java-多线程-问题记录
java高级-ArrayList
java高级-HashMap
jdk源码解析-TreeMap红黑树
java对象占用多少字节
juc(并发)
ThreadPoolExecutor中ctl变量的理解
ThreadPoolExecutor分析
JVM(java虚拟机)
jvm学习路线
jvm
Java启动参数
debug
java-debug-arthas
java-debug-jdb
高并发/高性能/高可用
设计代码或编写代码时应该考虑的
如何发现系统中的瓶颈?
场景分析
mysql
mysql explain
mysql主从
mysql常见异常
方法论
工作中遇到的问题记录
代码优化
学习的思路
产品
本文档使用 MrDoc 发布
-
+
首页
代码优化
## 原因 方便开发人员维护、让程序运行更快。 ## 原则/标准 - 保持代码可读性(可维护性) - 使用合适的数据结构和算法 - 减少重复计算 - 使用缓存、缓冲 - 优化 I/O 和网络请求 * 异步 * 批量请求而非单次请求 * 避免在循环中读取db * 使用http下载文件时,若文件已存在就不下载了,可以先判断文件是否存在,不存在再创建http连接 - 尽可能少创建对象 - 池化对象 - 大对象复用 - 并行计算 - 锁优化 - NIO - if-else 修改为Map/设计模式 - 双重循环可以优化为单循环+Map - 查数据库时要加where/limit - 懒加载 - 用完资源记得关闭 - 数据库相关 + 避免大事务 + 索引 + 批量获取、批量保存 + 查询时限制条数 ## 代码优化 ### nginx开启gzip ### 没有并发时,使用非线程安全的对象 字符串拼接时使用StringBuilder而非StringBuffer。 使用ArrayList而不是Vector。 ### 使用类库,如commons-lang/commons-lang3/commons-collections4 ```java String s = str1 + "_" + str2 + "_" + str3 + "_" + str4 ``` ```java import org.apache.commons.lang3.StringUtils; String s = StringUtils.joinWith("_", str1, str2, str3, str4) ``` ### 字符串拆分时不使用String#split()而使用StringUtils.split() ```java 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中使用占位符,不要拼接字符串 ```java log.inf("userInfo=" + userInfo); // 不推荐 log.inf("userInfo={}", userInfo);// 推荐 ``` ### 编写更可读的代码 ```java public void cr8User(XXX xxx) { } ``` 方法是createUser,但取了谐音,不利于理解。 使用redis时构建key时出现多处字符串拼接,可以优化为静态方法,并给一个业务名称。如 ```java // 出现多处拼接 String redisUserKey = "user:" + userId; // 可以提取成方法,并赋予业务名称 public static String buildUserKey(Long userId) { return "user:" + userId; } ``` ### 静态变量替代多次出现的字符串 ### 缓存 如从mysql中查数据,但数据不常变化,可以查出后放到缓存一定时间如10分钟。 ### redis multiGet ## 数据库优化 ### 连接池 ### 查询时限制条数
我是张三
2025年4月16日 12:13
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
eblog
Markdown文件
分享
链接
类型
密码
更新密码