发表于: 2019-12-26 23:33:14
1 1231
今天完成的事情:
任务2深度思考的前26个
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
mvc是一种设计模式,即model-view-controller
mvc图示:

SpringMVC是Spring框架的一个模块, 是基于mvc的webframework模块。
springmvc流程图示:

这是spring mvc的完整流程,全部依靠前端控制器控制
1.前端控制器来获取请求
2.前端控制器转发到处理器映射器获取执行链
3.前端控制器转发执行链给处理适配器处理执行链,并返回ModelAndView对象
4.前端控制器请求视图解析器解析 ModelAndView对象 返回视图
5.渲染视图 返回响应结果
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
顾名思义,就是对用户传递的参数进行校验,通常
前端和后端都需要,前端用来提示用户输入数据的正确性
后端是用来保证安全,防止有人跳过前端验证,用其他手段向数据库注入脏数据,是另一道的保障。
Validation 分为 hibernate validation 和 spring validation
好处: 可以做防止用户输入错误的数据
可以自定义返回提示信息
spring可以对错误信息进行分组
缺点:增加校验步骤,可能会降低代码的性能,增加代码运行时间。
真实项目可以用
3.SpringMVC分页查询和显示
分页查询主要可以用两种方式实现
第1种是用SQL limit分页语句
select * from 表名 limit #{pageNow},#{pageSize}
pageNow代表从多少条数据开始查询,pageSize代表多少条数据分为一页
比如 select * from user limt 0 ,10 代表从0条数据开始查询,所有数据没10条分为一页
然后在jsp页面引入c标签,对传入的数据进行foreach循环
第2种是直接使用Mybatis的 pageHelper插件,比第一种更快捷。
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
外网ip全球只有一个, 是可以被外界访问的
使用场景:需要与外界交互访问服务器时
内网ip是局域网内的ip,只能内部间互相访问,有很多个
使用场景:内网是在公司内部,需要保密的环境时使用
域名只是指向ip的一种映射,可以配置域名隐藏外网ip,而且方便好记。
5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
内网和外网的ip区别就是离开局域网是否还能被外界访问
接口是否被防火墙屏蔽的时,应该用外网ip检测测试接口。
6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
wget 和 curl
但wget更多用来下载,通常是使用curl
get请求
wget:wget http://www.baidu.com
curl: curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i “http://www.baidu.com” 显示全部信息
curl -l “http://www.baidu.com” 只显示头部信息
curl -v “http://www.baidu.com” 显示get请求全过程解析
post请求
wget (--post-data参数实现):wget --post-data "id=x&name=x" http://www.baidu.com
curl(-d参数):curl -d "id=x&name=x" http://www.baidu.com
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
postman是测试一个接口的工具,有客户端和chrom插件。
无论前端,后端,测试人员都可以使用postman测试接口
可以显示接口相应时间,灵活储存一个项目的所有接口,方便使用。
除了postman 还有dhc
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
json-taglib可以直接生成假数据,但需要自己在jsp页面 定义数据内容
还可以在controller某个方法体内 使用实体类的set方法生成模拟数据
在真实的项目中需要前后端同时开发,前端开发的动态页面需要后端给出数据,因此前后端需要共同定义接口文档,确定接口返回的数据结构,数据类型,对象名称等内容
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
需要打印日志,打印返回的结果,这样可以判断数据是否返回了数据。
10.对Service返回的结果是否要判空,为什么?
要进行判空,不然视图层没有数据,无法显示
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
大段try catch的坏处:
(1)try catch的代价比较大。相对于判断返回值,抛出异常到捕获,需要更多的cpu指令和代码
(2)Java的异常机制是由JVM控制的,业务逻辑复杂的情况下,会影响controller的执行效率
应该主动抛出异常,统一交给ControllerAdvice处理
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
查看nginx的access.log日志,合理的时间不太清楚
单线程是一个进程访问结束后,才能运行下一个进程。
并发1000就是可以同时处理1000个请求(也可以理解为同时处理1000个进程)
nginx和tomcat支持多少不清楚
tomcat前配置一个nginx,是为了可以实现nginx的负载均衡。 当tomcat甲 顶不住时,再增加一个tomcat乙,来分担用户的请求。
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中
如图:

应该通过域名访问
1.域名方便好记,而且可以多个域名对应一个ip
2.可以隐藏服务器的ip地址
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
端口,主要分为物理端口和逻辑端口
我们一般说的都是逻辑端口,用于区分不同的服务。
因为网络中一台主机只有一个IP,但是一个主机可以提供多个服务,端口号就用于区分一个主机上的不同服务。
一个IP地址的端口通过16bit进行编号,最多可以有65536个端口,标识是从0~65535。
端口号分为公认端口(0~1023)、注册端口(1024~49151)和动态端口(49152~65535)。我们自己的服务一般都绑定在注册端口上。
判断端口被占用情况,linux服务器输入 netstat -anp|grep 端口号 即可查看
判断端口是否被防火墙拦截。输入命令 telnet ip 端口号
15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
16.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息?
TOP:查看服务器整体的性能,可以实时监测进程,但只能显示某个特定时间点,适合观察频繁进入进出的内存进程。
vmstat:查看CPU的性能;vmstat -n 2 3
free:查看内存使用的情况; free -m
iostat:查看磁盘读取速度; iostat -d 2 3(需要sysstat包);
ping:查看网络连通性,与Windows类似
netstat:查看端口号,一般都不使用这个命令,一般情况下都使用ps命令来查看
cpu占用率和内存使用率,就是程序占了多少cpu和内存
某个进程占用cpu内存过高,或者某个程序短时间内占用了大量内存,整体程序占用cpu和内存过高,都应该法出警报信息。
17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
方便找到是哪个接口返回数据慢,以便于针对性的性能优化
请求很慢原因
个人理解: web容器的配置 服务器的性能 数据库查询的优化(比如有无索引) controller层是否有大量的类似try/catch等占用性能的代码 然后去看web容器日志 或者项目代码生成的日志
18.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?
19.怎么判断WEB容器是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的。
查看web容器access.log日志,如果收到请求,日志会有记录
access.log是记录web容器接收请求的日志,里面的字段及含义如下:

resin 在conf目录下的 cluter-default.xml修改

tomcat需要 修改tomcat bin目录下的 server.xml文件里修改
20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
data盘就像windows的D盘,是数据盘,存储数据最好要放在这里,防止占用系统盘空间
而系统盘像windows的C盘 只放系统数据
21.常用的主流数据库有哪些,Mysql有几种安装方式?
MYSQL 小型关系型数据库管理系统
SQL Server 大型关系型数据库系统
oracle数据库 关系数据库管理系统
linux服务器 Mysql安装方式
1.rpm下载完直接安装
2.tar.gz下载完需要解压缩
22.有哪些常用的云服务器公司,Linux服务器和Windows服务器的差别是什么,Linux有哪些主流的版本,不同版本之间的差别在哪里?
腾讯 阿里 金山 华为
1.linux开源免费,性价比高
2.linux占用资源少,性能搞
3.linux漏洞病毒稍微比windows少很多,安全性会好
4.linux没有可视化界面,只能通过命令行使用
主流版本:CentOS (我现在用的) 最常用,最有名的发行版
Arch Linux(独立开放源代码发行版) Manjaro (简单易用)
23.什么是ssh?如何在linux服务器上从网站下载文件?
ssh是一套协议标准,用来实现两台机器间的安全登录及安全的数据传送,其保证数据安全的原理是非对称加密。

流程详解:
1.客户端发起链接请求
1.客户端发起链接请求
---这是首次建立链接最容易出问题的环节,万一客户端访问服务器请求被坏人拦截,返回一个假的服务器公匙,就不安全了
2.服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
3.客户端生成密钥对
4.客户端用自己的公钥异或会话ID,计算出一个值,并用服务端的公钥加密
5.客户端发送加密后的值到服务端,服务端用私钥解密
6.服务端用解密后的值异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
7.至此,双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
linux从网站下载文件 wget+网络地址和文件文职 可以直接下载。
24.C标签是什么,为什么要使用C标签,有哪些常见的指令?
C标签是JSTL 核心标签库,而jstl标签是为了解决EL表达式不能循环取出集合对象的问题
是建立在EL表达式基础上的语言,两者之间是互通的,属于jsp外部的一个标准标签
常用标签: 循环 <c:forEach>标签
表达式控制标签:<c:out>标签:用来显示一个表达式的结果
<c:if>标签:判断表达式的值,
<c:set>标签:用于设置变量值和对象属性。
参考:c标签是什么,有什么常见指令
25.什么叫反向代理?为什么要使用反向代理?
反向代理是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后 再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器集群在哪里。

反向代理代理了真实的服务端,需要一个代理服务器(负载均衡设备)来分发用户请求,最常用的是nginx。
反向代理的主要作用:
1.对客户端隐藏真实的服务器(集群)的ip地址
2.安全:作为应用层防火墙,为网站提供对基于web的攻击行为的防护,更容易排查恶意软件等,
3.为后端服务器(集群)统一提供加密和SSL加速等
4.负载均衡,如果服务器集群中有负荷较高的服务器,可通过url重写,根据连线请求从负荷较低的服务器获取所需的相同资源
5.对于静态内容及短时间有大量访问请求的动态内容提供缓存服务。
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
NGINX是用于Web服务,反向代理,缓存,负载平衡,媒体流等的开源软件, 除拥有HTTP服务器功能,NGINX还可以用作电子邮件(IMAP,POP3和SMTP)的代理服务器以及HTTP,TCP和UDP服务器的反向代理和负载平衡器。
好处: 1.反向代理 通过代理访问服务器,隐藏服务段ip信息
2.负载均衡 根据请求分配不同的服务器
3.静态代理 tomcat处理图片数据慢,用nginx进行代理,进行动静分离,然后tomcar直接调用nginx里的图片数据即可
除了nginx 还有 HAProxy、Varnish
还有25个
下载了axure查看了原型图
稍微对任务3要写什么了解了一些
但还是很乱
明天计划的事情:
剩下的深度思考
理清任务3
评论