单元测试
1.好的单元测试必须遵守AIR原则(自动化,独立性,可重复)
2.单元测试应该是全自动执行的,并且非交互式的.测试用例通常是被定期执行的,执行过程必须完全自动化才有意义.输出结果需要人工检查的测试不是一个好的单元测试,单元测试中不准使用System.out来进行人肉验证,必须使用assert来验证
3.保持单元测试的独立性,为了保证单元测试稳定可靠且便于维护,单元测试用例之间绝不能互相调用,也不能依赖执行的先后次序
4.单元测试是可以重复执行的,不能受到外界环境的影响
5.对于单元测试,要保证测试粒度足够小,有助于精确定位问题,单侧粒度至多是类级别,一般是方法级别
6. 核心业务,核心应用,核心模块的增量代码确保单元测试通过
7.单元测试代码必须写在如下工程目录:src/test/java 不允许写在业务代码目录下
8.单元测试的基本目标:语句覆盖率达到70%,核心模块的语句覆盖率和分支覆盖率都要达到100%
9.对于数据库相关的查询,更新,删除等操作,不能假设数据库里的数据是存在的,或者直接操作数据库把数据插入进去,请使用程序插入或者导入数据的方式来准备数据
10.和数据库相关的单元测试,可以设定自动回滚机制,不给数据库造成脏数据,或者对单元测试产生的数据有明确的前后缀标识
11.为了更方便的进行单元测试,业务代码应避免以下情况:
1)构造方法中做的事情过多
2)存在过多的全局变量和静态方法
3)存在过多的外部依赖
4)存在过多的条件语句
安全规约
1.隶属于用户个人的页面或者功能必须进行权限控制校验
2.用户敏感数据禁止直接展示,必须对展示数据进行脱敏(例如手机号)
3.用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL访问数据库
4.用户请求传入的任何参数必须做有效性验证
5.禁止向HTML页面输出未经安全过滤或未正确转义的用户数据
6.表单,AJAX提交必须执行CSRF安全验证
7.URL外部重定向传入的目标地址必须执行白名单过滤
8.在使用平台资源,譬如短信,邮件,电话,下单,支付,必须实现正确的防重放的机制,如数量限制,疲劳度控制,验证码校验,避免被滥刷而导致资损(比如验证码不加频率限制,就可以用来对某人进行骚扰)
9.发帖,评论,发送即时消息等用户生成内容场景必须实现防刷,文本内容违禁词过滤等风控策略
MySQL数据库
一.建表规约
1.表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)
2.表名,字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字.数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑
3.表名不使用复数名词
4.禁用保留字(保留字列表:https://blog.csdn.net/qq_32828933/article/details/83247198)
5.主键索引名为pk_字段名;唯一索引为uk_字段名;普通索引名则为idx_字段名
6.小数类型为decimal,禁止float和double
7.如果存储的字符串长度几乎相等,使用char定长字符串类型
8.varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其他字段索引效率
9.表必备三字段:id,gmt_create,gmt_modified
id为主键,自增1,类型为bigint_unsigned
gmt_creat,gmt_modified的类型均为datetime类型,前者现在时表示主动式创建,后者过去分词表示被动式更新
10.表的命名最好遵循"业务名称_表的作用"
11.库名与应用名称尽量一致
12.如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释
二.索引规约
1.业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引
2.超过三个表禁止join,需要join的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引
3.在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度
4.页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决
5.如果有order by的场景,请注意利用索引的有序性.
6.利用覆盖索引来进行查询操作,避免回表
7.利用延迟关联或者子查询优化超多分页场景
8.SQL性能优化的目标:至少要达到range级别,要求是ref级别,如果可以是consts级别最好
consts 但表中最多只有一个匹配行(主键或唯一索引),在优化阶段即可读取到数据
ref 指的是使用普通的索引
range 对索引进行范围检索
9.建组合索引的时候,区分度最高的在最左边
10.防止因字段类型不同造成的隐式转换,导致索引失效