面試官:輸入一個網址,發生了什麼?

面试官:输入一个网址,发生了什么?

不知道你有没有这样的技术面试经历?

如果有一道面试官认为很简单的问题,你没有回答上来,你之前回答的所有问题印象分都化整为零。

比如:

① short i = 1; i+=2 和 i=i+2 有什么区别?

② 类变量分配在堆上还是方法区?

③ synchronized 偏向锁如何获取,什么时候释放?

④ redis set 无数的值 和大量的值有什么问题?

⑤ redis setnx 是用的什么数据结构?

⑥ 为什么 mysql 是最左匹配原则?

⑦ Enter 一个网址 ,发生了什么?

以上 7 个问题,你能答对几个? 单选

0

0%

A. 0~1

0

0%

B.2~3

0

0%

C.4~5

0

0%

D. 6~7

Enter 一个网址 ,发生了什么?

1、解析 url

① url 元素组成

常见的协议:常用的有 http、https、ftp 协议等;

web服务器:指资源宿主服务器的主机名或 IP 地址,会包含端口号,http 服务的默认端口是 80,可以省略;

虚拟目录名:说明了资源位于服务器的什么地方,从域名后的第一个 “/“开始到最后一个 “/“为止;

文件名部分:从域名的最后一个”/“开始到”?“为止,是文件名部分,如果没有”?“, 则是从域名后的最后一个 “/” 开始到 “#” 为止,是文件部分,如果没有 “?” 和 “#”,那么从域名后的最后一个 “/” 开始到结束,都是文件名部分。

面试官:输入一个网址,发生了什么?


② url 解析实例

面试官:输入一个网址,发生了什么?

③ web 服务文件路径

面试官:输入一个网址,发生了什么?

2、DNS(域名服务器)

由于 web 服务器大部分是域名访问,我们需要查询服务器域名对应的 ip 地址。DNS 服务器是专门保存了 Web 服务器域名与 IP 的对应关系,DNS 中的域名都是用句点来分隔的,比如 mp.toutiao.com,这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。


域名的层级关系类似一个树状结构

① 一级域名:在 “com top net org” 前加一级(例子 “toutiao.com)简单说后缀前面一个点

② 二级域名:就是在一级域名前再加一级(例子 “mp.toutiao.com)后缀前面两个点

③ 三级域名或者临时域名:xxx.xxx.xxx.com 后缀前面三个点以及以上


面试官:输入一个网址,发生了什么?

DNS 域名解析过程

3、TCP 可靠传输

HTTP 是基于 TCP 协议传输的,TCP 传输数据之前,要先三次握手建立连接,三次握手目的是保证双方都有发送和接收的能力。

面试官:输入一个网址,发生了什么?

对比一下 UDP 的通信流程和 TCP 的通信流程, 可以发现, 在 UDP 协议中, 是没有握手这个操作的。 TCP 是可靠通信协议, 而 UDP 是不可靠通信协议。

TCP 既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求!

当 TCP 断开连接时,需要四次挥手


面试官:输入一个网址,发生了什么?

4、HTTP 请求

3 次握手成功后, 浏览器就可以向服务器发送 http 请求了,请求数据包。

发送 HTTP 请求的过程就是构建 HTTP 请求报文并通过 TCP 协议中发送到服务器指定端口 (HTTP 协议 80/8080, HTTPS 协议 443)。HTTP 请求报文是由三部分组成:请求行,请求报头和请求正文,还可能涉及负载均衡。

5、服务器响应

HTTP 响应报文也是由三部分组成: 状态码 , 响应报头和响应报文。

6、浏览器解析网页信息

服务器返回给浏览器的文本信息, 通常是 HTML, CSS, JS, 图片等文件, 那么浏览器是如何对内容进行渲染呢?


通常是下面五个步骤:


① 处理 HTML 标记并构建 DOM 树;

② 处理 CSS 标记并构建 CSSOM 树;

③ 将 DOM 与 CSSOM 合并成一个渲染树;

④ 根据渲染树来布局, 以计算每个节点的几何信息;

⑤ 将各个节点绘制到屏幕上。

欢迎关注 @Python大星 ,一个会点 Python 的 Java 程序员。如果你有更好的想法,欢迎留言,一起探讨,想说你就说啊!后面继续分享 Java 的相关开发,人少就散了吧!

@Python大星 | 文

面试官:输入一个网址,发生了什么?


分享到:


相關文章: