- 提交代码到svn或者git前,先运行一下,保证没有明面的错误
- 代码编写中,在复杂逻辑说明前进行适当换行,使重要逻辑更清晰,但注意避免无意义的换行
- 注释中,中文的双引号不应该使用,使用英文的引号。可以使用中文逗号,顿号,句号,分号,注释的末尾不使用符号
- 注释说明要和代码一致。如注释中提示如果a大于b,代码中应该if(a>b);禁止if(b<a);意义相同,但需注意可读性
- tab设置为4个空格
- 保持代码格式和风格的一致性。名称命名,方法结构,处理流程,注释,页面风格,数据库设计等
- 注意代码的执行的顺序是从左到右
- 数据库设计,字段说明末尾禁止使用符号
- 表达论述上a=b,不代表b=a;注意表达的准确性。"最后结果"和"最后结论"是两个意义,不能妄自推论,对有歧义的描述要追究清楚
- 注意代码中不要出现无用的看不见的空格
- 能复制粘贴不要手写,避免错误
- 单个方法的长度禁止超过50行,超过的话请根据业务类型,分类拆分
- 多人写协作开发,需保持开发工具编码的一致性,统一设置为utf-8
- 去除未使用的import导入
- log打印日志不能使用加号进行拼接。正确写法:log.info(日志{},a)。参数过多情况下使用stringbuild进行拼接再打印
- log按照时间和大小生成文件。日志文件定期压缩转移。项目提供下载日志的功能
- 调用外部接口的前后打印日志
- try catch中禁止e.printexception()。使用log.error("异常",e)打印
- log.error("异常",e),注意不能是log.error("异常{}",e)
- 编码完成后代码中去除system.out.print()和console.log()
- 方法,成员变量相邻两项之间空一行
- 多个参数的方法void(a, b, c)。第一个参数之后的参数应在逗号后空一格
- 注释else if{// 分支逻辑。注释放到同行末尾
- 注释后应该空一格。如:// 我的注释
- 注释字段含义,注释应放到代码的同行末尾。如 String accout = "";// 账户
- 方法void a()。尽可能保持在一行。参数过多进行分行
- if(1==1) "=="符号前后应空一格。if(1 == 1)
- if, else if ,else if语句最后一定要有else{}分支
- 三个分支以上使用switch,之内使用if
- if(?)中有复杂逻辑判断,每个条件一行,层次清楚
- if(null == a),禁止if(a==null)。虽然作用相同,但a若为null,就不具有任何方法,a.equal()就会npe,这样写避免问题
- 多个if判断,不要进行重复判断,合并冗余的判断
- if(1 == 1)不能if(1>0)。目的是注意判断的准确性
- switch最后一定要有default
- if层级不能超过三层,超过使用卫语句
- 去除代码中无用的括号。如if((true)),正解if(true)
- 开发阶段应该禁用权限拦截
- 平常的项目都应设置系统参数表。如时间参数
- 平常的项目都应设置系统码表。如交易类型,对应的1,冻结2,解冻
- 服务器时间可能不准确,系统用到的时间应该在数据库中维护。或者定期矫正服务器时间
- 不要使用IDE自带的代码格式化,手动优化代码结构
- 使用findbugs,pmd,阿里巴巴代码规范插件,jkens,进行代码走查和代码质量管控
- VO的实体类的成员变量禁止使用基本数据类型,使用封装数据类型。如:不用double使用Double
- 为了增加通用性和低耦合,应该多使用继承extends。提取公用的代码,避免重复的代码。可以考虑使用继承BaseControl,baseService,baseVo。js中basejs
- mybatis的xml格式注意,多个语句之间空一行
- mybatis的vo如果指定double,但返回值为非数值类型的string,会提示类型错误
- mybatis的方法如果传入的参数有null值,需要指定jdbc的类型「jdbctype=varchar」
- 获取参数,如时间参数,不能多次获取。应该一次获取,多次引用
- dao对应的实体的金额和数值使用bigdecimal,方便运算不丢失精读,避免科学计数法的显示
- new Stringbuild().append('a'),如果是单个字符,使用char类型,效率更高
- 代码结构中未完成情况下可以暂时使用todo进行标柱
- spring管理的bean尽量不要设置共享数据到成员函数,spring默认单例,成员变量的赋值导致数据不安全。
- 大数据list数据分割方案,1,if(size==max) listTemp.clear()2.双for取模最后size判断,a%100==0 ?lastSize=100:a/100
- 日期若是string a="20200202" 求时间查应注意转换成Date类型,不能使用数值相差
- 相同位数的string a="123" 比较大小可以直接使用string.compare()的方法,无需转换int类型
- tostring打印的只是对象地址,可以统一继承basevo,利用反射打印所有字段
- tostring打印字段的拼接使用stringbuild,单对象,非线程安全,效率更高
- 如果配置的是声明式事务,应注意service层的方法命名
- 代码如果使用sequence生成序号,相应代码放到业务逻辑的最后,避免前面逻辑错误导致序列浪费
- string.valueof(null)会npe,类似写法需注意
- substring截取从0开始,左闭右开。length返回字符长度。截取中需注意避免截取越界outofindex
- 不要使用object o=null;初始化。使用object o = new object()
- double判断相等也会有精读问题,禁止用来计算
- 字符的非空判断使用common-lang.jar的string.isblank或者notisblank(层级更高)。isempty()不判断空字符
- int i;默认值为0
- 代码中可以使用int i=1/0;if(true);throw new Exception()进行临时调试
- 错误:object o = new object(), void a(o);正确 object o= a()。
- 方法中禁止出现无用的参数
- 提交svn应加注释,严格要求可以设置注释规则
- 前端js中写入debug,浏览器打开开发者模式,调试时会自动debung到该行
- 属性文件中去除看不见的空格
- project修饰的父类的方法,子类可以使用父类方法,但注意子类对象不能使用
- 调用类本身的方法应该使用this前缀,父类方法加super前缀。更加清晰
- 禁止肆意乱用try catch
- 错误:string a = b+"" 正确:string a = String.valueof(b) 或者Double.toString(b)
- 事务try catch后不会回滚,可以受到回滚
- 事务 service a 调用 service b,a中try catch b ,b抛出异常,a之后的插入方法不会继续执行。因为a和b同一个事务,b异常将标记当前事务为回滚状态rollback。b不影响a可以设置b为新开事务require_new
- 数据库中number类型为空数据,mybatis的vo可以接收,double值为0,Double值为null
- oracle事务配置,jdbc不支持readobly,oracle数据库支持。所以代码层面readonly是无效的。mysql是支持readonly的。
- 数据库中char(2)值为1。注意存在看不见的空字符。trim()解决
- 项目开发sql脚本,分为三个文件,create,insert,sequece。数据必须先删除后新增。insert需注意最后commit
- sql注释,注意 -- 注释。--后应空一格,否则会有问题
- 项目中定义常量文件,不能写死数据。定义错误码和错误码文件
- 单例设计使用枚举或者双空判断单例。注意单例的线程安全
- 接口开发设计三层结构,1.check1()无需查询数据库的校验2.check2需查询数据库的校验3.doDate数据持久化
- 接口调用的外部接口开发完成前,应设置挡板数据
- 接口的错误提示应精确准确,可以考虑精确到原始报文的具体字段
- 发送短信等非必要业务,新开线程处理。调用可以设置重试次数和备用接口,提高成功率
- eclipse同时debug两个项目,都有打断点。断点只能进入第一个进入的项目。如果同时进入另一个项目,项目会卡到另一个断点出,而没有界面展示
- eclipse打jar包,如果是依赖项目的jar,打jar时注意勾选"add directory extries",否则spring管理的bean无法扫描到
- 代码功能专一,不必刻意提供公用方法。在冗余度和拓展性寻找平衡点