发表于: 2019-12-31 14:37:43

2 1082


啥也不说就是干!!!

今天完成的事情:

1、Nginx 配置图片访问

在 nginx.conf 中配置,对 imgaes 目录名进行拦截

location ~.*(css|js|images|html).+ { 

    root /opt/static;

    expires 5m;  //页面缓存5分钟

}

在 opt/static 路径下创建 images 文件夹,并且上传一些测试图片

然后重启 Nginx

nginx -s reload

在浏览器中访问 http:f0t1.top/images/1.jpg

可以看到图片可以正常访问


2、关于 Throwable、Exception、Error

Throwable 类是 Java 语言中所有错误或异常的父类。它有两个子类Exception 和 Error

1) Exception 指出了合理的应用程序想要捕获的条件,有些异常在编写程序时无法预料,如中断异常,非法存取异常。为了保证程序的健壮性,Java要求必须对这些可能出现的异常进行捕获,并对其进行处理

常见的 RuntimeException、IOException、NullPointException、ArithmeticException 等等

2)Error 指出了合理的应用程序不应该视图捕获的严重问题,大多数这样的错误都是异常条件。其中包括了一些扬中的程序不能处理的错误类,例如

内存溢出:OutOfMemoryError

堆栈溢出:StackOverflowError

这些由系统进行处理


3、深度思考

1.什么是代码生成,mybatis generator代码生成是怎么实现的,还有什么办法可以生成代码? 

之前日报有,略过

2.Mysql的一般而言应该配置多大的内存, 多大的硬盘 ,多大的连接数?  

mysql的最大连接数默认是100, 最大可以达到16384,多大硬盘根据具体情况吧

3.在端到端的请求当中,建立Http连接需要多久,Model通过JSP转成Json需要多久,Nginx调用Resin需要多久,Service访问DB需要多久,一个Sql语句执行的时间是多久。

具体情况还是需要记录日志去分析

4.什么是Sql注入,应该怎么解决?对于未做SQL注入防范的程序,你可以直接通过调用接口删掉表吗?  

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

如何防止sql注入

(1) 采用PreparedStatement来避免sql注入,会自动对用户填写的数据进行验证(简单有效) 

sql注入只对sql语句的准备(编译)过程有破坏作用 

而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理, 

而不再对sql语句进行解析,准备,因此也就避免了sql注入问题. 

(2) 使用正则表达式过滤传入的参数(典型的SQL 注入攻击的正则表达式 )

(3) 字符串过滤,敏感词过滤


5.在内存里拼装数据会节省时间吗?如果不能,为什么要选择单表查询,而不是直接拼装成Sql语句。  

内存里拼装数据不会节省时间, 拼装数据可以节省数据库性能,降低了高并发时资源消耗和业务之间的耦合。

单表查询速度更快,同时也利于分布式架构中的分库分表

6.为什么一般而言,不允许使用连表查询,不允许使用复杂的Group By等语句,为什么不允许使用存储过程?  

连表查询优点:

1)开发效率高,仅仅需要一个 sql 语句就能完成查询工作,把部分的业务逻辑放到了 sql 中

20查询效率高,只需要一次数据库连接,连接效率高

缺点:

1)缓存效率低,单据查询缓存可用性高,联合查询效率相比较低

2)由于联合查询速度比单个查询耗时多,因此在查询中会增加其他数据库连接(客户端)的锁竞争关系

复杂的 Group by 语句会影响查询速度,接口耗时比较严重的话,影响用户体验,同时还会影响服务器的性能

7.为什么响应时间一般不允许超过200MS,怎么查看一个请求从发起到结束,耗费在什么地方了?  

一个请求不超过 200ms 不会影响正常的用户体验,可能耗时在数据库查询,复杂的业务逻辑,网络延迟等

8.为什么要自测,仅仅使用Postman来测试足够吗?什么是本地测试,什么是在开发环境测试?在开发过程中,应该每天部署代码到开发环境吗,为什么?  

不够
开发环境:开发环境是专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。
测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。
生产环境:是值正式提供对外服务的,一般会关掉错误报告,打开错误日志。

三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境

9.保存图片有几种方式?什么样的情景下应该使用哪一种?

保存在数据库,保存在硬盘

如果图片比较小,可以选择二进制直接存储在数据库中

如果过大就要保存在硬盘中,数据库对应的字段是链接或者服务器相对路径

10.为什么要先写单元测试?单元测试应该包括哪些?在正式打包的过程中,什么样的单元测试应该被屏蔽?在Maven里用什么方法可以跳过单元测试,单元测试应该被跳过吗。  

1) 单元测试可以先测一下自己的代码有没有错误,哪里还可以进行修改.

 2) 单元测试包dao层,servcie层的每个方法,用例要丰富,争取覆盖全部

 3) 有问题的单元测试应该被屏蔽.

 4) 在maven中可以关闭test和加依赖去跳过单元测试


11.为什么提供假数据的时候要求,直接Controller接收请求,在JSP中写死数据返回以用做假数据?为什么提供假数据的时候要求数据完整,有分页尽可能给分页,数据尽可能真实?  

为了前端更好的展示,去模拟真实的场景

12.为什么要写假数据,前后端联调的时候,应该什么时候商定接口文档,接口文档应该谁来维护,如果不提供假数据,会发生什么问题?  

前端动态页面的开发需要依赖于后端提供的数据,项目开发初期商定,前后端一起维护

不提供假数据,前端无法进一步开发,影响开发进度,不过客户端也可以使用 easymock 之类的工具模拟假数据

13.接口应该怎么定义?一个页面应该只对应一个接口吗?还是一个实体对应一个接口,让前端去组装数据?两者的使用场景是什么?  

一个页面可以请求多个接口

尽量一个实体类对应一个接口,当数据量


14.多层分类应该怎么设计表结构,分别有什么问题?像文章分类这种需求,如果分类不确定,级别不确定,有可能动态调整,数据量和访问量又比较大,该怎么去设计?  点击

暂时不知道解决方案

15.什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?  

比如老师表和学生表时多对多关系,这时候需要关系表进行连接。在关系表中创建联合主键,再分别关联两个表的主键

一堆多:在多的那张表创建外键

16.什么是外键,用处是什么,为什么不建议使用外键做关联?

外键是一个表中的字段作为另外一张表关联的字段,使用外键不利于分布式架构中的分库分表

17.什么是数据库范式,是否应该严格遵守范式,什么情况下应该不遵守范式? 

之前日志中有,略过

明天计划的事情:

开始任务四
遇到的问题:



返回列表 返回列表
评论

    分享到