【前端面经】滴滴一面

1.闭包是什么? 闭包的用途?

JS 闭包 2024-3-12
闭包是指在一个函数内部定义的函数,该内部函数可以访问其外部函数的变量和参数。即使外部函数已经执行完毕并返回了,内部函数依然能够访问这些变量和参数。

//举例
function outerFunction(outerVariable) {return function innerFunction(innerVariable) {console.log('Outer variable: ' + outerVariable);console.log('Inner variable: ' + innerVariable);};
}const newFunction = outerFunction('outside');
newFunction('inside');
//此时 innerFunction 是一个闭包

闭包最重要的数据封装,比如创建一个私有变量后,只能通过特定的方法读取或修改该变量,这样可以实现封装和保护数据的目的。闭包在工厂函数和回调函数中也很有用,毕竟闭包允许函数在创建时“记住”其定义时的环境。比如异步操作进行时,闭包允许回调函数访问其定义时的作用域中的变量,从而在异步操作完成后使用这些变量。


2.简述事件循环原理

现代 JavaScript 通过事件循环机制来处理异步操作。接下来我讲讲流程,刚开始调用栈为空,消息队列为空,事件循环等待。当遇到同步任务执行时,主线程上的同步任务依次被压入调用栈执行。当遇到异步任务(如网络请求、定时器等),这些任务会将回调函数注册到消息队列中,然后立即返回,继续执行同步任务。当调用栈中的所有同步任务执行完毕后(即主线程空闲时),调用栈为空,事件循环开始检查消息队列。事件循环从消息队列中取出第一个回调函数,将其压入调用栈中执行。回调函数执行完毕后,从调用栈中弹出。事件循环继续这个过程,保持调用栈清空并不断从消息队列中取任务执行,直到消息队列为空。
当然异步任务也有优先级,我通常称延时队列和交互队列为宏队列。

  • 延时队列:用于存放计时器到达后的回调任务,优先级【中】;
  • 交互队列:用户存放用户操作后产生的事件处理任务,优先级【高】;
  • 微队列:用户存放需要最快执行的任务,优先级【最高】

3.虚拟dom是什么? 原理? 优缺点?

定义:虚拟dom实际上是一层对真实DOM的抽象,以JavaScript 对象 (VNode 节点) 作为基础的树,用对象的属性来描述节点,最终可以通过一系列操作使这棵树映射到真实环境上。通过虚拟DOM,可以在内存中进行DOM操作,而不是直接操作真实DOM。

原理
create:每次UI发生变化时,首先创建一个新的虚拟DOM树,表示更新后的UI状态。
Diffing: 将新的虚拟DOM树与上一次渲染的虚拟DOM树进行比较,找出需要更新的部分。
Patching: 根据对比结果,生成最小的修改操作(补丁),只更新需要改变的部分。
Reconciliation: 将补丁应用到真实DOM上,使其同步更新。
优缺点:

优点

  • 性能提升:通过在内存中操作虚拟DOM树,减少了直接操作真实DOM的次数,从而提升了性能。
  • 跨平台性:虚拟DOM可以抽象为不同平台的实现,例如浏览器、移动设备、服务器等,使得同一套代码可以运行在不同平台上。
  • 简单性和可维护性:使用虚拟DOM,开发者可以更专注于描述UI状态,而不用关心如何高效地更新UI。React中的JSX语法使得UI的描述更加直观和简单。
  • 调试方便:由于虚拟DOM是一个纯粹的JavaScript对象,调试和测试变得更加方便。

缺点

  • 初始渲染开销:虽然虚拟DOM在更新UI时性能很高,但初次渲染时需要创建完整的虚拟DOM树,会有一定的性能开销。
  • 内存消耗:虚拟DOM需要额外的内存来存储虚拟DOM树,对于内存敏感的应用可能会有影响。
  • 复杂性增加:虽然虚拟DOM抽象了DOM操作,但增加了框架的复杂性,对于一些简单应用可能显得过于复杂。

4.vue 双向绑定的原理是什么

双向绑定的原理可以分为两个部分:数据的响应式机制和 DOM 事件监听。
数据响应式: Vue 使用观察者模式,通过数据劫持(Data Hijacking)和发布-订阅模式(Publish-Subscribe)实现数据的响应式。当数据变化时,Vue 会自动更新视图。
DOM事件监听: Vue 通过监听 DOM 事件(如输入框的 input 事件)来捕获用户的输入,并更新数据模型,从而实现视图到数据的同步。

<input v-model="message" />

相当于

<input :value="message" @input="message = $event.target.value" />

工作流程大概分三步:

  • 初始化:
    Vue 初始化时,通过数据劫持和依赖收集将数据模型的属性转换为响应式属性。
  • 数据变化:
    当数据模型的属性被修改时,触发 set 拦截器,Vue 通知所有依赖这个属性的订阅者更新视图。
  • 视图变化:
    当用户在视图中修改输入框的值时,触发 input 事件,Vue 更新数据模型的属性,从而实现数据和视图的同步。

5.vue 的keep-alive的作用是什么?怎么实现的?如何刷新的?

作用: keep-alive 是 Vue 提供的一个内置组件,用于缓存不活动的组件实例。主要用于避免组件频繁卸载和重建,提升性能。

核心机制:

  1. 组件缓存:
  • Vue 在创建组件实例时,会检测是否在 keep-alive 中。如果是,会将组件实例缓存起来。
  • 缓存的数据结构是一个键值对,以组件的唯一标识(如 key)为键,组件实例为值。
  1. 生命周期钩子:
  • keep-alive 组件内部有两个特殊的生命周期钩子:activated 和 deactivated。
  • activated:组件从缓存中被激活时调用。
  • deactivated:组件被缓存而不是销毁时调用。

刷新 keep-alive 组件:
有时需要刷新被缓存的组件,可以通过以下几种方式实现:

  1. key 属性:
    修改组件的 key 属性,强制 Vue 重新创建组件实例
  2. 手动触发钩子:
    通过调用组件实例的 deactivatedactivated 方法,手动触发组件的钩子。

先写五个明天再更,各位大佬有误请指出 😃

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

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

相关文章

windows系统中开发的GO程序生成docker镜像并部署到阿里云服务(linux系统)的操作说明

本文简述将go程序生成docker镜像的操作方法&#xff0c;以及如何部署到阿里云服务。其中go程序在windows系统中开发&#xff0c;阿里云服务的操作系统为linux&#xff08;centos7.9&#xff09;&#xff0c;以下为流程示意图&#xff1a; 一、window系统中开发go程序 程序实现…

前端技术栈三(vue+Axios)

一、Vue 1 基本介绍 1.1 Vue 是什么? Vue (读音 /vjuː/&#xff0c;类似于 view) 是一个前端框架, 易于构建用户界面 Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或项目整合 支持和其它类库结合使用 开发复杂的单页应用非常方便 Vue 是…

RAM + 串口的简单应用

REVIEW 之前已经学习过&#xff1a; RAM&#xff1a; RAM IP核配置_ip核 ram配置-CSDN博客 串口接收&#xff1a;Vivado 串口接收优化-CSDN博客 串口发送&#xff1a;Vivado 串口通信(UART)------串口发送_vivado串口收发实验-CSDN博客 按键&#xff1a;基于状态机的按键消抖实…

ADOP带你了解:数据中心的高速互联解决方案

随着大语言模型和AIGC的飞速发展&#xff0c;数据中心对于高速、高可靠性的网络连接需求日益增长。ADOP系列产品正是在这样的背景下应运而生&#xff0c;为现代数据中心提供了全面的连接解决方案。 ADOP系列产品概览 ADOP系列产品旨在为云、高性能计算、Web 2.0、企业、电信、…

SparkSQL的分布式执行引擎-Thrift服务:学习总结(第七天)

系列文章目录 SparkSQL的分布式执行引擎 1、启动Thrift服务 2、beeline连接Thrift服务 3、开发工具连接Thrift服务 4、控制台编写SQL代码 文章目录 系列文章目录前言一、SparkSQL的分布式执行引擎(了解)1、启动Thrift服务2、beeline连接Thrift服务3、开发工具连接Thrift服务4、…

深入理解 PHP 魔术常量

PHP 魔术常量是 PHP 语言中预先定义的常量&#xff0c;它们具有特殊的含义和用途。这些常量的值在程序运行时会根据上下文自动确定&#xff0c;为开发人员提供了方便和灵活性。本文将从多个方面深入探讨 PHP 魔术常量&#xff0c;包括它们的定义、特点、用途以及使用注意事项。…

(7)摄像机和云台

文章目录 前言 1 云台 2 带有MAVLink接口的摄像机 3 相机控制和地理标签 4 视频质量差的常见修复方法 5 详细主题 前言 Copter、Plane 和 Rover 最多支持 3 轴云台&#xff0c;包括自动瞄准感兴趣区域&#xff08;ROI&#xff09;的相机和自动触发相机快门等先进功能。按…

c#string常用方法总结

前言 我们在开发c#程序的过程中经常需要使用string这个类&#xff0c;string类也有很多方法&#xff0c;本文将会对我们常用的方法进行介绍&#xff0c;关于string类&#xff0c;一方面有静态方法一方面也有实例方法&#xff0c;下面分别介绍&#xff1a; 1、静态方法 1.1 C…

好书推荐:AI教母李飞飞自传《我看见的世界》,豆瓣9.1分!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

子组件和父组件之间传值#Vue3#defineProps

子组件和父组件之间传值#Vue3#defineProps 效果&#xff1a; 子组件&#xff1a; <!-- 6s执行项详情图片的子组件 --> <template><div><imgv-if"itemsLocal.url":src"itemsLocal.url"style"width: 50px; height: 50px; marg…

echarts自定义legend方法

思路&#xff1a;在配置legend里面设置一个selected&#xff0c;名字和series里面的name对应,name名字是必须的&#xff0c;legend里面的data是可配置或不配置都可以&#xff0c;否则legend无效&#xff0c;不显示&#xff0c;通过true和false控制显示或不显示。配置本身的lege…

【Ardiuno】实验ESP32单片机搭建简易Web服务器功能(图文)

今天&#xff0c;小飞鱼继续来测试使用ESP32来实现简易的wifi无线web服务器功能。使用Ardiuno平台编辑器输入以下示例代码&#xff1a; #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h>const char* ssid &q…

python调用chatgpt

简单写了一下关于文本生成接口的调用&#xff0c;其余更多的调用方法可在官网查看 import os from dotenv import load_dotenv, find_dotenv from openai import OpenAI import httpxdef gpt_config():# 为了安全起见&#xff0c;将key写到当前项目根目录下的.env文件中# find…

java 不可变集合的创建和Stream流的使用

文章目录 一、创建不可变的集合1.1为什么创建不可变的集合1.2 创建List、Set和Map的不可变集合1.2.1 创建List的不可变集合1.2.2 创建Set 的不可变集合1.2.3 创建Map的不可变集合 二、使用集合 的Stream 流2.1 Stream的使用步骤2.2 Stream的方法 三、如何获取Stream 流对象四、…

深度学习增强的非线性光纤单像素成像系统

1、光子器件的逆向设计&#xff1a;通过机器学习&#xff0c;特别是深度学习&#xff0c;可以高效地进行光子器件的逆向设计&#xff0c;这在传统的多参数优化问题中尤为重要。 2、超构表面和超材料设计&#xff1a;机器学习被用于设计具有特定光学特性的超构表面和超材料&…

初阶 《数组》 1. 一维数组的创建和初始化

1. 一维数组的创建和初始化 1.1 数组的创建 数组是一组相同类型元素的集合 数组的创建方式&#xff1a; type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式&#xff0c;用来指定数组的大小数组创建的实例&#xff1a; //代码1 int ar…

python实战:将视频内容上传到社交媒体平台

在Python中&#xff0c;上传视频到不同的平台可能需要使用不同的API和库。以下是一些常见的平台以及如何使用Python进行上传的示例&#xff1a; YouTube: 使用Google提供的YouTube Data API。 首先&#xff0c;你需要从Google Cloud控制台获取API密钥&#xff0c;并安装google-…

Wills Room Environment Dormitory Room Environment

有126个独特的网格。包括所有展示的资产和优质资产。具有良好的细节水平,并针对Gameready项目进行了优化。 艺术家Jonjo Hemmens创造的环境 如果想填充你的游戏环境或任何类型的虚拟制作级别,这里有一个包,你可以获得并使用它来得到高质量的视觉效果和优化的资产。 下载:​…

Compose - 权限申请

官方介绍 一、概念 二、使用 Accompanist Permissions 官方介绍 不同版本中&#xff0c;权限状态&#xff08;如PermissionState&#xff09;中获取属性的方法不同&#xff0c;例如在“0.23.1”中&#xff0c;通过 PermissionState.hasPermission 属性拿到是否通过的 Boole…

【病毒分析】Steloj勒索病毒分析

1.背景 1.1 来源 近期&#xff0c;Solar团队收到某汽车制造公司的援助请求&#xff0c;该公司的计算机服务器受到了Steloj勒索家族的侵害&#xff0c;所有的文件被加密并且添加了.steloj后缀&#xff0c;该勒索软件的初始入侵方式是MSSQL数据库弱口令进行入侵&#xff0c;后续…