开发规范:html
1.开发必须会使用乐观锁。乐观锁不要采用有意义的字段,考虑用version字段前端
2.设计表结构慎用大字段。注意控制输入不要超过字段长度,或者截断。java
3.Mysql尽可能少用join查询;分库的不要用,其余状况酌情处理。mysql
4.分页页面展现不超过10. 提供接口查询量大,必须分页。spring
5.缓存。全部的读操做,必须考虑缓存。缓存key必须是惟一的,缓存时间根据实际状况设置,key值要sql
有业务意义,作设计的时候,告知需求方,咱们使用缓存的影响。缓存配置要考虑默认值,如取不到数据,chrome
使用默认值。且不能影响正常业务;考虑后台能随时清理缓存。Redis manage数据库
6.全部定时任务考虑是否支持多线程的,是否有补跑机制。考虑使用多频率调用的方法处理数据。避免集编程
中式爆发;单台机器多线程+原子控制,集群指定服务器ip跑定时任务。浏览器
7.批量操做,必定要使用分批处理。批处理必定要考虑间隔和上限,1000条作一次。
8.设计表时要加上如下字段:create_time,create_id,cretor,last_modified,modified_by,is_deleted。如是日志表,
考虑client_ip,server_ip。
9.是否全部页面上的功能都考虑了多浏览器环境支持(必须支持火狐,chrome)
10.对数据惟一性要求很高的话,考虑惟一索引。
11.接口返回尽可能要保证
12.页面提交按钮必须防呆。(如考虑遮罩)
13.源文件编码格式为utf-8.
14.Long与Integer大小比较,用equals方法,或者先使用longValue()或者intValue()方法来获得
他们的基本类型的值而后使用==比较也能够。
命名规范:
1.使用驼峰命名法,方法名以动词开头;类命名如:HelloWorld。变量命名如:headCount。
常量命名使用CONSTANT_CASE
2.controller层以**Controller结尾,Service层以**Service结尾,实现类以**ServiceImpl结尾,
Dao层以**Dao结尾,实现类以**DaoImpl结尾。
3.工具类以Utils结尾,并放到单独的包如:common.utils
4.方法命名;dao层若是是单条查询请用get开头,如getOperatorById,查询集合经过find*list
开头,findMerchantListByOperatorId;get单表单条数据;find..list单表list;query多表对象;
query..List多表list;新增用insert开头,更新用update开头,删除用delete开头,Service层
方法命名根据具体业务来,见名知意,如取消订单,cancelOrder。
5.参数的命名:参数的名字必须和变量的命名规范一致。使用有意义的参数命名,若是可能的
话,使用和要赋值的字段同样的名字;
6.sql文件以*_mapper.xml结尾,如order_mapper.xml
7.Jsp与html文件名所有小写,单词之间用_隔开,如order_list.jsp
8.Model层:持久层对象必须和表名一致,表现层对象一概使用vo结尾。用Request,response结尾。
编码原则:
1.全部问题要采用缩进风格编写,缩进的空格数为4个
2.不容许把多个短语写在一行中,即一行只写一条语句
3.相对独立的程序块之间,变量说明以后必须加空行
4.必需要有注释,源程序注释量必须在30%以上,注释可根据须要列出:做者,内容,功能,与
其余类的关系等。功能详细描述部分说明该类或者接口的功能。,做用,使用方法和注意事项,每次
修改后增长做者和更新版本号和日期。方法内的单行注释用//,其余用/**...**/
5.不容许提交编译报错和带黄色警告的代码
6.每一个类文件不超过2000行,每一个方法不超过150行。代码宽度150列。
7.If-else不该嵌套太多,不能超过三层,若是嵌套太多,应该考虑调整你的逻辑或者换种实现
方式嵌套循环不超过三层。
8.日志处理,通常的异常状况都须要增长log日志,尽可能不要用“System.out.println()”。
9.代码原则上要放在大括号{}以内,若是只有一行代码也必须放在大括号之中,不容许省略,
而且大括号不容许与其中的代码段在同一行。
10.不要在controller层作业务逻辑,统一在service层处理:controller层所作的事情是获取入参,作
数据有效性校验。完成后则拼装DO并传入service层作业务逻辑处理。
11.对外接口异常统一返回异常编码和异常说明,内部正确使用异常,不要随意就抛出一个异常,特别
是Exception异常。但在try-catch时尽可能捕获具体异常,最好不要catch(Exception)这么写。
12.业务使用手动事务,后台酌情考虑。不容许有大事务。(事务的传播性考虑)aop配置事务必须指定到方法。
13.外部接口调用须要记录日志,数据表记录等--提供外部的接口。
14.调用接口得到的返回值须要作对象非空,业务逻辑验证等操做;调用接口的结果对象转换为本地定义
对象,避免接口修改通知不及时引发的系统异常。
15.系统功能及数据有合适的权限控制(好比菜单权限,水平权限)
16.没有冗余代码(特别是-注释就注释一大片的那种);面向接口编程。
17.没有硬编码(如数据库原配置,跳转url,魔鬼数字,通用错误码,bean初始化)
18.面向面向用户端的接口,必须作安全校验。
19.Update操做涉及多条或多表数据时,确保并发场景下无死锁问题,批量更新多表按表名排序,
单表按主键排序。
20.无sql注入的漏洞(在编写mybatis的映射语句时,尽可能采用“#{xxx}”这样的格式。若不得不使用
“${xxx}”这样的参数,要手工地作好过滤工做,防止sql注入(攻击),不要用like,用selet * from
End_user where instr(user,;jun.’);
21.Spring.xml配置bean必定要有id且惟一(考虑jar包冲突)
22.第三方jar引入是否exclude了和如今又冲突的版本spring mybatis log4j等
23.Pom文件,版本控制放到最上面。
前端:
1.超过100行的js单独提取成js脚本
2.前端的输入参数,服务端必须校验(防止js篡改等)
3.把样式表放在body头上
4.引用第三方js,容错性须要作好
5.多浏览器环境支持
前端建议:
最小化JavaScript,考虑CDN
接口提供:
1.接口可扩展(入参xxRequest,出参xxResponse)
2.是否须要支持可重复调用
3.是否须要提供回滚接口
4.入参强制检验
5.Dao层考虑水平和垂直拆分的影响(是否须要路由,聚合函数分页等如何处理)
6.重要数据操做,好比金额必定要有流水,不是简单的日志记录(log老是多多益善)。
7.接口层统一返回对象,异常只能在接口内部处理,不能抛出来。返回对象包含3个基本属性。
(1)返回编号
(2)返回数据
(3)返回消息
8.SoaResponse.java
依赖:
必须作异常处理,并区分业务异常和系统异常。
(是否须要重复调用第三方接口,调用第三方接口执行成功,可是结果超时,返回失败应该如何处理
数据库开发规范:
命名:
(1)库名,表名,字段名,使用小写字母
(2)库名,表名,字段名,尽可能见名知意,使用下划线分割
(3)不要超过30个字符
(4)禁止使用mysql保留字
(5)临时库,表名,必须以tmp为前缀,以日期为后缀,例如tmp_product_20130202
库表设计:
(1)表必须有主键,使用bigint unsigned类型,主键只使用一个字段,使用auto_increment属性,主键统一
使用id。
(2)全部字段都必须注释全部表都必须有说明。
(3)访问频率低的或大字段放到扩展表里,分离冷热数据。
(4)多张关联表之间,适当的冗余字段,能够减小join查询
(5)依据查询场景建适当的索引和增长备用的字段。
(6)若是预计数据量较大,预先制定分表策略,如按日期拆分或按某键值取模分表
索引建立
(1)如多个字段组合有惟一性须要,能够建立惟一索引
(2)不在低基数(低筛选度)的列上创建索引,例如“性别”
(3)禁止冗余索引,如已有(a,b)索引,能够删除(a)索引
(4)合理建立组合索引(a,b,c)至关于(a),(a,b),(a,b,c)
(5)组合索引的组成字段数尽可能不超过3个
(6)组合索引中,区分度大(高筛选度)的字段放在最前
(7)尽量利用索引完成排序,即排序的字段在索引里
(8)禁止使用外键,防止死锁,避免隐藏的数据逻辑
(9)数据扫描过多,如全部索引的过滤性不佳,会放弃使用索引
(10)仅使用最有效的过滤条件,索引不是越长越好,where条件不是越多越好
(11)Sqlmap后面把id加上/*sqlid*/
(12)普通索引按照“idx_字段名称[_字段名称]”进行命名,例如idx_uniq_age_name
(13)索引名必须所有使用小写,过长的字段名能够采用缩写形式,例如idx_age_name_add
注:笔记部分可能参考其余做者内容的一个记录,仅为加深本身对概念的理解,这里一些可能忘记参考谁的了,因此望见谅。