发表于: 2020-06-09 21:14:48
1 1498
今天完成的事情:任务三的深度思考
1.什么是代码生成,mybatis generator代码生成是怎么实现的,还有什么办法可以生成代码?
代码生成: 自动代码生成器根本原理就是根据实现写事先好的模板,再根据你提供的数据库结构,生成一系列的增删改查方法。 的确是可以减少程序员的工作量,但是不能包含复杂或者特殊的业务逻辑
实现步骤(1)搭建好数据库与表格
(2)pom文件添加依赖
(3)配置xml文件
生成代码的其他方法:Mybatis Plus
2.Mysql的一般而言应该配置多大的内存, 多大的硬盘 ,多大的连接数?
4G 硬盘空间越大越好 默认的100连接数
3.在端到端的请求当中,建立Http连接需要多久,Model通过JSP转成Json需要多久,Nginx调用Resin需要多久,Service访问DB需要多久,
一个Sql语句执行的时间是多久。
很短很短,biu的一下就好了 1s 30ms 10ms 5ms 太短了
4.什么是Sql注入,应该怎么解决?对于未做SQL注入防范的程序,你可以直接通过调用接口删掉表吗?
SQL注入(sql inject),就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
解决方法:利用PreparedStatement先预编译对象,它是Statement的子类
5.在内存里拼装数据会节省时间吗?如果不能,为什么要选择单表查询,而不是直接拼装成Sql语句。
不能 单表查询效率高
6.为什么一般而言,不允许使用连表查询,不允许使用复杂的Group By等语句,为什么不允许使用存储过程?
使用连表查询的话,sql语句会很复杂不利于维护。
7.为什么响应时间一般不允许超过200MS,怎么查看一个请求从发起到结束,耗费在什么地方了?
因为人对200s以上的时间是有反应的,超过200s会影响用户的使用体验,从容器的日志中查看,耗费在了容器的启动还有读取配置文件的过程中
8.为什么要自测,仅仅使用Postman来测试足够吗?什么是本地测试,什么是在开发环境测试?在开发过程中,应该每天部署代码到开发环境吗,为什么?
自测一方面是为了不给团队其他成员增加必要的工作,另一方面是为了让开发者看到自己的劳动成功,爽就完事儿了,我觉得postman应该够了,毕竟增删改查postman是可以满足的,本地测试就是在自己的主机上测试,开发环境测试就是在模拟的开发环境中测试????好奇怪的问题。我觉得不用每天部署代码吧....谁那么有闲工夫。.
9.保存图片有几种方式?什么样的情景下应该使用哪一种?
(1):放在项目本身得文件夹中,直接部署到服务器上
(2):存放在磁盘中,然后数据库中存放路径,读取得时候传路径。这个适合小项目
(3):将图片转换成二进制文件,但是不建议这样做,因为会给数据库造成压力。
(4):存放在云存储器上,也是在数据库上存地址,不过是云地址,使用得时候给前端,然后前端会自动向专门得云服务器上去获取。所有得安全,优化,带宽,缓存命中,都是由云服务器去保证。(比如:七牛云,阿里云)这个适合电商和社区项目
10.为什么要先写单元测试?单元测试应该包括哪些?在正式打包的过程中,什么样的单元测试应该被屏蔽?在Maven里用什么方法可以跳过单元测试,单元测试应该被跳过吗。
写单元测试是为了确保自己写的模块儿可以正常的使用,单元测试应该包括最基本的增删改查,私有的单元测试应该被屏蔽
Maven 跳过单元测试打包的方法:
修改 pom 文件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>xxx</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
单元测试应该被跳过,反正我听师兄的单元测试从来不上传
11.为什么提供假数据的时候要求,直接Controller接收请求,在JSP中写死数据返回以用做假数据?为什么提供假数据的时候要求数据完整,有分页尽可能给分页,数据尽可能真实?
为了自己测试的时候有数据可以用,分页是为了应对数据量过大的情况。尽可能真实的数据才能真实地反映出测试的效果
12.为什么要写假数据,前后端联调的时候,应该什么时候商定接口文档,接口文档应该谁来维护,如果不提供假数据,会发生什么问题?
写假数据是为了让开发者有数据可用,可以在模块儿完成的时候进行测试,商定接口文档一定要在项目刚开始做的时候就确定好,不然后期更改接口很麻烦,不提供假数据的话就不知道代码写的到底对不对。
13.接口应该怎么定义?一个页面应该只对应一个接口吗?还是一个实体对应一个接口,让前端去组装数据?两者的使用场景是什么?
接口应该符合rest风格,一个页面可以连接多个接口,前端才不会去组装数据。
14.多层分类应该怎么设计表结构,分别有什么问题?像文章分类这种需求,如果分类不确定,级别不确定,有可能动态调整,数据量和访问量又比较大,该怎么去设计?
在子类表中引用父类的id。
15.什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?
实体表就是对应得实体类创建的表,可以被实例化。
关系表就是处理两张表之间关系的表。
16.什么是外键,用处是什么,为什么不建议使用外键做关联?
两个表,一个主表,一个从表,主表的主键,放到从表的表格内,然后这个从表和主表就通过外键关联了,这个从表的这个一列和主键有关系的数据,就是从表的外键。
外键的作用:
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。
17.什么是数据库范式,是否应该严格遵守范式,什么情况下应该不遵守范式?
https://www.zhihu.com/question/24696366/answer/29189700
遵从范式的好处是冗余数据会很少,节约了存储空间,增删改查的时候能够确认数据数是唯一的,只需要对一处做修改。
明天计划的事情:回顾任务三。预习任务四
评论