秋招面试—浏览器原理篇

news2024/11/19 11:18:56

浏览器原理篇

在这里插入图片描述

1.什么是XSS、CSRF,怎么预防?

(1)XSS(跨站脚本攻击):攻击者将恶意代码植入到浏览器页面中,盗取存储在客户端的Cookie;

​ XSS分为:①存储型:论坛发帖、商品评论、用户私信;

​ ②反射型:网站搜索,跳转等;

​ ③DOM型:属于浏览器端JS自身漏洞,盗取用户数据后发送到攻击者网站;

XSS预防:从攻击者角度出发,XSS攻击包括 攻击者提交的恶意代码、浏览器执行的恶意代码;作为开发者,应尽量将不可行的数据作为html插入到页面上,尽量使用textContent、setContent; 如果是Vue/React技术栈,应在render渲染阶段避免innerHTML、outHTML。

(2)CSRF(跨站请求伪造):攻击者诱导受害者进入第三方网站,利用受害者在被攻击网络获取的Cookie,冒充受害者进入攻击网站。

​ 攻击原理:①.用户浏览并登录信任网站A;

​ ②.验证通过,咋浏览器产生cookie;

​ ③.用户在没有登录A网站的情况下,访问第三方网站B;

​ ④.第三方网站伪造访问受信任网站请求;

​ ⑤.三方网站伪造访问受信任网站请求;

CSRF的预防

​ ①Token验证(常用):服务器给用户发送一个随机数Token,用户提交的表单中带着这个Token,服务器对Token进行验证,不合法则拒绝请求。 但是存在一个问题,需要给所有的请求都添加Token,操作比较繁琐。

​ ②隐藏令牌:把token隐藏在http头部,和token验证没什么区别,只是使用方式不同。

​ ③Referer验证: 只接受本站请求,服务器才做响应。

2.进程和线程的区别

进程:资源分配的最小单位;

线程:CPU调度的最小单位;

当浏览器创建一个Tab标签页的时候,就相当于创建了一个进程,一个进程包含多个线程,比如 浏览器渲染线程、JS引擎线程、HTTP请求线程,当发送一个请求的时候,其实就创建了一个线程,请求结束,线程销毁。

3.JS单线程有什么好处?

①节省内存。②节省上下文切换时间。③没有锁的问题。

JS在运行的时候可能会阻止UI渲染,这是因为JS可以修改DOM;如果在JS执行的时候UI线程还在工作,就会导致不能安全的渲染UI。

4.死锁产生的原因?

死锁是由于多个进程在远行过程中 因剥夺资源 照成的。

产生死锁的必要条件:互斥、请求和保持、不剥夺、环路等待。

预防死锁的方法:资源一次性分配;只要有一个资源得不到分配;不分配其他资源、可剥夺资源;资源有序分配。

5.对浏览器缓存进制的理解

​ 将网络资源存储在本地 memory cache(内存缓存)、disk cache(磁盘缓存)中,首次访问网站,浏览器会先在内存中查找,如果内存中没有,就去磁盘中查找,如果磁盘中还是没有,才进行网络请求。

强缓存(Ctrl+F5):如果缓存资源有效,直接使用缓存资源;如果缓存资源无效,则向服务器发送请求。

协商缓存(Ctrl):如果缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器来决定是否使用缓存。

6.Script标签中defer 和 async 的区别

async表示后续文档与JS脚本是异步加载的,多个带有async属性的标签不能保证加载的顺序;

defer表示JS脚本需要等待文档加载完成之后再加载,多个带有defer属性的标签会按顺序执行。

7.link 和 improt 的区别

link 不仅能引入CSS ,还能引入 RSS;import只能引入CSS;

link 引入的CSS在页面加载时同时加载;import 引入CSS需要等待文档加载完成后再加载;

link 可以通过操作JS操作DOM来改变样式;import却不行;

8.浏览器本地缓存方式及使用场景

Cookie:①结合Session使用,将SessionID存储到Cookie。②统计页面点击次数。

LocalStorage:①网站换皮肤。②不常变动的个人信息。

SessionStorage:只有在同一浏览器的同一窗口才能共享,更严格。①游客登录信息,临时浏览记录,网站关闭、销毁。

9.什么是浏览器同源策略?什么是跨域,怎么解决跨域?

同源指的是协议、域名、端口一致,只有路径不同,用于隔离潜在文件的安全机制。

跨域指的是协议、域名、端口不一致的服务器,资源会发起一个跨域的http请求。

解决跨域方式:

①JosnP:

②CORS(跨域资源共享):是一个系统,由一系列传输的http组成,浏览器根据http头判断是否阻止JS代码获取跨域请求。

③naginx代理:

④node.js 中间件代理:

10.什么是事件?事件模型有哪些?

用户操作网页的Click、move 文档加载、窗口滚动、大小调整、鼠标事件。

①原始事件模型:onclick()同类型事件只能绑定一次,只支持冒泡。

②IE事件模型:处理阶段、冒泡阶段。

③标准事件模型:捕获阶段、处理阶段、冒泡阶段。

11.同步和异步的区别?

当一个进程在执行某个请求的时候,如果这个请求需要等待一段时间才能返回,

同步的话,这个进程会一直等待下去,知道消息返回才向下执行;

异步的话,这个进程不会一直等待下去,继续向下执行,当消息返回时,系统再通知进程进行处理。

12.宏任务和微任务有哪些?

宏任务:setTimeout、setInterval、dom事件、Ajax回调

微任务:promise、node中的Process.nextTick

13.V8浏览器回收机制

新生代算法:主要通过saverge算法,将内存一分为二,使用状态的空间为from空间,闲置状态的空间为To空间。

老生代算法:主要通过标记清除回收算法。

14.什么是内存泄露?

①程序未能释放已经不再使用的内存。

②不合理使用闭包,导致变量一直留在内存中。

③设置setInterval 定时器,忘记取消。

15.懒加载和预加载的区别?

懒加载:延迟加载、按需加载。

预加载:提前加载甚至不加载,用的时候再从缓存总取资源。

16.防抖和节流?

防抖:固定时间后再执行,如果再固定时间内重复触发,则取最后一次。

节流:固定时间内只执行一次,如果再固定内重复触发,则重新计时。

应用场景

​ 防抖:注册功能手机号、邮箱验证,等待用户输入完在验证。

​ 节流:拖拽事件、滚动加载,

17.回流和重绘?

产生原因:

浏览器在渲染页面时会将 HTML 和 CSS 分别解析成 DOM 树和 CSSOM 树,然后合并进行排布,再绘制成我们可见的页面。如果在操作 DOM 时涉及到元素、样式的修改,就会引起渲染引擎重新计算样式生成 CSSOM 树,同时还有可能触发对元素的重新排布(简称“重排”)和重新绘制(简称“重绘”)。

回流:渲染树中部分元素尺寸、结构发生变化时,浏览器会重新渲染。

重绘:主要发生在CSSO树上,元素样式发生变化时,浏览器就会进行重绘。

应用场景

​ 回流:①页面首次渲染。②窗口大小变化。③元素字体、尺寸,内容。

​ 节流:①color.background ②outline.vidibilety ③border-radius、box-shadow

触发条件:

回流

  • 修改元素边距、大小

  • 添加、删除元素

  • 改变窗口大小

重绘

  • 设置背景图片
  • 修改字体颜色
  • 改变Visibility属性值

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

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

相关文章

大型电商系统商城源码_架构_订单系统_OctShop

中国的电商差不多发展到今天已经有20多年的历史啦,特别是过去的10年里其发展速度与竞争是相当的激烈,发展出了各种各样的模式如:B2B、B2C、B2B2C、O2O、社交电商等等。对于广大的企业或商家来说,电商是一个不可或缺的销售渠道&…

猫咪不吃东西怎么办?公认适口性好的生骨肉冻干分享

猫咪不吃东西怎么办?遇到这类情况主人需要仔细观察并分析情况。如果猫咪出现其他异常症状,如呕吐、腹泻、体温异常等,可能是生病了,应及时就医。如果猫咪没有其他异常症状,那猫咪不吃东西怎么办?可能是猫粮…

JAVA多线程并发补充

AQS 是一个抽象父类 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架。 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁 getSt…

Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?

本文九河云介绍Windows实例内部自定义域名解析与本地网络域名解析不一致导致无法访问网站的问题描述、问题原因和解决方案。 问题描述 在Windows实例内部通过浏览器无法访问某网站,但在其他设备上可以正常访问,排查发现Windows实例内部自定义域名解析与…

6.s081 学习实验记录(三)system calls

文章目录 一、use gdb二、syscall:trace注意:实验代码:实验结果: 三、sysinfotips:实验代码实验结果 需要切换到 syscall 分支 一、use gdb 学习使用 gdb 调试 make qemu-gdb打开一个新的终端: gdb-mult…

Selenium教程11:模拟账号密码,自动登入qq空间

Python爬虫教程30:Selenium网页元素,定位的8种方法! Selenium自动化教程02:浏览器options配置及常用的操作方法 Selenium自动化教程03:延时等待的3种方式 Selenium自动化教程04:鼠标键盘网页的模拟操作 …

文件的相关概念及用法

文件的作用 程序运行时产生的数据都属于临时文件&#xff0c;程序一旦运行结束就会被释放。若想让数据保存下来&#xff0c;则可以通过文件将数据持久化 文件需要包含的头文件<fstream>(文件流) 文件分类 文件分为文本文件和二进制文件。 文本文件&#xff1a;文件以…

快速上手Git

目录 一、Git概述 二、Git的常用命令 Git全局配置 获取Git仓库 基本概念 本地仓库操作 远程仓库操作 分支操作 标签操作 三、在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓库操作 分支操作 冲突解决 一、Git概述 Git是一个分布式版本控制工具&…

探索设计模式的魅力:深入了解适配器模式-优雅地解决接口不匹配问题

设计模式专栏&#xff1a;http://t.csdnimg.cn/nolNS 目录 一、引言 1. 概述 2. 为什么需要适配器模式 3. 本文的目的和结构 二、简价 1. 适配器模式的定义和特点 定义 特点 2. 适配器模式的作用和适用场景 作用 适用场景 3. 适配器模式与其他设计模式的比较 三、适配…

DolphinScheduler + Amazon EMR Serverless 的集成实践

01 背景 Apache DolphinScheduler 是一个分布式的可视化 DAG 工作流任务调度开源系统&#xff0c;具有简单易用、高可靠、高扩展性、⽀持丰富的使用场景、提供多租户模式等特性。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方…

代码随想录算法刷题训练营day18

代码随想录算法刷题训练营day18&#xff1a;LeetCode(257)二叉树的所有路径、LeetCode(404)左叶子之和 LeetCode(257)二叉树的所有路径 题目 代码 import java.util.ArrayList; import java.util.List;/*** Definition for a binary tree node.* public class TreeNode {* …

媒体邀约:怎么吸引总体目标受众?

新闻媒体影响力日益扩大。不论是公司、机构还是其他&#xff0c;都希望能够通过新闻媒体的曝光来吸引更多总体目标受众。要想真正吸引住总体目标受众并非易事&#xff0c;需要一定的方案和方法。下面我们就深入探究媒体邀约推广的真相&#xff0c;共享怎么吸引总体目标受众的方…

挂耳耳机哪个牌子好?挂耳耳机产品的几大推荐

如果你也是个运动爱好者&#xff0c;那你一定知道边运动边听歌是多么的提神! 我试过好多种耳机&#xff0c;那些长长的线总在运动时不断甩来甩去&#xff0c;真是让人烦不胜烦。而且戴久了耳朵里也不舒服。所以找一款真正适合运动的挂耳耳机太重要了&#xff0c;它能让你的运动…

【Docker】docker Overlay2 文件系统原理

概述 overlayFS是被称为联合文件系统的其中一个解决方案。在2014年&#xff0c;发布了第一个版本并且合并到了Linux的内核3.18版本中&#xff0c;此时&#xff0c;在docker被称为是overlay文件驱动。后来在Linux 内核4.0 版本中进行了改进&#xff0c;称为overlay2。&#xff…

模拟堆

import java.util.Scanner;public class Main{static int N 100010, size,m;static int[] h new int[N]; //h[i]表示下标i这个点是第多少static int[] hp new int[N]; //hp[i]表示下标为i的节点是第几个被加进来的static int[] ph new int[N]; //ph[i]表示第i个加进来…

BIO、NIO变成与直接内存、零拷贝

一、网络通信 1、什么是socket&#xff1f; Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作 系统提供。客户端连接上一个服务端&#xff0c;就会在客户端中产生一个 socket 接口实例&#xff0c;服务端每接受 一个客户端…

qt初入门7:进度条,定时器,时间控件练习

参考课本demo&#xff0c;空闲时间练习一下进度条&#xff0c;定时器&#xff0c;日期相关控件和使用。 1&#xff1a;demo运行结果 2&#xff1a;进度条控件梳理 进度条显示控件实际上是QProgressBar, 显示的进度可以通过代码控制&#xff0c;也可以通过其他控件上获取到的值…

Android SystemUI 介绍

目录 一、什么是SystemUI 二、SystemUI应用源码 三、学习 SystemUI 的核心组件 四、修改状态与导航栏测试 本篇文章&#xff0c;主要科普的是Android SystemUI &#xff0c; 下一篇文章我们将介绍如何把Android SystemUI 应用转成Android Studio 工程项目。 一、什么是Syst…

【K12】运用tk控件演示欧姆定律串联电阻小应用

上述代码是一个基于Python的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;用于演示欧姆定律。用户可以通过输入电阻值来计算电流&#xff0c;并在图形上显示结果。该程序使用了Tkinter库来创建GUI&#xff0c;matplotlib库来绘制图形&#xff0c;以及numpy库进…