一些前端面试思考

news2024/11/19 9:39:53

回流和重绘

        先牢记这句话,回流必将引起重绘,而重绘不一定会引起回流。回流的代价要远大于重绘。

当你给一个元素更换颜色,这样的行为是不会影响页面布局的,DOM树不会变化,但颜色变了,渲染树得重新渲染页面,这就是重绘。

比如我们增删DOM节点,修改一个元素的宽高,页面布局发生变化,DOM树结构发生变化,那么肯定要重新构建DOM树,而DOM树与渲染树是紧密相连的,DOM树构建完,渲染树也会随之对页面进行再次渲染,这个过程就叫回流。

         换句话说,你可以简单粗暴地理解为重绘只是改变了样式树。而回流改变了DOM树(引起DOM树结构变化,页面布局变化)。

浏览器拿到HTML文本后如何解析

        html文件在没有写入html标签之前和txt文本是一个性质的,不含任何样式。只是单纯的文本预览文件。一旦加入了html标签,表示内容有了语义。浏览器的渲染引擎才会根据标签的语义开始解析。

解析一个文档意味着把它翻译成有意义的结构以供代码使用。解析的结果通常是一个表征文档的由节点组成的树,称为解析树或句法树。

解析器通常把工作分给两个组件——分词程序和解析程序。分词程序负责把输入切分成合法符号序列,解析程序负责按照句法规则分析文档结构和构建句法树。
【精选】你了解浏览器原理吗?说说浏览器解析html的过程_浏览器解析html过程_码上十七的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65335111/article/details/127400627

CSS树和DOM树怎么结合

【精选】Dom树 CSS树 渲染树(render树) 规则、原理_web18296061989的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/web18296061989/article/details/123421151

网页是如何渲染出来的,dom树和css树是如何合并的,浏览器的运行机制是什么,什么是否会造成渲染阻塞?_css 样式怎么合并到dom节点的-CSDN博客渲染树构建、布局及绘制浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分的,一是渲染引擎,另一个是JS引擎。渲染引擎在不同的浏览器中也不是都相同的。目前市面上常见的浏览器内核可以分为这四种:Trident(IE)、Gecko(火狐)、Blink(Chrome、Opera)、Webkit(Safari)。这里面大家最耳熟能详的可能就是 Webkit 内核了,Webkit 内核是当下浏览器世..._css 样式怎么合并到dom节点的https://blog.csdn.net/qq_22930381/article/details/101448112?utm_source=miniapp_weixin

 

eventLoop事件循环

var x = setTimeout(() => {console.log(1)},0)
var y = new Promise(function(resolve) {
    console.log(2);
    resolve();
    console.log(3)
})
y.then(() => {
    console.log(4)
})
console.log(5)

        依次输出2 3 5 4 1

        setTimeout产出宏任务,promise.then产出的是微任务。

        JavaScript是单线程的,意味着任务只能一次执行一个任务。
        宏任务(Macro Task)是指在当前任务队列中被调度的任务。例如:

  • DOM事件处理
  • setTimeout
  • setInterval
  • setImmediate(nodejs独有)
  • requestAnimationFrame(浏览器独有)
  • I/O操作(nodejs独有)

        微任务(Micro Task)是指在当前任务执行结束后需要立即执行的任务。例如:

  • Promise.then
  • Promise.catch
  • Promise.finally
  • MutationObserver

        Event Loop 翻译为事件循环,是JavaScript的一种执行机制。

        Event Loop的执行过程如下:

  1. 执行全局Script同步代码,这些同步代码可能会产生宏任务或者微任务。
  2. 执行所有微任务,直到微任务队列为空。
  3. 取出一个宏任务执行,执行过程中产生的微任务会加入微任务队列。
  4. 重复步骤2-3,直到所有任务都执行完毕。

原型链的概念

        就是实例对象和原型对象之间的链接,每一个对象都有原型,原型本身又是对象,原型又有原型,以此类推形成一个链式结构.称为原型链

什么是原型对象

        在声明了一个函数之后,浏览器会自动按照一定的规则创建一个对象,这个对象就叫做原型对象

怎么判断NULL

val === null

或: 

if(!val && typeof(val) != "undefined" && val!= 0) {

     
}

     

怎么中断请求

        jquery

var ajaxGet = $.get('xxx',{id:1},function(data){...});
ajaxGet.abort()

        axios

        使用 CancelToken.souce 工厂方法创建一个 cancel token

const CancelToken = axios.CancelToken;

        将token作为传参

const source = CancelToken.source();
axios.get('https://mdn.github.io/dom-examples/abort-api/sintel.mp4', {
  cancelToken: source.token
}).catch(function (thrown) {
  // 判断请求是否已中止
  if (axios.isCancel(thrown)) {
    // 参数 thrown 是自定义的信息
    console.log('Request canceled', thrown.message);
  } else {
    // 处理错误
  }
});

        这里用axios来判断中止状态

        主动取消:

// 取消请求(message 参数是可选的)
source.cancel('Operation canceled by the user.');

        方法二:

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // executor 函数接收一个 cancel 函数作为参数
    cancel = c;
  })
});

// 取消请求
cancel('Operation canceled by the user.');

        Fetch

        fetch是ES6新出的,基于promise设计,没有进行封装,属于原生js,所以在vue中使用的时候也不需要进行import引入就可以直接使用。

        fetch请求返回的是promise对象,需要进行json转换,所以需要两次.then()


fetch("/api/test/")
 .then(res => {
    return res.json();
 })
 .then(res => {
   // 这里返回的数据就是我们想要请求的json数据
   console.log(res);

        上面是get下面是post


const requestBody = {
  title: 'foo',
  body: 'bar',
  userId: 1
};
 
fetch('https://jsonplaceholder.typicode.com/posts', {
  method: 'POST',
  body: JSON.stringify(requestBody),
  headers: {
    'Content-Type': 'application/json'
  }
})
.then(res => res.json())
.then(data => console.log(data))

        如果要终止 fetch 请求,则可以使用 Web 提供的 AbortController 接口。

   首先我们使用 AbortController() 构造函数创建一个控制器,然后使用 AbortController.signal 属性获取其关联 AbortSignal 对象的引用。当一个 fetch request 初始化时,我们把 AbortSignal 作为一个选项传递到请求对象 (如下:{signal}) 。这将信号和控制器与获取请求相关联,然后允许我们通过调用 AbortController.abort() 中止请求。

const controller = new AbortController();
let signal = controller.signal;
console.log('signal 的初始状态: ', signal);

const downloadBtn = document.querySelector('.download');
const abortBtn = document.querySelector('.abort');

downloadBtn.addEventListener('click', fetchVideo);

abortBtn.addEventListener('click', function() {
 controller.abort();
 console.log('signal 的中止状态: ', signal);
});

function fetchGetVideo() {
  //...
  fetch(url, {signal}).then(function(response) {
    //...
  }).catch(function(e) {
    reports.textContent = 'Download error: ' + e.message;
  })
}

function fetchPostVideo() {
  //...
  fetch(url,{
    name: "张三.avi",
    id: 18x
  },{
    signal: controller.signal // 传入signal
  }).then(function(response) {
    //...
  }).catch(function(e) {
    reports.textContent = 'Download error: ' + e.message;
  })
}

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

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

相关文章

可以充当销售的高品质画册是怎么制作的?

一本优秀的宣传画册就如同一个销售员,具有卓越的灵魂,可以让人达到赏心悦目的视觉效果。如何做出这种高品质的宣传画册呢? 其实很简单,FLBOOK里面汇集了各种各样的宣传画册模板 ,只需一键套用模板制作,你也…

算法通过村第十五关-超大规模|白银笔记|经典问题

文章目录 前言从40个亿中产生一个不存在的整数位图存储数据的原理使用10MB来存储如何确定分块的区间 用2GB内存在20亿的整数中找到出现次数最多的数从100亿个URL中查找的问题40亿个非负整数中找出两次的数。总结 前言 提示:人生之中总有空白,但有时&…

2023年安徽省安全员C证证模拟考试题库及安徽省安全员C证理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年安徽省安全员C证证模拟考试题库及安徽省安全员C证理论考试试题是由安全生产模拟考试一点通提供,安徽省安全员C证证模拟考试题库是根据安徽省安全员C证最新版教材,安徽省安全员C证大纲整理…

idea中还原dont ask again

背景 在使用idea打开另外一个项目的时候,一不小心勾选为当前项目而且是不在下次询问,导致后面每次打开新的项目都会把当前项目关闭,如下图所示 下面我们就一起看一下如何把这个询问按钮还原回来 preferences/settings->Appearance&…

安全事件报告和处置制度

1、总则 1.1、目的 为了严密规范XXXXX单位信息系统的安全事件处理程序,确保各业务系统的正常运行和系统及网络的安全事件得到及时响应、处理和跟进,保障网络和系统持续安全运行,确保XXXXX单位重要计算机信息系统的实体安全、运行安全和数据…

数字孪生技术:餐饮业智能化的未来

随着科技的不断进步,数字孪生技术正逐渐渗透到各行各业,为餐饮业带来了颠覆性的改变。这一技术的应用,已经在餐饮行业中崭露头角,并在提高效率、提供更好的客户体验、降低成本等方面发挥了关键作用。 数字孪生技术允许餐饮企业创…

中国人民大学与加拿大女王大学金融硕士:在该奋斗的岁月里,对得起每一寸光阴

在这个快速变化的世界中,金融行业面临不断更新的挑战和机遇。为了应对这些挑战,中国人民大学与加拿大女王大学合作举办金融硕士项目,旨在培养具有国际视野、扎实的金融理论基础和实战经验的专业人才。 中国人民大学和加拿大女王大学金融硕士…

python元组、拆包和装包

注意 元组不能修改元素 元组:如果元素为字符串且元素为1个,必须加一个, ********* t1 (aa,) 下标和切片 in not in for ... in ... 元组转为列表 拆包、装包

【Linux】userdel 命令使用

userdel命令用于删除用户帐号。 语法 userdel [选项] [用户帐号] 命令选项及作用 执行令 userdel--help 执行命令结果 参数 -f, --force 强制删除用户账号 -h, --help 显示此帮助信息并推出 -r, --remove 删除主目录和邮件池 -R, -…

QT_day1

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("登录窗口");this->setWindowIcon(QIcon("C:\\Users\\EDY\\Desktop\\pictrue\\qq.png"));this->setWindowFlag(Qt::…

10月18日 Servlet的相关细节

1.Servlet的生命周期面试高频 Servlet的默认创建是在第一次请求该Servlet的时候才创建,第一次惩罚 Servlet一旦创建,马上调用init()方法,每请求该Servlet,这个Servlet的service()方法就执行一次,一旦web服务器关闭之前,销毁所有的Servlet对象,在销毁servlet对象之前…

【论文检索】 如何使用谷歌学术(Google Scholar)检索文献

目录 0 引言2 如何高效检索 🙋‍♂️ 作者:海码007📜 专栏:论文💥 标题:【论文检索】 如何使用谷歌学术(Google Scholar)检索文献❣️ 寄语:加油毕业!&#x…

如何高效解决工作上的问题?一站式工单系统有什么用?

在单位初次应用一站式工单系统时,除了需要充分了解工单系统的功能特性外,还需要制定相应的工单管理规定,以有效展现系统应用所带来的效果。本文将为您详细介绍工单管理的要求以及对工单解决质量的影响因素。   工单管理的要求: …

React生命周期总结v16+和v16-

React的生命周期 生命周期就函数就是指在某一个时间刻会自动调用执行的函数,React生命周期分为三个阶段 挂载:组件被创建并插入真实dom 渲染(更新):组建的props或state发生变化时触发的组件更新 卸载:组件…

macOS Sonoma 14.1RC(23B73)发布

黑果魏叔10 月 18 日消息,苹果今日向 Mac 电脑用户推送了 macOS 14.1 RC更新(内部版本号:23B73),本次更新距离上次发布隔了 7 天。 macOS Sonoma 14.1RC(23B73)的更新内容主要包括以下方面&…

2023年煤气证模拟考试题库及煤气理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年煤气证模拟考试题库及煤气理论考试试题是由安全生产模拟考试一点通提供,煤气证模拟考试题库是根据煤气最新版教材,煤气大纲整理而成(含2023年煤气证模拟考试题库及煤气理论考…

交银国际:拼多多财报预测:主站盈利提升有望带动业绩超预期

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,交银国际今日发布关于拼多多第三季度财报预测:主站盈利提升有望带动业绩超预期的研报。交银国际主要观点如下: 预计拼多多(PDD)第三季度业绩将好于市场预期:我们…

JWT越权访问漏洞

JWT越权访问漏洞 文章目录 JWT越权访问漏洞原文参考 :[xiu](http://www.xiusafe.com/2023/02/08/JWT/)1 靶场搭建:2 JWT的头部组成2.1 头部2.1.1 alg:2.1.2 type: 2.2 payload2.3 签名 3 漏洞复现3.1 攻击点token(第三关)3.2 对token值base64的加密码方式…

深度学习——深度卷积神经网络(AlexNet)

深度学习——深度卷积神经网络(AlexNet) 文章目录 前言一、学习表征二、AlexNet实现2.1. 模型设计2.2. 激活函数2.3. 容量控制与预处理2.4. 训练模型 总结 前言 在前面学习了卷积神经网络的基本原理,之后将继续学习现代卷积神经网络架构。而本章将学习其…

上网冲浪发现多处XSS

突然的发现 今天上网冲浪,突然想起来有一种神器,叫废话生成器,之前是在哪里下了个软件玩了一下,然后就给删除了,因为我觉得这个软件不过就是调用了一个web接口实现的,一个网页能解决的事还要我下一个软件。…