自己做链接的网站,网站建设一个多少钱,手机网页如何制作,企业网络信息安全插#xff1a; AI时代#xff0c;程序员或多或少要了解些人工智能#xff0c;前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈#xff0c;越努力越幸运#xff0c;大家… 插 AI时代程序员或多或少要了解些人工智能前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈越努力越幸运大家一起学习鸭~~~ 说到代码优化很多人上来就是各种理论、架构、核心思路其实优化这个事情说简单也简单说复杂也可以很复杂但是我觉得最重要的就是要有一个良好的编码习惯代码屎山”并非一朝一夕形成的往往是经过了日积月累因此培养一个好的习惯可以让我们的代码变的更加优雅、易维护系统变的更加健壮下面就分享14个小技巧让优化变成顺手就完成的小事儿
1. 定义配置文件信息
有时候我们为了统一管理会把一些变量放到 yml 配置文件中而不是到处设置“魔数”一旦那天需要修改只需要修改配置文件即可不需要满项目去搜索替换 例如用 ConfigurationProperties 代替 Value使用方法 定义对应字段的实体
Data
// 指定前缀
ConfigurationProperties(prefix developer)
Component
public class DeveloperProperty {private String name;private String website;private String qq;private String phoneNumber;
}
Data
// 指定前缀
ConfigurationProperties(prefix developer)
Component
public class DeveloperProperty {private String name;private String website;private String qq;private String phoneNumber;
}
使用时注入这个bean
RestController
RequiredArgsConstructor
public class PropertyController {final DeveloperProperty developerProperty;GetMapping(/property)public Object index() {return developerProperty.getName();}
}
2. 用RequiredArgsConstructor代替Autowired
我们都知道注入一个 bean 有三种方式哦set 注入,构造器注入,注解注入Spring 推荐我们使用构造器的方式注入 Bean
我们来看看上段代码编译完之后的样子 RequiredArgsConstructor 注解由lombok提供
3.代码模块化
阿里巴巴 Java 开发手册中说到每个方法的代码不要超过 50 行我没记错的话在实际的开发中我们要善于拆分自己的接口或方法, 做到一个方法只处理一种逻辑,说不定以后某个功能就用到了, 拿来即用。 4. 抛异常而不是返回
在写业务代码的时候经常会根据不同的结果返回不同的信息尽量减少返回会显得代码比较乱 反例正例
5. 减少不必要的db
尽可能的减少对数据库的查询
举例子
删除一个服务已下架或未上架的才能删除之前有看别人写的代码会先根据id查询该记录然后做一些判断 反例正例
6. 不要返回 null
避免调用方法时造成不必要的空指针 反例正例
7. if else
不要太多了if else if可以试试策略模式代替
8. 减少controller业务代码
业务代码尽量放到service层进行处理后期维护起来也好操作而且美观 反例正例
9. 利用好IDEA
目前为止市面上的企业基本都用idea作为开发工具了吧
举一个小例子
IDEA会对我们的代码进行判断提出合理的建议
例如 它推荐我们用lanbda的形式代替点击replace 10. 阅读源码
一定要养成阅读源码的好习惯包括优秀的开源项目GitHub上stars:1000, 会从中学好好多知识包括其对代码的设计思想以及高级API面试加分好多面试官习惯问源码相关的知识
11. 设计模式
23种设计模式要尝试代码中运用设计模式思想写出的代码即规范又美观还高大上哈哈。
12. 拥抱新知识
像我们这种工作年限少的程序员我觉得要多学习自己认知之外的知识不能每天crud有机会就多用用有点难度的知识没有机会项目较传统可以自己下班多些相关demo练习
13. 基础问题
Map遍历
HashMapString, String map new HashMap();
map.put(name, du);
for (String key : map.keySet()) {String value map.get(key);
}map.forEach((k, v) - {
});// 推荐
for (Map.EntryString, String entry : map.entrySet()) {}
optional 判空
//获取子目录列表
public ListCatalogueTreeNode getChild(String pid) {if (V.isEmpty(pid)) {pid BasicDic.TEMPORARY_DIRECTORY_ROOT;}CatalogueTreeNode node treeNodeMap.get(pid);return Optional.ofNullable(node).map(CatalogueTreeNode::getChild).orElse(Collections.emptyList());
}
递归 大数据量的递归时避免在递归方法里new对象可以试试把对象当作方法参数进行传递使用注释 类 接口方法 注解 较复杂的方法 注释都要写而且要写清楚, 有时候写注释不是给别人看的 而是给自己看的
14. 判断元素是否存在
hashSet 而不是 listlist 判断一个元素是否存在的代码
ArrayListString list new ArrayList();// 判断a是否在list中for (int i 0; i list.size(); i)if (a.equals(elementData[i]))return i;
由此可见其复杂度为On而hashSet底层采用hashMap作为数据结构进行存储元素都放到map的key即链表中
HashSetString set new HashSet();// 判断a是否在set中int index hash(a);return getNode(index) ! null
由此可见其复杂度为O1。 来源blog.csdn.net/weixin_44912855/article/details/120866194 End