你们的项目是如何进行参数校验的
在我们的项目中,我们团队使用的是validation技术实现的,它是通过使用注解来完成对传入数据的校验的.注解主要标注在接收前端传输数据的对象的属性上边.当前端传入的数据不符合校验规则时,系统会抛出异常,我们自己编写的全局异常处理器会捕获异常,捕获到异常以后会将异常信息传递给前端.我们常用的注解有下面这些:
@Null 可以标注在任意类型元素上,被标注的元素必须为null
@NotEmpty 可以标注 在字符串,集合,数组,map上,被标注的元素必须不能为 null ,也不能是空串
@Range 标注在字符串和数值的大小必须在指定的范围内,对于null无效
@Digits(integer(数值的位数) =3 , fraction(小数的位数)=2)
@size(min=,max=) 可以标注在字符串,数组,集合,map用于控制长度
3-2 详细说一下你们的问答系统用到了几张表,表中的主要字段有哪些,表关系是什么
在我们项目中,问答字段用到了两张表,分别是Question和Answer的数据库.
Question就是问题表,存放的都是一些问题信息.主要字段有answer_times(问题下的回复数量),anonymity(是否匿名),hidden(是否隐藏),status(是否已被查看),latest_answer_id(最后一个回答者id),user_id(提问学员id)
Answer存放的是回复问题和回复评论所存放的数据,两个共用一张表.主要字段有question_id(所属问题id),answer_id(回复的上级id),user_id(回答者id),target_user_id(回复的目标用户id)anonymity(是否匿名),hidden(是否隐藏),reply_times(评论数量)
标间关系是一对多,Question中一个数据,对应着多个interaction_reply表中的数据
3-3 你们为什么用Mongo, 而不用MySQL存储问题和评论
我们使用Mongo而不使用MySQL存储问题和评论的原因有一下几点
1.MongoDB支持高效的分片和复制机制,适用于大规模数据的存储和查询.Mongo中可以存储大量的数据,并发访问能力也非常高,比如读写分离和分片技术等技术提高Mongo的并发访问能力.MySQL只能是两千万同时访问量.问题和评论的数据量就较大.
2.相比于MySQL,Mongo的存储存在着一定的风险,但是问题和评论在项目中,不是特备重要的数据,所以即使存在数据丢失也完全没有问题.基本不会造成影响.
因为以上原因,我们一般情况下使用Mongo,而不使用MySQL