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

浏览器八股

面试系列文章

  • 万字总结我在寒冬里的面试准备经历
  • 前端铜九铁十面试必备八股文——【HTML&CSS】
  • 前端铜九铁十面试必备八股文——【JavaScript】
  • 前端铜九铁十面试必备八股文——【Vue】
  • 前端铜九铁十面试必备八股文——【浏览器】
  • 前端铜九铁十面试必备八股文——【网络相关】
  • 前端铜九铁十面试必备八股文——【性能优化】
  • 前端铜九铁十面试必备八股文——【工程化】
  • 前端铜九铁十面试必备八股文——【手写代码】

XSS(跨站脚本攻击)

XSS 攻击指的是跨站脚本攻击,是一种 代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。

避免方式

  • 不用服务器端拼接后返回(不使用服务端渲染)。
  • 对一些敏感信息进行保护,比如 cookie 使用 http-only,使得脚本无法获取。
  • 对用户输入的地方和变量都需要仔细检查长度和对 &#x201D;<",">&#x201D;,&#x201D;;&#x201D;,&#x201D;&#x2019;&#x201D; </",">等字符做过滤

CSRF(跨站请求伪造)

CSRF 攻击的本质是利用 cookie 会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充。

避免方式

  • 添加验证码验证
  • 使用 token验证
  • 限制 cookie 不能作为被第三方使用
  • 进行同源检测

什么进程和线程?有什么区别

进程(Process)

进程是计算机中正在运行的程序的实例, 一个进程就是一个程序运行实例。它拥有独立的内存空间、代码和数据,并且由操作系统负责调度和管理。 每个进程在执行时都会分配独立的内存空间,不同进程之间的内存是隔离的,一个进程的错误不会直接影响其他进程。 进程之间通过进程间通信(IPC)机制来交换数据和进行通信,常见的 IPC方式包括管道、消息队列、共享内存等。进程的切换开销较大,因为需要保存和恢复进程的完整状态,涉及到内存保护和虚拟内存的切换。

线程(Thread)

线程是进程的子任务,一个进程可以包含多个线程。它们共享相同的代码和数据,但拥有独立的执行栈和寄存器集合。 多个线程可以在同一进程内并发执行,共享进程的资源,如内存空间、打开的文件等。线程间的通信和数据交换比进程间的通信更加方便,因为它们共享相同的地址空间。线程的切换开销较小,因为线程共享进程的地址空间,切换时不需要切换内存页表,速度较快。

区别

  • 进程和线程都可以实现并发执行,但进程是独立的执行实体,而 线程是依赖于进程的
  • 进程之间资源相互隔离, 线程共享所属进程的资源
  • 创建和销毁线程的开销较小,而创建和销毁进程的开销较大。
  • 多线程程序的编程复杂度通常比单线程程序高,但多线程可以更好地利用多核处理器来提高程序的执行效率。

浏览器有哪些进程

  • 主进程:负责处理用户输入、渲染页面等主要任务。
  • 渲染进程:渲染进程负责解析 HTMLCSSJavaScript,并将网页渲染成可视化内容。
  • GPU进程:负责处理浏览器中的 GPU加速任务。
  • 网络线程:网络进程负责处理浏览器中的网络请求和响应,包括下载网页和资源等。
  • 插件进程:负责浏览器插件运行。

协商缓存和强缓存的区别

强缓存

使用强缓存策略时,如果缓存资源有效,浏览器会 从本地读取缓存资源并返回200,不必再向服务器发起请求。强缓存策略可以通过两种方式来设置,分别是 http 头信息中的 Expires 属性和 Cache-Control 属性。

Expires指定资源的过期时间。在过期时间以内,改资源可以被缓存使用,不需要向浏览器发送请求。这个时间依赖于服务器时间,会存在服务器时间和客户端时间不一致。

Cache-Control属性:

  • private: 仅浏览器可以缓存
  • public:浏览器和代理服务器都可以缓存
  • max-age=xxx 过期时间,单位为秒
  • no-cache 不进行强缓存,但会有协商缓存
  • no-store 不强缓存,也不协商缓存

当两种方式一起使用时, Cache-Control 的优先级要高于 Expires

协商缓存

如果设置强缓存,无需发起请求,直接使用缓存内容。如果没有命中强缓存,设置了协商缓存,也不需要发起请求,使用缓存。

命中协商缓存条件:

  • Cache-Control: no-cache
  • max-age时间过期

在使用协商缓存时, 会先向服务器发送一个请求,如果资源没有发生修改,则请求返回304状态,让浏览器使用本地缓存。如果资源发生修改,则返回修改后的内容

request headers中的 Etag属性和 Last-Modified属性,来进行设置。其中, ETage优先于Last-Modified

Etag文件改动 服务器在返回资源的时候,在头信息中添加 Etag属性,这个属性是资源的唯一标识符。当资源改变,这个值也会改变。下次请求资源时,会在请求头中添加 If-None-Match属性,为上一次请求的资源的 Etag值。服务端会通过这个属性和资源最后一次修改时间进行对比,以此来判断资源是否修改。这种方式比 Last-Modified更加准确。

Last-Modified 上次修改时间 服务器通过在响应头上添加 Last-Modified属性,来指出资源 最后一次修改时间。当浏览器发起请求时,会在请求头上添加一个 IF-Modified-Since属性,值为上一次资源请求的 Last-Modified的值。服务区会通过这个属性和最后修改时间来进行比较,以此来判断资源是否修改。如果没有资源修改,返回 304状态,使用本地缓存。如果资源修改,就返回最新资源, 200状态。

这种方式有个缺点, Last-Modified标记的时间只能精确到1秒,如果文件在1秒内修改,但是 Last-Modified 却没有改变,这样会造成缓存命中的不准确。

区别

  • 强缓存优先级高于协商缓存
  • 协商缓存不论命中与否都会发送一次请求
  • 强缓存返回 200,协商缓存命中返回 304
  • Ctrl+F5 会强制刷新会跳过所有缓存,而F5刷新跳过强缓存,但是会检查协商缓存。

为什么需要浏览器缓存?

使用浏览器缓存,有以下优点:

  • 减少了服务器的负担,提高了网站的性能
  • 加快了客户端网页的加载速度
  • 减少了多余网络数据传输

常见浏览器所用内核

  • IE浏览器内核, Trident 内核,也是俗称的 IE内核;
  • Chrome 浏览器内核,以前是 Webkit 内核,现在是 Blink内核;
  • Firefox 浏览器内核: Gecko 内核,俗称 Firefox 内核;
  • Safari 浏览器内核: Webkit 内核;
  • 360浏览器、猎豹浏览器内核: IE + Chrome 双内核;

浏览器的渲染过程

  • 解析文档,生成 DOM
  • 解析 CSS,根据 CSS规则生成 CSSOM规则树
  • CSSOM树和 DOM树生成完后,合并 DOMCSSOM树构建渲染树
  • 渲染树构建完成后,开始计算元素大小和位置【回流发生在这个阶段】
  • 根据计算好的位置信息将内容渲染到屏幕上【重绘发生在这个阶段】

浏览器渲染优化

  • 优化 javaScriptJavaScript会阻塞HTML的解析,改变 JavaScrip加载方式。
    • JavaScript放到 body最后面
    • 尽量使用异步加载 JS资源,这样不会阻塞 DOM解析,如defer、async
  • 优化CSS加载,
    • CSS样式少,使用内嵌样式
    • 导入外部样式使用 link,而不是 @import,因为它会阻塞渲染。
  • 减少回流重绘
    • 避免频繁操作样式
    • 避免频繁操作DOM
    • 复杂动画使用定位脱离文当流
    • 使用 transform替代动画

Cookie、LocalStorage、SessionStorage区别

Cookie

  • 大小只有4kb
  • 跨域不能共享
  • 不安全,容易被劫持
  • 只存在请求头中

SessionStorage

  • 存储在内存中,体积相对较大
  • 页面关闭,数据会消失
  • 相对Cookie安全

LocalStorage

  • 体积大,可以存储更多内容。
  • 生命周期长,除非手动删除,不然会一直存在
  • 存储在硬盘中,不会像Cookie一样被请求携带

什么是同源策略

跨域问题其实就是浏览器的同源策略造成的。 同源指的是: 协议端口号域名必须一致。

如何解决跨越问题

  • CORS:服务器开启跨域资源共享
  • JSONP:利用 `

Node和浏览器事件循环机制的区别

  • 浏览器事件循环会在宏任务结束后,检查微任务。而Node的微任务是在两个阶段之间执行。
  • 浏览器的process.nextTick和其他微任务优先级一样,而node中要高于其他优先级。
`

相关文章:

浏览器八股

面试系列文章 万字总结我在寒冬里的面试准备经历前端铜九铁十面试必备八股文——【HTML&CSS】前端铜九铁十面试必备八股文——【JavaScript】前端铜九铁十面试必备八股文——【Vue】前端铜九铁十面试必备八股文——【浏览器】前端铜九铁十面试必备八股文——【网络相关】前…...

华为机试HJ18 识别有效的IP地址和掩码并进行分类统计

首先看一下题 描述 请解析IP地址和对应的掩码&#xff0c;进行分类识别。要求按照A/B/C/D/E类地址归类&#xff0c;不合法的地址和掩码单独归类。 所有的IP地址划分为 A,B,C,D,E五类 A类地址从1.0.0.0到126.255.255.255; B类地址从128.0.0.0到191.255.255.255; C类地址从192.0.…...

计算机网络——TCP拥塞控制原理

吞吐量 端口有16位...

ubuntu-开机黑屏问题快速解决方法

开机黑屏一般是由于显卡驱动出现问题导致。 快速解决方法&#xff1a; 通过ubuntu高级选项->recovery模式->resume->按esc即可进入recovery模式&#xff0c;进去后重装显卡驱动&#xff0c;重启即可解决。附加问题&#xff1a;ubuntu的默认显示管理器是gdm3,如果重…...

DNS服务器

正反解析 [rootlocalhost ~]# systemctl stop firewalld #关防火墙 [rootlocalhost ~]# setenforce 0 #关闭selinux [rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# yum …...

【C++笔记】string类使用详解

前言 各位读者朋友们大家好&#xff01;上期我们讲完了C的模板初阶&#xff0c;这一期我们开启STL的学习。STL是C的数据结构和算法库&#xff0c;是我们学习C的很重要的一部分内容&#xff0c;在以后的工作中也很重要。现在我们开始讲解。 目录 前言一. 为什么学习string类1.…...

数字隔离器与光隔离器有何不同?---腾恩科技

在电子隔离中&#xff0c;两种常用的解决方案是数字隔离器和光学隔离器。两者都旨在电气隔离电路的各个部分&#xff0c;以保护敏感元件免受高压干扰&#xff0c;但它们通过不同的技术实现这一目标。本文探讨了这些隔离器之间的差异&#xff0c;重点介绍了它们的工作原理、优势…...

方差与协方差

方差是一种特殊的协方差。...

【含文档】基于Springboot+Vue的工商局商家管理系统 (含源码数据库+LW)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...

【股票市场情绪量化模型】

股票市场情绪量化模型&#xff1a;理论与实践 目录 什么是股票市场情绪情绪量化模型的基本概念情绪数据的来源与获取情绪量化模型的构建 4.1 情绪指标的选择4.2 模型设计与算法 情绪与市场表现的关系情绪量化模型的应用案例模型的局限性与挑战总结 1. 什么是股票市场情绪 股…...

Oracle视频基础1.3.8与1.4.1练习

1.3.8与1.4.1 -看数据文件的目录&#xff0c; dump 的目录&#xff0c;oracle的软件目录 -(secureCRT&#xff0c;telnet连接linux。)看当前用户&#xff0c;当前所属组&#xff0c;通过操作系统认证以sysdba登陆,启动数据库然后关闭 -看口令文件 看数据文件的目录&#xff0c…...

基于前馈神经网络模型和卷积神经网络的MINIST数据集训练

目录 前馈神经网络FNN模型 卷积神经网络CNN模型 前馈神经网络FNN模型 author: lxy function: model--mnist date : 2024/10/25 email : 13102790991163.com # 导入必要的库 import torch import torch.nn as nn import torchvision.datasets as dsets import torchvision.t…...

Vue3中Element Plus==el-eialog弹框中的input无法获取表单焦点

有弹框情况下 <template> <input ref"input" /> </template> <script setup> import { ref, onMounted } from vue // 声明一个 ref 来存放该元素的引用 // 必须和模板里的 ref 同名 const input ref(null) onMounted(() > { ne…...

16.网工入门篇--------介绍下网络服务及应用

一、网络服务的概念 网络服务是指通过网络提供的软件功能或设施&#xff0c;它允许不同的设备和用户在网络环境中进行信息交换、资源共享和协作。这些服务基于各种网络协议&#xff0c;以实现高效、可靠的通信。 二、常见网络服务类型 &#xff08;一&#xff09;文件传输服务 …...

区分 electron 全屏和最大化

一. 全屏 在 Electron 中&#xff0c;当窗口处于全屏状态时&#xff0c;通常不能直接使用 JavaScript 来改变窗口大小。这是出于安全和用户体验的考虑&#xff0c;以防止意外的窗口大小变化影响全屏体验。 1. 退出全屏后再调整大小 检测全屏状态&#xff0c;退出全屏并调整大…...

封装一个请求的hook(react函数组件)

对于后台系统&#xff0c;上面筛选&#xff0c;下面表格分页的页面&#xff0c;这个hook非常实用 omitBy方法&#xff1a;过滤不为undefined的对象属性 export const omitBy <T extends IObject, K extends keyof T>(object:T, predicate:(value:T[K]) > boolean):I…...

c语言内存块讲解

文章目录 前言一、栈区1、栈区的特点&#xff1a;1.1 自动管理1.2 后进先出1.3 有限大小1.4 高速访问1.5 栈区存储方向 2、栈区使用注意事项 二、堆区1、堆区的定义2、堆区的特点3、堆区的内存分配与释放4、注意事项&#xff1a; 三、全局/静态存储区1、全局存储区1.1 全局变量…...

2024年10月23日Github流行趋势

项目名称&#xff1a;hiteshchoudhary / apihub 项目维护者&#xff1a;wajeshubham, atulbhatt-system32, jwala-anirudh, arnb-smnta, shrey-dadhaniya 项目介绍&#xff1a;您自己的API Hub&#xff0c;用于学习和掌握API交互。非常适合前端、移动开发人员和后端开发人员。 …...

YOLOv6-4.0部分代码阅读笔记-dbb_transforms.py

dbb_transforms.py yolov6\layers\dbb_transforms.py 目录 dbb_transforms.py 1.所需的库和模块 2.def transI_fusebn(kernel, bn): 3.def transII_addbranch(kernels, biases): 4.def transIII_1x1_kxk(k1, b1, k2, b2, groups): 5.def transIV_depthconcat(kernel…...

C++ 基础语法 一

C 基础语法 一 文章目录 C 基础语法 一const 限定符常量指针类型别名autodecltypeQStringvector迭代器指针和数组显示转换static_castconst_cast 函数尽量使用常量引用数组形参不要返回局部对象的引用和指针返回数组指针 C四种转换内联函数constexpr函数函数指针 const 限定符 …...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...