前端JS常见面试题

news2024/9/22 9:47:03

数据双向绑定 

Bug解决

集成工作涉及

版本node

依赖包报错

版本问题!!!ElementUI、Cesium、ant-design

 配置、代码和其他

混入

在Vue中,混入(Mixins)是一种非常有用的功能,它允许你创建可复用的功能。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混入”该组件本身的选项。

混入的基本使用

  1. 定义混入:首先,你需要定义一个混入对象。这个对象可以包含任何组件选项。
// 定义一个混入对象  
const myMixin = {  
  created() {  
    this.hello();  
  },  
  methods: {  
    hello() {  
      console.log('hello from mixin!');  
    }  
  }  
}
  1. 使用混入:然后,你可以在组件中通过mixins选项来使用这个混入。
// 定义一个使用混入的组件  
Vue.component('my-component', {  
  mixins: [myMixin],  
  created() {  
    console.log('component created!');  
  }  
})

在这个例子中,当my-component组件被创建时,它首先会调用myMixin中的created钩子,然后调用它自己的created钩子。同时,my-component也继承了myMixin中的hello方法,可以在组件的其它部分调用这个方法。

注意事项

  • 选项合并:当组件和混入对象含有同名选项时,这些选项将以一定方式被合并。对于生命周期钩子,混入对象的钩子将在组件自身的钩子之前调用。对于值为对象的选项,如methodscomponentsdirectives,混入对象的选项将被合并到组件的选项中,如果两个对象有相同的键名,则组件的选项会覆盖混入对象的选项。

  • 全局混入:Vue.mixin() 允许你注册一个混入,影响之后创建的每一个Vue实例。请谨慎使用全局混入,因为它会影响每一个之后创建的组件实例(包括第三方组件库)。

  • 合并策略:Vue为不同类型的选项定义了不同的合并策略。例如,data选项在合并时会进行递归合并,而methodscomponentsdirectives等选项则是简单地合并到一个对象中。

  • 使用场景:混入非常适合为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> 同样支持 includeexclude 和 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 中的元素。
使用场景
  1. 去重:这是 Set 最直接和常用的功能。你可以通过将一个数组转换为 Set 来快速去除其中的重复元素。

const array = [1, 2, 2, 3, 4, 4, 5];  
const uniqueArray = [...new Set(array)];  
console.log(uniqueArray); // [1, 2, 3, 4, 5]
  1. 对象集合:当需要存储不重复的对象时,Set 可以作为一个有效的集合来使用。不过需要注意的是,即使对象的内容相同,但如果它们是不同的对象实例,也会被 Set 视为不同的元素。

  2. 交集、并集、差集操作:利用 Set 提供的 adddeletehas 等方法,可以方便地进行集合操作。

Map

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。

  • 键值对Map 中的每个元素都是一个键值对。
  • 有序性Map 记住了元素的插入顺序,因此你可以通过迭代来按顺序访问其中的元素。
  • 键的唯一性Map 中的键是唯一的。
使用场景
  1. 需要记住元素插入顺序的场景:当你想根据元素的插入顺序来访问它们时,Map 是一个很好的选择。

  2. 键是复杂数据类型的场景:与对象不同,Map 的键可以是任何数据类型,包括函数、对象或任何原始值。这意味着,如果键是对象,则只要两个键对象引用的是同一个对象,Map 就会将它们视为相同的键。

  3. 性能敏感的场景:在一些情况下,当你需要频繁地访问数据并且性能是关键考虑因素时,Map 可能比对象更高效,特别是在涉及到复杂键时。

  4. 数据映射:当你想实现数据之间的映射关系时,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博客

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

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

相关文章

C语言-数据结构 无向图迪杰斯特拉算法(Dijkstra)邻接矩阵存储

在迪杰斯特拉中&#xff0c;相比普利姆算法&#xff0c;是从顶点出发的一条路径不断的寻找最短路径&#xff0c;在实现的时候需要创建三个辅助数组&#xff0c;记录算法的关键操作&#xff0c;分别是Visited[MAXVEX]记录顶点是否被访问&#xff0c;教材上写的final数组但作用是…

springboot请求传参常用模板

注释很详细&#xff0c;直接上代码 项目结构 源码 HelloController package com.amoorzheyu.controller;import com.amoorzheyu.pojo.User; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import java.ti…

选择开放式耳机时应该注重哪些?值得入手的四款蓝牙耳机推荐

在选择开放式耳机时&#xff0c;以下这些方面需要重点关注&#xff1a; 舒适度方面&#xff1a; 设计与材质考量&#xff1a;耳挂和耳翼的设计必须合理&#xff0c;能够与不同的耳朵形状及大小相契合&#xff0c;保证佩戴牢固且不会过紧&#xff0c;防止对耳朵造成挤压。例如…

【解决bug之路】npm install node-sass(^4.14.1)连环报错解决!!!(Windows)

有关node-sass的深入分析可参考&#xff1a;又报gyp ERR&#xff01;为什么有那么多人被node-sass 坑过&#xff1f; 主要有如下三方面错误&#xff0c;请自查&#xff1a; 1.node&#xff0c;npm版本需与node-sass版本匹配&#xff0c;像node-sass&#xff08;^4.14.1&#x…

李沐关于大模型应用及职业发展的分享

前几天看了 李沐 在上海交大做的一个 分享 &#xff0c; 主要分享了他对于大模型的一些看法和他个人的经历。 我很喜欢李沐&#xff0c;技术厉害&#xff0c;看起来比较接地气&#xff0c;录制的 课程 也比较容易看懂。 大模型的应用 下面这张图是他对当前大模型应用的看法。…

前端学习笔记-Web APls篇-03

Dom事件进阶 1.事件流 事件流和两个阶段说明 事件流指的是事件完整执行过程中的流动路径 说明&#xff1a;假设页面里有个div&#xff0c;当触发事件时&#xff0c;会经历两个阶段&#xff0c;分别是捕获阶段、冒泡阶段简单来说&#xff1a;捕获阶段是 从父到子【大到小】 …

【鸿蒙开发工具报错】Build task failed. Open the Run window to view details.

Build task failed. Open the Run window to view details. 问题描述 在使用deveco-studio 开发工具进行HarmonyOS第一个应用构建开发时&#xff0c;通过Previewer预览页面时报错&#xff0c;报错信息为&#xff1a;Build task failed. Open the Run window to view details.…

第三部分:5---进程等待、进程终止

目录 进程的两种终止方式&#xff1a; 正常终止——进程退出码&#xff1a; 查看最近一次进程退出的退出码&#xff1a; 自定义退出码对应的文本信息&#xff1a; 退出码和C语言的错误码的关系&#xff1a; 异常终止——操作系统发送信号&#xff1a; —————————…

java基础-IO(6)转换流InputStreamReader、OutputStreamWriter

引入&#xff1a; 从第一节可知&#xff0c;流分为两类&#xff1a;字节流和字符流&#xff0c;转换流就是在两者之间进行转换。 字节流转换为字符流&#xff1b; 字符流转换为字节流。 字符集 字符集&#xff1a;定义了可用字符及其对应的数字编码的集合。常见的字符集有UT…

1.Python解释器和Pycharm安装设定

Python是一种动态的&#xff0c;解释型语言&#xff0c;需要安装Python解释器。安装Python后&#xff0c;可以使用其自带的编码工具来编写代码。也可以使用第三方的工具&#xff0c;这里使用Pycharm,它有很多优点&#xff0c;可以提高代码编写和编码调试效率。 一、Python解释…

nacos 安装 centos7 docker

一、拉取镜像 docker pull nacos/nacos-server二、创建容器 ①一般 docker run -d --name nacos-server -p 8848:8848 -e MODEstandalone nacos/nacos-server②通过配置文件配置相关环境变量 1上传文件 2创建 docker run -d \ --name nacos \ --env-file ./nacos/custom.env …

【C++ Primer Plus习题】14.3

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "queuetp.h&quo…

151-钓鱼篇邮件钓鱼SPF绕过自建邮件系统SwaksGophish

前置内容: 1、什么是SPF: 发件人策略框架(Sender Policy Framework)电子邮件认证机制中文译为发送方策略框架&#xff0c;主要作用是防止伪造邮件地址。可以把 SPF 记录看成是一个合法 IP 地址的白名单&#xff0c;当进来的邮件来自一个白名单中指定的 IP 地址&#xff0c;SP…

Java中的常用类及包装类

目录 Java中的常用类及包装类 Math类 Math类常用方法 BigInteger类 创建BigInteger类对象 常用方法 BigDecimal类 创建BigDecimal类对象 常用方法 Date日期类 创建Date类对象 常用方法 Calendar类 获取Calendar类实例 常用方法 SimpleDateFormat类 创建SimpleDateFormat类对象 …

燃气涡轮发动机性能仿真程序GSP12.0.4.2使用经验(二):使用GSP建立PG9351FA燃气轮机性能仿真模型

目录 一、PG9351FA燃气轮机简介及热力循环参数二、基于GSP的性能仿真模型设置环境参数设置进气道参数设置压气机参数设置燃烧室参数设置透平&#xff08;涡轮&#xff09;参数设置转子负载参数燃油流量外部控制 三、仿真结果四、其它 一、PG9351FA燃气轮机简介及热力循环参数 …

数据结构10

文章目录 两两交换链表中的节点括号生成I2009 408应用题42题 两两交换链表中的节点 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullp…

Mysql基础练习题 1407.排名靠前的旅行者(力扣)

编写解决方案&#xff0c;报告每个用户的旅行距离。 # 返回的结果表单&#xff0c;以 travelled_distance 降序排列 &#xff0c;如果有两个或者更多的用户旅行了相同的距离, 那么再以 name 升序排列 。 题目链接&#xff1a; https://leetcode.cn/problems/top-travellers/d…

页面水印的实现以及防删除方案

水印相关 引言绘制一个水印输出背景图封装一点点细节图片加水印防止水印删除问题解决方案 引言 在企业里为了防止信息泄露和保护知识产权&#xff0c;通常会在页面和图片上添加水印 前端页面水印的添加一般有这几种方式&#xff1a;dom 元素循环、canvas 输出背景图、svg 实现…

vite项目配置本地开发使用https访问

在Vite项目中启用HTTPS以安全地使用navigator.mediaDevices.getUserMedia() 引言 在现代Web开发中&#xff0c;保护用户隐私和数据安全是至关重要的。特别是在涉及到媒体捕获功能&#xff0c;如使用用户的摄像头或麦克风时&#xff0c;Web应用需要遵循严格的安全准则。naviga…

《生成式人工智能行业自律倡议》发布,BAT、华为小米 OPPO 荣耀、北大清华等参编

8 月 29 日,在成都举办的 2024 年中国网络文明大会上,《生成式人工智能行业自律倡议》正式发布。 《生成式人工智能行业自律倡议》从保障数据和算法模型安全合规、促进内容生态建设、追求技术创新与质量提升、遵循价值观与伦理道德标准和促进交流合作与开放共建等方面发出行…