2024年前端最全2024最全前端面试系列(计算机网络)(非科班出身最薄弱的环节),泪目

最后

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  1. 解析HTML文档,构件DOM树,下载资源,构造CSSOM树,执行js脚本,这些操作没有严格的先后顺序,以下分别解释

  2. 构建DOM树:

  3. Tokenizing:根据HTML规范将字符流解析为标记

  4. Lexing:词法分析将标记转换为对象并定义属性和规则

  5. DOM construction:根据HTML标记关系将对象组成DOM树

  6. 解析过程中遇到图片、样式表、js文件,启动下载

  7. 构建CSSOM树:

  8. Tokenizing:字符流转换为标记流

  9. Node:根据标记创建节点

  10. CSSOM:节点创建CSSOM树

  11. 根据DOM树和CSSOM树构建渲染树 :

  12. 从DOM树的根节点遍历所有可见节点,不可见节点包括:1) script,meta这样本身不可见的标签。2)被css隐藏的节点,如display: none

  13. 对每一个可见节点,找到恰当的CSSOM规则并应用

  14. 发布可视节点的内容和计算样式

  15. js解析如下:

  16. 浏览器创建Document对象并解析HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate为loading

  17. HTML解析器遇到没有async和defer的script时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script和他们之前的文档内容

  18. 当解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用document.write(),它们可以访问自己script和之前的文档元素

  19. 当文档完成解析,document.readState变成interactive

  20. 所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write()

  21. 浏览器在Document对象上触发DOMContentLoaded事件

  22. 此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState变为complete,window触发load事件

  23. 显示页面(HTML解析过程中会逐步显示页面)

补充

三次握手和四次挥手流程

三次握手

第一次握手:客户端向服务端发送SYN包,等待服务端响应,并进入SYN-SEND状态

第二次握手:服务端收到SYN包,并确定SYN=ACK+1,然后响应一个SYN包和ACK包。客户端进入SYN-RECV状态。

第三次握手:客户端收到服务端SYN+ACK包。向服务器发送确认包ACK。发送完毕进入ESTABLISHED状态。

四次挥手

第一次挥手:主动关闭连接一方,发送FIN包。此时发送FIN包之前发送的数据如果没有发送到。会进行重试发送。

第二次挥手:被动关闭一方收到FIN包。响应一个ACK包。

第三次挥手:被动关闭方发送一个FIN包。告诉被动关闭方。数据发送完毕。

第四次挥手:主动关闭方收到FIN包。发送一个ACK包给被动关闭方,至此四次挥手结束,断开连接。

P.S

ACK:确认位,只有ACK=1的时候ack才起作用,正常通信时ACK=1,第一次发起请求时,因为没有需要确认接收的数据所以ACK为0。

SYN:同步位,用于在建立连接时同步序号,刚开始建立连接时并没有历史接收的数据,所以ack也就没办法设置。SYN的作用就是,当接收端接收到SYN=1的报文时就会将ack设置位接收到的seq+1的值。SYN会在前两次握手时都为1,是因为通信的双方的ack都需要设置一个初始值;

FIN:终止位,用来在数据传输完毕后释放连接。

为什么是三次握手,四次挥手?

三次握手用于防止“已失效的连接请求报文段”,报文段没有丢失,而是在某个节点长时间滞留。

四次挥手:由于连接是全双工的。所以每个方向都必须单独进行关闭

因为在握手的时候服务端在listen状态,收到建立连接的syn报文后,将ack和syn放在一个报文里发送给对方,而关闭连接时,收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

浏览器缓存机制


浏览器缓存,也称Http缓存,分为强缓存和协商缓存。强缓存的优先级大于协商缓存。

1.强缓存

强缓存是利用 http 头中的 Expires 和 Cache-Control 两个字段来控制的。强缓存中,当请求再次发出时,浏览器会根据其中的 Expires 和 Cache-control 判断目标资源是否“命中”强缓存,若命中则直接从缓存中获取资源,不会再与服务端发生通信。

Expires时间戳(过期时间),浏览器就会先对比本地时间和 Expires 的时间戳,如果本地时间小于 Expires 设定的过期时间,那么就直接去缓存中取这个资源。

Cache-Control 利用 max-age (时间段/相对时间),如果访问间隔小于 Cache-Control 设定的时间段,那么就直接去缓存中取这个资源。

两者可以同时启用,Cache-Control 相对于 expires 优先级更高。

2.协商缓存

协商缓存通过 Last-Modified 和 Etag 实现,具体机制如下:浏览器向服务器去询问缓存的相关信息,如果服务端提示缓存资源未改动(Not Modified),资源会被重定向到浏览器缓存,这种情况下网络请求对应的状态码是 304。

Last-Modified 是一个时间戳(更新时间),首次请求时随着 Response Headers 返回 Last-Modified(请求资源在服务器上一次修改时间),再次请求时,Request Header 会带上 If-Modified-Since 的时间戳字段,它的值正是上一次 response 返回给它的 last-modified 值。

如果发生了变化,就会返回一个完整的响应内容,并在 Response Headers 中添加新的 Last-Modified 值;否则,返回如上图的 304 响应,Response Headers 不会再添加 Last-Modified 字段。

Etag是一个唯一标识字符串,每次文件修改后服务器端就会生成一个新的 Etag,这个标识字符串可以是基于文件内容编码的,只要文件内容不同,它们对应的 Etag 就是不同的。再次请求资源时,Request Header 会带上 If-Modified-Since,询问 Etag 是否变动

Etag 比 Last-Modified 优先级更高。

补充

Expires 缺点:

返回的到期时间是服务器端的时间,如果客户端的时间与服务器的时间相差很大,容易产生误差。

Last-Modified 缺点:

修改文件,但文件的内容未改变。服务器端并不清楚我们是否真正改变了文件,它仍然通过最后编辑时间进行判断。因此这个资源在再次被请求时,会被当做新资源,进而引发一次完整的响应。

当我们修改文件的速度过快时(比如花了 100ms 完成了改动),由于 If-Modified-Since 只能检查到以秒为最小计量单位的时间差,它感知不到这个改动的。

Etag 缺点:

Etag 的生成过程需要服务器额外付出开销,会影响服务端的性能。

协议结构


TCP/IP四层协议体系结构

1.应用层(域名系统DNS、文件传输协议FTP、简单邮件传送协议SMTP、超文本传输协议HTTP、简单网络管理协议SNMP、远程登录协议Telnet)

2.运输层(TCP、UDP)

3.网际层(IP、ICMP、ARP、RARP)

4.网络接口层

五层体系结构

1.应用层

2.运输层

3.网络层

4.数据链路层

5.物理层

OSI七层协议模型

1.应用层(Application)(TELNET,HTTP,FTP,NFS,SMTP)

2.表示层(Presentation)(加密,ASCII)

3.会话层(Session)(RPC,SQL)

4.传输层(Transport)(TCP,UDP,SPX)

5.网络层(Network)(IP,IPX)

6.数据链路层(Data Link)(ATM,FDDI)

7.物理层(Physical)(Rj45,802.3)

http报文


HTTP请求报文主要包括请求行、请求头部以及请求的数据(实体)三部分。

请求行由方法字段(GET、POST、PUT、DELETE)、URL字段和HTTP协议版本字段组成。

请求头部

Connection标头:连接管理

Host标头:指定请求资源的主机

Range标头:请求实体的字节范围

User-Agent标头:包含发出请求的用户信息

Accept标头:首选的媒体类型

Accept-Language标头:首选的自然语言

HTTP响应报文分为状态行、首部行、实体三部分。

状态行包括三个字段:协议版本、状态码与原因短语。

响应首部

Date标头:消息产生的时间

Age标头:(从最初创建开始)响应持续时间

Server标头: 向客户端标明服务器程序名称和版本

ETag标头:不透明验证者

Location标头:URL备用的位置

Content-Length标头:实体的长度

Content-Type标头:实体的媒体类型

get和post方法区别


本质区别:GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。

GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 POST,浏览器先发送 header,服务器响应 100(continue),浏览器再发送 data,服务器响应 200(返回数据)。

  1. GET 在浏览器回退时是无害的,而 POST 会再次提交请求。

  2. GET 产生的 URL 地址可以被 Bookmark,而 POST 不可以。

  3. GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。

  4. GET 请求只能进行 URL 编码,而 POST 支持多种编码方式。

  5. GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留。

  6. GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。对参数的数据类型,

  7. GET 只接受 ASCII 字符,而 POST 没有限制。

  8. GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。

  9. GET 参数通过 URL 传递,POST 放在 Request body 中。

网络安全


  1. XSS攻击(存储型、反射型、DOM型)

防御方法:

1.cookie中设置HttpOnly

2.输入过滤,对于输入格式检查

3.转义

  1. CSRF攻击

防御方法:

1.验证码

2.Refer Check,对于请求来源限制

3.token

TCP单工、半双工、双工


单工:只支持数据在一个方向上的传播(应用场景:电视)

算法

  1. 冒泡排序

  2. 选择排序

  3. 快速排序

  4. 二叉树查找: 最大值、最小值、固定值

  5. 二叉树遍历

  6. 二叉树的最大深度

  7. 给予链表中的任一节点,把它删除掉

  8. 链表倒叙

  9. 如何判断一个单链表有环

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

只支持数据在一个方向上的传播(应用场景:电视)

算法

  1. 冒泡排序

  2. 选择排序

  3. 快速排序

  4. 二叉树查找: 最大值、最小值、固定值

  5. 二叉树遍历

  6. 二叉树的最大深度

  7. 给予链表中的任一节点,把它删除掉

  8. 链表倒叙

  9. 如何判断一个单链表有环

    [外链图片转存中…(img-s8hHzvmk-1714979090126)]

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值