冲刺第一天
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10702 |
这个作业的目标 | Alpha冲刺 |
作业正文 | 如下 |
其他参考文献 | 无 |
1、昨日进展
开会大致讨论了下代码规范和计划
2.代码规范和计划
时间 | 计划 |
---|---|
第一天 | 学习微信小程序开发,讨论代码规范和计划安排 |
第二天 | 分配各自任务,进一步加深学习,申请微信小程序,准备好编写所需的软件和环境 |
第三天 | 开始编写代码,晚上根据上手进度适当调成下步计划 |
第四天 | 编写代码 |
第五天 | 编写代码 |
第六天 | 编写代码 |
第七天 | 编写代码 |
第八天 | 代码对接汇总 |
第九天 | 进行代码的测试和BUG修改 |
第十天 | 程序进行最后测试和完善,制作PPT |
一、代码格式
- 大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行 ; 如果
是非空代码块则:
1 ) 左大括号前不换行。
2 ) 左大括号后换行。
3 ) 右大括号前换行。
4 ) 右大括号后还有 else 等代码则不换行 ; 表示终止的右大括号后必须换行。 - 左小括号和字符之间不出现空格 ; 同样,右小括号和字符之间也不出现空格。
- if / for / while / switch / do 等保留字与括号之间都必须加空格。
- 任何二目、三目运算符的左右两边都需要加一个空格。
说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。 - 采用 4 个空格缩进,禁止使用 tab 字符。
说明:如果使用 tab 缩进,必须设置 1 个 tab 为 4 个空格。IDEA 设置 tab 为 4 个空格时,
请勿勾选 Use tab character ;而在 eclipse 中,必须勾选 insert spaces for tabs 。 - 注释的双斜线与注释内容之间有且仅有一个空格。
- 单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
1) 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。
2 ) 运算符与下文一起换行。
3 ) 方法调用的点符号与下文一起换行。
4 ) 方法调用时,多个参数,需要换行时,在逗号后进行。
5 ) 在括号前不要换行 - 方法参数在定义和传入时,多个参数逗号后边必须加空格。
- IDE 的 text file encoding 设置为 UTF -8 ; IDE 中文件的换行符使用 Unix 格式,
不要使用 Windows 格式。 - css规范
小程序在开发过程中布局使用flex布局,单位用rpx字体使用px,css命名用 - 作为单词分隔符。 - js命名用驼峰命名,JS语句无需以分号结束,统一省略分号JS中一致使用反引号 ``或单引号' ' , 不使用双引号。WXML、CSS、JSON中均应使用双引号。点击事件规范,事件函数命名方式为 on + 事件名或者业务名
二、 注释规约 - 类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用
// xxx 方式。
说明:在 IDE 编辑窗口中, Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注
释 ; 在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高
阅读效率。 - 所有的抽象方法 ( 包括接口中的方法 ) 必须要用 Javadoc 注释、除了返回值、参数、
异常说明外,还必须指出该方法做什么事情,实现什么功能。
说明:对子类的实现要求,或者调用注意事项,请一并说明。 - 所有的类都必须添加创建者和创建日期。
- 方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释
使用/* */注释,注意与代码对齐。 - 所有的枚举类型字段必须要有注释,说明每个数据项的用途。
三、安全规约 - 隶属于用户个人的页面或者功能必须进行权限控制校验。
说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信
内容、修改他人的订单。 - 用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
说明:查看个人手机号码会显示成:158****9119,隐藏中间 4 位,防止隐私泄露。 - 用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,
禁止字符串拼接 SQL 访问数据库。 - 用户请求传入的任何参数必须做有效性验证。
说明:忽略参数校验可能导致:
page size 过大导致内存溢出
恶意 order by 导致数据库慢查询
任意重定向
SQL 注入
反序列化注入
正则输入源串拒绝服务 ReDoS
说明:Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,
但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。 - 禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。
- 表单、 AJAX 提交必须执行 CSRF 安全过滤。
说明: CSRF(Cross - site request forgery) 跨站请求伪造是一类常见编程漏洞。对于存在
CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL ,只要受害者用户一访问,后台便在用户
不知情情况下对数据库中用户参数进行相应修改。 - 在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放限制,
如数量限制、疲劳度控制、验证码校验,避免被滥刷、资损。
说明:如注册时发送验证码到手机,如果没有限制次数和频率,那么可以利用此功能骚扰到其
它用户,并造成短信平台资源浪费。
。
四、MySQL 数据库
( 一) 建表规约 - 表达是与否概念的字段,必须使用 is _ xxx 的方式命名,数据类型是 unsigned tinyint
( 1 表示是,0 表示否 ) 。
说明:任何字段如果为非负数,必须是 unsigned 。
正例:表达逻辑删除的字段名 is_deleted ,1 表示删除,0 表示未删除。 - 表名、字段名必须使用小写字母或数字 , 禁止出现数字开头,禁止两个下划线中间只
出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库
名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。
正例: aliyun _ admin , rdc _ config , level 3_ name
反例: AliyunAdmin , rdcConfig , level 3 name
( 二) 索引规约 - 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。
说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明
显的 ; 另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必
然有脏数据产生。 - 超过三个表禁止 join 。需要 join 的字段,数据类型必须绝对一致 ; 多表关联查询时,
保证被关联的字段需要有索引。
说明:即使双表 join 也要注意表索引、 SQL 性能。 - 在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据
实际文本区分度决定索引长度即可。
说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为 20 的索引,区分
( 三)SQL 语句 - 不要使用 count( 列名 ) 或 count( 常量 ) 来替代 count( * ) , count( * ) 是 SQL 92 定义的
标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
说明: count( * ) 会统计值为 NULL 的行,而 count( 列名 ) 不会统计此列为 NULL 值的行。 - count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct
col 1, col 2 ) 如果其中一列全为 NULL ,那么即使另一列有不同的值,也返回为 0。 - 当某一列的值全是 NULL 时, count(col) 的返回结果为 0,但 sum(col) 的返回结果为
NULL ,因此使用 sum() 时需注意 NPE 问题。
正例:可以使用如下方式来避免 sum 的 NPE 问题: SELECT IF(ISNULL(SUM(g)) ,0, SUM(g))
FROM table; - 使用 ISNULL() 来判断是否为 NULL 值。
说明: NULL 与任何值的直接比较都为 NULL。
1 ) NULL<>NULL 的返回结果是 NULL ,而不是 false 。
2 ) NULL=NULL 的返回结果是 NULL ,而不是 true 。
3 ) NULL<>1 的返回结果是 NULL ,而不是 true 。 - 在代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。
- 不得使用外键与级联,一切外键概念必须在应用层解决。
说明:以学生和成绩的关系为例,学生表中的 student _ id 是主键,那么成绩表中的 student _ id
则为外键。如果更新学生表中的 student _ id ,同时触发成绩表中的 student _ id 更新,即为
级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群 ; 级联更新是强阻
塞,存在数据库更新风暴的风险 ; 外键影响数据库的插入速度。 - 禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。
- 数据订正时,删除和修改记录时,要先 select ,避免出现误删除,确认无误才能执
行更新语句
2、今日进展
今天每个成员大致了解了自己所属范围的开发前端后端的基础代码部分并着手去做
3、燃尽图
4、当日组员情况
成员 | 成员分工 |
---|---|
董爽 | 了解了微信开发者工具的用法,并且注册邮箱,把每个开发者成员加入进去,研究了如何修改项目的图片,了解基础语法 |
谢沛言 | 基本了解后端如何在小程序上操作 |
苏坚强 | 前端页面 |
魏鹏辉 | 个人信息管理模块 |
郑海洪 | 服务器搭建 |
魏忠杰 | 登录注册模块 |
刘雨昂 | 后端代码 |