前端面经1

news2025/2/23 7:37:50

1、js是单线程还是多线程?

单线程执行。一次只能执行一个任务,处理任务的方式是通过一个任务队列(也称为消息队列)来实现的。如果某个操作(如网络请求或定时器)需要花费较长时间才能完成,它不会阻塞其他代码的执行。相反,这些操作会被挂起,并在它们完成时,将回调函数添加到任务队列中等待执行。

 Web Workers 提供了一种在后台线程中运行脚本的方法。这些后台线程可以执行复杂的计算或处理任务,而不会阻塞用户界面。如大文件的处理、复杂的数学计算或图像处理等。Web Workers 不能直接访问 DOM,它们必须通过消息传递机制与主线程进行通信。

2、 单线程JS如何实现异步执行,更底层一点描述?

单线程JavaScript环境中,异步执行通常是通过事件循环(Event Loop)和非阻塞I/O操作来实现的。promise、async/await

3、JS引擎方面有哪些?

V8是一个由Google开发的高性能JavaScript引擎,采用即时编译(JIT)技术将JavaScript代码转换为本机机器码,以实现快速执行和优化。V8引擎可以独立运行,也可以嵌入到C++应用程序中执行。

JavaScriptCore是苹果公司为其Safari浏览器开发的JavaScript引擎,是WebKit渲染引擎的一部分。

4、浏览器缓存机制?

  1. Service Worker:首先检查Service Worker是否有可用的缓存资源。
  2. Memory Cache:然后检查内存缓存中是否有该资源的副本。
  3. Disk Cache:如果内存缓存中没有找到,浏览器会查看硬盘缓存。
  4. Push Cache:如果以上缓存都没有命中,且使用了HTTP/2协议,浏览器会尝试使用推送缓存。
  5. 网络请求:如果所有缓存都没有命中,浏览器会向服务器发起网络请求。

5、Vue的虚拟DOM树机制?

虚拟DOM(Virtual DOM)是一个用JavaScript对象(通常是VNode节点)来模拟真实DOM结构的机制。它是Vue.js等现代前端框架为提高页面渲染效率而采用的一种技术。虚拟DOM的引入旨在减少直接操作DOM的次数,因为DOM操作是昂贵的,涉及到浏览器的渲染过程,频繁的操作会导致性能问题。创建一系列的VNode节点(标签名、属性、子节点)构建虚拟DOM树,并将虚拟DOM树挂载到DOM元素上实现首次渲染。

6、Vue如何利用虚拟DOM提高性能?

        减少直接操作 DOM:最后只将必要的变更应用到真实的 DOM 上。

        高效的 DOM 更新:Vue 使用高效的算法(如 diff 算法)来比较新旧虚拟 DOM 树,以计算出最小的 DOM 更新集合。Vue 的 diff 算法只关注同级节点的比较,而不是对整个树进行深度遍历。这意味着,只要子节点的位置没有变动,Vue 就不会去动它们,这进一步减少了不必要的 DOM 操作。

        组件化的开发模式

        异步更新队列:Vue 实现了一个异步更新队列,这意味着所有的数据变化不会立即导致 DOM 更新。Vue 会等待一个“tick”(即异步操作完成后),然后将所有的数据变化合并,只执行一次 DOM 更新。

        优化策略:Vue 还提供了一些优化策略,如 v-if 和 v-show 的使用(v-if 是真正的条件渲染,而 v-show 只是简单地切换 CSS 属性),以及 key 属性的使用(帮助 Vue 跟踪每个节点的身份,从而重用和重新排序现有元素),这些都可以进一步提高性能。

7、Vue和MVC架构相比有什么优势?

Vue 和 MVC(Model-View-Controller)架构之间的比较,实际上是在比较一个前端框架(Vue)和一个广泛使用的软件设计模式(MVC)之间的不同点。MVC 是一种设计思想,用于将应用程序分割成三个主要逻辑组件:模型(Model)、视图(View)和控制器(Controller),以提高代码的可维护性、可扩展性和可重用性。而 Vue 是一个用于构建用户界面的渐进式JavaScript框架,它本身也遵循了类似 MVC 的设计模式,但更侧重于视图层(View)的抽象和管理。

vue优势:

        轻量级和高效

        数据绑定和组件化

        易于学习和使用

        灵活性

        生态系统丰富

8、webpack的工作机制

        初始化与配置

        确定入口入口点(Entry)

        编译模块:Webpack会递归地分析模块之间的依赖关系,构建出一个依赖图。对于非JavaScript文件(如CSS、图片等),Webpack会使用配置的Loader进行转换。

        打包输出生成ChunkWebpack会根据依赖图将模块组织成不同的代码块(Chunk),每个Chunk可以是一个独立的文件,也可以与其他Chunk组合成一个捆绑包(Bundle)。

        插件扩展

        优化输出文件

9、Vue数据双向绑定怎么实现?

它通过 MVVM(Model-View-ViewModel)模式实现。在 Vue 中,这种双向绑定主要是通过 v-model 指令在表单输入和应用状态之间创建的。

通过其响应式系统和 v-model 指令共同实现的。Vue 的响应式系统确保了数据的实时性和一致性,而 v-model 则提供了一种简洁的语法来声明双向绑定关系。

10、Vue2的生命周期(vue3改了!!!)

创建阶段:

        beforeCreate:Vue实例刚刚被创建,数据观测(data observer)和event/watcher事件配置都还未开始。此时,实例的datamethodscomputed等属性都还未被初始化,无法访问到它们。

        created:Vue实例的datamethodscomputed等属性已经被初始化完成,但是模板还没有被编译成DOM节点,因此还无法访问到DOM元素。这个钩子适合进行异步请求(如从服务器获取数据)或开启定时器等操作。

        beforeMount:模板已经被编译成渲染函数,但是还没有挂载到页面上,因此还无法看到渲染后的DOM元素。

        mounted:Vue实例已经被挂载到页面上,可以访问到渲染后的DOM元素。这个钩子适合进行DOM操作、开启定时器、监听事件等操作。

更新阶段:

        beforeUpdate:当Vue实例的数据发生变化时,会触发更新操作。在更新之前,会调用beforeUpdate钩子。页面上的DOM元素还未更新,但是Vue实例的data中的数据已经是更新后的数据。

        updated:当Vue实例的数据更新完成,并且DOM元素也重新渲染后,会调用updated钩子。

销毁阶段:

        beforeDestroy:Vue实例仍然完全可用,可以访问到所有的数据和DOM元素。比如清除定时器、解绑事件监听器等。

        destroyed:Vue实例的所有指令都已经解绑,所有的事件监听器也都被移除,所有的子实例也都被销毁。

11、浏览器里面还有什么线程?

主线程(UI)、JavaScrip引擎线程、定时器触发线程、事件触发线程、Web Worker线程、GUI渲染线程、网络线程等。

12、html常用的单位?

绝对长度单位

        像素(px)

        点(pt)

        派卡(pc)

        英寸(in)

        厘米(cm)毫米(mm)

相对长度单位

        em 相对于当前对象内文本的字体尺寸。如果当前行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。例如,如果当前元素的字体大小为16px,那么width: 2em; 表示元素的宽度为32px(16px × 2)。

        rem:相对于根元素(即<html>元素)的字体大小

        百分比(%)

视口相关单位

        视口宽度(vw)相对于浏览器视口宽度的百分比

        视口高度(vh)

13、怎么让1rem=1px(根元素字体大小设置为6.25%)

浏览器会将根元素的字体大小设置为16px,16*0.0625=1

font-size: 6.25%; 

14、position属性?(详细说说relative和absolute的区别,分别是相对于谁的偏移)

relative是相对自身

absolute 是相对父元素

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

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

相关文章

Flink SQL 的工作机制

前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出&#xff0c;一段查询 SQL / 使用TableAPI 编写的程序&#xff08;以下简称 TableAPI 代码&#xff09;从输入到编译为可执行的 JobGraph 主要经历如下几个阶段&#xff1a; 将 SQL文本 / TableAPI 代码转化为逻辑执…

如何保证前后端交互信息不被篡改。

先说说前后端有哪些认证方式来保证&#xff1a; 基于 session 的认证方式&#xff1a;前端在用户登录成功后&#xff0c;后端会在服务器端生成一个唯一的 session ID&#xff0c;并将该 session ID 返回给前端&#xff0c;在后续的请求中&#xff0c;前端需要带上该 session ID…

【漏洞复现】蓝凌OA——远程命令执行

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现 漏洞描述 蓝凌OA平台&#xff0c;数字化向纵深发展&#xff0c;正加速构建产业互联…

图解分布式事务中的2PC与Seata方案

文章目录 文章导图什么是2PC解决传统2PC方案XA方案DTP模型举例&#xff1a;新用户注册送积分总结&#xff1a; Seata方案设计思想执行流程举例&#xff1a;新用户注册送积分 Seata实现2PC事务&#xff08;AT模式&#xff09;前提整体机制写隔离读隔离实际案例理解要点说明核心代…

自动驾驶-机器人-slam-定位面经和面试知识系列06之C++STL面试题(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客&#xff08;某些文章上会附上内推码&#xff09;也会同步更新&a…

锅总详解开源组织之ASF

ASF是什么&#xff1f;ASF孵化的顶级项目有哪些&#xff1f;ASF顶级项目商用化有哪些&#xff1f;涉及的版权是什么&#xff1f;应用案例有哪些&#xff1f;衍生项目及其关联是什么&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、ASF简介 Apache Software Foundati…

Java从入门到精通 (十一) ~ 操作系统、进程和线程

无论做什么&#xff0c;请记住都是为你自己而做&#xff0c;这样就毫无怨言&#xff01;今天&#xff0c;我为自己而活&#xff01;今天&#xff0c;又是美丽的一天&#xff01;早安&#xff0c;朋友&#xff01; 目录 前言 一、操作系统 1. 概念 2. 操作系统的基本功能 3…

Mindspore框架循环神经网络RNN模型实现情感分类|(五)模型训练

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

Ubuntu上编译多个版本的frida

准备工作 Ubuntu20(WSL) 略 安装依赖 sudo apt update sudo apt-get install build-essential git lib32stdc-9-dev libc6-dev-i386 -y nodejs 去官网[1]下载nodejs&#xff0c;版本的话我就选的20.15.1&#xff1a; tar -xf node-v20.15.1-linux-x64.tar.xz 下载源码 …

科研论文之Word论文编辑

这篇文章介绍在word中怎么编辑论文&#xff0c;包括论文的模板、论文的字体设置、论文的插图、论文的参考文献等等。 为便利知识传播&#xff0c;我的所有文章都不会设置收费专栏。但文章写作不易&#xff0c;如有可能麻烦打赏一下&#xff0c;金额随意。收款码见下图&#xff…

Ubuntu下手动部署Java项目

1.1 打包项目上传至Ubuntu 1.2 java -jar 项目压缩包 1.3 确认防火墙打开 1.4 令进程在后台运行 nohup java -jar boot工程.jar &> hello.log & 1.5 停止项目运行 查看进程号&#xff0c;杀掉进程

基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)

基于微信小程序SpringBootVue的刷题系统(带1w文档) 基于微信小程序SpringBootVue的刷题系统(带1w文档) 本系统是将网络技术和现代的管理理念相结合&#xff0c;根据试题信息的特点进行重新分配、整合形成动态的、分类明确的信息资源&#xff0c;实现了刷题的自动化&#xff0c;…

axure制作切换栏--动态面板的应用

先看下效果&#xff1a;点击上面的切换栏 切换到西游记栏目&#xff1a; 切换到水浒传栏目&#xff1a; 上述两个图片比对可以发现&#xff0c;在点击切换栏的时候&#xff0c;里面的内容以及切换栏的下面蓝色横线也会发生对应的变化。这里涉及到两个地方的变化&#xff0c;就…

VirtualBox虚拟机安装,Ubuntu iso 镜像下载

利用VirtualBox&#xff0c;在Windows主机上装Ubuntu的虚拟机 视频教程在这&#xff1a; Virtualbox虚拟机安装&#xff0c;Ubuntu iso镜像下载_哔哩哔哩_bilibili 一、Ubuntu iso 镜像下载 我们是要在Windows主机上装Ubuntu的虚拟机&#xff0c;下载下Ubuntu iso 镜像。下…

react中如何避免父子组件同时渲染(memo的使用)

1.需求说明 react的渲染机制是父子组件同时渲染&#xff0c;不管子组件是否有变化只要父组件重新渲染了子组件就跟着重新渲染。为了避免不必要的消耗&#xff0c;我们可以使用memo钩子函数 2.使用memo前展示 import { memo,useState } from "react"function Son()…

【03】Java虚拟机是如何加载Java类的

从class文件到内存中的类&#xff0c;按先后顺序需要经过加载、链接以及初始化三个步骤 一、加载 加载就是查找字节流&#xff0c;并且据此创建类的过程。 除了启动类加载器&#xff08;所有类加载器的祖师爷&#xff0c;由C实现&#xff0c;没有对应的Java对象&#xff09;之外…

uniapp实现局域网(内网)中APP自动检测版本,弹窗提醒升级

uniapp实现局域网&#xff08;内网&#xff09;中APP自动检测版本&#xff0c;弹窗提醒升级 在开发MES系统的过程中&#xff0c;涉及到了平板端APP的开发&#xff0c;既然是移动端的应用&#xff0c;那么肯定需要APP版本的自动更新功能。 查阅相关资料后&#xff0c;在uniapp的…

安全哈希算法:SHA算法

&#x1f3af; 主题简介 SHA&#xff08;Secure Hash Algorithm&#xff09;是比MD5更安全的哈希算法。通过案例形式了解SHA算法的原理、实现方法及注意细节。无论你是Python爱好者还是JavaScript高手&#xff0c;这篇内容都将为你提供一个深入了解SHA算法的机会。 &#x1f…

基于Libero的工程创建

基于Libero的工程创建 第一步&#xff1a;双击进入到工程界面&#xff0c;编写项目详细信息。 Project Name&#xff1a;标识您的项目名称。不要使用空格或保留的Verilog或VHDL关键字。 Project Location&#xff1a;在磁盘上标识您的项目位置。 Description&#xff1a;关于…