java 项目团队开发规范
- Linux 查询 JDK 安装位置:sudo update-alternatives --config java
- 命名规范:严格执行类、接口、方法、常量等的命名规则,并采用驼峰命名方式;
- 编码规范:不仅仅要符合基本的 Java 开发规范,同时还应注意方法的复杂度,类之间的关系和组织循序、数据结构设计等,使系统具备高内聚低耦合的特点和工业级的代码规范。
- 代码格式:遵循统一的缩进格式和代码排版风格,例如使用空格代替制表符进行缩进;
- 代码死循环:涉及批量及复杂逻辑处理的场景,必须明确流程终止条件,避免死循环出现;
- 配置文件格式:新增配置文件需采用.properties命名格式,便于修改配置项,不容易因对齐问题加载/使用异常的情况;
- 配置项格式:新增配置项,采用 xxx.xxx.xxx 形式,尽可能表达准确该项的含义,xxx 采用驼峰命名;
- 注释规范:文档化注释与单行代码注释对项目可维护性有极大帮助。可通过 Javadoc 标签实现自动化 API 文档生成,并编写必要的单元测试来确保代码执行的正确性和稳定性;
- 异常处理:明确异常的分类和范围,尽可能让异常往上抛,而在系统入口处集中处理捕获以及处理。若可以预测的情况下建议手动引发自定义的 Exception 类型;
- 自定义异常:RdsException、VariableCalculationServiceException
- 并发实现:采用J.U.C线程池中 ThreadPoolExecutor 自定义线程池,控制线程池的队列数、核心、最大线程数、最大空闲时间、队列类型等;
- 并发控制:Java 程序中颇有成效的就是
synchronized
关键字、原子类、线程池等工具。建议 synchronized 操作先考虑能否使用 JDK 提供的并发容器类或 lock 特性,从而进行优化进一步减少锁竞争影响性能。- 并发控制:
- 锁:synchronized、ReentrantLock
- 数据副本:ThreadLocal
- 工具:Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- 数据同步(Concurrent Collections):ConcurrentHashMap、ConcurrentLinkedDeque、CopyOnWriteArrayList
- 并发控制:
- 版本管理:对于java开发,使用 Git 进行版本控制,并采用迭代分支工作流。主干用于稳定代码迭代更新,每个分支都应该分别进行封装、测试以及集成;
- 代码提交流程:
- 迭代分支 -> uat 分支 -> pvt 分支 -> master 分支 -> 各在途迭代分支
- 代码开发、测试规范:
- 迭代分支功能开发完成后按顺序部署:dev 环境(自测) -> sit 环境(联调、测试验证) -> uat 环境(业务验证) -> pvt 环境(回归测试、问题复现、自动化测试) -> 生产环境
- 不论需求/测试发现bug,出现任何编码、配置项、脚本调整,必须遵循:
- 代码提交流程;
- 代码开发、测试规范;
- 代码提交流程:
- code review:在开发自测,且 dev 环境验证完成后,启动 code review,后续 bug 修复、需求调整,code review 时间节点、方式不变。
- 测试:编写必要的单元测试来确保代码执行的正确性和稳定性。
- 性能:必须达到较高的性能要求,同时也要确保系统高可用性。可以通过合适的负载均衡、缓存等技术,优化 IO、CPU、多线程等问题,并结合日志审计异步化,应用监控/报警是否正常。
- 安全性:优先考虑编写安全的代码,并在系统出口处加强输入参数校验、防止 SQL 注入等,也可结合网络流量监控项目是否异常。