阿里巴巴java规范_《阿里巴巴 Java开发手册》常用规范「建议收藏」

阿里巴巴java规范_《阿里巴巴 Java开发手册》常用规范「建议收藏」前言参考自:微信公众号”java3y”中的文章-《阿里巴巴Java开发手册》读后感都是日常能用的一些规范,还是很有用处的!一、Java相关1.POJO是DO/DTO/BO/VO的统称,禁止命名为xxxPOJO2.获取多个对象的方法中list作为前缀3.获取统计值的方法用count作为前缀4.POJO类中的布尔类型(Boolean)的变量都不要加is前缀,否则部分框架解析会引起序列化错误如…

大家好,欢迎来到IT知识分享网。

前言

参考自: 微信公众号”java3y”中的文章 – 《阿里巴巴 Java开发手册》读后感

都是日常能用的一些规范, 还是很有用处的!

一、Java相关

1.POJO是DO/DTO/BO/VO的统称,禁止命名为xxxPOJO

2.获取多个对象的方法中list作为前缀

3.获取统计值的方法用count作为前缀

4.POJO类中的布尔类型(Boolean)的变量都不要加is前缀,否则部分框架解析会引起序列化错误

如果你的变量名带is的话,比如isActive,框架解析的时候可能就当成active了

5.如果是形容能力的接口名称,取对应的形容词为接口名(通常是-able的形式)

6.不允许任何魔法值(未经预先定义的常量)直接出现在代码中

7.Object的euqals方法容易抛出空指针异常,应使用常量或者有值的对象来调用equals。推荐使用java.util.Objects#equals工具类

8.所有POJO类的属性全部使用包装数据类型,RPC的返回值和参数必须使用包装数据类型,所有的局部变量都使用基本数据类型。定义VO/DTO/DO等POJO类时,不要设定任何属性的默认值

如果你的类属性使用int这样的基本数据类型,默认值是0。一般情况下该变量没有赋值,一般想表达的是不存在(null),而不是0。

9.构造方法禁止加入任何的业务逻辑,如果初始化逻辑可以放在init方法中。set/get方法也不要增加业务逻辑

如果set/get方法放入业务逻辑,有时候排查问题就变得很麻烦了

10.工具类Arrays.asList()把数组转成List时,不能使用其修改集合的相关方法。比如说add、clear、remove

11.在JDK7以及以上版本中,Comparator要满足三个条件,不然调用Arrays.sort()或者Collections.sort()会报异常。

11.1x,y 的比较结果和 y,x 的比较结果相反

11.2传递性:x>y并且y>z,那么x一定大于z

11.3对称性:x=y,则 x,z 比较结果和y,z比较结果相同

12.使用entrySet遍历Map类集合K/V,而不是用keySet方式遍历

keySet遍历了两次,一次是转成Iterator对象,一次是从hashMap中取出key所对应的value,如果JDK8可以使用Map.foreach方法

13.线程资源必须由线程池提供,不允许在应用中自行显示创建线程。线程池不允许用Executors创建,通过ThreadPoolExecutor的方式创建,这样的处理方式能够让编写代码的工程师更加明确线程池的运行规则,规避资源耗尽的风险。

14.SimpleDateFormat是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类

如果是JDK8应用,可以使用Instant(针对时间统计等场景)代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat

15.避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed导致性能下降

在JDK7之后,可以直接使用API ThreadLocalRandom,而在JDK7 之前,需要编码保证每个线程持有一个实例。

16.类、类属性、类方法的注释必须使用 Javadoc 规范,使用 /*内容/ 格式,不得使用 //xxx 方式

17.所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释,除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。所有的类都必须添加创建者和创建日期。

18.对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码的上方,使用三个斜杠///来说明注释代码的理由

19.保证单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试之间不能互相调用,也不能依赖执行的先后顺序。

20.高并发服务器建议调小TCP协议的time_await超时时间,调大最大事件句柄数(fd),

1.1值得说明的点

一、不允许任何魔法值(未经预先定义的常量)直接出现在代码中

例子:

74a10ef1b0861afe14b54db4af228764.png

ps:我猜是把先常量定义出来,后续引用/修改的时候就很方便了。

二、Object的euqals方法容易抛出空指针异常,应使用常量或者有值的对象来调用equals。推荐使用java.util.Objects#equals工具类

java.util.Object#equals的源码(已经判断null的情况了)

2e4b56e582d358cd3e4004b8520d2bbb.png

三、工具类Arrays.asList()把数组转成List时,不能使用其修改集合的相关方法。

因为返回的ArrayList是一个内部类,并没有实现集合的修改方法。后台的数据仍是数组,这里体现的是适配器模式。

96e3bc4bb5d913322a1a3e31c2c15800.png

四、在JDK7以及以上版本中,Comparator要满足自反性,传递性,对称性,不然调用Arrays.sort()或者Collections.sort()会报异常。

1) x,y 的比较结果和 y,x 的比较结果相反。

2) 传递性:x>y,y>z,则 x>z。

3) 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。

反例:下例中没有处理相等的情况,实际使用中可能会出现异常:

a062a14bab2baad354ad913e2b5f68d9.png

五、使用entrySet遍历Map类集合K/V,而不是用keySet方式遍历

首先我们来看一下使用keySet是如何遍历HashMap的:

52c423a6bcd2bc8f358caab26715d6f6.png

再来看一下entrySet,可以直接拿到key和value,不用再使用get方法来得到value,所以比keySet更加推荐使用!

d182f948c977ef57123319e49de14f28.png

如果是JDK8的话,推荐直接使用Map.forEach()就好了,我们也来看看用法:

44a886ee47a38a6cd64dedfd419279c0.png

其实在源码里边我们可以发现,forEach实际上就是封装了entrySet,提供forEach给我们可以更加方便地遍历Map集合

六、SimpleDateFormat是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。

有以下的例子可以正确使用SimpleDateFormat:

de464e00d301349303b86fa547152c23.png

如果是JDK8应用,可以使用Instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat。

二、数据库相关

1.表达是否概念的字段,必须使用isxxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)

2.小数类型用decimal,禁止使用float和double。

3.varchar是可变字符串,不预选分配存储空间的话,长度不要超过5000个字符。如果超过则用text,独立一张表,用主键对应,避免影响到其他字段的索引效率。

4.表必备的三个字段:id(类型是unsigned bigint),gmt_create(创建时间),gme_modified(修改时间)

5.字段允许适当冗余,以提高查询性能,但必须考虑数据一致性。冗余的字段必须不是频繁修改的字段,不是varhar超长字段(更不能是text字段)。

6.单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表(如果预计三年都达不到这个数据量,不要在创建表的时候就分库分表!)

7.超过三个表禁止使用join,需要join的字段,数据类型必须保持一致,当多表关联查询时,保证被关联的字段需要有索引!

8.在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,页面搜索严禁左模糊或者全模糊,如果需要则通过搜索引擎来解决。

充分利用好最左前缀匹配特性!

9.利用延迟关联或者子查询优化超多也分场景。

10.如果有全球化需要,均以utf-8编码。如果需要存储表情,选择utf8mb4进行存储。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11675.html

(0)
老牧童老牧童
0
第一个JAVA程序-HelloWorld[亲测有效]
上一篇 2023-02-26 18:00
用 JAVA 编写一个 M3U8 视频下载器「建议收藏」
下一篇 2023-02-28 10:00

相关推荐

  • java date转换timestamp_Java Date转Timestamp 2023-12-25
  • java常用的编程软件_写java用哪个软件好一点 2022-11-24
  • 4.JAVA-数组、String详解 2023-10-20
  • 史上最全Java基础知识点归纳 2024-01-11
  • Java的JAVA_HOME、Path、CLASSPATH环境变量小结 2024-01-18
  • java实现字体动态效果_手把手教你完成数字动态变化显示效果 2024-02-12
  • JAVA 3DES加密 ECB模式 ZeroPadding填充「终于解决」 2023-08-24
  • java在静态工具类中注入service出现NullPointerException异常 2024-03-08

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

头牌

默认边栏

  • 机器学习之朴素贝叶斯分类算法[亲测有效]

    机器学习之朴素贝叶斯分类算法[亲测有效]

    2023-04-12

  • 【整理】前端图表框架[通俗易懂]

    【整理】前端图表框架[通俗易懂]

    2023-06-28

  • 100项PPT制作技术[通俗易懂]

    100项PPT制作技术[通俗易懂]

    2023-04-09

  • css中关于超出显示省略号

    css中关于超出显示省略号

    2023-10-23

  • Python IDE选择(Pycharm vs VS code,谁更牛!)

    Python IDE选择(Pycharm vs VS code,谁更牛!)

    2022-12-14

  • 等保2.0测评:PostgreSQL数据库「建议收藏」

    等保2.0测评:PostgreSQL数据库「建议收藏」

    2022-12-15

  • 2023年有效的rtsp,rtmp,hls流媒体测试地址整理汇总「建议收藏」

    2023年有效的rtsp,rtmp,hls流媒体测试地址整理汇总「建议收藏」

    2023-07-16

  • Source Insight 4.0 序列号 license文件

    Source Insight 4.0 序列号 license文件

    2022-11-23

  • 应用之星,让App开发更简单「建议收藏」

    应用之星,让App开发更简单「建议收藏」

    2023-02-18

  • C语言、B语言、D语言?这些编程语言都是怎么发展演变出来的?

    C语言、B语言、D语言?这些编程语言都是怎么发展演变出来的?

    2022-12-13

  • python环境搭建和pycharm的安装配置及汉化(零基础小白版)[通俗易懂]

    python环境搭建和pycharm的安装配置及汉化(零基础小白版)[通俗易懂]

    2023-01-05

  • GoView 开源,一个好用的 Vue3 低代码开发数据大屏系统

    GoView 开源,一个好用的 Vue3 低代码开发数据大屏系统

    2022-12-08

  • 推荐18个适合接私活的优秀开源项目

    推荐18个适合接私活的优秀开源项目

    2022-12-08

  • 【利器篇】前端40+精选VSCode插件,总有几个你未拥有!「终于解决」

    【利器篇】前端40+精选VSCode插件,总有几个你未拥有!「终于解决」

    2023-02-08

  • 计算机网络知识汇总(超详细整理)「建议收藏」

    计算机网络知识汇总(超详细整理)「建议收藏」

    2023-01-05

  • JSQLParser学习[通俗易懂]

    JSQLParser学习[通俗易懂]

    2023-01-05

  • ThinkPad T14 Gen3拆机更换升级内存和固态硬盘「建议收藏」

    ThinkPad T14 Gen3拆机更换升级内存和固态硬盘「建议收藏」

    2023-04-25

  • 可执行源码:基于javaweb实现学生成绩管理系统,三种角色学生和教师 管理员,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等[通俗易懂]

    可执行源码:基于javaweb实现学生成绩管理系统,三种角色学生和教师 管理员,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等[通俗易懂]

    2023-04-10

  • 雷蛇鼠标 雷云3 驱动无法启动 Razer Syncapse 3 Failed to start「建议收藏」

    雷蛇鼠标 雷云3 驱动无法启动 Razer Syncapse 3 Failed to start「建议收藏」

    2023-07-23

  • 推特忘记用户名的方法

    推特忘记用户名的方法

    2023-10-23

关注微信

深圳SEO优化公司荆州百度网站优化排名横岗网站排名优化公司池州网站搭建报价海口百度爱采购价格淄博百度竞价报价酒泉网页设计哪家好爱联模板推广公司新余百度关键词包年推广推荐广东网站设计价格赣州网站优化排名价格通辽百度竞价哪家好晋中模板推广推荐坑梓网站开发哪家好安顺网站推广系统哪家好开封网站推广方案唐山网站改版推荐咸宁高端网站设计多少钱河池SEO按效果付费推荐晋城关键词按天扣费报价德阳网站搜索优化报价大庆seo排名和县网站优化按天扣费推荐湛江网络广告推广公司南充网站优化报价石家庄高端网站设计公司福田网站制作设计公司凉山网站设计推荐蚌埠模板制作报价张掖seo网站推广哪家好陇南网站制作多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化