每天五道面试题!只记录答案,不标出源码,有什么不对的地方欢迎评论,共同进步。
1. Spring MVC执行流程
1、用户发送请求到前端控制器DispatherServlet。
2、DispatherServlet收到请求后,调用HandlerMaping处理器映射器。
3、处理器映射器找到具体的处理器(可以通过xml配置、注解进行查找),生成处理器对象及处理拦截器(如果有则生成)一并返回给DispatherServlet。
4、DispatherServlet调用HandlerAdapter处理器适配器。
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView。
7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatherServlet。
8、DispatherServlet将ModelAndView传给ViewReslover视图解析器。
9、ViewReslover解析后返回具体View。
10、DispatherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatherServlet响应用户。
2. 请求转发和重定向的区别
本质区别:转发是服务器行为,重定向是客户端行为。
1、浏览器url地址显示不同。forward地址不变,redirect地址变化。
2、前后台两者页面跳转的处理方式不同。forword是服务器进行页面跳转加载新页面,直接返回到浏览器;redirect是服务器返回新的url地址,浏览器二次发出url请求。
3、参数携带情况不同。forword共享请求的参数到新的页面;redirect属于一次全新的http请求,无法共享上一次请求的参数。
4、HTTP请求次数不同。forword请求一次;redirect请求两次。
5、新地址目标范围不同。forword必须是某一应用内的某个资源; redirect的新地址可以是任意地址。
3. HTTP/1.1和HTTP/1.0的区别
1、HTTP1.1的可扩展性更好。
2、HTTP1.1可以使用缓存。
3、HTTP1.1进行了带宽优化。
4、HTTP1.1支持请求的长连接和流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
5、HTTP1.1的优化了消息传递,避免了缓冲整个消息带来的过载。
6、HTTP1.0认为每台服务器都绑定着一个唯一的IP,因此,请求消息中的URL并没有传递主机名,但随着虚拟技术的发展,一台物理服务器上可以存在多个虚拟主机,并且他们共享一个IP。
HTTP1.1的请求消息和响应消息都支持Host头域,且请求消息中如果没有Host头域会报一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
7、HTTP1.1的错误提示更多,HTTP1.0定义了16个状态响应码,HTTP1.1新增了24个状态响应码,并且引入了一个Warning头域,增加对错误或警告信息的描述。
4. HTTPS和HTTP的区别
1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前网易官网是http,而网易邮箱是 https 。)
2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
5. HTTPS的详细步骤
1、 客户端的浏览器向服务器发送请求,并传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
2、 服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
3、客户端利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的 “发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
4、用户端随机产生一个用于通讯的 “对称密码”,然后用服务器的公钥(服务器的公钥从步骤2中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
5、如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的密钥一起传给服务器。
6、如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的 CA 是否可靠,发行 CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的私钥,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
7、服务器和客户端用相同的对称加密密钥,对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
8、客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤 7中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
9、服务器向客户端发出信息,指明后面的数据通讯将使用的步骤 7 中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
10、SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
其中4、5题的原文链接:https://blog.youkuaiyun.com/qq_38289815/article/details/80969419