华为云计算电话面试与参考答案总结
还是那个zpp
1. 先做一个自我介绍
略。
2. DNS域名解析的过程,从用户点击一个url开始发生的一系列事情。
域名解析过程:
(1)你使用的电脑发送了一个DNS请求到本地DNS服务器,本地DNS服务器一般都是你的网络接入服务器商提供。
(2)当DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中又该条记录,直接返回。如果没有,向根DNS服务器发出请求。
(3)根DNS服务器上没有域名IP对应关系,而是告诉本地服务器,你可以去问问域服务器,同时给出域服务器的地址。
(4)本地DNS服务器继续拿着根DNS服务器给他的地址,继续向域服务器发出请求。
(5)域服务器收到请求后,它也没有域名IP对应关系,不过他会根据本地服务器的请求告诉本地DNS服务器:你去XX域名解析服务器查吧。同时返回对应的解析服务器地址。
(6)本地服务器又拿着域服务器给他的解析服务器的地址,去请求域名解析服务器。
(7)域名解析服务器收到请求后,将对应的域名IP关系,返回给本地DNS服务器。
(8)本地DNS服务器拿到域名IP对应关系后,将该对应关系保存到缓存中,以便下一次访问。然后将域名IP的关系返回到本地电脑。
当用户在浏览器输入了url:
1)如果地址是一个IP地址,会直接找该IP对应的网络计算机。如果不是IP地址,则通过DNS(域名系统)将该地址解析成IP地址,再去网络上找对应的计算机。DNS服务器本身也IP,你的网络设置包含DNS服务器的IP。
注:DNS解析完成,查找对应的网络计算机时,可能电脑直接询问的DNS服务器可能没有对应的IP,那当前DNS服务器就会向它的上级服务器询问,上级服务器也可能没有,就依次一层层向上找,最高查找到根节点,找到或者一直找不到为止。
2)如果地址不包含端口号,协议的默认端口号为80。如果指定了端口好,那么使用指定的端口号。
3)IP和端口号都确定后,发起请求,连接对应的网络计算机和对应的端口。
4)根据http协议要求,需要把大量的请求信息放在请求头上,发送给对应的服务器。包括请求的资源路径、请求者身份等信息。
5)服务器响应请求,将数据返回给浏览器。浏览器接受到html类型的代码,开始渲染页面,当遇到内嵌资源地址时,再次向浏览器发送请求来获取这些资源。(如果资源路径指示的资源不存在,服务器就会返回404错误。)
6)将渲染好的页面显示出来,并开始响应用户的操作。
3. http请求具体包括哪些,请求头的内容
(1) 请求报文 (请求行/请求头/请求数据/空行)
a. 请求行
求方法字段、URL字段和HTTP协议版本
例如:GET /index.html HTTP/1.1
( get方法将数据拼接在url后面,传递参数受限。)
b. 请求方法:
GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
c. 请求头(key value形式)
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:主机地址
d. 请求数据
post方法中,会把数据以key value形式发送请求
e. 空行
发送回车符和换行符,通知服务器以下不再有请求头
(2) 响应报文 (状态行、消息报头、响应正文)
状态行
消息报头
响应正文
举个例子:
1 GET/sample.jspHTTP/1.1
2 Accept:image/gif.image/jpeg,/
3 Accept-Language:zh-cn
4 Connection:Keep-Alive
5 Host:localhost
6 User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
7 Accept-Encoding:gzip,deflate
8
9 username=jinqiao&password=1234
第一行为http请求行,包含方法,URI 和http版本
2-7为请求头,包含浏览器,主机,接受的编码方式和压缩方式
第8行表示一个空行 表示请求头结束 这个空行是必须的
第9行是数据体,比如是需要查询的信息。
http响应体由三部分组成,分别是状态行,响应头,响应正文。
状态行是由:HTTP-Version + Status-Code + Reason-Phrase
http版本 + 状态码 + 状态代码的文本描述
例如:HTTP/1.1 200 ok
响应头:包含服务器类型,日期,长度,内容类型等
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:13:33 GMT
Content-Type:text/html
Last-Moified:Mon,6 Oct 2003 13:23:42 GMT
Content-Length:112
响应正文响应正文就是服务器返回的HTML页面或者json数据
4. 跨域问题遇到过吗?什么是跨域?怎么解决的。
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。同源是指,域名,协议,端口均相同。
(1)JSONP原理:
(JSONP只支持GET请求,不支持POST请求。)
ajax请求受同源策略影响,不允许进行跨域请求,script的src属性可以随意引入不同源的js文件,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。
(2)代理模式:
例如www.123.com/index.html需要调用www.456.com/server.php,可以写一个接口www.123.com/server.php,由这个接口在后端去调用www.456.com/server.php并拿到返回值,然后再返回给index.html,这就是一个代理的模式。相当于绕过了浏览器端,自然就不存在跨域问题。
(3)PHP端修改header(XHR2方式)
在php接口脚本中加入以下两句即可:
header('Access-Control-Allow-Origin:*');//允许所有来源访问 header('Access-Control-Allow-Method:POST,GET');//允许访问的方式
5. 前后端分离具体讲一下架构是怎么实现的。前后端分离的理解。
前后端分离核心思想是前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互。通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦。
Web服务器:一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;
应用服务器:一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好。
前后端完全分离:
前端:负责View和Controller层。 后端:只负责Model层,业务/数据处理等。
前端使用Node.js实现controller层。Node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。Nodejs路由的实现逻辑是把前端静态页面代码当成字符串发送到客户端(例如浏览器),简单理解可以理解为路由是提供给客户端的一组api接口,只不过返回的数据是页面代码的字符串。
补充一个知识点:
web工程结构会分为三层,自下而上是dao层,service层和controller层。
dao层是数据层,直接进行数据库的读写操作,返回数据对象DO,DO与数据库表一一对应。
service层为业务层,用来实现业务逻辑。能调用dao层或者service层,返回数据对象DO或者业务对象BO,BO通常由DO转化、整合而来,可以包含多个DO的属性,也可以是只包含一个DO的部分属性。通常为了简便,如果无需转化,service也可以直接返回DO。外部调用(HTTP、RPC)方法也在这一层,对于外部调用来说,service一般会将外部调用返回的DTO转化为BO。
controller层为控制层,主要处理外部请求。调用service层,将service层返回的BO/DO转化为DTO/VO并封装成统一返回对象返回给调用方。如果返回数据用于前端模版渲染则返回VO,否则一般返回DTO。不论是DTO还是VO,一般都会对BO/DO中的数据进行一些转化和整合,比如将gender属性中的0转化“男”,1转化为“女”等。
controller的功能应该有以下五点:
1.参数校验
2.调用service层接口实现业务逻辑
3.转换业务/数据对象
4.组装返回对象
5.异常处理
6. 讲一下对缓存的了解,cookie和session。
cookie是浏览器实现的一种数据存储功能,由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。
服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。 Seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。
2.可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。
补充(token):
目前多数主流网站的登录验证使用Token,如github、facebook等。基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。
(1)用户登录校验,校验成功后就返回Token给客户端。
(2)客户端收到数据后保存在客户端。
(3)客户端每次访问API是携带Token到服务器端。
(4)服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码。