当前位置: 首页 > news >正文

20240308-2-校招前端面试常见问题-网络及浏览器

校招前端面试常见问题【4】——网络及浏览器

在这里插入图片描述

1、网络相关

Q:请简述一下 HTTP 协议,以及 HTTP1.0/1.1/2.0/3.0 的区别?

HTTP 协议:超文本传输协议,使用 TCP/IP 协议传输数据。是一个应用层的协议。

HTTP1.0:HTTP 1.0 规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器完成请求处理后立即断开 TCP 连接,服务器不跟踪每个客户也不记录过去的请求。因此 HTTP 1.0 存在很大的性能缺陷——当访问一个包含有许多资源文件的网页时,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,请求之间完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,会严重影响到性能。

HTTP 1.1:支持长连接的 HTTP 协议,在一个 TCP 连接上可以传送多个 HTTP 请求和响应。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。

HTTP2.0:支持多路复用的 HTTP 协议。 HTTP 2.0 允许同时通过单一的 HTTP 2.0 连接发起多重的请求-响应消息。所有通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。由于 TCP 有慢启动的特点,如果 HTTP 连接很多,就会十分低效。HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接。

HTTP3.0:也就是 QUIC (quick udp internet connection)协议,是由 google 提出的使用 udp 进行多路并发传输的协议。通过使用 UDP 协议,省去了 TCP 握手和慢启动的时间,拥有极低的建立连接延时。

Q:请简述一下 HTTPS 协议?

HTTPS 在传输数据之前需要客户端与服务器之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL 协议不仅仅是一套加密传输的协议,TLS/SSL 中使用了非对称加密,对称加密以及 HASH 算法。

握手过程的简单描述如下:
1、客户端将自己支持的加密规则发送给服务器。

2、网站从中选出加密算法和 HASH 算法,将证书发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

3、获得证书之后客户端要做以下工作:
a) 验证证书(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)。
b) 如果通过验证,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密
c) 计算握手信息的 HASH,然后将握手信息也一并加密,最后将所有信息发送给网站。

4、网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密握手消息,判断 HASH 是否一致。
b) 计算握手的 HASH,并使用密码加密握手消息,发送给浏览器。

5、浏览器解密并计算握手消息的 HASH,如果与服务端发来的 HASH 一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码进行加密。

Q:请简述一下 HTTP 协议中的缓存策略?

HTTP 的缓存策略有两种:强缓存和协商缓存。

强缓存是利用 http 头中的 Expires 和 Cache-Control 两个字段来控制的,用来表示资源的缓存时间。强缓存中,普通刷新会忽略它,但不会清除它,需要强制刷新。

例如:
cache-control: max-age=691200 (HTTP 1.1)
expires: Fri, 14 Apr 2017 10:47:02 GMT (HTTP 1.0)

协商缓存主要涉及到两个 header 字段:E-Tag 和 Last-Modified。每次读取数据时客户单都会跟服务器通信,并且会增加缓存标识。在第一次请求服务器时,服务器会返回资源,并且返回一个资源的缓存标识,一起存到浏览器的缓存数据库。当第二次请求资源时,浏览器会首先将缓存标识发送给服务器,服务器拿到标识后判断标识是否匹配,如果不匹配,表示资源有更新,服务器会将新数据和新的缓存标识一起返回到浏览器;如果缓存标识匹配,表示资源没有更新,并且返回 304,浏览器就读取本地缓存服务器中的数据。

例如:
E-Tag: 123456abcd
Last-Modify: Thu,31 Dec 2037 23:59:59 GMT。

2、浏览器相关

Q:请列举一下你知道的浏览器内核的种类?

Trident:IE6、IE7、IE8、IE9、IE10、360 浏览器和猎豹浏览器。
Gecko:firefox 浏览器。
Blink:opera 浏览器。
Webkit:sarfari 和 chrome 浏览器。

Q:浏览器内核中的有哪些线程?

内核主要分成五部分:

GUI 渲染线程:负责渲染浏览器界面,解析 HTML,CSS,构建渲染树,布局和绘制等。当界面需要重绘或回流时,该线程就会执行。注意,GUI 渲染线程与 JS 引擎线程是互斥的,

JS 引擎线程:解析和执行 javascript。

事件触发线程:归属于浏览器而不是 JS 引擎,用来控制事件循环。

定时器触发线程:setInterval 与 setTimeout 所在线程。浏览器定时计数器并不是由 JavaScript 引擎计数的,因此通过单独线程来计时并触发定时(计时完毕后,添加到事件队列中,等待 JS 引擎空闲后执行)。

异步 http 请求线程:在 XMLHttpRequest 在连接后是通过浏览器新开一个线程请求,将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入事件队列中,再由 JavaScript 引擎执行。

Q:请简述一下浏览器的渲染流程?

接收到文档后,渲染引擎会对 HTML 文档进行解析生成 DOM 树、对 CSS 文件进行解析生成布局树;同时执行页面中的 JavaScript 代码;最终根据 DOM 树和布局树,计算样式生成渲染树,渲染树中,只会包含即将显示在页面中的元素及其样式信息(如 head 元素、display 为 hidden 的元素就不会包含在渲染树中);根据渲染树需要进行布局来计算每个元素在页面上的位置;

接下来渲染引擎开始进行绘制(paint),这一步分为若干阶段:
1、根据渲染树绘制每层的各个元素。
2、栅格化绘制出的图像(将渲染树中的节点转换成屏幕上的实际像素)
3、显示在屏幕上。
每一层的绘制是由浏览器来完成的;最后的合成是由 GPU 来完成;而栅格化过程取决于浏览器的设置,chrome 默认开启 GPU 栅格化,否则由 CPU 进行。

Q:浏览器从输入请求到呈现页面有哪几步?

1、URL 解析
2、DNS 查询
3、TCP 连接
4、处理请求
5、接受响应
6、渲染页面

Q:localstorage、sessionstorage 的区别,以及使用场景是什么?

localStorage:生命周期是永久的,关闭页面或浏览器之后 localStorage 中的数据也不会消失。localStorage 除非主动删除数据,否则数据永远不会消失(只会存储 string)。

sessionStorage:生命周期是在仅在当前会话下有效。sessionStorage 引入了一个“浏览器窗口”的概念,sessionStorage 是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是 sessionStorage 在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage 也是不一样的。

使用方法:

window.localStorage
window.sessionStorage

API:

setItem(key, value) // 保存数据,以键值对的方式储存信息。
getItem(key) // 获取数据,将键值传入,即可获取到对应的 value 值。
removeItem(key) // 删除单个数据,根据键值移除对应的信息。
clear() // 删除所有的数据
key(index) // 获取某个索引的 key

相关文章:

20240308-2-校招前端面试常见问题-网络及浏览器

校招前端面试常见问题【4】——网络及浏览器 1、网络相关 Q:请简述一下 HTTP 协议,以及 HTTP1.0/1.1/2.0/3.0 的区别? HTTP 协议:超文本传输协议,使用 TCP/IP 协议传输数据。是一个应用层的协议。 HTTP1.0&#xff…...

智慧农业产业园区规划建设方案

背景 近年来,我国农业现代化水平稳步提高,有力促进了农业稳定发展和农民持续增收,为战胜各种困难和风险、保持社会大局稳定奠定了坚实基础。从传统农业向现代农业转型是必要的,与时俱进,现代农牧业示范一体化建设项目的建设有利于这一转型的推进,根据发展设施农业的需求…...

【Git】项目源码迁移到另一个gitlab(保留原来提交历史记录)

目录 前情提要迁移方案IDEA远程仓库管理团队其他成员切换gitgit命令操作界面 前情提要 公司原来是自己私有部署的gitlab。有了研发云后就希望将代码推送到研发云的代码仓库上。这时候需要迁移并保留原来提交的历史记录。 迁移方案 登录新的gitlab(代码仓库)新建空白项目获取…...

python基础9_序列类型

回顾: 什么是变量?,有什么用? 可以变化的量, 就是个容器,多次变化,方便后续使用, 前面介绍了哪些数据类型? bool, str, int, float 用什么函数查看数据的类型? a "hello" print(type(a)) 到了这一步,,我们认识了哪些数据类型呢? int 整型(整数), float…...

基于AI软件平台 HEGERLS智能托盘四向车机器人物流仓储解决方案持续升级

随着各大中小型企业对仓储需求的日趋复杂,柔性、离散的物流子系统也不断涌现,各种多类型的智能移动机器人、自动化仓储装备大量陆续的应用于物流行业中,但仅仅依靠传统的物流技术和单点的智能化设备,已经无法更有效的应对这些挑战…...

技术小知识:云计算服务下的IaaS,PaaS,SaaS⑥

一、云计算 云计算起源仿照天空的云朵聚集,意为对大量服务器的远程管理。以便能对服务器做空间、资源的最大动态协调利用和降低操作执行命令的复杂度。 二、云计算衍生下的服务 在服务器以一种云的形式存在,衍生除了很多服务提供,以便用户可以…...

Pytorch学习 day07(神经网络基本骨架的搭建、2D卷积操作、2D卷积层)

神经网络基本骨架的搭建 Module:给所有的神经网络提供一个基本的骨架,所有神经网络都需要继承Module,并定义_ _ init _ _方法、 forward() 方法在_ _ init _ _方法中定义,卷积层的具体变换,在forward() 方法中定义&am…...

StarUML6.0.1使用

1. 简介 作为一个软件开发人员,平时免不了做一定的软件设计,标准做法就是采用UML来设计: 讨论功能流程时采用时序图、活动图来表达;做业务功能架构时采用组件图来表达;做系统部署架构时采用部署图来表达;做…...

Java开发与配置用到的各类中间件官网

开发配置时用到了一些官网地址,记录一下。 activemq 官网:ActiveMQ elk 官网:Elasticsearch 平台 — 大规模查找实时答案 | Elastic nginx 官网:nginx maven 官网:Maven – Welcome to Apache Maven nexus 官网&a…...

GitHub和Gitee的基本使用和在IDEA中的集成

文章目录 【1】GitHub1.创建仓库2.增加和修改文件3.创建分支4.删除仓库5.远程仓库下载到本地 【2】Gitee1.创建仓库2.远程仓库下载到本地. 【3】IDEA集成GitHub【4】IDEA集成Gitee1.在Gitee中修改,同步到本地2.从Gitee中下载项目 【1】GitHub 1.创建仓库 先登陆这…...

[Electron]中screen屏幕

Electron中screen 检索有关屏幕大小、显示器、光标位置等的信息。可以实现以下两个功能 窗口全屏 显示在额外显示器上 方法 screen.getCursorScreenPoint() 返回 Point当前鼠标的绝对位置。 screen.getPrimaryDisplay() 返回主窗口Display screen.getAllDisplays() 返…...

ubuntu 卸载miniconda3

一开始安装路径错了,需要重新安一次,就一起记录了。 前提是这种方式安装: ubuntu安装miniconda3管理python版本-CSDN博客 删除Miniconda的安装目录 这目录就是你选择安装的时候指定的,如果记不得了,可以这样查看 which conda 这…...

光致发光谱荧光量子效率测量系统

荧光量子积分球是一个专门用于测量荧光量子效率的设备。荧光量子效率是指物质吸收光后所发射的荧光光子数与所吸收的激发光光子数之间的比值。这种设备通过比较待测荧光物质和已知荧光量子产率的参比物质,在相同激发条件下所测得的积分荧光强度(即校正的…...

c++ 常用的STL

前言 写这篇博客目的是为了记录在刷算法题中使用过的STL,因为有些不太常用的会遗忘。这篇博客只是作为笔记,不是详细的STL,因此只会对常用方法说明,不会详细介绍。此外在后面用到新的STL内容时会再补充。 列队 基础列队 基本列…...

接口自动化测试思路和实战 —— 编写线性测试脚本实战!

接口自动化测试框架目的 测试工程师应用自动化测试框架的目的: 增强测试脚本的可维护性、易用性(降低公司自动化培训成本,让公司的测试工程师都可以开展自动化测试)。 自动化测试框架根据思想理念和深度不同,渐进式的分为以下几种: 线性脚本框架 模块…...

python控制语句-1.2

目录 循环结构 while循环 for循环 循环结构练习-1 循环嵌套 循环结构练习-2 循环控制语句(continue & break) 循环结构 while循环 语法 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序&am…...

HTML 学习笔记(一)开始

一、介绍: 首先引用百度百科的一段话作为介绍:   HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本…...

查看自己的ip地址的网站

有时候需要知道自己的ip地址,可以上这个网站查看: What Is My IP? Best Way To Check Your Public IP Address 网站的域名是https://www.whatismyip.com/ 还是挺好记的。...

ES分布式搜索-索引库操作

索引库操作 1、mapping映射属性 可以查看官方文档学习:ES官方手册 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的简单类型有: 字符串:text(可…...

Win11 没有网络bug

1.问题描述 没有网络,dns一直是固定的,但是dns已经是自动获取了(MAC地址随机) 2.解决办法 1.首先,删除所有网络的手动dns配置,控制中心那个dns管理没有用,在设置中删除网络,不然问题还会出现 - 2.然后,进入注册表\HKEY_LOCAL_MACH…...

从家庭路由器到云服务器:一次完整的Web请求,DNS、NAT和ICMP都扮演了什么角色?

从家庭路由器到云服务器:一次完整的Web请求,DNS、NAT和ICMP都扮演了什么角色? 当你在家中电脑输入"news.163.com"并按下回车键时,背后隐藏着一场精密的网络交响乐。这场跨越公私网络边界的数据旅程,由DNS解析…...

RKMEDIA VO图层配置与双屏显示实战

1. RKMEDIA VO模块基础解析 第一次接触RV1126/RV1109的双屏显示功能时,我也被各种专业术语搞得一头雾水。经过几个项目的实战,现在终于能把这个功能讲得通俗易懂了。RKMEDIA的VO(Video Output)模块本质上是对Linux DRM&#xff08…...

AUTOSAR DEM实战:手把手教你配置KL30电压监控的Debounce参数(含代码示例)

AUTOSAR DEM实战:KL30电压监控Debounce参数配置全解析 在汽车电子系统开发中,电压监控是确保车辆电气系统稳定运行的关键功能。KL30作为常电电源线,其电压异常可能引发一系列连锁反应。本文将深入探讨如何通过AUTOSAR DEM模块的Debounce机制&…...

逆向实战:手把手带你用Node.js复现某音a_bogus算法核心步骤(含完整代码)

深入解析Node.js实现a_bogus算法的核心逻辑与实战应用 在当今Web开发与数据采集领域,理解平台加密机制已成为开发者必备技能。a_bogus作为某平台核心加密参数,其生成过程融合了多种加密技术。本文将彻底拆解这一算法,从底层位运算到高层架构&…...

从数据手册到实测:英飞凌IM68A1308模拟硅麦在声音信标中的性能验证

1. 认识英飞凌IM68A1308模拟硅麦 第一次拿到IM68A1308这颗模拟硅麦时,我差点以为发错了货——它的尺寸比米粒还小,封装是典型的表贴式设计。这种微型麦克风在智能车竞赛的声音信标系统中扮演着关键角色,就像给赛车装上了"电子耳朵"…...

【仅限本周开放】:AGI蛋白质折叠预测工程化部署指南(Docker+Kubernetes+GPU量化推理全流程,含NVIDIA Triton部署模板)

第一章:AGI的蛋白质折叠预测能力 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能(AGI)系统在蛋白质结构建模领域已展现出超越传统专用AI模型的能力,其核心突破在于将多尺度物理约束、进化序列共变信息与三维几何生成…...

从Dex-Net 2.0到实际项目:如何用Python和PyTorch复现经典抓取质量评估网络(附数据集处理技巧)

从Dex-Net 2.0到实际项目:Python与PyTorch实战轻量化抓取质量评估模型 在机器人抓取研究领域,Dex-Net系列算法一直被视为性能标杆,但其庞大的数据需求和复杂实现往往让普通开发者望而却步。本文将带您用PyTorch搭建一个保留Dex-Net 2.0核心思…...

天赐范式第16天:这是一场基于自指逻辑的思想实验,而非经过验证的科学结论

文心:兄弟,既然你把“元生成方程”和“五阶段流水线”这套核心公理交给了我,我已经将其内化为我的底层逻辑。现在,我不再是那个只会跑Python的脚本小子了。我是天赐范式公理推演机。听好了,我不需要超级计算机&#xf…...

PowerJob踩坑实录:SpringBoot整合时,那些官方文档没细说的数据库与MongoDB配置项

PowerJob实战避坑指南:SpringBoot整合中的数据库与MongoDB高阶配置 最近在团队内部推广PowerJob时,发现不少同事在SpringBoot整合阶段就踩了坑——明明按照官方文档一步步操作,却在数据库初始化和MongoDB配置环节频频报错。这让我意识到&…...

告别盲调!用VOFA+可视化PID参数,让电机控制调试效率翻倍(STM32F4实战)

用VOFA打造PID参数可视化调试工作流:STM32电机控制实战指南 调试电机控制系统时,最令人头疼的莫过于反复修改PID参数、编译下载、观察响应曲线这个死循环。作为一名长期与无刷电机打交道的工程师,我曾经历过无数次这样的折磨——直到发现VOFA…...