当前位置: 首页 > news >正文

前端面试题(十五)

83. ES6 中的 let 和 const

  • let 和 const 的区别是什么?
    • letconst 是 ES6 引入的用于声明变量的新方式,相比于传统的 var,它们具有以下特性:

      1. 块级作用域letconst 声明的变量在其所在的块级作用域内有效,不会在作用域外被访问到。
      2. 变量提升不同:虽然 letconst 也有变量提升,但在提升过程中,声明的变量不会初始化,因此在声明前使用会抛出 ReferenceError,这被称为 暂时性死区 (Temporal Dead Zone)
      3. 不可重复声明:在同一作用域内,不能使用 letconst 重复声明同名变量。
      4. const 用于声明常量,必须在声明时初始化,且不能重新赋值,但对象和数组的属性可以改变。
    • 示例

      // let 的块级作用域
      if (true) {let x = 10;console.log(x); // 10
      }
      console.log(x); // ReferenceError: x is not defined// const 的不可变性
      const y = 20;
      y = 30; // TypeError: Assignment to constant variable.// const 对象的属性可修改
      const obj = { name: 'Alice' };
      obj.name = 'Bob'; // 合法
      console.log(obj.name); // 'Bob'
      

84. Promise 工作原理

  • Promise 是什么?

    • Promise 是用于处理异步操作的对象,它代表一个将来可能完成或失败的操作及其结果。Promise 有三种状态:

      1. Pending(进行中):初始状态,操作尚未完成。
      2. Fulfilled(已成功):操作成功完成。
      3. Rejected(已失败):操作失败。
    • Promise 的基本用法

      const promise = new Promise((resolve, reject) => {setTimeout(() => {resolve('成功');}, 1000);
      });promise.then((result) => {console.log(result); // '成功'
      }).catch((error) => {console.log(error);
      });
      
  • Promise.all 和 Promise.race 的区别?

    1. Promise.all:接受一个包含多个 Promise 的数组,只有当所有 Promise 都成功时,它才会 resolve,如果其中一个 Promise 失败,它就会 reject

      • 示例
        const p1 = Promise.resolve('成功1');
        const p2 = Promise.resolve('成功2');
        const p3 = Promise.reject('失败');Promise.all([p1, p2, p3]).then((results) => {console.log(results);}).catch((error) => {console.log(error); // '失败'});
        
    2. Promise.race:也是接受一个包含多个 Promise 的数组,但只要有一个 Promise 完成(无论是 resolve 还是 reject),它就会返回那个 Promise 的结果。

      • 示例
        const p1 = new Promise((resolve) => setTimeout(resolve, 500, '成功1'));
        const p2 = new Promise((resolve) => setTimeout(resolve, 100, '成功2'));Promise.race([p1, p2]).then((result) => {console.log(result); // '成功2'
        });
        

85. React 生命周期

  • React 的生命周期有哪些?
    React 的组件生命周期分为三个阶段:挂载阶段更新阶段卸载阶段

    1. 挂载阶段 (Mounting)

      • 当组件被创建并插入 DOM 时会触发以下钩子函数:
        • constructor():用于初始化状态和绑定方法。
        • componentDidMount():在组件挂载后执行,通常用于发送网络请求或操作 DOM。
    2. 更新阶段 (Updating)

      • 当组件的 props 或 state 发生变化时会触发:
        • shouldComponentUpdate(nextProps, nextState):用于判断是否需要重新渲染组件,返回 true 则重新渲染,返回 false 则跳过。
        • componentDidUpdate(prevProps, prevState):在更新完成后执行,通常用于 DOM 操作或发起依赖于更新的数据请求。
    3. 卸载阶段 (Unmounting)

      • 当组件即将被移除时,会调用 componentWillUnmount(),通常用于清理定时器、取消网络请求等操作。
    • 示例
      class MyComponent extends React.Component {constructor(props) {super(props);this.state = { count: 0 };}componentDidMount() {console.log('组件已挂载');}componentDidUpdate(prevProps, prevState) {console.log('组件已更新');}componentWillUnmount() {console.log('组件即将卸载');}render() {return <div>{this.state.count}</div>;}
      }
      

86. Vue 生命周期

  • Vue 的生命周期有哪些?
    Vue 的生命周期同样分为 创建阶段挂载阶段更新阶段销毁阶段,并提供相应的钩子函数:

    1. 创建阶段

      • beforeCreate():实例初始化之后,数据观测和事件配置之前。
      • created():实例已经创建完成,数据观测和事件配置已经完成,但 DOM 尚未挂载。
    2. 挂载阶段

      • beforeMount():在挂载之前被调用,此时模板编译完成,但尚未插入 DOM。
      • mounted():在组件挂载到 DOM 后调用,通常用于 DOM 操作或 AJAX 请求。
    3. 更新阶段

      • beforeUpdate():当数据更新时调用,但在虚拟 DOM 重新渲染和打补丁之前。
      • updated():组件更新完毕后调用。
    4. 销毁阶段

      • beforeDestroy():实例销毁之前调用,可以在此清理事件监听器等。
      • destroyed():实例销毁后调用,所有绑定的事件和数据观察者都会移除。
    • 示例
      new Vue({data() {return { message: 'Hello Vue' };},beforeCreate() {console.log('beforeCreate');},created() {console.log('created');},beforeMount() {console.log('beforeMount');},mounted() {console.log('mounted');},beforeUpdate() {console.log('beforeUpdate');},updated() {console.log('updated');},beforeDestroy() {console.log('beforeDestroy');},destroyed() {console.log('destroyed');}
      });
      

87. 深拷贝和浅拷贝

  • 什么是深拷贝和浅拷贝?
    1. 浅拷贝:只复制对象的引用,而不是复制对象本身。如果拷贝后的对象发生改变,原对象也会受到影响。

      • 常见浅拷贝的方法Object.assign()Array.slice()
      • 示例
        const obj1 = { a: 1, b: { c: 2 } };
        const obj2 = Object.assign({}, obj1);
        obj2.b.c = 3;
        console.log(obj1.b.c); // 3,原对象的 b 也被修改了
        
    2. 深拷贝:完全复制一个新的对象,修改拷贝后的对象不会影响原对象。

      • 常见深拷贝的方法JSON.parse(JSON.stringify())(但不支持函数和 undefined)。
      • 示例
        const obj1 = { a: 1, b: { c: 2 } };
        const obj2 = JSON.parse(JSON.stringify(obj1));
        obj2.b.c = 3;
        console.log(obj1.b.c); // 2,原对象不受影响
        

88. 冒泡排序

  • 冒泡排序是什么?
    冒泡排序 是一种简单的排序算法,它通过重复遍历待排序的列表,相邻元素两两比较并交换,最终将最大或最小的元素“冒泡”到列表的一端。

  • 冒泡排序的时间复杂度O(n^2),适用于小规模数据

排序。

  • 示例
    function bubbleSort(arr) {const len = arr.length;for (let i = 0; i < len; i++) {for (let j = 0; j < len - 1 - i; j++) {if (arr[j] > arr[j + 1]) {[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 交换}}}return arr;
    }console.log(bubbleSort([5, 3, 8, 4, 2])); // [2, 3, 4, 5, 8]
    

相关文章:

前端面试题(十五)

83. ES6 中的 let 和 const let 和 const 的区别是什么&#xff1f; let 和 const 是 ES6 引入的用于声明变量的新方式&#xff0c;相比于传统的 var&#xff0c;它们具有以下特性&#xff1a; 块级作用域&#xff1a;let 和 const 声明的变量在其所在的块级作用域内有效&…...

如何成为 Rust 核心贡献者?Rust 开发的核​​心是什么?Rust 重要技术专家揭秘

10 月 17 - 18日&#xff0c;由 GOSIM 开源创新汇主办、CSDN 承办的 GOSIM CHINA 2024 将在北京盛大启幕。作为 GOSIM 开源年度大会的第三届盛会&#xff0c;本次活动邀请了 60 多位国际开源专家&#xff0c;汇聚了来自全球百余家顶尖科技企业、知名高校及开源社区的技术大咖、…...

springboot + nacos + sofarpc 整合后报错403

springboot版本 2.2.2 nacos 版本 1.4.2 rpc-sofa-boot 版本 3.2.0 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version></parent>…...

小米路由器R3Gv2安装openwrt记录

前言 小米路由器R3Gv2的硬件配置与小米路由器4A千兆版一致&#xff0c;但bootloader有所不同&#xff0c;因此openwrt的固件不要互刷。另外&#xff0c;R3Gv2和R3G、4A百兆版是不同的设备&#xff0c;切勿混淆。 硬件信息 OpenWrt参数页-Xiaomi MiWiFi 3G v2 CPU&#xff1a…...

记录一下,android studio 登录不上github的问题

android studio 2023.3.1.18 版本的编译器&#xff0c;出现问题&#xff0c;之前连接过的项目可以正常提交和拉取到github。 但是新建立的项目无法上传到github&#xff0c;提示错误cannot load information for github.com/:request response;access to this site&#xff0c;…...

springcloud之基于github webhook动态刷新服务配置

前言 在实际开发中经常会有一个叫做配置中心的服务&#xff0c;这个服务经过变更参数来动态刷新线上业务数据行为配置。比如&#xff1b;行为开关、活动数据、黑白名单、本地/预发/线上环境切换等等&#xff0c;这些配置信息往往需要在我们不重启系统的时候就可以被更新执行。那…...

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl&#xff0c;那么我们就可以直接用了&#xff0c;这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…...

【动态规划】子数组系列(下)

1. 等差数列划分 413. 等差数列划分 状态表示&#xff1a;以 i 位置为结尾时的等差数列的个数 状态转移方程&#xff1a;由于至少需要三个元素才符合题目中等差数列的要求&#xff0c;所以需要判断 i - 2&#xff0c;i - 1&#xff0c;i 三个元素&#xff0c;当这三个元素符合…...

macos mendeley Unable to install the Microsoft Word Plugin 解决

windows也是相似的原理&#xff0c;这里主要说macos&#xff0c; 本质是 找到mendeley的插件启动项&#xff0c;放在word启动目录下&#xff0c; GPT-o1的解决方案&#xff1a; 3. Manual Installation (If Automatic Installation Fails) If the automatic installation doe…...

【Linux进程间通信】Linux信号机制深度解析:保存与处理技巧

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux进程间通信 &#x1f4d2;1. 信号的保存&#x1f30a;在内核中的表示&#x1f342;sigs…...

常见开源组件的详解

文章目录 RPCRPC架构和工作流程为什么有了HTTP还要用RPC底层协议数据格式连接管理错误处理 使用场景常见的RPC框架 Web应用框架主要功能常见的Web应用框架Spring Boot (Java)Django (Python)Express.js (Node.js) Redis主要特点应用场景缓存问题Redis集群架构主从复制Redis Clu…...

rust使用教程详解

欢迎来到 Rustlings。该项目包含一些小练习&#xff0c;让您习惯阅读和编写 Rust 代码。这包括阅读和响应编译器消息&#xff01; 建议在阅读Rust 官方书籍&#xff08;学习 Rust 最全面的资源&#xff09;的同时做 Rustlings 练习 &#x1f4da;️ Rust By Example是另一个推…...

并查集的实现(朴素版)

这是C算法基础-数据结构专栏的第二十九篇文章&#xff0c;专栏详情请见此处。 由于作者即将参加CSP&#xff0c;所以到比赛结束前将不再发表文章&#xff01; 引入 并查集是一种可以快速合并查找集合的一种数据结构&#xff0c;这次我们将通过三道题来详细讲解并查集&#xff…...

WPF 为button动态设置不同的模板

有时候需要动态的设置一些按钮的状态模板。使一个button显示不同的内容&#xff0c;比如Button未点击安装显示&#xff1a; 安装后显示&#xff1a; 可以通过设置button的content&#xff0c;通过content来设置不同的模板来实现功能&#xff0c;以下是代码&#xff1a; MainWi…...

【C++贪心 DFS】2673. 使二叉树所有路径值相等的最小代价|1917

本文涉及知识点 C贪心 反证法 决策包容性 CDFS LeetCode2673. 使二叉树所有路径值相等的最小代价 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#xff0c;树中每个非叶子节点 i 都有两个孩子&#xff0c;分别是左孩子…...

虚幻引擎GAS入门学习笔记(一)

虚幻引擎GAS入门(一) Gameplay Ability System&#xff08;GAS&#xff09; 是一个模块化且强大的框架&#xff0c;用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability&#xff08;定义和执行能力&#xff09;、Gameplay Effect&#xff08;应用和管理…...

Excel:vba实现合并工作表(表头相同)

这个代码应该也适用于一些表头相同的工作表的汇总&#xff0c;只需要修改想要遍历的表&#xff0c;适用于处理大量表头相同的表的合并 这里的汇总合并表 total 是我事先创建的&#xff0c;我觉得比用vba代码创建要容易一下&#xff0c;如果不事先创建汇总表就用下面的代码&…...

Redis:分布式 - 主从复制

Redis&#xff1a;分布式 - 主从复制 概念配置主从模式info replicationslave-read-onlytcp-nodelay 命令slaveof 主从结构一主一从一主多从 主从复制流程数据同步命令全量同步部分同步实时同步 节点晋升 概念 Redis的最佳应用&#xff0c;还是要在分布式系统中。对于非分布式…...

el-date-picker设置只有某些日期可选

示例图&#xff1a; <el-date-pickerv-model"topFormObj.upTime"type"date"value-format"timestamp"format"dd/MM/yyyy":picker-options"pickerOptions" /> 固定限制每周的周末周三不可选 data() {return {pickerOp…...

java数据库操作-cnblog

创建lib目录&#xff0c;填入jar包 选择 libraries添加lib目录 package nb;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCtest {private static final String url "jdbc:mysql://localhost:3306/test?c…...

轨道交通条形屏电源技术分析:超薄化与高可靠性的工程平衡

一、行业背景与技术挑战在智慧城轨建设中&#xff0c;地铁站内条形屏是乘客信息显示系统的核心终端设备。该应用场景对配套电源提出以下技术要求&#xff1a;技术需求具体指标工程挑战超薄化整机厚度3-8mm传统变压器/散热器高度难以压缩高可靠性MTBF≥50000小时轨道交通振动、温…...

微信网页版访问终极指南:wechat-need-web插件完整教程

微信网页版访问终极指南&#xff1a;wechat-need-web插件完整教程 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法在浏览器中使用微信网页版…...

前端开发者如何构建个人工具箱:从工具函数到配置片段的效率实践

1. 项目概述&#xff1a;一个前端开发者的“百宝箱”仓库在多年的前端开发生涯中&#xff0c;我养成了一个习惯&#xff1a;每当遇到一个精巧的解决方案、一个高频使用的工具函数&#xff0c;或者一个值得反复琢磨的配置片段&#xff0c;我都会把它们收集起来。久而久之&#x…...

【NotebookLM移动端避坑白皮书】:上线首月超12万用户踩中的3类权限陷阱与2种文档同步丢失根因分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM移动端避坑白皮书导论 NotebookLM 是 Google 推出的基于用户上传文档构建个性化 AI 助手的实验性工具&#xff0c;其移动端&#xff08;iOS/Android&#xff09;虽提供便捷访问入口&#xff…...

AppleRa1n终极指南:5步免费绕过iOS 15-16 iCloud激活锁

AppleRa1n终极指南&#xff1a;5步免费绕过iOS 15-16 iCloud激活锁 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否遇到过这样的情况&#xff1a;忘记了自己iPhone的Apple ID密码&#xff0c;或…...

嵌入式以太网模块WIZ5500应用指南:从SPI接口到物联网稳定连接

1. 项目概述&#xff1a;为什么你的物联网项目需要一个有线网络“锚点”无线网络&#xff08;Wi-Fi&#xff09;确实方便&#xff0c;但做过几个实际项目的朋友都知道&#xff0c;它的“方便”有时是建立在“不确定性”之上的。信号波动、信道拥堵、复杂的认证流程&#xff0c;…...

python海龟绘图之窗口背景

可以将海龟绘图的窗口背景设置为纯色或者图片。1 将窗口背景设置为纯色通过bgcolor()函数设置窗口的背景色。该函数有四种使用方法&#xff0c;分别是① bgcolor()② bgcolor(colorstring)③ bgcolor((r, g, b))④ bgcolor(r, g, b)1.1 bgcolor()bgcolor()不带参数的形式&#…...

Lindy AI Agent工作流安全合规红线(GDPR+等保3.0双认证实操清单)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Lindy AI Agent工作流安全合规红线总览 Lindy AI Agent 作为面向企业级场景的智能体编排平台&#xff0c;其工作流在设计、部署与运行全生命周期中必须严格遵循数据安全、模型可解释性、访问控制及监管…...

深度解析开源专杀工具openclaw-killer:从恶意软件持久化机制到实战清理

1. 项目概述&#xff1a;一个开源安全工具的诞生最近在安全圈和开源社区里&#xff0c;一个名为nkzprod/openclaw-killer的项目引起了我的注意。乍一看这个标题&#xff0c;你可能会觉得有点“中二”&#xff0c;又是“爪子”又是“杀手”的&#xff0c;但作为一名在安全领域摸…...

【NotebookLM政治学研究加速器】:20年政治理论研究员亲授5大高阶用法,告别文献综述低效时代

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM政治学研究辅助的范式革命 传统政治学研究长期依赖人工文献综述、手工编码与静态模型推演&#xff0c;面临信息过载、理论验证滞后与跨文本语义关联薄弱等结构性瓶颈。NotebookLM 作为基于引…...