发表于: 2020-07-11 19:18:30
1 1193
今天做了什么:
任务二深度思考1~14.
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
mvc:是一种软件工程的架构模式,把软件系统分为模型(model),视图(view),控制器(controller)。
view:视图层,直接面对用户,是程序的外壳。
controller:负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。
model层:程序需要操作的数据和信息。
spring MVC:M(夹带事务处理的模型层,包含bean实体类,dao数据处理层,service业务层)V(View视图层,SpringMVC把最后要展示给用户的数据封装到View中)
C(controller控制层,是m层和v的中间层,负责接收v层的请求反映给m层给出相对应的数据)
用户发送请求->前端控制器接受后根据domain与参数中间的一段选择并传递给控制器->控制器收集参数验证后开始处理业务。
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
参数校验就是负责检验用户输入参数的合法和正确,前端和后端需要分别做校验,
数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中.
Validation:参数校验
好处:保证用户输入的正确性,更重要的是防止攻击。
坏处:服务器端验证有提交这一步,运行速度上比简单的JavaScript浏览器验证要慢,涉及到数据库的复杂逻辑验证操作起来比较复杂。
在真实项目中必须要使用Validation。
分页查询分为物理分页和逻辑分页:物理分页先根据业务需求直接使用limit语句查出刚够的数据,逻辑分页是从数据库中查出全部的数据再根据业务需要进行拆分。
分页的基本显示:
1、页面跳转到首页尾页或自定义
2、上一页,下一页
3、记录总数
4、总页数
5、当前页
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
内网ip+端口:局域网,用于内部的文件传输或者互相访问。
外网ip+端口:公网,提供服务给所有人访问
域名:一个方便记忆的字符串,本质还是需要通过dns翻译成对应的ip地址。
什么时候使用
内网:在局域网上进行测试,nginx 转发到局域网应用服务器,局域网分享资料传输文件。
外网:需要暴露服务到互联网的时候。
5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
内网ip访问的是局域网,外网ip访问的是互联网。防火墙屏蔽分为本地屏蔽和国家网络级屏蔽(也就是国家与国家之间的网络屏蔽墙),
测试国内的ip用内网ip检测,想测试国家级防火墙用外网ip检测
6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
curl -x +Rest风格的url,可以发送四种请求。
curl -X DELETE url
curl -X PUT url
Wget 只找到get和post请求。
Wget post url
Wget url
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
网页调试与发送 http 请求的应用,可以用来测试假数据。
因为它可以模拟各种网页请求,所以用它来测试接口。
其他工具:
Fiddler soapui jmeter python
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
使用spirngmvc的@ResponseBody注解+jackson包可以转换各种类型的对象成json假数据。
方便前后端并行开发:
页面基本上与后端程序员去隔离,前端开发与后端的唯一联系就是接口,交换的东西就是json数据。
这时,在后端程序员还没有准备好json数据的时候,我们为了让页面上有一些内容可以显示,所以我们需要搞一些假的数据,让页面显得不那么的空。
还有第二个原因就是,通过假数据,去验证页面的逻辑,看看这种数据的格式,是不是适应页面显示的要求。
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
需要。
在Service层中,涉及到大量业务逻辑操作,我们往往就需要在一个业务操作完成后(不管成败或失败),生成一条日志。
日志内容:操作人 动作 操作对象 操作内容 操作前内容 操作后内容 ip 操作时间。
遇到问题方便排查,做出了错误操作也可以恢复。
需要判空。
因为当请求量很大的时候,难免会返回一切非法的空数据,java判断这个结果为空可以提示垃圾回收器及时回收。
能够减少程序占用内存情况。
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
应该在Controller层里进行数据校验,可以解决掉很多的service层的错误。
大段的try Catch捕获到具体的异常会非常慢,增大运行开销,在大段的try Catch里面也许有一段代码发生更严重的错误让程序直接崩盘,而其他的代码段的异常无法捕获到。
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
在配置文件里的http里配置下面的信息:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_body "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr $upstream_response_time $request_time ';
access_log logs/access.log main;
官网描述:request processing time in seconds with a milliseconds resolution; time elapsed between the first bytes were rea d from the client and the log write after the last bytes were sent to the client 。
指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出
响应数据时间。
upstream_response_time
官网描述:keeps times of responses obtained from upstream servers; times are kept in seconds with a milliseconds resolution. Several response times are separated by commas and colons like addresses in the $upstream_addr variable
是指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间。
50ms以下是合理的。
最高支持5w并发。
Tomcat 在 1w 左右。
在 tomcat 前配置 nginx 原因:
1,配置动静分离减轻tomcat 的压力
2,方便实现负载均衡
3,如果应用服务器挂了,nginx 可以定向到错误页
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中。
应该。
如果用IP+端口号的方式访问,会有以下后果
首先,非常难记,域名是对人友好的有含义的字符,而ip都是4组基本无规律的数字,对人不友好。
其次, 如果服务器中的资源发生迁移,那么原先的服务器ip地址就无效了,必须要重新使用新的ip地址访问服务器,用户还要再去记忆一遍IP地址。但是如果是使用域名则不存在这个问题。
最后, 不安全,通过ip直接访问服务器是非常危险的,相当于将整个服务器的大门向所有人打开,造成的后果是别有用心的人能够非常容易攻击到服务器。域名访问 就能杜绝这种情况,用户是不知道服务器的IP地址的,而且就算有人通过域名恶意攻击,直接和用户交互的代理服务器也可以保护内容服务器。这样就算代理服务器被攻破,损失也相对较小。
域名解析过程,该过程如下图:
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
端口的含义
在 Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。
我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同时运行的进程中的哪一个呢?
端口机制便由此被引入进来。
本地操作系统会给那些有需求的进程分配协议端口 (protocal port,即我们常说的端口),每个协议端口由一个正整数标识,如:80,139,445,等等。
遇到的问题:无
明天的计划:请假一天。
评论