前端八股文笔记大全
前端开发面试必背八股文
day 1
OSI 模型和 TCP/IP 模型
理解 OSI 模型共有 7 层,能够说明是哪 7 层。
能够粗浅描述每一层的基本功能和职责
对于某些层,熟悉一些常见的协议,比如网络层的 IP,传输层的 TCP 和 UDP。
osi模型是iso组织提出的一个计算机网络之间相互通信的模型,从下往上包括7个层次:
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
osi模型更加系统,tcp/ip协议更加偏向实际,我们通常最常用的是tcp/ip协议。
而tcp/ip协议只有四层,分别是:
应用层:对应osi模型当中的应用层、表示层、会话层,指的是应用程序和用户的交互接口,比如http(网页浏览)、ftp(文件传输) ,这一层我们是不用去关心数据是如何传输的,就像寄快递的时候不需要关心快递是如何运输的 传输层:对应osi的传输层,负责端到端的传输,传输协议有tcp,提供安全可靠的传输,确保数据传输的正确和完整性;udp协议,提供无连接的传输,及时性的传输
网络层:对应osi的网络层,协议是ip协议,负责数据包的路由和转发
从输入URL到页面展示发生了什么
day 2
HTTP请求报文和响应报文是怎样的
HTTP请求方式有哪些
GET请求和POST请求的区别
day 3
HTTP请求中常见的状态码
掌握程度:
● 状态码:能够根据1xx、2xx、3xx、4xx、5xx分类描述状态码,并对每个类别中的常见状态码能够解释其含义和使用场景。
● 缓存:知道3xx状态码中的重定向是如何工作的。
● 进阶:能够结合实际案例来讨论状态码的使用。
什么是强缓存和协商缓存
● 基本概念:区分强缓存和协商缓存的概念,并解释它们的不同用途。
● 工作流程: 能够描述浏览器和服务器在强缓存和协商缓存中如何交互。
● HTTP头部字段: 知道实现强缓存和协商缓存的HTTP头部字段,如 Cache-Control, Last-Modified, ETag, If-Modified-Since, If-None-Match。
● 性能优化: 理解缓存机制如何提高Web应用的性能和用户体验。
day 5
HTTPS和HTTP有哪些区别
https在http基础上加上了ssl/tls加密,保证安全,而http是明文传输的
https需要向服务器申请CA证书
http的默认端口是80,https是443
HTTPS的工作原理(HTTPS建立连接的过程)
https的握手本质就是tls的握手,是一回事
- 首先客户端发送请求给服务端,请求包括版本号、一个随机数和客户端的加密方法
- 收到请求后,紧接着服务器确认双方使用的加密方法、给出数字证书和一个随机数
- 客户端会确认数字证书是否有效,并生成一个新的随机数,用数字证书里的公钥加密后发给服务端,并且还会提供前面所有内容的哈希值,给服务器校验
- 服务器使用自己的私钥解密发过来的随机数
- 客户端和服务端根据约定的加密方法,使用前面使用的三个随机数,生成对话密钥,通过这个密钥来加密通话
TCP和UDP的区别
- tcp是面向连接的协议,而udp是无连接的
- tcp能够确保数据的传输完整性,而udp可能出现丢包
- tcp有拥塞控制机制,根据网络状况调整传输速度,而udp没有拥塞控制,通常发送速度恒定
- tcp有数据连接,拥塞控制等等,性能开销大,而udp的性能开销小
- tcp的报文头部包括序列号、确认号等信息,而udp报文的头部相对简单
day 6
TCP连接如何确保可靠性
掌握程度: ● 能够清晰地描述TCP协议的工作原理和关键特性。 ● 理解TCP如何通过各种机制确保数据传输的可靠性。 ○ 连接管理:三次握手,四次挥手 ○ 差错控制:序列号和确认应答机制 ○ 超时重传机制 ○ 流量控制 ○ 拥塞控制 ● 知道TCP的流量控制和拥塞控制对于网络性能的影响。
tcp通过差错控制(序列号、确认应答、数据校验)、超时重传、流量控制、拥塞控制,保证数据的可靠性和效率
- 序列号:每个tcp段都有一个序列号,确保数据包的顺序是正确的
- 数据校验;tcp使用校验和来检测数据有没有错,如果有,接收端就会丢弃数据包,等待重传
- 确认应答:接收方发送ack确认应答收到的数据,如果发送方在一定时间里没有收到确认,就会重新发送数据
- 超时重传:发送方在发送数据的时候,后开启一个定时器,在这个定时器的时间里没有收到ack报文,就会进行重传,达到一定次数还没有成功,就会放弃,并且发送一个复位信号
- 流量控制:通过滑动窗口进行流量控制,确保接收方能够处理发送方的数据量
- 拥塞控制:tcp通过算法如慢启动、拥塞避免、快重传、快速修复控制发送速率,防止网络拥塞
TCP 拥塞控制机制
掌握程度:
● 能够解释为什么需要拥塞控制,即动态调整数据的发送速率,防止网络过载,保证网络的稳定和高效。
● 掌握拥塞控制的主要算法
○ 慢启动:开始时,发送窗口大小逐渐增加,直到达到一个阈值。
○ 拥塞避免:超过阈值后,窗口大小增长速度减慢,采用线性增长。
○ 快重传:当接收方检测到失序的包时,立即发送重复确认,触发发送方进行重传。
○ 快恢复:在快重传后,不立即回到慢启动状态,而是尝试继续以当前窗口大小发送。
拥塞控制机制主要是四种:
- 慢启动:一开始拥塞窗口的值不会太大,会逐渐增加发送窗口的大小,实现指数级增长,主要是测试网络的拥塞程度
- 拥塞避免:慢启动达到慢启动的阈值,来到拥塞避免阶段,拥塞窗口会线性增长,控制发送速率避免引起网络拥塞
- 快速重传;接收方在收到一个失序的报文后,就会立即发出重复确认,发送方连续三次收到重复确认,就会重传对方没有收到的片段
- 快速恢复:快速重传后就会进入快速恢复的阶段,这个阶段会将慢启动的阈值设置为当前窗口的一半,拥塞窗口大小设置为慢启动阈值加上未被快速重传的数据快的量
TCP 流量控制机制
掌握程度
● 能够解释流量控制的目的。能够清晰地描述TCP流量控制的基本工作原理和关键组件。
● 知道 TCP 是使用滑动窗口机制来实现流量控制,理解TCP滑动窗口协议的工作原理,包括窗口大小的通告和更新
● 知道流量控制与拥塞控制的区别和它们在TCP中的作用。
● 了解TCP报文结构,特别是与流量控制相关的字段。
流量控制就是为了让发送数据的速度不要太快,让接收方来得及接受。tcp使用大小可变的滑动窗口来进行流量控制
- 当一个连接建立的时候,每一端都有一个缓冲区来保存输入的数据,并且把缓存区的大小发送给另一端
- 每次数据到达接收方,接收方都会发送确认,包含了剩余的缓存窗口的大小(指出窗口大小的通知叫做窗口通告)
- 如果接收方应用程序读数据的速度可以和数据到达的速度一样快,就会在确认里发送一个正的窗口通告
- 如果发送方的操作速度快于接收方,接收的数据就会充满接收方的缓存区,导致接收方通告一个零窗口,发送方收到零窗口通告的时候就是停止发送数据,直到接收方通告一个正的窗口
UDP怎么实现可靠传输
udp不属于连接型协议,无法实现数据的可靠传输,只能通过应用层进行实现,应用层从两个方面来考虑:
- 提供超时重传
- 提供确认序列号 发送端:在udp定义一个首部,包含时间戳、序列号。时间戳是用于计算往返时间(rtt),从而计算出合适的重传超时时间(rto),通过等-停协议发送数据,即发送后等待确认应答,收到确认后再发送数据。如果在rto时间里没有收到确认报文,就将rto扩大两倍,重新计时 接收端:接收到报文后,提取首部的时间戳和序列号。在发送确认应答,在应答里添加首部,里面包括获取的时间戳和序列号。根据确认序列号对已收到的数据进行排序,丢掉重复的数据报。
day 8
三次握手
掌握程度:
● 能够清晰地描述TCP三次握手的每个步骤和目的。
● 理解序列号和确认号的重要性,以及它们在建立连接中的作用。
● 扩展:知道三次握手过程中可能存在的安全问题,如SYN洪泛攻击,以及如何防范。
- 首先客户端向服务端发送一个syn报文,并且指明客户端的初始序列号isn
- 服务端收到syn报文后,发送一个syn-ack报文,并且将客户端的isn号+1作为自己的ack值
- 客户端收到ack报文后,也会发送一个ack报文,同样也是将服务端的isn号+1作为自己的ack值
通过三次握手,确认了客户端和服务端的发送和接收能力都正常。第一次握手确认了客户端到服务端的发送能力,第二次握手确认了服务端到客户端的发送能力,第三次是确认客户端收到了服务端发送的ack和syn报文。
如果使用四次握手,会造成资源的浪费;如果使用两次握手,则被动关闭方在发送ack报文后立即关闭连接
四次挥手的过程
掌握程度: ● 能够清晰地描述TCP四次挥手的每个步骤和原因。 ● 知道TIME-WAIT状态的重要性和2MSL等待期的作用。
如果是客户端先发起关闭请求
- 客户端会发送一个fin报文,报文里会指定一个序列号
- 服务器收到fin之后,会发送一个ack报文,并且把客户端序列号+1作为ack报文的值
- 如果服务器也想断开连接了,就会向客户端发送fin报文,并且指定一个序列号
- 客户端收到fin报文后就会发送一个ack报文,并且将fin报文的序列号+1作为ack的值
HTTP的Keep-Alive是什么?TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
掌握程度:
● 能够清晰地解释HTTP的Keep-Alive和TCP的Keepalive的概念及其目的。知道HTTP的Keep-Alive如何通过HTTP头启用,以及TCP的Keepalive如何通过系统设置或编程接口配置。
● 理解两者在网络通信中的作用和区别。
○ HTTP的Keep-Alive是一种机制,允许客户端和服务器在单个TCP连接上发送多个HTTP请求和响应,而不是每个请求/响应后都关闭连接。
○ TCP的Keepalive用于检测和清除死TCP连接。
day 9
DNS 查询过程
掌握程度:
● 了解 DNS 概念及其作用
● 能够清晰地描述DNS查询的基本过程,包括递归查询和迭代查询。
● 知道DNS查询可能涉及的不同层级的DNS服务器。
CDN 是什么
掌握程度:
● 能够清晰地描述CDN的概念、工作原理和主要优势。
● 理解CDN的关键组件和缓存策略。
● 知道CDN在提高网站性能和用户体验方面的作用。
Cookie和Session是什么?有什么区别?
掌握程度:
● 能够清晰地描述Cookie和Session的定义、存储位置、生命周期、大小限制和安全性。
● 理解Cookie和Session的使用场景和它们在Web应用中的不同作用。
● 能够讨论Cookie和Session的安全性问题以及如何提高它们的安全性。
扩展:
● 结合案例讨论Cookie和Session的使用
● 了解如何通过设置HttpOnly、Secure标志,以及使用SameSite属性来提高Cookie的安全性。
day 10
sessionStorage 和 localStorage之间的区别
什么是XSS攻击,如何防范
什么是 CSRF 攻击,如何防范?
day 11
什么是回流和重绘
什么是浏览器的同源策略
如何解决跨域问题
day 20
说一下js的数据类型
Number String Boolean undifined null Bigint Symbol
数据类型检测的方法有哪些
typeof instanceof Object.prototype.toString.call() constructor属性
==和===的区别
略
null 和 undefined 的区别
略