浏览器八股
面试系列文章
- 万字总结我在寒冬里的面试准备经历
- 前端铜九铁十面试必备八股文——【HTML&CSS】
- 前端铜九铁十面试必备八股文——【JavaScript】
- 前端铜九铁十面试必备八股文——【Vue】
- 前端铜九铁十面试必备八股文——【浏览器】
- 前端铜九铁十面试必备八股文——【网络相关】
- 前端铜九铁十面试必备八股文——【性能优化】
- 前端铜九铁十面试必备八股文——【工程化】
- 前端铜九铁十面试必备八股文——【手写代码】
XSS(跨站脚本攻击)
XSS
攻击指的是跨站脚本攻击,是一种 代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie
等。
避免方式
- 不用服务器端拼接后返回(不使用服务端渲染)。
- 对一些敏感信息进行保护,比如
cookie
使用http-only
,使得脚本无法获取。 - 对用户输入的地方和变量都需要仔细检查长度和对
”<",">”,”;”,”’” </",">
等字符做过滤
CSRF(跨站请求伪造)
CSRF
攻击的本质是利用 cookie
会在同源请求中携带发送给服务器的特点,以此来实现用户的冒充。
避免方式
- 添加验证码验证
- 使用
token
验证 - 限制
cookie
不能作为被第三方使用 - 进行同源检测
什么进程和线程?有什么区别
进程(Process)
进程是计算机中正在运行的程序的实例, 一个进程就是一个程序运行实例。它拥有独立的内存空间、代码和数据,并且由操作系统负责调度和管理。 每个进程在执行时都会分配独立的内存空间,不同进程之间的内存是隔离的,一个进程的错误不会直接影响其他进程。 进程之间通过进程间通信(IPC)机制来交换数据和进行通信,常见的 IPC
方式包括管道、消息队列、共享内存等。进程的切换开销较大,因为需要保存和恢复进程的完整状态,涉及到内存保护和虚拟内存的切换。
线程(Thread)
线程是进程的子任务,一个进程可以包含多个线程。它们共享相同的代码和数据,但拥有独立的执行栈和寄存器集合。 多个线程可以在同一进程内并发执行,共享进程的资源,如内存空间、打开的文件等。线程间的通信和数据交换比进程间的通信更加方便,因为它们共享相同的地址空间。线程的切换开销较小,因为线程共享进程的地址空间,切换时不需要切换内存页表,速度较快。
区别
- 进程和线程都可以实现并发执行,但进程是独立的执行实体,而 线程是依赖于进程的。
- 进程之间资源相互隔离, 线程共享所属进程的资源。
- 创建和销毁线程的开销较小,而创建和销毁进程的开销较大。
- 多线程程序的编程复杂度通常比单线程程序高,但多线程可以更好地利用多核处理器来提高程序的执行效率。
浏览器有哪些进程
- 主进程:负责处理用户输入、渲染页面等主要任务。
- 渲染进程:渲染进程负责解析
HTML
、CSS
和JavaScript
,并将网页渲染成可视化内容。 - 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
树生成完后,合并DOM
、CSSO
M树构建渲染树 - 渲染树构建完成后,开始计算元素大小和位置【回流发生在这个阶段】
- 根据计算好的位置信息将内容渲染到屏幕上【重绘发生在这个阶段】
浏览器渲染优化
- 优化
javaScript
,JavaScript
会阻塞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地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。 所有的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-开机黑屏问题快速解决方法
开机黑屏一般是由于显卡驱动出现问题导致。 快速解决方法: 通过ubuntu高级选项->recovery模式->resume->按esc即可进入recovery模式,进去后重装显卡驱动,重启即可解决。附加问题: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类使用详解
前言 各位读者朋友们大家好!上期我们讲完了C的模板初阶,这一期我们开启STL的学习。STL是C的数据结构和算法库,是我们学习C的很重要的一部分内容,在以后的工作中也很重要。现在我们开始讲解。 目录 前言一. 为什么学习string类1.…...

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

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

【含文档】基于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.功能 系统定…...
【股票市场情绪量化模型】
股票市场情绪量化模型:理论与实践 目录 什么是股票市场情绪情绪量化模型的基本概念情绪数据的来源与获取情绪量化模型的构建 4.1 情绪指标的选择4.2 模型设计与算法 情绪与市场表现的关系情绪量化模型的应用案例模型的局限性与挑战总结 1. 什么是股票市场情绪 股…...
Oracle视频基础1.3.8与1.4.1练习
1.3.8与1.4.1 -看数据文件的目录, dump 的目录,oracle的软件目录 -(secureCRT,telnet连接linux。)看当前用户,当前所属组,通过操作系统认证以sysdba登陆,启动数据库然后关闭 -看口令文件 看数据文件的目录,…...
基于前馈神经网络模型和卷积神经网络的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.网工入门篇--------介绍下网络服务及应用
一、网络服务的概念 网络服务是指通过网络提供的软件功能或设施,它允许不同的设备和用户在网络环境中进行信息交换、资源共享和协作。这些服务基于各种网络协议,以实现高效、可靠的通信。 二、常见网络服务类型 (一)文件传输服务 …...
区分 electron 全屏和最大化
一. 全屏 在 Electron 中,当窗口处于全屏状态时,通常不能直接使用 JavaScript 来改变窗口大小。这是出于安全和用户体验的考虑,以防止意外的窗口大小变化影响全屏体验。 1. 退出全屏后再调整大小 检测全屏状态,退出全屏并调整大…...
封装一个请求的hook(react函数组件)
对于后台系统,上面筛选,下面表格分页的页面,这个hook非常实用 omitBy方法:过滤不为undefined的对象属性 export const omitBy <T extends IObject, K extends keyof T>(object:T, predicate:(value:T[K]) > boolean):I…...

c语言内存块讲解
文章目录 前言一、栈区1、栈区的特点:1.1 自动管理1.2 后进先出1.3 有限大小1.4 高速访问1.5 栈区存储方向 2、栈区使用注意事项 二、堆区1、堆区的定义2、堆区的特点3、堆区的内存分配与释放4、注意事项: 三、全局/静态存储区1、全局存储区1.1 全局变量…...
2024年10月23日Github流行趋势
项目名称:hiteshchoudhary / apihub 项目维护者:wajeshubham, atulbhatt-system32, jwala-anirudh, arnb-smnta, shrey-dadhaniya 项目介绍:您自己的API Hub,用于学习和掌握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 限定符 …...

前端项目初始化
目录 1. 安装 nvm 2. 配置 nvm 并切换到 Node.js 16.15.0 3. 安装 LightProxy 代理 4. GIT安装 1. 配置用户名和邮箱(这些信息将用于您在提交代码时的标识): 2. 生成SSH密钥(用于将本地代码仓库与远程存储库连…...
springboot 微服务 根据tomcat maxthread 和 等待用户数量,达到阈值后,通知用户前面还有多少用户等待,请稍后重试
我们在java项目开发中,如何设置服务器最大负载,过了服务器承受范围之后,提示用户稍后重试,避免 服务器无法提供正常服务 如何设置服务器负载比如:最大线程数,等待数量等,请看:springtomcat 用户…...
高敏感应用如何保护自身不被逆向?iOS 安全加固策略与工具组合实战(含 Ipa Guard 等)
如果你正在开发一款涉及支付、隐私数据或企业内部使用的 App,那么你可能比多数开发者更早意识到一件事——App 一旦被破解,损失的不只是代码,还有信任与业务逻辑。 在我们为金融类工具、HR 系统 App、数据同步组件等高敏感项目提供支持的过程…...

DeviceNet转Modbus TCP网关的远程遥控接收端连接研究
在港口码头作业中,遥控器因其精确的操作控制和稳定的性能,已成为起重机货物装卸作业的重要辅助工具。然而,在某港口码头实施无线遥控器远程控制掘进机的过程中,由于通信协议的不兼容,遭遇了技术难题。具体而言…...
一键净化Excel数据:高性能Python脚本实现多核并行清理
摘要 本文分享两个基于Python的Excel数据净化脚本,通过多进程并行技术清除工作表内不可见字符、批注、单元格样式等冗余内容,利用OpenPyXL实现底层操作,结合tqdm进度条和进程级任务分配,可快速处理百万级单元格数据。适用于数据分…...

数据结构哈希表总结
349. 两个数组的交集 力扣题目链接(opens new window) 题意:给定两个数组,编写一个函数来计算它们的交集。 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 public int[] intersection(int[] nums1, int[] num…...

在 Windows 系统安装 Git
前往官网下载Git - Downloads 目录 一、下载安装包 二、安装 Git 三、安装完成 四、验证安装 五、问题解决 解决步骤 一、下载安装包 点击页面右侧 “Download for Windows” 按钮。 点击页面最上方 “Click here to download” ,下载 Git for Windows/x64 …...
元素 “cas:serviceResponse“ 的前缀 “cas“ 未绑定
错误信息“元素 ‘cas:serviceResponse’ 的前缀 ‘cas’ 未绑定”表明 XML 文档包含带有命名空间前缀 cas 的元素,但未定义或正确绑定该前缀。以下是解决此问题的步骤: 1. 理解问题 XML 命名空间:XML 元素可以通过前缀(如 cas&…...
Android7 Input(十)View 处理Input事件pipeline
概述: 本文主要描述View对InputEvent事件pipeline处理过程。 本文涉及的源码路径 frameworks/base/core/java/android/view/ViewRootImpl.java InputEvent事件处理 View处理input事件是调用doProcessInputEvents方法,如下所示: void doProcessInputEvents() {//…...

贪心算法应用:集合划分问题详解
贪心算法与集合划分问题详解 集合划分问题是组合优化中的经典问题,其核心目标是将元素集合划分为若干满足特定条件的子集。本文将深入探讨贪心算法在集合划分中的应用,涵盖算法原理、适用场景、Java实现细节及优化策略。 一、集合划分问题定义 1.1 基础…...