发表于: 2021-04-23 22:31:40
1 1122
一,今天完成的事情
任务二深度思考1-20
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
1,一般M是指业务模型,V是指用户界面,C则是控制器。MVC不是一种技术,而是一种理念。
2,Spring全家桶中有springMVC是spring的一个子框架。它拥有spring的特性,如依赖注入。C:前端控制器:DispatcherServlet。寻找调用控制器。
M:由C调用模型处理业务。再返回给DispatcherServlet,才能在下一步找合适的view。
V:视图解析器:ViewResolver。
3,Spring MVC 的工作流程如下:
客户端请求提交到 DispatcherServlet。
由 DispatcherServlet 控制器寻找一个或多个 HandlerMapping,找到处理请求的 Controller。
DispatcherServlet 将请求提交到 Controller。
Controller 调用业务逻辑处理后返回 ModelAndView。
DispatcherServlet 寻找一个或多个 ViewResolver 视图解析器,找到 ModelAndView 指定的视图。
视图负责将结果显示到客户端。
;
Spring MVC 有4 个 Spring MVC 接口,即 DispatcherServlet、HandlerMapping、Controller 和 ViewResolver。
Spring MVC 所有的请求都经过 DispatcherServlet 来统一分发,在 DispatcherServlet 将请求分发给 Controller 之前需要借助 Spring MVC 提供的 HandlerMapping 定位到具体的 Controller。
HandlerMapping 接口负责完成客户请求到 Controller 映射。
Controller 接口将处理用户请求,这和 Java Servlet 扮演的角色是一致的。一旦 Controller 处理完用户请求,将返回 ModelAndView 对象给 DispatcherServlet 前端控制器,ModelAndView 中包含了模型(Model)和视图(View)。
总结也是回答:“Spring里对应的MVC分别是什么”
总之,DispatcherServlet 是整个 Web 应用的控制器;从微观考虑,Controller 是单个 Http 请求处理过程中的控制器,而 ModelAndView 是 Http 请求过程中返回的模型(Model)和视图(View)。
ViewResolver 接口(视图解析器)在 Web 应用中负责查找 View 对象,从而将相应结果渲染给客户。
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
1,参数校验一般指对外部提交的数据进行完整性、合法性的校验,以保证系统的健壮性。
2,前端和后端一般需要分别做校验,追求用户体验的情况下,二者都是需要的。
。有一部分系统,比如内部系统可能只对其中一个做校验,不存在分别做校验的情况。前端的参数校验是为了用户体验,后端的参数校验是为了安全。从必要的角度来说,前端可以不做验证,但是后端的验证是必须做的。
如果仅有前端验证,没有后端验证。在前后端分离的情况下,用户可以绕过前端,直接访问后端接口。那么前端验证也就失效了。也就等于没有对数据的业务验证了。
同时,如果仅有前端验证,部分验证功能不好满足。比如判断数据库是否存在相同的用户名,此时需要查询数据库才能判断。如果前端不同后端交互,那么是不清楚用户名是否重复的。
3,优点是增加安全性。可能提高效率并且节约系统开销:用户在提交数据前能知道绝对不合适的数据,进行更改;避免提交数据不合适,而浪费资源。
缺点:增加代码量。
4,在真实项目中,各个模块都需要做验证,防止出错。增加安全性,节约资源。
5,关键校验在服务端比附,需要保证数据的准确性
目前较常用的分页实现办法有两种:
1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示。数据量小。
List<Student> list(int start, int count);
<!-- 查询从start位置开始的count条数据-->
<select id="list" resultMap="student">
SELECT * FROM student ORDER BY student_id desc limit #{param1}, #{param2}
</select>
2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数据并显示。数据量大。列表数据都需要做好分页。越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。子查询,JOIN,MYSQL的FOUND_ROWS()函数等灵活使用能帮助数据量大的时候分页。
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
1,“内网IP+端口”和“外网IP+端口”都是IP访问。域名访问和ip访问区别有:
1)ip访问对应某一台确定的服务器;
2)域名访问相当于在ip访问的基础上,做了一个反向代理的中间功能。例如:Bing,很多人会同时使用,如果使用的是同一台服务器的话,服务器估计会扛不住,如果访问的是域名,中间的反向代理,可以将用户反向代理到不同的服务器上,减轻服务器压力。
2,内网、外网访问需要知道端口,它们访问的区别是:
1)ip地址设置的区别,一般内网有自己的IP号段,也不会和互联网号段冲突,内网就是从路由器以下开始的,而且IP都是以192开头的IP。一般是不能拥有外网IP的,因为个人或者小群体用外网也是一种资源浪费,所以一般都是通过内网去上网的,外网Ip一般都是用于公司企业,学校等机构的。
2)内网电脑连接外网需要一个统一出口,可能被限制一些不必要的访问,而外网就不经路由器或交换机就可以上网的网络,可以直接被外界所访问到,无需经如何设备,直接连接电脑。
3)内网相对外网会多一层安全防火墙(外网路由),相对来说抵御来自外网的攻击能力会好一些;内网不足之处在于,可能会遭到来自内部的攻击;因为要共享带宽,相对网速可能会慢些(终端越多越慢)。
4)内网的ip可以经常换,可以自己定义规则;而外网的ip一般都是固定的,你装好宽带的时候,你的ip就固定下来了。
3,什么时候用内网?什么时候用外网IP,什么时候用域名访问?
1)域名好记忆,一般访问使用域名。多站点对应同一个ip地址时必须使用域名访问:只输入ip地址,浏览器不知道应该访问哪一个站点,不能够使用ip地址去访问某些站点。
2)内网访问一般在较小范围内使用。比如在企业或者家庭用户搭建的网络为私网,里面一般都是用私网IP,所以使用内网。
3)访问公共网络,可以使用外网IP。
3,内网在同一个网关,更安全,速率不受外网的硬件等条件限制。
5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
1,内网IP和外网IP的区别
外网IP是全世界唯一的IP地址,仅分配给一个网络设备。而内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的,而内网的IP地址每个人的都不一样,Internet上的用户也无法直接访问到内网用户。如果用小区和楼栋举例,外网IP就是标示了您在整个互联网上的地址,就相当于小区的地址,而内网IP呢,就是标识着您在局域网里面的地址,也就是小区内的几栋几楼几号房子。
2,一般用外网IP检测。虽然有的防火墙也可以设置内网IP访问。
6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
1,测试工具有ab, restClient, postman等。
2,
1)curl
GET/POST/PUT/DELETE使用方式
-X 后面加 http method,
curl -X GET “http://www.cccc.com/api/users”
curl -X POST “http://www.cccc.com/api/users”
curl -X PUT “http://www.cccc.com/api/users”
curl -X DELETE “http://www.cccc.com/api/users”
2)wget
wget [参数] [URL地址]
Get命令:wget “http://www.ccc.com”
POST命令: wget --post-data ‘user=foo&password=ccc’ http://www.ccc.com
PUT命令:wget --method=PUT --body-data=<STRING>
DELETE命令:wget --user=xxx --password=xxx --xxx --method=DELETE
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
1,一款接口测试工具.
2,用户在开发或者调试网络程序或者是网页B/S模式的程序,需要一些方法来跟踪网页请求的。Postman不仅可以调试简单的css、html、脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请求!Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。postman适用于不同的操作系统.
3,SoapUI;Jmeter
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
1,可以使用RAP,FIS3等。如果使用RAP,RAP支持自动生成假数据,只要使用RAP编写接口文档,RAP可以自动生成假数据。在RAP中我们还可以使用@mock指定生成的假数据的格式。
2,后端写接口,约定接口顺序,后端提供 api,doc 给前端就可以了。前后端分离为了同步开发吗。前端不等后端开发好后再开发。
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
1,需要.所有的从Service返回的结果都要打日志。日志是我们了解程序运行,问题追踪的工具,快速的定位到问题所在。
2,工程要求决定日志要求。
可以选择打印内容如是否为空,具体返回的数据的值是什么。某些信息可以不打印。关键业务的数据变更需要打印。
10.对Service返回的结果是否要判空,为什么?
一般需要对Service返回的结果进行判空。作为输入参数必须要判空。
作为返回结果,如果这个结果可以为空,那么就不用判断,直接返回,如果这个结果不能为空,那么还要继续判断,并要处理异常情况。
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
1,和处理其它异常的方式一样。针对预期可能发生的异常(检查类型(checked)),在代码手动处理异常可以try/catch捕获,可以向上抛出,可以声明。针对运行时异常,可能通过规范代码质量、在系统测试时详细测试等排除运行时异常。
但是,最好是在controller制定统一的异常捕获与处理方案。使用HandlerExceptionResolver。HandlerExceptionResolver是一个异常处理接口,实现它的类在spring配置文件中注册后就能捕获Controller层抛出的所有异常,我们就是基于此来实现统一Web异常的处理和返回结果的配置。
2,大段的Try Catch 坏处
1)try catch的代价比较大。相对于判断返回值,抛出异常到捕获,需要更多的cpu指令和代码。
2)Java的异常机制是由JVM控制的,业务逻辑复杂的情况下,会影响controller的执行效率。
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
1,根据nginx的access_log查看接口请求时间
2,根据业务要求定制。一般60s内。
3,并发:同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行,并发的两种关系是同步和互斥;
单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。单线程避免了多线程的频繁上下文切换问题。
4,台机器可抗10万并发。一般3万单机没问题。
5,Tomcat8在操作系统没有装arp库支持时默认工作在NIO模式,默认支持的最大并发连接数是10000。
6,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端。
负载均衡:将相同的应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
1,客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中。
2,应该通过域名访问。
如果用IP+端口号的方式访问,会有以下后果
1)非常难记,域名是对人友好的有含义的字符,而ip都是4组基本无规律的数字,对人不友好。
2) 如果服务器中的资源发生迁移,那么原先的服务器ip地址就无效了,必须要重新使用新的ip地址访问服务器,用户还要再去记忆一遍IP地址。但是如果是使用域名则不存在这个问题。
3) 不安全,通过ip直接访问服务器是非常危险的,相当于将整个服务器的大门向所有人打开,造成的后果是别有用心的人能够非常容易攻击到服务器。域名访问 就能杜绝这种情况,用户是不知道服务器的IP地址的,而且就算有人通过域名恶意攻击,直接和用户交互的代理服务器也可以保护内容服务器。这样就算代理服务器被攻破,损失也相对较小。
3,域名解析过程。
如果想要访问站点: www.ccc.org , 此客户本地的域名服务器是 dns.company.com , 一个根域名服务器是 ns.inter.net ,所要访问的网站的域名服务器是 dns.ccc.org ,域名解析的过程如下所示:
客户机发出请求解析域名 www.ccc.org 的报文;
本地的域名服务器收到请求后,查询本地缓存,假设没有该纪录,则本地域名服务器 dns.company.com 则向根域名服务器 ns.inter.net 发出请求解析域名 www.ccc.org ;
根 域名服务器 ns.inter.net 收到请求后查询本地记录得到如下结果:ccc.org NS dns.ccc.org (表示 ccc.org 域中的域名服务器为:dns.ccc.org ),同时给出 dns.ccc.org 的地址,并将结果返回给域名服务器 dns.company.com ;
域名服务器 dns.company.com 收到回应后,再发出请求解析域名 www.ccc.org 的报文;
域 名服务器 dns.ccc.org 收到请求后,开始查询本地的记录,找到如下一条记录: www.ccc.org A 211.120.3.12 (表示 ccc.org 域中域名服务器 dns.ccc.org 的IP地址为:211.120.3.12),并将结果返回给客户本地域名服务器 dns.company.com ;
客户本地域名服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。
这样就完成了一次域名解析过程。
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
1,端口是设备与外界通讯交流的出口。按照是否可见,可以分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
2,netstat -anp |grep 端口号 ;查看端口是否被占用以3306为例,netstat -anp |grep 3306监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用netstat -nultp(此处不用加端口号) ;查看当前所有已经使用的端口情况 例子:如何查看tomcat的端口号先 ps -ef|grep tomcat 查看进程号;再 netstat -nultp 查看端口使用情况,如何根据进程号找对应端口8005--关闭tomcat进程所用,8009--反向代理tomcat用到的端口
3,先查看是否安装了防火墙:rpm -qa | grep iptables
vi /etc/sysconfig/iptables 打开防火墙配置文件,查看被配置拦截的端口
4,linux上直接用telnet localhost 3306
查看telnet server是否安装:rpm -qa | grep telnet-server
如果没有查询到相关信息,则安装:yum install telnet-server
查看telnet是否安装
rpm -qa | grep telnet
如果没有查询到相关信息,则安装:yum install telnet
查看xinetd(eXtended InterNET services daemon超级守护进程)是否安装:rpm -qa | grep xinetd
如果没有查询到相关信息,则安装:yum install xinetd
配置并启动Telnet,xinetd和telnet必须设置开机启动,否则无法启动Telnet服务
systemctl enable xinetd.service
systemctl enable telnet.socket
启动服务:
systemctl start telnet.socket
systemctl start xinetd
15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
1,HTTP:80:www服务。
一般网站服务器,只需要开通80(http) 443(https),(ssh端口默认22,,建议修改)
ping命令没有端口,因为ICMP 协议没有到tcp层,仅走ip层,由于IP层协议是一种点对点的协议,而非端对端的协议,它提供无连接的数据报服务,没有端口的概念。
其它:
DHCP:服务器端的端口号是67
DHCP:客户机端的端口号是68
POP3:POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110。
SMTP: 端口号是25。邮件是否能顺利到达目的地。
Telnet:端口号是23。Telnet是一种最老的Internet应用,起源于ARPNET。它的名字是“电信网络协议(Telecommunication Network Protocol)”的缩写。
FTP:FTP使用的端口有20和21。20端口用于数据传输,21端口用于控制信令的传输,控制信息和数据能够同时传输,这是FTP的特殊这处。FTP采用的是TCP连接。
TFTP:端口号69,使用的是UDP的连接。
DNS:53,名称服务
2,可以多个服务共用同一个WEB端口。也可以不同的域名对应不同端口不同内容。使用Nginx反向代理配置,达到不同应用需要分别绑定不同的端口号的目的。
3,网站端口默认80,未在修真院域名输入特定端口。
16.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息?
1,命令介绍
top:查看服务器整体的性能;(uptime)
free:查看内存使用的情况; free -m
ping:查看网络连通性,与Windows类似
netstat:查看端口号,一般都不使用这个命令,一般情况下都使用ps命令来查看
vmstat:查看CPU的性能;vmstat -n 2 3
iostat:查看磁盘读取速度; iostat -d 2 3(需要sysstat包);
2,CPU占用率:CPU使用率其实就是你运行的程序占用的CPU资源,表示你的机器在某个时间点的运行程序的情况。使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少。
内存占用率:内存占用率指的是此进程所开销的内存。
3,发生异常会产生警报信息。可以自己设定异常定义。时长,占用率都可以设置。
17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
1,分析服务,尤其分析瓶颈。知道在哪里提升。考察一个服务器的性能,当服务器负载增高时,往往会伴随着响应时间的增长。
2,不太可能:前端。
网络传输延迟:可以测试。
最可能:服务器响应时间。
Nginx记录它后面的Tomcat/resin/jetty 等服务器的时间,再排查服务器为什么耗费时间长。可以设置时间阈值记录日志。平时统计时间。数据缓存情况,取缓存中的数据时长,正常情况下应该几MS。线上有哪几台服务器,IP是多少,硬盘是多大,CPU是几核的,内存是多大,常用负载是多少,IO有多少,每天增长的日志是多少,DB里的数据库大小是多大,每天的增量是多少,系统中最慢的请求是什么,每天会访问多少次,最快的请求是什么,每天应该访问多少次,每次访问的时候正常应该是在多少MS内返回,一次会取多少条数据,分解到哪几个Service,每个Service的不同时间请求是多少,有多少穿透DB的次数。
外网带宽占用情况,访问太多很容易不够用。
18.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?
1,都有access.log文件查看访问时间。
2,AOP可以自动记录Controller的时间和DB时间。
3,通过around方式,截取DB访问前后的时间,controller访问前后时间。取差值。选择Controller和ServiceImpl的类前后环绕。
4,访问时间在10ms内。
19.怎么判断WEB容器是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的。
1,是否收到了一个Http请求,可以通过分析WAF日志、Access Log日志、或者系统命令调用日志等来分析。
2,访问日志(access_log)。 通过访问日志,可以知晓用户的地址,网站的哪些部分最受欢迎,用户的浏览时间,对大多数用户用的的浏览器做出针对性优化。
3,创建log_format语句
vi conf/nginx.conf
#vi编辑nginx主配置文件,添加标签为main的log_format格式(http标签内,在所有的server标签内可以调用)
比如:#access_log logs/access.log main;
4,包含字段
log_format格式变量:
$remote_addr #记录访问网站的客户端地址
$remote_user #远程客户端用户名
$time_local #记录访问时间与时区
$request #用户的http请求起始行信息
$status #http状态码,记录请求返回的状态码,例如:200、301、404等
$body_bytes_sent #服务器发送给客户端的响应body字节数
$http_referer #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。
$http_user_agent #记录客户端访问信息,例如:浏览器、手机客户端等
$http_x_forwarded_for #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置
20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
1,部署文件集中在一起利于管理。data是部署网站的根目录平时用的名字。
2,系统盘是随云服务器一起创建的,系统盘是通过镜像来为云服务器安装操作系统的,系统盘只能有1个;数据盘是用来存储数据的,数据盘可以单独创建,可以多个。系统盘必须创建(最低20G),数据盘非必须。
3,数据盘可以灵活挂载,和系统盘可以隔离,系统有问题调试,不会损害数据。保证数据盘数据安全,能方便动态扩容数据。
二,今天问题
无
三,今天的收获
挂载。MVC。数据校验。分析系统,分析时间。
四,明天的计划
任务二深度思考21-40
评论