前端面试题整理3

news2024/10/5 18:28:16

目录

1.不使用promise怎么实现一个异步编程?

2.this的指向有哪些?

3.Ref和reactive响应式的区别?

4.首屏加载优化。如何处理?

5.axios封装?

6.css为什么使用预处理?

7.从1000-9999里面取出AAAA这种数字?

8.销毁的生命周期在什么时候使用?

9.怎么做配置代理?

10.怎么改变this指向,他们有什么不同?

11.分包和懒加载有什么不同?

12.虚拟dom和真实dom怎么做对比?

13.axios和fetch区别?

14.宏任务和微任务?

15.webpack打包流程?

16.什么是垃圾回收机制?

17.Promise 的方法有哪些,分别有什么作用?

18.说说你对 TypeScript 的理解?与 JavaScript 的区别?

19.什么是事件循环机制?

20.工厂模式和发布订阅者模式的区别?


1.不使用promise怎么实现一个异步编程?

①回调函数:将一个函数作为另一个函数的参数传递,当第一个函数完成时,第二个函数将被调用。  最常用的异步编程方式

function fetchData(callback) {
  setTimeout(() => {
    const data = { message: "Hello, world!" };
    callback(data);
  }, 1000);
}

fetchData(data => {
  console.log(data.message);
});

 ②Async/Await:ES2017 引入了 async/await,使得异步编程更加简单易读。async 函数返回一个 Promise 对象,可以使用 await 关键字来等待异步操作的结果。

function fetchData() {
  return new Promise(resolve => {
    setTimeout(() => {
      const data = { message: "Hello, world!" };
      resolve(data);
    }, 1000);
  });
}

async function printData() {
  const data = await fetchData();
  console.log(data.message);
}

printData();

③事件监听器:使用事件监听器来处理异步操作的结果。例如,使用 XMLHttpRequest 对象时,可以监听 load 事件以处理响应数据。

const request = new XMLHttpRequest();
request.open("GET", "https://api.example.com/data");
request.addEventListener("load", () => {
  const data = JSON.parse(request.responseText);
  console.log(data.message);
});
request.send();

④Generator 函数:使用 Generator 函数可以通过 yield 关键字来暂停和恢复函数的执行。可以将异步操作封装在 Generator 函数中,然后使用 next() 方法来控制函数的执行。

function* fetchData() {
  const data = yield new Promise(resolve => {
    setTimeout(() => {
      const data = { message: "Hello, world!" };
      resolve(data);
    }, 1000);
  });
  console.log(data.message);
}

const generator = fetchData();
const promise = generator.next().value;
promise.then(data => generator.next(data));

2.this的指向有哪些?

①作为函数调用,非严格模式下,this指向window,严格模式下,this指向undefined;

②作为某对象的方法调用,this通常指向调用的对象。

③ 使用apply、call、bind 可以绑定this的指向。

④ 在构造函数中,this指向新创建的对象

⑤ 箭头函数没有单独的this值,this在箭头函数创建时确定,它与声明所在的上下文相同。

3.ref和reactive响应式的区别?

①ref多用来定义基本数据类型,而 reactive 只能用来定义对象数组类型;

②ref操作数据需要 .value ,reactive 操作数据不需要 .value。

4.首屏加载优化。如何处理?

①压缩文件体积;

②减少请求次数。

5.axios封装?

//axios封装
import axios from 'axios';

// 环境的切换
if (process.env.NODE_ENV == 'development') {    
    axios.defaults.baseURL = '';
} else if (process.env.NODE_ENV == 'production') {    
    axios.defaults.baseURL = '';
}
// 请求超时时间
axios.defaults.timeout = 10000;
// 请求拦截器
axios.interceptors.request.use((config) => {
    //判断是否存在token
    let token = localStorage.getItem('_token');       
    token && (config.headers[""] = token);        
    return config;    
},(error) => {        
    return Promise.error(error);    
});
// 响应拦截器
axios.interceptors.response.use((response) => {        
    if (response.status === 200) {            
        return Promise.resolve(response);        
    } else {            
        return Promise.reject(response);        
    }    
},(error) => {   // 服务器状态码不是200的情况         
    if (error.response.status) {            
        switch (error.response.status) {                
            // 401: 未登录                
            // 未登录则跳转登录页面,并携带当前页面的路径                
            // 在登录成功后返回当前页面,这一步需要在登录页操作。                
            case 401:                    
                break;
            // 403 token过期                
            // 登录过期对用户进行提示                
            // 清除本地token和清空vuex中token对象                
            // 跳转登录页面                
            case 403:                     
                break; 
            // 404请求不存在                
            case 404:                    
                break;                
            // 其他错误,直接抛出错误提示                
            default:            
                return Promise.reject(error.response);        
        }       
    }
);
// get方法 
export function get(url, params){    
    return new Promise((resolve, reject) =>{        
        axios.get(url, {            
            params: params        
        })        
        .then(res => {            
            resolve(res.data);        
        })        
        .catch(err => {            
            reject(err.data)        
        })    
    });
}
//post方法
export function post(url, params) {    
    return new Promise((resolve, reject) => {         
        axios.post(url, QS.stringify(params))        
        .then(res => {            
            resolve(res.data);        
        })        
        .catch(err => {            
            reject(err.data)        
        })    
    });
}

6.css为什么使用预处理?

①简化代码:预处理器可以通过变量、函数和混合(mixins)等功能使CSS代码更简洁。这样可以减少代码的重复,提高代码的可读性和可维护性。

②提高效率:预处理器可以将CSS代码分解成多个模块,可以分别编辑和测试,最后再合并成一个CSS文件。这样可以提高开发效率,特别是在大型项目中。

③增强功能:预处理器可以扩展CSS的功能,如嵌套规则、条件语句等功能,这样可以更快捷地实现一些复杂的CSS效果。

④避免错误:预处理器可以通过变量和函数来避免出错。例如,当需要修改一个颜色时,只需要修改变量的值,所有的使用该颜色的样式都会自动更新,从而避免了修改错误的风险。

CSS预处理器可以提高CSS的可维护性、可读性和效率。常用的CSS预处理器有Sass、Less和Stylus等。

7.从1000-9999里面取出AAAA这种数字?

8.销毁的生命周期在什么时候使用?

销毁生命周期一般用于释放不再需要的资源,避免内存泄漏或占用过多内存。

9.怎么做配置代理?

10.怎么改变this指向,他们有什么不同?

call()、apply() 、bind()

区别:①call、apply是立即执行,而bind是返回一个改变上下文的函数副本,原来函数不发生变化。

②apply方法接收两个参数,一个是函数运行的作用域,另一个是参数数组;call方法与apply方法不同之处在于传递给函数的参数必须列举出来。bind参数方式同call相同。

11.分包和懒加载有什么不同?

①分包是将一个大型的应用程序划分为多个小模块,每个模块可以独立地进行加载和更新。当用户访问应用程序时,只需要加载当前所需的模块,而不是一次性加载整个应用程序。而懒加载是将网页中的资源(如图片、视频等)延迟加载,直到用户需要访问它们时再进行加载。这样可以减少页面的初始加载时间,提高用户体验。

②分包是针对整个应用程序的优化,而懒加载则是针对单个资源的优化。

③分包可以减少首次加载时间,但不一定能降低页面的渲染时间;懒加载可以降低页面的渲染时间,但不一定能减少首次加载时间。

12.虚拟dom和真实dom怎么做对比?

①虚拟DOM不会进⾏回流和重绘;真实DOM在频繁操作时引发的回流重绘导致性能很低;

②虚拟DOM频繁修改,然后⼀次性对⽐差异并修改真实DOM,最后依次回流重绘,减少了真实DOM中多次回流重绘引起的性能损耗;

③虚拟DOM有效降低⼤⾯积的重绘与排版,因为是和真实DOM对 ⽐,更新差异部分,所以只渲染局部。

13.axios和fetch区别?

①Axios是对XMLHttpRequest的封装,而Fetch是一种新的获取资源的接口方式。

②Fetch是浏览器原生支持,而Axios需要引入Axios库。

14.宏任务和微任务?

微任务是指在当前任务执行结束后立即执行的任务,它可以看作是在当前任务的“尾巴”添加的任务。常见的微任务包括 Promise 回调和 process.nextTick

宏任务是指需要排队等待 JavaScript 引擎空闲时才能执行的任务。常见的宏任务包括setTimeout、setInterval、I/O 操作、DOM 事件等。

15.webpack打包流程?

  • 解析配置文件:Webpack 会读取并解析配置文件(通常是 webpack.config.js 文件),并根据配置生成一个 Compiler 对象。
  • 读取入口文件:Webpack 根据配置中的入口文件,读取这些文件及其依赖的模块,并将它们组成一个依赖图。
  • 解析模块依赖:Webpack 会根据模块之间的依赖关系,递归地解析它们的依赖,直到所有的依赖都被解析完毕。
  • 加载模块:Webpack 会根据模块的路径,使用相应的 Loader 加载模块的源代码,并将其转换为 Webpack 可以处理的形式。
  • 转换代码:Webpack 会根据配置中的插件,对加载的模块进行一系列的转换操作,比如压缩、合并、优化等。
  • 生成代码:Webpack 会将所有模块转换后的代码合并成一个或多个文件,并输出到指定的输出目录中。

16.什么是垃圾回收机制?

        垃圾回收机制是一种自动内存管理机制,用于清理未使用的内存。它通过检测不再使用的变量和对象,然后将其从内存中移除,以减少内存的使用量。

17.Promise 的方法有哪些,分别有什么作用?

promise.all()用于将多个 Promise 实例,包装成一个新的 Promise 实例。

Promise.race(iterable):返回一个promise,一旦迭代器中的某个promise解决或拒绝,返回的promise就会解决或者拒绝。

Promise.reject(reason)方法返回一个带有拒绝原因reason参数的Promise对象

Promise.resolve()将现有对象转为 Promise 对象。

18.说说你对 TypeScript 的理解?与 JavaScript 的区别?

TypeScript 是 JavaScript 的类型的超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等。

19.什么是事件循环机制?

        事件循环是一种处理异步操作的机制,它可以让我们在代码执行过程中处理异步任务。事件循环的原理是将所有的异步任务放入一个事件队列中,然后依次执行队列中的任务,直到队列为空为止。

20.工厂模式和发布订阅者模式的区别?

工厂模式是一种创建型模式,旨在通过工厂类创建对象实例,而不是通过直接调用构造函数。这种模式通常使用一个工厂类,该类包含一个方法,该方法接受参数并返回新创建的对象。这个方法可以根据传递的参数来决定创建哪个对象。

发布订阅者模式是一种行为模式,通过解耦发布者和订阅者来实现松散耦合。在这种模式下,一个对象(发布者)发布一个事件,而其他对象(订阅者)订阅该事件。当事件被触发时,所有订阅者都会收到通知并执行相应的操作。

工厂模式是一种创建型模式,用于创建对象,而发布订阅者模式是一种行为模式,用于解耦发布者和订阅者。

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

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

相关文章

从价格战中突围,仅10个月开发出一款车,安全性能靠谱吗?

经历了2023年初的价格战,一场关于智能汽车的淘汰赛似乎正式开始了。 尽管“降价热潮”还在继续,但简单的价格竞争毕竟非长久良策。 一方面,为了维持收益,部分车企通过减配、降低服务成本,甚至将降本压力给到上游供应…

【这个命令的 7 种用法!你确定不会用?】

可以很肯定地说,find 命令是 Linux 后台开发人员必须熟知的操作之一,除非您使用的是 Windows Server。 对于技术面试,它也是一个热门话题。让我们看一道真题: 如果你的 Linux 服务器上有一个名为 logs 的目录,如何删…

Spring 事务和事务传播机制

1.什么是事务(为什么要有事务) 事务就是将一组操作封装成一个执行单元(封装到一起),要么一起成功,要么一起失败。 在打账的情景上,A向B转账200 元,A的账户-200.B的账号200&#xff…

基于直流微电网的光伏并网功率转换装置设计与运行仿真

摘要 微电网是目前国内外应用较为广泛的一种绿色可再生能源,近几年我国微电网产业的发展十分迅速。然后,越来越多的微电网系统建立并网,微电网产生的电能受外界因素影响较大,具有一定的随机性和波动性,给并网后的电力系…

SaaS 产品如何选择设计协作工具?

文章内容转载腾讯 CoDesign 随着互联网及其衍生技术的发展,企业比以往更依赖内容去吸引、去培养自己的用户,寻求转化。小鹅通就是在微信生态中帮助企业通过知识服务去实现内容分发和流量聚合,帮助企业沉淀用户,提供深度私域运营服…

回收站清空了怎么找回文件?3种办法恢复彻底删除文件!

电脑回收站大家都有一定的了解,只要在回收站的文件没有被删除的时候是可以还原的,但是回收站删除了,文件就无法直接恢复。回收站清空了怎么找回文件? 别着急,今天小编就分析几种恢复回收站删除数据的办法: 方法一&am…

(转载)从0开始学matlab(第8天)—matlab画图入门

1.基本画图方式 MATLAB 的扩展性和机制独立的画图功能是一个极其重要的功能.这个功能使数据画图变得十分简单 . 画一个数据图 , 首先要创建两个向量,由 x, y 构成 , 然后使用 plot 函数. 例如 , 假设我们要画出函数 yx -10x10 的图象 , 定义域为[ …

分享两组不同的3D VR卡片

最近某音上出现了很多VR视频,转动手机可以看到手机界面未显示出来的场景。这种事情我觉得我们也可以做到。 所以两种不同的3D VR卡片来了: 第一种是横向或上下可以拖动极大的距离。卡片上的信息会随着拖动移动,但不会显示更多的信息&#x…

二、LLC 谐振变换器

半桥 LLC 谐振变换器主电路结构 如图所示,半桥 LLC 谐振变换器主电路可以分为四个部分,即:逆变网络、谐振网络、变压器及整流滤波网络。两个 MOSFET(S1、S2)以及它们的体二极管(D1、D2)和寄生电…

svn清理以下路径失败显示乱码问题

报错: svn作为我们经常使用的版本管理服务器,在使用过程中经常需要通过clean up操作来完成本地文件与服务器文件信息及版本信息同步, 然而有时右键会在执行清理命令时提示“清理以下路径失败: xxx 文件名、目录名或卷标语法不…

DevOps 的道术法器,探寻 DevOps “立体化”实践之旅

​引言 随着业务的发展,软件发布迭代的频率越来越高,传统的瀑布型模式已经不能满足快速交付的需求,DevOps 也因此受到持续关注。越来越多的公司开始接受并尝试使用 DevOps,期望能使得软件开发中的构建、测试与发布工作变得更加快捷…

进程与线程的理解

目录 一、进程 1、进程的简介: 2、进程的组成: 3、进程的状态 4、进程控制: 5、进程的创建: 6、进程的终止 7、进程的阻塞和唤醒 8、进程上下文切换 二、线程 1、线程: 2、线程的优缺点: 三、进程与线程 比…

火山引擎 DataLeap:3 步打造“指标管理”体系,幸福里数据中心是这么做的

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 一家企业,为什么要搭建指标体系? 一句话总结来说,全面、合理的指标体系可以帮助企业统一目标,将业务环节量化&#…

1073. 负二进制数相加(leetcode,模拟,数学分析)-------------------c++实现

1073. 负二进制数相加(leetcode,模拟,数学分析)-------------------c实现 题目表述 给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。 数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有…

Kubernetes1.26.3 高可用集群

Kubernetes1.26.3 高可用集群 0、服务器信息 服务器为腾讯云服务器(按需计费,按流量计费,并且将IP转换为弹性IP,使用结束可关机仅收取硬盘等固定资源费用) 服务器名称IP描述组件信息Kubernetes1124.223.218.159maste…

Matlab如何调用外部函数/工具包,如何将新函数加到默认函数库中

自从开始制作、分享工具包,我被问到最多的一个问题是: “XXX工具包怎么用?” 而我给出的回答通常是: “放在你代码文件夹,当函数调用。” 什么意思呢? 方法1 比如在名为“1”的文件夹中放着我们想要运…

TreeSet源码分析

概述 TreeSet ,基于 TreeSet 的 Set 实现类。在业务中,如果我们有排重 排序的需求,一般会考虑使用 TreeSet #TreeSet的继承关系 TreeSet的内部属性 m 的 key ,存储 HashSet 的每个 key 。 map 的 value ,因为 TreeSe…

DJ5-3 多路访问链路和协议

目录 一、网络链路 二、广播信道要解决问题 三、多路访问协议 1、基本介绍 2、多路访问协议的类型(3) 四、信道划分协议 1、时分多路访问 TDMA 2、频分多路访问 FDMA 3、码分多路访问 CDMA(略) 五、随机访问协议 1、纯…

基于AD96808 FMC 模块,支持8 路14-bit、500MSPS/1GSPS/1.25GSPSADC 采集功能

板卡概述 FMC-XM148 是一款基于VITA57.4 标准的JESD204B 接口FMC 子卡模块,该模块可以实现8 路14-bit、500MSPS/1GSPS/1.25GSPSADC 采集功能。该板卡ADC 器件采用ADI 公司的AD9680 芯片,全功率-3dB 模拟输入带宽可达2GHz。该ADC 与FPGA 的主机接口通过16 通道的高速…

ThingsBoard自定义分发节点duplicate to related

------------------------------------内容仅博主所有,订阅者请勿泄露,感谢--------------------- 1、概述 大家好,我又更新干货了,还是那句话,我绝不像某些博主“拿我格子衫”分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享Th…