前端JS常见面试题
数据双向绑定



Bug解决
集成工作涉及
版本node
依赖包报错
版本问题!!!ElementUI、Cesium、ant-design
配置、代码和其他

混入
在Vue中,混入(Mixins)是一种非常有用的功能,它允许你创建可复用的功能。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混入”该组件本身的选项。
混入的基本使用
- 定义混入:首先,你需要定义一个混入对象。这个对象可以包含任何组件选项。
// 定义一个混入对象
const myMixin = { created() { this.hello(); }, methods: { hello() { console.log('hello from mixin!'); } }
}
- 使用混入:然后,你可以在组件中通过
mixins选项来使用这个混入。
// 定义一个使用混入的组件
Vue.component('my-component', { mixins: [myMixin], created() { console.log('component created!'); }
})
在这个例子中,当my-component组件被创建时,它首先会调用myMixin中的created钩子,然后调用它自己的created钩子。同时,my-component也继承了myMixin中的hello方法,可以在组件的其它部分调用这个方法。
注意事项
-
选项合并:当组件和混入对象含有同名选项时,这些选项将以一定方式被合并。对于生命周期钩子,混入对象的钩子将在组件自身的钩子之前调用。对于值为对象的选项,如
methods、components和directives,混入对象的选项将被合并到组件的选项中,如果两个对象有相同的键名,则组件的选项会覆盖混入对象的选项。 -
全局混入:Vue.mixin() 允许你注册一个混入,影响之后创建的每一个Vue实例。请谨慎使用全局混入,因为它会影响每一个之后创建的组件实例(包括第三方组件库)。
-
合并策略:Vue为不同类型的选项定义了不同的合并策略。例如,
data选项在合并时会进行递归合并,而methods、components和directives等选项则是简单地合并到一个对象中。 -
使用场景:混入非常适合为Vue组件添加跨组件逻辑。然而,滥用混入可能会导致组件间的依赖关系变得难以追踪,特别是在大型项目中。因此,建议仅在确实需要跨组件共享逻辑时使用混入。

keep-alive与动态组件(缓存组件)
在Vue.js中,<keep-alive> 是一个内置的抽象组件,用于缓存不活动的组件实例,而不是销毁它们。这样做可以保留组件状态或避免重新渲染,从而提高性能,尤其是在处理动态组件或组件频繁切换的场景下。Vue 2 和 Vue 3 都支持 <keep-alive>,但它们在细节和性能优化上有所不同。
Vue 2 中的 <keep-alive>
在Vue 2中,<keep-alive> 通常包裹在动态组件 <component> 或 <router-view> 周围,以便缓存这些组件。你可以通过 include 和 exclude 属性来指定哪些组件需要被缓存。
<keep-alive :include="['ComponentA', 'ComponentB']"> <component :is="currentView"></component>
</keep-alive> <!-- 或者用于路由视图 -->
<keep-alive> <router-view></router-view>
</keep-alive>
Vue 2 的 <keep-alive> 还支持一个 max 属性,用于指定缓存组件的最大数量,一旦这个数量被超过,最老的组件实例将被销毁。
包裹动态组件
<template> <keep-alive :include="['ComponentA', 'ComponentB']"> <component :is="currentComponent"></component> </keep-alive>
</template> <script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue'; export default { components: { ComponentA, ComponentB, // 如果currentComponent不是直接引入的组件,需要注册在components中 }, data() { return { currentComponent: 'ComponentA', }; },
};
</script>
包裹路由视图
<template> <keep-alive> <router-view></router-view> </keep-alive>
</template> <script>
// 无需特别脚本,Vue Router会处理路由的切换
</script>
使用include和exclude属性
<template> <keep-alive :include="['ComponentA', 'ComponentC']"> <component :is="currentComponent"></component> </keep-alive>
</template> <script>
// 假设你有ComponentA, ComponentB, ComponentC等组件
// 这里只缓存ComponentA和ComponentC
</script>
Vue 3 中的 <keep-alive>
Vue 3 保留了 <keep-alive> 的基本用法和功能,但做了一些改进和性能优化。与Vue 2相比,Vue 3的 <keep-alive> 在处理组件缓存时更加高效,尤其是在组件树重建时。
Vue 3 的 <keep-alive> 同样支持 include、exclude 和 max 属性,用法与Vue 2相同。但是,Vue 3的响应式系统和组合式API(Composition API)为 <keep-alive> 提供了更多的灵活性和控制力。
例如,在Vue 3中,你可以结合使用 <keep-alive> 和 <teleport> 来将缓存的组件移动到DOM的不同位置,或者利用Composition API中的响应式状态来控制缓存的行为。
性能优化
Vue 3 在多个方面对 <keep-alive> 进行了性能优化,包括更快的组件实例化、更好的内存管理和更智能的缓存策略。这些优化使得在Vue 3中使用 <keep-alive> 时,能够更高效地处理大量组件的缓存和复用。



Vuex与Pinia
Vue的状态管理——Vuex3&4&Pinia-CSDN博客
防止恶意登录
SQL注入、XSS攻击
XSS攻击-CSDN博客


WebSocket
聊天室,应用
轮询

Set与Map
Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。它有以下特点:
- 唯一性:
Set中的元素是唯一的,不会出现重复的值。 - 无序性:
Set中的元素没有特定的顺序,你无法通过索引来访问Set中的元素。
使用场景
-
去重:这是
Set最直接和常用的功能。你可以通过将一个数组转换为Set来快速去除其中的重复元素。
const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // [1, 2, 3, 4, 5]
-
对象集合:当需要存储不重复的对象时,
Set可以作为一个有效的集合来使用。不过需要注意的是,即使对象的内容相同,但如果它们是不同的对象实例,也会被Set视为不同的元素。 -
交集、并集、差集操作:利用
Set提供的add、delete、has等方法,可以方便地进行集合操作。
Map
Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。
- 键值对:
Map中的每个元素都是一个键值对。 - 有序性:
Map记住了元素的插入顺序,因此你可以通过迭代来按顺序访问其中的元素。 - 键的唯一性:
Map中的键是唯一的。
使用场景
-
需要记住元素插入顺序的场景:当你想根据元素的插入顺序来访问它们时,
Map是一个很好的选择。 -
键是复杂数据类型的场景:与对象不同,
Map的键可以是任何数据类型,包括函数、对象或任何原始值。这意味着,如果键是对象,则只要两个键对象引用的是同一个对象,Map就会将它们视为相同的键。 -
性能敏感的场景:在一些情况下,当你需要频繁地访问数据并且性能是关键考虑因素时,
Map可能比对象更高效,特别是在涉及到复杂键时。 -
数据映射:当你想实现数据之间的映射关系时,
Map提供了一个直观且方便的方式来存储和访问这些数据。


JS多线程
Web Workers 是 JavaScript 的一种机制,它允许你在与主线程(通常是UI线程)分离的后台线程中运行脚本。这样做的好处是,你可以执行耗时的计算或操作而不会阻塞用户界面。这对于需要处理大量数据或复杂计算的Web应用尤其有用。
基本概念
- 主线程:负责执行脚本、处理事件、渲染UI等。
- Worker 线程:运行在后台的脚本,不会干扰主线程的UI渲染。
- 消息传递:主线程和 Worker 线程之间通过传递消息来通信,而不是直接共享内存。
如何使用 Web Workers
1. 创建一个 Worker
首先,你需要创建一个指向 Worker 脚本的 URL。这个脚本会在 Worker 线程中运行。
const myWorker = new Worker('worker.js');
2. 监听 Worker 的消息
你可以在主线程中监听来自 Worker 的消息。
myWorker.onmessage = function(e) {
console.log('Received message from worker:', e.data);
};
3. 向 Worker 发送消息
你可以使用 postMessage() 方法向 Worker 发送消息。
myWorker.postMessage('Hello Worker!');
4. Worker 脚本
在 worker.js 文件中,你可以使用 self(等同于 Worker 线程的全局对象)来接收消息并发送响应。
self.onmessage = function(e) { console.log('Message received from main script', e.data); // 处理数据 const result = e.data.toUpperCase(); // 将结果发送回主线程 self.postMessage(result);
};
5. 错误处理
监听 Worker 线程中的错误。
myWorker.onerror = function(error) { console.error('Worker error:', error);
};
6. 终止 Worker
当不再需要 Worker 时,你可以调用 terminate() 方法来停止它。
myWorker.terminate();
进阶使用
- 多个 Worker:你可以创建多个 Worker 来并行处理任务。
- 数据共享:虽然 Worker 之间不能直接共享内存,但可以使用
postMessage()传递数据,或使用SharedArrayBuffer和Atomics(在支持的环境下)来在 Worker 之间共享和同步数据。 - Worker 之间的通信:Worker 之间不能直接通信,但可以通过主线程作为中介来间接通信。
- 模块化 Worker:在 Worker 脚本中使用 ES6 模块,可以更好地组织代码和重用功能。
注意事项
- 同源策略:Worker 脚本必须与创建它的脚本同源(协议、端口和主机名必须相同)。
- 性能考虑:虽然 Worker 可以提高应用的响应性,但它们也会消耗额外的内存和CPU资源。
- 浏览器兼容性:虽然大多数现代浏览器都支持 Web Workers,但在使用之前最好检查目标浏览器的兼容性。
通过合理使用 Web Workers,你可以显著提升 Web 应用的性能和用户体验。
webworker需要后端支持





浏览器网络与安全
计算机网络面试常见题目(一)-CSDN博客
计算机网络速成(二)-CSDN博客
计算机网络速成(三)-CSDN博客
计算机网络系统速成-CSDN博客
相关文章:
前端JS常见面试题
数据双向绑定 Bug解决 集成工作涉及 版本node 依赖包报错 版本问题!!!ElementUI、Cesium、ant-design 配置、代码和其他 混入 在Vue中,混入(Mixins)是一种非常有用的功能,它允许你创建可复…...
利用深度学习实现验证码识别-4-ResNet18+imagecaptcha
在当今的数字化世界中,验证码(CAPTCHA)是保护网站免受自动化攻击的重要工具。然而,对于用户来说,验证码有时可能会成为一种烦恼。为了解决这个问题,我们可以利用深度学习技术来自动识别验证码,从…...
IDC基础学习笔记
一、数据中心介绍 1、数据中心级别划分: 2、数据中心结构: 3、IT系统组成 二、数据中心硬件知识 1、服务器组件 服务器的正面接口: 服务器的反面接口: (1)CPU CPU定义:中央处理器(…...
Mysql基础练习题 1527.患某种疾病的患者 (力扣)
查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1 。 题目链接: https://leetcode.cn/proble…...
Mysql链接异常 | [08001] Public Key Retrieval is not allowed
Datagrid报错 [08001] Public Key Retrieval is not allowed 这个错误通常是由于 MySQL 8.0 中的新特性导致的。默认情况下,MySQL 8.0 使用 caching_sha2_password 作为认证插件,而你需要在连接 URL 中明确允许公钥检索或者使用老版本的认证方式 mysql…...
vue3项目中如何动态循环设置ref并获取使用
前言:vue2可通过ref来获取当前的dom,但是vue3有个问题,就是必须定义ref的变量名,才能使用;倘若有多个ref,一个个去定义未免过于繁琐,还有一种情况就是dom是使用v-for循环出来的,那么…...
stm32之SPI通信协议
文章目录 前言一、SPI通信协议1.1 SPI简介1.2 SPI通信特点1.3 SPI与I2C对比 二、SPI硬件电路三、SPI通信原理四、SPI时序单元4.1 起始和终止条件4.2 交换一个字节(模式1)4.3 交换一个字节(模式0)4.4 交换一个字节(模式2和3) 五、SPI时序5.1 发送指令5.2 指定地址写5.3 指定地址…...
Unity 摄像机(Camera)详解
文章目录 0.前言1.相机属性介绍2.Unity 中多个相机画面堆叠显示2.1 3D 摄像机2.2 UI 摄像机2.3 摄像机的Culling Mask设置 0.前言 本文介绍的是使用Unity默认的内置渲染管线下的Camera组件,使用URP或HDRP则不同。 1.相机属性介绍 Clear Flags: 清除标记…...
数学基础 -- 线性代数之LU分解
LU分解 LU分解(LU Decomposition)是线性代数中非常重要的一种矩阵分解方法。它将一个方阵分解为一个下三角矩阵(L矩阵)和一个上三角矩阵(U矩阵)的乘积。在数值线性代数中,LU分解广泛用于求解线…...
高职人工智能训练师边缘计算实训室解决方案
一、引言 随着物联网(IoT)、大数据、人工智能(AI)等技术的飞速发展,计算需求日益复杂和多样化。传统的云计算模式虽在一定程度上满足了这些需求,但在处理海量数据、保障实时性与安全性、提升计算效率等方面…...
【Java】SpringCloud中使用set方法报错空指针
前言:今天在交流群中看见了一个空指针报错,想着哪里为空点过去看看为什么赋不上值就行,没想到啪啪打脸了,今天总结一下。 以下是他的RedisTempate注入和方法 可以看到,89行报错空指针。先分析一下, ①赋值…...
芯片杂谈 -- 常聊的内核包含哪些模块
目录 1. R52内核速览 2. 处理器模块详解 3.内核的功能安全测什么? 4.小结 最开始接触到汽车MCU大都来自NXP、Infineon、Renesas,例如MPC5748、TC275、RH850 P1X等等; 而各大OEM、供应商等等发布的JD通常都会要求熟悉AURIX、PowerPC、G3K…...
运维问题0002:SAP多模块问题-SAP系统程序在执行时,跳出“加急快件”窗口,提示:快件文档“更新已终止”从作者***收到
1、问题描述 近期收到2起业务报障,均反馈在SAP执行程序时,弹出“加急快件”窗口,导致操作的业务实际没有更新完成。 1)业务场景一:设备管理部门在操作事务代码:AS02进行资产信息变更时,保存正常…...
深度解析RAG:你必须要了解的RAG优化方法
RAG(Retrieval-Augmented Generation)是一种结合检索和生成能力的技术框架,旨在通过从外部知识库中检索相关信息来增强生成模型的输出。其基本思想是利用大型语言模型(LLM)的生成能力,同时通过检索机制获取…...
深度学习驱动下的字符识别:挑战与创新
一、引言 1.1 研究背景 深度学习在字符识别领域具有至关重要的地位。随着信息技术的飞速发展,对字符识别的准确性和效率要求越来越高。字符识别作为计算机视觉领域的一个重要研究方向,其主要目的是将各种形式的字符转换成计算机可识别的文本信息。近年…...
使用 JAXB 将内嵌的JAVA对象转换为 xml文件
使用 JAXB 将内嵌的JAVA对象转换为 xml文件 1. 需求2. 实现(1)FileDesc类(2)MetaFileXml类(3)生成对应的xml文件 1. 需求 获取一个目录下所有文件的元数据信息(文件名、大小、后缀等࿰…...
若依项目后台启动报错: [网关异常处理]、503
拉取代码启动项目,网关控制台报错: 21:31:59.981 [boundedElastic-7] WARN o.s.c.l.c.RoundRobinLoadBalancer - [getInstanceResponse,98] - No servers available for service: ruoyi-system 21:31:59.981 [boundedElastic-7] ERROR c.r.g.h.Gateway…...
【C++ Qt day10】
2、 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&am…...
GO HTTP库使用
Go的 net/http 包是一个强大且易于使用的库,用于构建HTTP服务器和客户端。通过它,你可以轻松实现HTTP请求的处理、路由、静态文件服务等功能。下面重点以及一个简单的Demo示例。 文章目录 1. **基础HTTP服务器**2. **处理请求与响应**3. **路由与处理器*…...
数据结构 - 顺序表
0.线性表 1.定义 线性表就是零个或多个相同数据元素的有限序列。 2.线性表的存储结构 ①.顺序结构 ②.链式结构 3.线性表的表示方法 例如: 一.线性表的基本运算 二.线性表的复杂运算 1.线性表的合并运算 2.线性表的去重运算 三.顺序表 1.定义 顺序表,就…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
