iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java阿里巴巴代码规范
  • 168
分享到

Java阿里巴巴代码规范

java代码规范开发语言 2023-09-01 06:09:49 168人浏览 独家记忆
摘要

目录 1 编程规约1.1 方法参数类型必须一致,不要出现自动装箱拆箱操作1.1.1 反例1.1.2 正例 1.2 SimpleDateFormat是线程不安全的1.2.1 反例1.2.2

目录


1 编程规约

我们介绍了让代码规范的方案,下面我们就来说一下阿里的代码规范文档

在这里插入图片描述

业界公认的代码规范手册(国内)当属阿里巴巴旗下出版的《Java 开发手册》,经过几个版本的迭代,最新手册为《Java 开发手册》,更新时间为2022年2月3号。手册以 Java 开发者为中心视角,划分为编程规约、异常日志、 单元测试安全规约、 Mysql 数据库、 工程结构、 设计规约七个维度,再根据内容特征,细分成若干二级子目录。根据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。对于规约条目的延伸信息中,“说明” 对规约做了适当扩展和解释;“正例” 提倡什么样的编码和实现方式;“反例”说明需要提防的雷区, 以及真实的错误案例。

1.1 方法参数类型必须一致,不要出现自动装箱拆箱操作

1.1.1 反例

这种操作很容易产生难以排查的NPE异常

public static int handel(Integer value) {    return value;}

1.1.2 正例

入参以及出参,和参数传递类型是一致的

public static Integer handel(Integer value) {    return value;}

1.2 SimpleDateFORMat是线程不安全的

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

1.2.1 反例

使用这种方式在多线程的情况下会报错,或者出现数据不一致的情况

private static final SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

在这里插入图片描述

1.2.2 正例

使用ThreadLocal的方式保证线程安全,或者使用DateTimeFormatter代替SimpleDateFormat

private static final ThreadLocal threadLocal = new ThreadLocal() {    @Override    protected SimpleDateFormat initialValue() {        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    }};

1.3 使用equals方法应该注意空指针

1.3.1 反例

如果object为null就会抛出NPE异常

object.equals("test");

1.3.2 正例

应该使用常量或者确定的值来进行判断equals

"test".equals(object);

或者使用Objects.equals

 Objects.equals(object1,object2)

2 异常日志

2.1 事务场景中如果异常被被捕获要注意回滚

2.1.1 反例

@Service@Transactional(rollbackFor = Exception.class)public class UserServiceImpl implements UserService {    @Override    public void save(User user) {        try{        //some code        //db operation        }catche(Exception e){                    }    }}   

2.1.2 正例

@Service@Transactional(rollbackFor = Exception.class)public class UserServiceImpl implements UserService {    @Override    public void save(User user) {        try{        //some code        //db operation        }catche(Exception e){            //捕获处理后需要再将异常抛出            throw  e;        }    }}   

2.2 不要在 finally 块中使用 return

try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存 在 return 语句,则在此直接返回,无情丢弃掉 try 块中的返回点。

2.2.1 反例

这种情况下结果永远返回的都是true,fanally中不要做返回操作

public static boolean getValue(String text) {    try {        return text.equals("123");    } finally {        return true;    }}

2.2.2 正例

public static boolean getValue(String text) {    return "123".equals(text);}

2.3 应用中不可直接使用日志系统(Log4j、Logback)中的 api

在Java生态体系中,围绕着日志,有很多成熟的解决方案,关于日志输出,主要有两类工具。

一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等,另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。所以,对于Java工程师来说,关于日志工具的使用,最佳实践就是在应用中使用如Log4j + SLF4J 这样的组合来进行日志输出。这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本,这也是门面模式所带来的好处。请不要在你的Java代码中出现任何Log4j等日志框架的API的使用,而是应该直接使用SLF4J这种日志门面。

2.4 所有日志文件至少保存15天

所有日志文件至少保存15天,因为有些异常具备以“周”为频次发生的特点,网络运行状态、安全相关信息、系统监测、管理后台操作、用户敏感操作需要留存相关的网络日志**不少于6个月**。

3 单元测试

3.1 好的单元测试必须遵守 aiR 原则

单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的,好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。

3.2 单元测试应该是全自动执行的,并且非交互式的

  • 测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。
  • 输出结果需要人工检查的测试不是一个好的单元测试。
  • 单元测试中不准使用System.out来进行人肉验证,必须使用assert来验证。

3.3 单元测试是可以重复执行的,不能受到外界环境的影响

单元测试通常会被放到持续集成中,每次有代码check in时单元测试都会被执行,如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用,为了不受外界环境影响,要求设计代码时就把SUT的依赖改成注入,在测试时用spring 这样的DI框架注入一个本地(内存)实现或者Mock实现。

4 安全规约

4.1 用户敏感数据禁止直接展示,必须对展示数据进行脱敏

中国大陆个人手机号码显示为:`137****0969`,隐藏中间 4 位,防止隐私泄露,以及用户的身份证号码,银行卡号码,用户姓名等都需要进行脱敏处理

4.2 用户请求传入的任何参数必须做有效性验证

说明:忽略参数校验可能导致:

  • page size 过大导致内存溢出
  • 恶意 order by 导致数据库慢查询
  • 缓存击穿
  • 服务器端请求伪造(SSRF)
  • 任意重定向
  • sql 注入,shell 注入,反序列化注入
  • 正则输入源串拒绝服务 ReDoS

5 mysql 数据库

5.1 表明命名规范

表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。

数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑,MySQL 在 windows 下不区分大小写,但在 linux 下默认是区分大小写,因此,数据库名、表名、 字段名,都不允许出现任何大写字母,避免节外生枝
  • 一般以t_xxx来作为表名
  • 一般以v_xxx来作为视图名称

5.2 表必备的几个字段

  • 创建人:标记记录的初始创建人
  • 创建时间:标记初始的创建人
  • 修改人:标记修改人
  • 修改时间:标记最后修改日期
  • 版本号:用于统一化的乐观锁

6 工程结构

6.1 线上应用不要依赖 SNAPSHOT 版本

正式发布的类库必须先去中央仓库进行查证,使 RELEASE 版本号有延续性,且版本号不允许覆盖升级。

6.2 注意POM坐标冲突

禁止在子项目的 pom 依赖中出现相同的 GroupId,相同的 ArtifactId,但是不同的Version。

在本地调试时会使用各子项目指定的版本号,但是合并成一个 war,只能有一个版本号出现在最后的lib 目录中,曾经出现过线下调试是正确的,发布到线上却出故障的先例。

7 阿里规范插件安装

这里面只列出来了几个比较重要的,很有很多的规约没有写出来,为了让大家码代码的效率更高,可以安装阿里的代码规范插件来约束自己凌乱的代码

阿里规范插件GitHub地址:https://github.com/alibaba/p3c

7.1 idea安装该插件步骤

打开IDEA,File-> Setteings->Plugins,在搜索栏搜索Alibaba,然后安装,安装完后点击Restart IntelliJ IDEA重启idea

在这里插入图片描述

7.2 使用

安装好了,使用方法是:打开IDEA,点击tools—>安装的阿里编码规约,可以选择中英文切换,项目右键选择编码规约扫描就可以进行查看自己编码哪些地方不够好

在这里插入图片描述

7.3 检查等级

检查结果一共分三个等级

等级验证程度备注
Blocker严重有明显问题,影响功能以及性能
Critical危险一般问题,遵循标准
Major主要一般为建议

7.4 查看结果

可以通过结果查看一般存在的问题

在这里插入图片描述

来源地址:https://blog.csdn.net/ZGL_cyy/article/details/131277035

--结束END--

本文标题: Java阿里巴巴代码规范

本文链接: https://www.lsjlt.com/news/387606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java阿里巴巴代码规范
    目录 1 编程规约1.1 方法参数类型必须一致,不要出现自动装箱拆箱操作1.1.1 反例1.1.2 正例 1.2 SimpleDateFormat是线程不安全的1.2.1 反例1.2.2...
    99+
    2023-09-01
    java 代码规范 开发语言
  • 阿里巴巴_java开发规范手册详解
    1、 命名风格 1.1、代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例: _name, $name, __name 1.2、代码中的命名严禁使用拼音与英文混合的方...
    99+
    2023-09-03
    java 1024程序员节
  • MySQL阿里巴巴规约
    MySQL阿里巴巴规约 1.MySQL阿里巴巴规约【转载】2.Mysql开发规范2.1 设计规范2.2 命名规范2.3 类型规范2.4 索引规范2.5 SQL规范 1.MySQL阿里巴...
    99+
    2023-10-05
    mysql
  • 阿里巴巴云代理商
    作为一名阿里巴巴云代理商,我深知自己的责任和使命。我们需要不断地拓展市场,为客户提供更优质的产品和服务。而如何在激烈的市场竞争中脱颖而出,如何让我们的客户信任我们,选择我们,是我们必须要解决的问题。 首先,我们需要了解客户的需求。客户是我...
    99+
    2023-10-28
    阿里巴巴 代理商
  • 阿里巴巴云服务代理商
    在选择阿里巴巴云服务代理商时,客户需要考虑以下几个因素: 可靠性:选择一个可靠的云服务代理商非常重要,因为他们能够为客户提供稳定、安全的云计算服务。阿里巴巴云服务代理商拥有丰富的经验和技术,能够提供高品质的云计算服务,同时具备很强的可靠...
    99+
    2023-10-27
    阿里巴巴 代理商
  • 阿里巴巴云代理哪家好
    首先,阿里云拥有完善的产品和服务。阿里云作为国内最大的云计算服务商之一,拥有自主研发的产品和服务,包括云服务器、容器服务、数据库、CDN、负载均衡等,可以满足不同用户的需求。 其次,阿里云具有较强的市场竞争力。阿里云作为阿里巴巴集团旗下的...
    99+
    2023-10-27
    阿里巴巴 哪家
  • 【Java】阿里巴巴Java开发手册
    文章目录 前言一、 编程规约(一) 命名风格(二) 常量定义(三) 代码格式(四) OOP 规约(五) 集合处理(六) 并发处理(八) 注释规约(九) 其它 二、异常日志(一) 异常处理(...
    99+
    2023-08-31
    java 开发语言
  • 阿里巴巴无影云电脑代理
    价格优惠:阿里云无影云电脑提供了低价的云电脑产品,为用户节省了购买云电脑的费用。 多种配置选择:无影云电脑提供了多种配置选择,用户可以根据自己的需求选择最适合的配置。 安全可靠:阿里云无影云电脑采用了多重安全措施,确保用户的数据安全。 灵...
    99+
    2023-10-27
    阿里巴巴 无影 电脑
  • 阿里巴巴公有云代理商
    阿里巴巴公有云代理商可以为客户提供多种云计算服务,包括云服务器、云存储、数据库、安全、人工智能、大数据等。客户可以根据自己的业务需求和预算来选择适合自己的云计算服务。阿里巴巴公有云代理商的产品线非常丰富,可以满足各种不同类型的客户需求。 ...
    99+
    2023-10-28
    阿里巴巴 代理商
  • 阿里巴巴云代理是什么
    阿里巴巴云代理可以提供多种云计算服务,包括计算、存储、数据库、网络、安全、人工智能等方面。通过阿里云代理,客户可以以较低的价格、更便捷的方式获得所需的云计算服务。此外,阿里云代理还提供了丰富的解决方案,包括应用程序迁移、多云部署等,帮助客户...
    99+
    2023-10-28
    阿里巴巴
  • 阿里巴巴云客服代理商
    首先,云客服代理商可以帮助客户优化业务流程,提高工作效率。阿里巴巴集团旗下有众多的企业和品牌,客户遍布全球,这就需要云客服代理商提供高效的解决方案来帮助客户应对业务挑战。云客服代理商可以通过分析客户需求和业务特点,为客户提供最佳的服务解决方...
    99+
    2023-10-27
    客服 阿里巴巴 代理商
  • 阿里巴巴云代理怎么样
    一、阿里云代理的优势 高效:阿里云代理具有更快的部署速度和更低的资源占用率,能够满足企业在高流量、高负载下的需求。 稳定:阿里云代理具有优秀的技术支持和稳定的服务,能够为企业提供高质量的云计算服务,保证业务的稳定运行。 可靠:阿里云代理...
    99+
    2023-10-27
    阿里巴巴
  • 阿里巴巴云平台有代理吗
    作为阿里云的一名忠实用户,我非常喜欢阿里云的产品和服务。它们提供了强大的功能和稳定的性能,让我们能够轻松地应对各种工作和生活场景。在使用阿里云的过程中,我深刻体会到了其强大的技术支持和良好的用户体验。 在使用阿里云的产品时,我们可以享受到...
    99+
    2023-10-28
    阿里巴巴 平台
  • 阿里巴巴云服务器在哪里
    阿里云服务器主要分布在中国、美国、欧洲等地,其中亚太地区的用户最多。在国内,阿里云位于北京、上海、广州、深圳、杭州等城市,在香港、新加坡、日本、韩国等地也有部分用户。 阿里云的服务器分为公共云、私有云和混合云三种类型,可以根据实际需要进行...
    99+
    2023-10-28
    阿里巴巴 服务器
  • 阿里巴巴云服务器
    阿里云服务器是阿里巴巴旗下的云服务器品牌,提供高性能、高可靠性、安全稳定的云服务器,为用户提供可靠的数据存储和处理服务。该服务器拥有强大的功能和稳定性,并且支持多种操作系统和硬件型号,可以满足不同用户的需求。以下是一些阿里云服务器的常见功能...
    99+
    2023-10-26
    阿里巴巴 服务器
  • 阿里巴巴云服务器租用
    阿里云服务器租用是指将一台云服务器租用给您,您可以使用它来创建、管理和部署应用程序和服务。以下是一些您可能需要知道的基础知识和一些可能会有用的建议: 云服务器的选择取决于您的业务需求。您可以从不同的云计算供应商中选择适合您需求的服务器,...
    99+
    2023-10-26
    阿里巴巴 服务器
  • 阿里巴巴云服务器在哪里看
    在阿里云服务器的官方网站上,您可以找到阿里云服务器的详细信息,包括硬件配置、软件版本、服务级别、可用性等。您可以按照以下步骤来了解阿里云服务器的具体功能和优势: 硬件配置 阿里云服务器的硬件配置是选择云服务器的重要因素之一。您可以选择...
    99+
    2023-10-28
    阿里巴巴 服务器
  • IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装)
    目录1.在线安装:2.离线安装:IDEA安装阿里巴巴编码规范插件的两种方式:在线安装和离线安装。 1.在线安装: 打开file-settings-Plugins.如图: 搜索到点击...
    99+
    2024-04-02
  • 阿里巴巴云服务器在哪里看账号密码
    阿里云服务器的账号密码一般是存储在服务器上的数据库中,可以通过登录阿里云官方网站或者阿里云客户端来查看。如果你没有阿里云账号,可以先在阿里云官网注册一个账号,再登录使用。 以下是查看阿里云服务器账号密码的步骤: 在阿里云官网上注册账号。...
    99+
    2023-10-26
    阿里巴巴 账号 密码
  • 阿里巴巴宣化云数据库
    简介 阿里巴巴宣化云数据库是阿里巴巴集团推出的一款高性能、高可用性的云数据库服务。它基于阿里云强大的基础设施和先进的技术架构,为用户提供稳定可靠的数据存储和管理解决方案。无论是个人用户还是企业用户,都可以通过阿里巴巴宣化云数据库轻松搭建自己...
    99+
    2024-01-22
    宣化 阿里巴巴 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作