发表于: 2019-12-31 14:37:43
2 1077
啥也不说就是干!!!
今天完成的事情:
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层的每个方法,用例要丰富,争取覆盖全部
4) 在maven中可以关闭test和加依赖去跳过单元测试
11.为什么提供假数据的时候要求,直接Controller接收请求,在JSP中写死数据返回以用做假数据?为什么提供假数据的时候要求数据完整,有分页尽可能给分页,数据尽可能真实?
为了前端更好的展示,去模拟真实的场景
12.为什么要写假数据,前后端联调的时候,应该什么时候商定接口文档,接口文档应该谁来维护,如果不提供假数据,会发生什么问题?
不提供假数据,前端无法进一步开发,影响开发进度,不过客户端也可以使用 easymock 之类的工具模拟假数据
13.接口应该怎么定义?一个页面应该只对应一个接口吗?还是一个实体对应一个接口,让前端去组装数据?两者的使用场景是什么?
一个页面可以请求多个接口
尽量一个实体类对应一个接口,当数据量
14.多层分类应该怎么设计表结构,分别有什么问题?像文章分类这种需求,如果分类不确定,级别不确定,有可能动态调整,数据量和访问量又比较大,该怎么去设计? 点击
暂时不知道解决方案
15.什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?
一堆多:在多的那张表创建外键
16.什么是外键,用处是什么,为什么不建议使用外键做关联?
外键是一个表中的字段作为另外一张表关联的字段,使用外键不利于分布式架构中的分库分表
17.什么是数据库范式,是否应该严格遵守范式,什么情况下应该不遵守范式?
之前日志中有,略过
明天计划的事情:
开始任务四
遇到的问题:
无
评论