前端-深入探讨网络面试题

news2025/1/25 4:31:28

第一关 请求-文件、数据、连接

文件类的请求:加载HTMl、CSS
数据: ajax请求(基于HTTP,HTTP基于TCP),如何建立连接的(三次握手,为什么不是两次或者四次),socket长连接,beacon(在浏览关闭的时候也能保持连接),长连接方式(socket、websocket、HTTP只要不返回也可以实现长连接)。

协议

HTTP 与 TCP的区别
解释性的题(可以举例子)
假设现在有一个网站
http://www.baidu.com 这里的http是应用层协议,TCP是传输层协议,http是基于tcp传输实现的应用层连接。

http请求、发送、状态(状态码)

http版本:

http1.0:
http1.1:引入长连接
http2.0:二进制 | 多路复用 (没有并发的限制)| 包头压缩 | 服务端推送
http3.0: HTTP3基于UDP协议重新定义了连接,在QUIC层实现了无序、并发字节流的传输,解决了队头阻塞问题

https

请添加图片描述
https相对于http更加安全,但是性能损耗更发大
优化方法: 整合请求、长连接

白屏现象

上一个请求依赖前一个请求的返回值
ajax1 => ajax2 => ajax3
代码书写
回调 => 回调地狱 => Promise => async / await
可以从network面板中有个瀑布/时间线,如果其中ajax1请求失败或者超时了,就会产生阻塞,此时就会发生白屏现象
阻塞场景: 代码层面 网关层面(比如请求一个认证信息失败了) 没有使用CDN,服务器负载过多也会导致请求缓慢触发请求超时
在这里插入图片描述

当请求数据总是很大时,该怎么优化

单纯从网络协议层来优化的话,可以将内容压缩,例如图片上传的时候,可以使用Accept-Encoding进行压缩 => 期望返回内容被压缩,以减少网络流量,提升性能, 比如可以压缩图片的base64码
有三种压缩方式gzip deflate br
但是需要看服务端支不支持压缩或者服务端性能不足导致没有开启压缩,第三方Api需要手动开启压缩
所以Accept-Encoding是一种请求性的并不是强制性的策略

如果服务端支持压缩也开启了压缩,响应头里具有Content-Encoding:gzip

请求头

1、请求头中的 Cookie (cookie是一种小型文本文件,用于存储用户信息,实现网站的登录、记录、分析等功能。) =>

cookie、localStorage、sessionStorage区别
特性CookielocalStoragesessionStorage
数据的生命期一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效除非被清除,否则永久保存仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小4K左右一般为5MB一般为5MB
与服务器端通信每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题仅在客户端(即浏览器)中保存,不参与和服务器的通信仅在客户端(即浏览器)中保存,不参与和服务器的通信
易用性需要程序员自己封装,源生的Cookie接口不友好源生接口可以接受,亦可再次封装来对Object和Array有更好的支持源生接口可以接受,亦可再次封装来对Object和Array有更好的支持

Cookie无法跨域,需要以一种非常不安全的形式使其支持跨域,例如将ifram中的cookie传出来,会非常不安全
跨tab通信(实质上就是进程之间怎么通信),cookie需要同源才支持,sessionStorage不能跨tab,但是localStorage凌驾于浏览器之上所以可以跨tab通信
其他存储方式还有indexDB(键值对数据库)、webSQL(完整的关系型数据库),Vuex之类的

场景题

登陆态以及自动登录,对cookie
小程序登录态(微信一键登录)

重定向(性能优化场景)

强缓存和协商缓存
last-modified Etag

请求控制 手写并发

class LimitPromise {
	constructor(max) {
		this._max = max || 6
		// 当前正在执行的数量
		this._count = 0
		// 等待的任务队列
		this._taskQueue = []
		// 单例模式-提供一个实例
		this.instance = null
	}
	run (caller) {
		// 主入口
		// 输入:外部要添加的请求,每个caller就是一次请求
		// 输出: 返回队列处理的Promise
		return new Promis((resolve, reject) => {
			// 创建处理任务
			const task = this._createTask(caller, resolve, reject)
			// 判断是否达到并发池上限
			if (this._count >= this._max) {
				this.taskQueue.push(task)
			} else {
				task()
			}
		})
	}
	_creteTask() {
		return () => {
			caller().then(res => {
				resolve(res)
			}).catch(err => {
				reject(err)
			}).finally(() => {
				this._count--
				if(this._taskQueue.length > 0) {
					const task = this._taskQueue.shift()
					task()
				}
			})
			this._count++
		}
	}
	static getInstance (max) {
		if(!this.instance) {
			this.instance = new LimitPromise(max)
		}
		return this.instance
	}
}
// 调用
const LimitPromis = LimitPromise.getInstance(3)

const asyncTask = () => {
	return new Promise((resolve, reject) => {})
}

for(let i = 0; i <= 7; i++) {
	LimitPromise.run(asyncTask).then(
		result => {
			// ...
		},
		error => {
			// ...
		}
	)
}

总结: 请求数据很多的时候可以进行压缩、请求控制并发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1556113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用MATLAB编写一个简易的贪吃蛇游戏

编写一个贪吃蛇游戏的MATLAB代码需要涉及到游戏逻辑、图形用户界面(GUI)的创建、事件监听&#xff08;如键盘操作&#xff09;和游戏状态更新等。以下是一个简化的贪吃蛇游戏MATLAB代码示例&#xff0c;展示了基本的游戏框架和逻辑。 此代码创建了一个游戏窗口&#xf…

解决GNU Radio+USRP实现OFDM收发在接收端QPSK星座图映射无“抖动”问题

文章目录 前言一、遇到的问题二、解决方案三、重新编译安装四、验证五、资源自取 前言 本文记录在 GNU RadioUSRP 实现 OFDM 收发时&#xff0c;在接收端 QPSK 星座图映射无“抖动”问题的解决方法&#xff0c; 一、遇到的问题 我遇到的问题是&#xff0c;现在搭建的 OFDM 模…

Qt实现Kermit协议

1 概述 Kermit文件运输协议提供了一条从大型计算机下载文件到微机的途径。它已被用于进行公用数据传输。 其特性如下: Kermit文件运输协议是一个半双工的通信协议。它支持7位ASCII字符。数据以可多达96字节长度的可变长度的分组形式传输。对每个被传送分组需要一个确认。Kerm…

Spark SQL— Catalyst 优化器

Spark SQL— Catalyst 优化器 1. 目的 本文的目标是描述Spark SQL 优化框架以及它如何允许开发人员用很少的代码行表达复杂的查询转换。我们还将描述Spark SQL如何通过大幅提高其查询优化能力来提高查询的执行时间。在本教程中&#xff0c;我们还将介绍什么是优化、为什么使用…

先进电机技术 —— 何为轮毂电机?

一、轮毂电机 轮毂电机&#xff08;Hub Motor&#xff09;是一种将电动机集成到车轮内部&#xff0c;直接驱动车轮转动的电动车驱动技术。这种设计省去了传统的传动轴、差速器、半轴等机械传动部件&#xff0c;使得动力传输更为直接、高效。 轮毂电机的优点&#xff1a; 1. 结…

elementui el-input输入框类型为textarea时,将输入的数据保存换行和空格,并展示换行和空格

el-input输入框类型为textarea时&#xff0c;如果不做数据处理&#xff0c;是不会保存换行和空格的说输入了换行&#xff0c;但是保存数据后不会进行换行&#xff0c;需要保存输入的换行。 1、效果图 输入状态&#xff1a; 显示时&#xff1a; 2、实现代码 2.1、html部分&am…

【CKA模拟题】综合案例演示如何创建pv和pvc

Useful Resources: Persistent Volumes & Claim 题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetesCreate a PersistentVolume (PV) and a PersistentVolumeClaim (PVC) using an e…

排序---数组和集合

1、数组排序 Arrays.sort(int[] a)这种形式是对一个数组的所有元素进行排序&#xff0c;并且是按照从小到大的排序。 public static void main(String[] args) {Integer []arr {1,2,3,4,5,6};//升序Arrays.sort(arr);for (int x:arr){System.out.print(x " ");}Sys…

【Web APIs】正则表达式

目录 1.正则表达式 2.正则表达式语法 3.元字符 3.1边界符 3.2量词 3.3字符类 4.修饰符 1.正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是用于匹配字符串中字符组合的模式&#xff0c;在 JavaScript中&#xff0c;正则表达式也是对象。通常用来查…

数据分析之POWER Piovt的KPI设置

内容总结&#xff1a; 1.两个表格关联不上&#xff1a;需要添加辅助列&#xff0c;建立关联 2.添加辅助列后还关联不上&#xff1a;将虚线变为实线 3.根据需求要增加一些度量值 4.设置KPI后&#xff0c;绝对值选1后设定百分比 5.在透视表里面加入KPI状态 导入所关联的数据后建立…

取证之内存取证工具Volatility学习

一、简介 Volatility是一款开源的内存取证分析工具&#xff0c;支持Windows&#xff0c;Linux&#xff0c;MaC&#xff0c;Android等多类型操作系统系统的内存取证方式。该工具是由python开发的&#xff0c;目前支持python2、python3环境。 二、安装 1、下载地址 GitHub - …

Matlab之求直角坐标系下两直线的交点坐标

目的&#xff1a;在直角坐标系下&#xff0c;求两个直线的交点坐标 一、函数的参数说明 输入参数&#xff1a; PointA&#xff1a;直线A上的点坐标&#xff1b; AngleA&#xff1a;直线A的倾斜角&#xff0c;单位度&#xff1b; PointB&#xff1a;直线B上的点坐标&#xf…

【日常记录】【JS】@babel/core @babel/polyfill @babel/preset-env core-js 介绍

文章目录 1、介绍1.1 babel/core1.2 babel/polyfill1.3 babel/preset-env 2、基本使用3、参考链接 1、介绍 1.1 babel/core babel/core 是 Babel 编译器的核心模块&#xff0c;它是 Babel 工具链的核心组件之一。Babel 是一个 JavaScript 编译器&#xff0c;主要用于将 ECMASc…

数据结构——链表(单链表)

大家好&#xff0c;又是我&#xff08;小锋&#xff09;&#xff0c;今天给大家带了一个比较有挑战的章节&#xff08;链表&#xff09;&#xff0c;但是不用担心&#xff0c;小锋会陪大家一起度过。 顺序表的思考与问题 1. 中间/头部的插入删除&#xff0c;时间复杂度为O(N) …

rhcsa复习4

文件权限 文件的权限针对三类对象进行定义 owner 属主&#xff0c;缩写 u group 属组&#xff0c;缩写 g other 其他&#xff0c;缩写 o 每个文件针对每类访问者定义了三种主要权限 r &#xff1a; Read 读 - 文本文件 cat tac more less head tail paste d ls -l 列…

数字范围按位与

题目链接 数字范围按位与 题目描述 注意点 0 < left < right < 2^31 - 1包含 left 、right 端点 解答思路 返回区间内所有数字按位与的结果&#xff0c;所以区间内所有数字在某一位的值相同&#xff0c;则结果该位数字为该值&#xff0c;否则该位数字为0&#xf…

【漏洞复现】XETUX 系统 dynamiccontent 接口处存在远程代码执行漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

xftp突然无法连接虚拟机

问题描述 使用xftp连接虚拟机的时候一直显示 连接xxx.xxx.xx.xx失败 问题原因查找 首先打开本地cmd命令提示符 ping 你的虚拟机ip地址 我的是 ping 192.168.xx.xx 显示请求超时 解决方案&#xff1a; 点击打开更改适配器选项 右键vmnet 8——属性 如图前四个选项必选 单…

docker环境配置过程中的常见问题

1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…

液体和固体介质的电气特性

本篇为本科课程《高电压工程基础》的笔记。 液体和固体介质广泛应用于高压电气设备内&#xff0c;作为设备的内绝缘。描述电介质的电气特性的四大参数是介电常数 ε \varepsilon ε、电导率 γ \gamma γ、介质损耗角正切 tan ⁡ δ \tan\delta tanδ和击穿场强 E b E_b Eb​。…