3-1 你们的项目是如何进行参数校验的
为了保证数据的正确性和完整性,我们项目是用了Spring的Validation/ˌvælɪˈdeɪʃn/,这是一套基于注解的权限校验框架,在方法参数上添加字段限制,来对接口请求的参数进行后端的校验。
常见的注解有下面几类:
一、空值上的检验:
@Null:可以标注在任意类型元素上,被标注的元素必须为null;
@NotNull:可以标注在任意类型元素上,被标注的元素必须不能为null,但是可以为空串;
@NotBlank:可以标注在字符串类型上,被标注的元素不能为null,也不能为空串;
@NotEmpty:可以标注在字符串,集合,数组或者map类型上,被标注的元素值不能为null,也不能为空集合或者空串。
二、数值上的校验:
@Min(value):被标注的元素必须是一个数字,其值必须大于等于指定的最小值,对null无效;
@Max(value):被标注的元素必须是一个数字,其值必须小于等于指定的最大值,对null无效;
三、长度上的校验:
@Size(min=,max=):可以标注在字符串、数组、集合、map上,用于控制数组等长度等等;
当校验对象中含有对象类型的属性时,需要在对象属性上使用@Valid开启级联校验。
以上就是我在项目中如何进行参数校验的。
3-2 详细说一下你们的问答系统用到了几张表,表中的主要字段有哪些,表关系是什么
我们互动问答系统中涉及到了两个微服务,用到了三张表,分别是学习微服务的问题表和回答评论表、用户微服务的用户表;
问题表中主要字段有:问题id、问题标题、问题描述、所属课程的id、所属课程章的id、所属课程节的id、提问学员的id、最新的一个回答的id、问题下的回答数;
回答评论表中的主要字段有:互动问题的回答id,问题id、回复的上级回答id、回答者id、回答内容、回复的目标用户id、回复的目标回复id,评论数量;
用户表中的主要字段有:用户id、用户名称、用户头像;
表间关系:
用户表和问题表是一对多的关系,一个用户对应多个问题,但一个问题对应一个用户。
用户表和回答评论表也是一对多的关系,一个用户对应多条回答评论,但一个回答评论对应一个用户。
问题表和回答评论表是一对多的关系,一个问题可以有多条回答评论,但一条回答评论对应一个问题。
以上就是我对问答系统的涉及表的相关理解。
3-3 你们为什么用Mongo, 而不用MySQL存储问题和评论
我在项目中之所以用Mongo存储问题和评论,是因为Mongo主要有以下几个特点:
1、面向集合存储,易于存储对象类型的数据 ;
2、文件存储格式为BSON(一种 JSON 的扩展);
3、支持动态查询,支持索引;
4、支持复制和故障恢复;
5、可以存储海量数据;
6、可以用于价值较低的数据;
问题和评论的数量都较多,而且价值也不是很高,所以选择用MongoDB,而不用MySQL存储问题和评论。