IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 阿里巴巴Java代码规范中的多个问题 -> 正文阅读

[Java知识库]阿里巴巴Java代码规范中的多个问题


因为之前公司入职需要考试阿里巴巴规范(老板是阿里的)所以特定仔细看了一下华山版,发现有多个严重问题

1.5.1. `说明:String 已覆写 hashCode 和 equals 方法,所以我们可以愉快地使用 String 对象作为 key 来使用。`
这句话本生没毛病,但有个前提,就是在业务开发上,string作为key经常带来问题,千万别强行把应该是对象当Key的序列化成String当key,我在我的博文里
https://my.oschina.net/xiandafu/blog/1514365 『警惕String,数组,和 Map 』一节里说的比较清楚了。这篇文章是2017年写的,我后来2019年入职京东,曾经发生过一个P0故障,就是Area对象序列化成String作为Map的Key导致的。有兴趣可以看『https://www.kancloud.cn/xiandafu/javamicrotuning』 我的电子书第一章,里面详细描述了这个

1.6.3 `线程资源必须通过线程池提供`?
线程必需要通过线程池来创建,不过这个规约的问题在于,线程池是谁来创建呢? 规约并没有说明。如果创建线程池很随意,那岂不是创建线程也随意了。一般应用,都需要把常见线程池的代码集中管理,比如Spring应用,统一xml配置,或者一个Configuration类配置。避免人人都随便创建线程池。

1.6.11 `并发修改同一记录时,避免更新丢失,需要加锁`
关于应用层加锁,我想规约肯定是说的分布式锁。那么分布式如何加呢,分布式锁如何与事务搭配。规约并没有说清楚。一种错误使用是,在事务内使用分布式锁,当锁释放而事务还未提交,那么可能引起其他线程的脏读或者其他数据隔离错误。规约这一节说的并不是很详细。

1.9.7 `不要在视图模板中加入任何复杂的逻辑`
这句话忽略了『渲染逻辑』,模板中不可避免了有一定渲染逻辑。 规约应该纠正为 『不可加入复杂的业务逻辑』

2.1.9 `在调用 RPC、二方包、或动态生成类的相关方法时,捕捉异常必须使用 Throwable
类来进行拦截`
OutOfMemoryError也是Thowable的子类,如果刚好出现这种错误,很容易被掩盖掉。我的建议还是正常捕获业务异常,统一处理这种预期外的异常。我曾解决一个系统不响应的问题,就是开发人员catch Thowable异常,然后正常日志告警,但这个异常刚好是OutOfMemoryError。

2.1.5 `有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回
滚事务`
手动管理事务?搞错Java事务管理的方式了吧,一般都是标记回滚,而不是手动回滚。另外,如果按照这样的规约,一个复杂的应用里,到处都是catch,到处是手动回滚,事务管理就混乱了。 直接在最外层回滚不简单么?

5.4.9 `@Transactional 事务不要滥用`
给出的理由是『事务会影响数据库的 QPS』,如果业务没有写数据,可以配置事务为readonly。数据库操作都是自带事务的,很难想明白这句话的的意思是什么

没想到强如阿里,也会在公开发行的代码规范里有这些问题,欢迎讨论,欢迎从阿里Java代码规范里找到更多不合理的地方
?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:30:26  更:2021-07-11 16:33:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 8:24:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码