前端面试题09
74、定义类的方法有哪些
在JavaScript中,定义类的方法有以下几种方式:
1.使用函数声明:
function MyClass() {// constructor
}
MyClass.prototype.methodName = function() {// method body
};
2.使用类的方法缩写(ES6引入):
class MyClass {methodName() {// method body}
}
3.使用对象字面量赋值:
const MyClass = {methodName: function() {// method body}
};
4.使用ES6箭头函数:
class MyClass {methodName = () => {// method body}
}
无论使用哪种方式,类的方法都可以在类的实例对象上被调用。使用this
关键字可以在方法中引用当前实例的属性和方法。 这些方法定义方式的选择取决于代码结构和个人偏好。在ES6中,推荐使用类的方法缩写方式,因为它更简洁和清晰,支持更多的语法特性。
75、Object.is()和==、===之间的区别
Object.is(value1, value2):
-
Object.is()
是一个静态方法,用于判断两个值是否严格相等。 -
它的比较行为与
===
运算符一致,只有在两个值严格相等时返回true
,否则返回false
。 -
与
===
运算符不同的是,Object.is()
对于 NaN 和 -0 有特殊处理,将它们视为不相等。 -
示例:
Object.is(3, 3); // true Object.is('foo', 'foo'); // true Object.is(true, true); // true Object.is(undefined, undefined); // true Object.is(null, undefined); // false Object.is(0, -0); // false Object.is(NaN, NaN); // false
== 运算符(相等运算符):
-
==
运算符用于将两个操作数进行比较,如果它们的值相等,返回true
,否则返回false
。 -
在进行比较之前,会进行类型转换,使得两个操作数具有相同的类型。
-
进行比较时,会遵循一些特定的规则(类型转换规则)。
-
例子:
1 == 1; // true '1' == 1; // true 0 == false; // true null == undefined; // true NaN == NaN; // false
=== 运算符(严格相等运算符):
-
===
运算符用于比较两个操作数的值和类型是否完全相等,若完全相等,则返回true
,否则返回false
。 -
不进行类型转换。
-
示例:
1 === 1; // true '1' === 1; // false 0 === false; // false null === undefined; // false 0 === -0; // true NaN === NaN; // false
综上所述,Object.is()
是严格相等运算符的一种更严格的版本,主要区别在于对 0 和 -0 值的处理方式。而 ==
运算符则会进行类型转换,再进行比较。最好的实践是在大多数情况下使用 ===
运算符进行值的比较,只在需要考虑特殊情况时使用 Object.is()
。
76、Vue中虚拟DOM的作用
- 提高渲染效率:虚拟DOM可以通过diff算法来比较前后两个虚拟DOM树的差异,只对差异部分进行实际的DOM更新操作,避免对整个DOM树进行重新渲染,从而提高了页面的渲染效率。
- 简化开发:虚拟DOM将真实DOM的操作抽象成跨平台、可复用的JavaScript对象,使得开发者可以使用组件化的方式来构建应用,将UI拆分为多个可组合的组件,简化了应用的开发和维护。
- 跨平台支持:由于虚拟DOM是基于JavaScript对象的抽象结构,它可以支持跨不同平台的开发,比如在浏览器、桌面应用和移动端应用等平台上使用相同的组件和代码逻辑进行开发。
- 高效的跟踪和更新:Vue的响应式系统结合虚拟DOM可以实现高效的状态追踪和更新。当应用的状态发生变化时,Vue会通过虚拟DOM的diff算法计算出需要更新的最小DOM操作,只对需要更新的部分进行实际的DOM更新,从而提高了应用的性能。
虚拟DOM技术使得Vue可以在保持开发效率和性能之间取得平衡,提供了一个高效、组件化的方式来构建交互式的前端应用。它在Vue中扮演了关键的角色,使得开发者可以更好地管理和控制应用的状态和渲染过程。
77、CSS过渡属性和动画的区别
- 触发方式:过渡属性是响应状态改变的,只有当某个属性的值发生变化时,过渡效果才会触发。而动画是无需响应状态的改变,可以通过添加类名或使用JavaScript来触发动画效果。
- 使用场景:过渡属性适用于简单的状态改变,如鼠标悬停、元素出现/消失等,常用于实现一些平滑的过渡效果。动画则适用于更复杂、更精细的动画效果,可以实现更高级的交互和动态效果。
- 配置灵活性:动画相对于过渡属性在配置灵活性上更强大。使用关键帧(Keyframes)规则,可以在动画序列中定义多个阶段,并设置每个阶段所需的样式属性。这使得动画可以实现更复杂的变化和多样化的效果。
- 控制和自定义:过渡属性的控制比较简单,主要通过定义过渡属性和过渡的时间曲线来控制过渡的效果。而动画可以通过JavaScript控制动画的播放、暂停、重复等行为,并通过CSS提供的其他属性(如animation-fill-mode、animation-iteration-count等)进行自定义。
总结来说,过渡属性适用于简单的状态改变,并且控制和配置相对简单,可以实现平滑的过渡效果。而动画更适用于复杂的、精细的动态效果,可以通过关键帧规则和JavaScript控制,实现更丰富多样的动画效果。在实际开发中,可以根据需求来选择使用过渡属性还是动画来实现相应的动画效果。
78、让一段JavaScript代码异步执行
1、使用setTimeout
函数:setTimeout
函数可以在指定的时间间隔后异步执行指定的代码。你可以将你想要异步执行的代码包装在一个回调函数内,然后使用setTimeout
来设置一个延迟的时间。
setTimeout(function() {// 在这里编写你想要异步执行的代码
}, 0);
使用setTimeout
的这种方式可以立即将代码放入事件循环队列中,以便在其他同步代码执行完成后被执行。
2、使用Promise
对象:Promise
对象提供了一种更优雅的方式来处理异步操作。你可以创建一个Promise
对象并在其中定义异步操作的逻辑。在异步操作完成后,调用resolve
函数来标志操作成功并传递结果,或调用reject
函数来标志操作失败并传递错误信息。
new Promise(function(resolve, reject) {// 异步操作的逻辑// 在操作成功后,调用 resolve(value)// 在操作失败后,调用 reject(error)
}).then(function(result) {// 在操作成功后的处理逻辑
}).catch(function(error) {// 在操作失败后的处理逻辑
});
你可以在Promise
对象的then
方法中处理成功的逻辑,在catch
方法中处理失败的逻辑。
3、使用async/await
:async/await
是一种更简洁的处理异步操作的方法,它基于Promise
对象。你可以将要执行的异步代码放在一个async
函数中,然后使用await
关键字来等待异步操作的完成。
async function asyncFunction() {await asyncOperation(); // 异步操作// 执行其他的代码
}
在使用await
关键字时,它会暂停async
函数的执行,直到异步操作完成并返回结果,然后继续执行之后的代码。
79、单页应用程序首屏优化有哪些方法
- 按需加载:将页面资源(如 JavaScript、CSS、图片等)进行按需加载,而不是一次性加载所有资源。可以使用异步加载、懒加载等技术,并优化资源的加载顺序,保证先加载必要的资源,再加载其他次要的资源。
- 代码分割:将应用程序的代码拆分成多个模块,按需加载模块,可以使用工具如Webpack等进行代码分割。这样可以减少首屏需要加载的代码量,提高页面渲染速度。
- 图片优化:使用适当的图片格式、压缩图片大小,减少网络传输的数据量。可以使用工具如ImageOptim、TinyPNG等进行图片优化,同时,可以使用懒加载技术(如LazyLoad)延迟加载图片,减少首屏需要加载的图片数量。
- 预渲染:对于一些静态内容不经常变化的页面,可以使用预渲染技术,在服务器端生成好首屏内容,并将其作为静态HTML文件返回给客户端,从而加快页面加载速度。
- 缓存策略:合理利用浏览器缓存和服务器缓存,将可能重复请求的资源缓存起来,减少请求次数和网络传输时间。可以使用HTTP缓存头,如Cache-Control、Expires等,设置合理的缓存时间。
- 代码优化:减少不必要的重绘和重排,避免过多的DOM操作,优化JavaScript代码,减少CPU计算时间。使用工具如Chrome DevTools进行性能分析,找出性能瓶颈并进行优化。
- 服务器优化:确保服务器的响应速度快,减少网络延迟。可以使用CDN(内容分发网络)来加速静态资源的加载,将资源分布到离用户更近的服务器上。
- 骨架屏:在页面加载过程中,可以使用骨架屏技术展示一个简单的页面结构,提供视觉反馈,让用户感知到页面正在加载,从而减少等待时间的焦虑感。
80、Vue中如何实现单页应用程序的页面缓存
1、使用组件:Vue提供了一个名为keep-alive
的特殊组件,可用于缓存动态组件的状态。
<router-view v-slot="{ Component }"><keep-alive><component :is="Component"></component></keep-alive>
</router-view>
通过将组件包裹在周围,你可以缓存通过Vue Router渲染的组件。这样,当你在不同的页面切换时,组件的状态将被保留,而不会重新加载。
2、使用$route.meta属性:在路由配置中,可以为每个路由定义一个meta对象,用于存储一些自定义数据。你可以利用该属性来判断是否需要缓存页面。
const router = new VueRouter({routes: [{path: '/home',component: Home,meta: { keepAlive: true // 需要缓存}},{path: '/about',component: About,meta: { keepAlive: false // 不需要缓存}}]
})
然后,你可以在页面组件中通过$route.meta.keepAlive属性来决定是否缓存该页面。
3、使用activated和deactivated生命周期钩子:如果某个页面经常需要刷新或者不适合使用组件,你可以使用组件的activated和deactivated生命周期钩子来手动处理页面的缓存。
export default {activated() {// 页面被激活时触发// 在这里可以加载数据或执行其他操作},deactivated() {// 页面失去激活状态时触发// 在这里可以清除数据或执行其他操作}
}
当页面切换时,activated和deactivated钩子会被依次触发,你可以在这里处理缓存逻辑。
相关文章:
前端面试题09
74、定义类的方法有哪些 在JavaScript中,定义类的方法有以下几种方式: 1.使用函数声明: function MyClass() {// constructor } MyClass.prototype.methodName function() {// method body };2.使用类的方法缩写(ES6引入&…...

网站更换IP的四大注意事项
1.对网站当中的数据进行备份 网站更换IP时可以将页面的数据库文件和站点文件通过下载工具在本地完成备份。 2.更换解析域名 从站点域名管理后台当中更换域名地址,改为新的IP地址。 3.确保IP安全 在用户更换IP前一定要确定IP是否安全,一旦IP存在不良…...

策略模式与简单工厂模式:终结if-else混乱,让代码更清爽
阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概4500多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…...

TCP三次握手过程
什么是TCP tcp是一个面向连接的、可靠的、基于字节流的传输层通信协议 面向连接:TCP连接是一对一的,不能实现一对多或多对一,TCP在通信前要首先建立连接,连接成功后才能开始进行通信可靠的:TCP连接要保证通信过程的可靠…...

04-配置远程仓库的SSH免密登陆
配置SSH免密登录 配置步骤 创建好的远程仓库也可以使用SSH的方式进行访问,但如果没有配置公钥会有警告 第一步: 删除用户家目录下的.ssh目录,如果没有该目录或者该目录下已经有密钥了就不用执行该操作 #进入当前用户的家目录,删除.ssh 目录 LayneLAPTOP-Layne MINGW64 ~ $ r…...

【中文编码】利用bert-base-chinese中的Tokenizer实现中文编码嵌入
最近接触文本处理,查询了一些资料,记录一下中文文本编码的处理方法吧。 先下载模型和词表:bert-base-chinese镜像下载 如下图示,下载好的以下文件均存放在 bert-base-chinese 文件夹下 1. 词编码嵌入简介 按我通俗的…...

一文解决msxml3.dll文件缺失问题,快速修复msxml3.dll
在了解问题之前,我们必须首先清楚msxml3.dll到底是什么。DLL(Dynamic Link Libraries)文件是Windows操作系统使用的一个重要组成部分,用于存储执行特定操作或任务的代码和数据。msxml3.dll为Windows系统提供处理XML文档的功能。如…...

《React 知识点》第一篇 大括号使用{}
简介 大括号 " {} "可以用于包裹JavaScript的表达式或语句。以便在jsx中动态生成内容。 插入变量与表达式 function expressionTest() {const name "变量测试";return (<p><div>{name}</div><div>表达式 210 {2 100}</div…...
kafka入门(二): 位移提交
位移提交: Kafka的每条消息都有唯一的 offset, 用来表示消息在分区中对应的位置。有的也称之为 “偏移量”。 消费者每次在 poll() 拉取消息,它要返回的是还没有消费过的消息集, 因此,需要记录上一次消费时的消费位…...
PG时间计算
PG数据库,时间计算使用场景总结 日期之差 --**获取秒差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 2019-05-05 10:10:10)); --**获取分钟差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 20…...

基于51单片机的交通灯_可调时间_夜间+紧急模式
51单片机交通灯 1 讲解视频:2 功能要求3 仿真图:4 原理图PCB5 实物图6 程序设计:7 设计报告8 资料清单(提供资料清单所有文件):设计资料下载链接: 51单片机简易交通灯_可调时间_夜间紧急 仿真代…...

网络通信原理,进制转化总结
来源,做个笔记,讲的还蛮清楚通信原理-2.5 数据封装与传输05_哔哩哔哩_bilibili ip地址范围...

西南科技大学(数据结构A)期末自测练习三
一、填空题(每空1分,共10分) 1、为解决计算机主机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区。主机将要输出的数据依次写入缓冲区,打印机则依次从缓冲区中取出数据,则该换缓冲区的逻辑结构…...

【halcon】裁剪
前言 目前我遇到的裁剪相关的函数都是以clip打头的函数。一共4个: clip_end_points_contours_xldclip_contours_xldclip_regionclip_region_rel 前面两个是对轮廓的裁剪。 后面是对区域的裁剪。 裁剪轮廓的两端 clip_end_points_contours_xld 用于实现裁剪XLD…...

vue+less+style-resources-loader 配置全局颜色变量
全局统一样式后,可配置vue.config.js实现全局颜色变量,方便在编写时使用统一风格的色彩 一、新建global.less 二、下载安装style-resources-loader npm i style-resources-loader --save-dev三、在vue.config.js中进行配置 module.exports {pluginOpt…...

第二次量子化
专栏目录: 高质量文章导航-持续更新中 前置复盘: 玻色子和费米子: 首先,我们希望把描述单粒子态的量子力学推广到全同多粒子体系。我们的做法是从单粒子态的希尔伯特空间(Hilbert Space)出发,构造全同多粒子态的态空间——福克空间(Fock Space),它实际上就是无穷个…...

(三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言Q1:卷积网络和传统网络的区别Q2:卷积神经网络的架构Q3:卷积神经网络中的参数共享,也是比传统网络的优势所在4、 具体的实现代码网络搭建…...

【代码】多种调度模式下的光储电站经济性最优 储能容量配置分析matlab/yalmip
程序名称:多种调度模式下的光储电站经济性最优储能容量配置分析 实现平台:matlab-yalmip-cplex/gurobi 代码简介:代码主要做的是一个光储电站经济最优储能容量配置的问题,对光储电站中储能的容量进行优化,以实现经济…...

深度学习今年来经典模型优缺点总结,包括卷积、循环卷积、Transformer、LSTM、GANs等
文章目录 1、卷积神经网络(Convolutional Neural Networks,CNN)1.1 优点1.2 缺点1.3 应用场景1.4 网络图 2、循环神经网络(Recurrent Neural Networks,RNNs)2.1 优点2.2 缺点2.3 应用场景2.4 网络图 3、长短…...

ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设
ChatGPT 自发布以来,就成为了大家的好帮手,学生党和打工人更是每天都离不开。 然而这次好帮手 ChatGPT 却帮过头了,莫名奇妙的成为了“帮凶”,一位研究人员利用 ChatGPT 创建了虚假的数据集,用来支持未知的科学假设。…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...