学习笔记171010


MySQL规约

建表

表名使用“[project或功能模块] 下划线 [实体类] 下划线 [从属信息等]”的形式进行命名,每个单词间都需要用下划线进行分割

所有字段必须有注释,枚举值类型更要说明每个数值代表的具体含义

自增主键的设置

1.无特殊需求时,主键名使用id

2.不允许为空并设为主键

3.设置自增

SQL

count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行

不得使用外键与级联,一切外键概念必须在应用层解决

性能

sql执行大于300ms的需要进行优化

ORM

数据更新时,不要更新无改动的字段,一是易出错;二是效率低;三是增加 binlog 存储

敏感信息展示

后端返回18766289569前端处理后显示187****9569

参数有效性验证

用户请求传入的任何参数必须做有效性验证  忽略参数校验可能导致:

例如:page size 过大导致内存溢出

SQL 注入


防XSS安全开发规范

所有暴露给前台的接口,都需要对参数进行校验:

对非字符串参数必须有数据类型校验。

字符串参数必须有长度校验,同时使用框架提供的工具进行XSS过滤和html转义

用户身份校验相关的cookie,必须设置成httpOnly,从而禁止通过js代码操作cookie

防CSRF安全开发规范

后端filter中统一校验前端请求的Referer值,来自非本网站域名的请求禁止访问(暴露给第三方的接口除外)

系统关键服务(涉及金钱操作或授权操作)需要进行token校验

防文件上传攻击安全开发规范:

必须有文件类型白名单校验(黑名单校验是不够的)

必须有文件大小的校验

必须有对文件名%00截断符的校验

上传文件在服务器端必须重命名后保存

文件保存路径不允许通过传入参数指定,必须保存在以下两个目录之一:

/data/TRS/nas/files/protect (保存敏感文件,nginx不可达)

/data/TRS/nas/files/public(保存公共文件,nginx可访问)

分层规约

controller职责描述

搜集参数

简单的参数验证

处理服务级别业务并调用service层

转发或重定向结果集

service职责描述

业务逻辑的实现

dao层的调用

处理事务

dao职责描述

数据库操作的实现

service/dao 层方法命名规约

获取单个对象的方法用 get 做前缀。

获取多个对象的方法用 list 做前缀。

获取统计值的方法用 count 做前缀。

插入的方法用save做前缀。

删除的方法用remove做前缀。

修改的方法用update做前缀。

OOP

在spring的环境中,bean中不要声明类属性,单例模式下会产生数据污染。

字符串处理、长度校验、时间处理等方法都有工具类,时刻想到先查找相关技能章节或询问开发导师是否有工具类后,再去自己造轮子。

避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访问即可

所有的覆写方法,必须加@Override 注解。

反例:getObject()与 get0bject()的问题。

一个是字母的 O,一个是数字的 0,

加@Override 可以准确判断是否覆盖成功。

另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。

不能使用过时的类或方法。

说明:例如java.net.URLDecoder 中的方法 decode(String encodeStr) 这个方法已经过时,应 该使用双参数 decode(String source, String encode)。接口提供方既然明确是过时接口, 那么有义务同时提供新的接口;作为调用方来说,有义务去考证过时方法的新实现是什么。

所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。

你可能感兴趣的:(学习笔记171010)