2023Web前端面试题及答案(一)

答案仅供参考,每人的理解不一样。

文章目录

1、简单说一说事件流原理

事件流:
(1)事件流是指页面 接收事件的顺序;
(2)假设页面中的元素都具备相同的事件,并且这些个元素之间是相互嵌套的
关系.
(3) 那么在触发一个元素的事件时候,会触发其他的元素;

 总结:事件流是描述的从页面接受事件的顺序,当几个都具
 有事件的元素层叠在一起的时候,那么你点击其中一个元素,
 并不是只有当前被点击的元素会触发事件,而层叠在你点击
 范围的所有元素都会触发事件。

事件流包括两种模式:
(1)事件冒泡:是指子元素先触发事件,父元素后触发事件; 从内向外
(2)事件捕获:是指父元素先触发,子元素后触发; 从外到内

事件捕获和事件冒泡是一个完全相反的行为!!!

2、CSS的引入方式有几种?link和@import方式有什么不同?

  • 使用HTML标签的style属性(行内式)
  • 使用style标签(内嵌式)
  • 使用link标签,引入外部CSS文件(链接式)
  • 使用@import引入CSS文件(导入式)

link和@import方式有什么不同:

1、从属关系区别

@import是 CSS 提供的语法规则,只有导入样式表的作用;link是HTML提供的标签,不仅可以加载 CSS 文件,还可以定义 RSS、rel 连接属性等。

2、加载顺序区别

加载页面时,link标签引入的 CSS 被同时加载;@import引入的 CSS 将在页面加载完毕后被加载。

3、兼容性区别

@import是 CSS2.1 才有的语法,故只可在 IE5+ 才能识别;link标签作为 HTML 元素,不存在兼容性问题。

4、DOM可控性区别

可以通过 JS 操作 DOM ,插入link标签来改变样式;由于 DOM 方法是基于文档的,无法使用@import的方式插入样式。

3、CSS的水平垂直居中实现方式

1、使用弹性布局

{

display: flex;
justify-content: center;
align-items: center;

}

2、使用绝对定位 + transform

{

position: absolute;

top: 50%;

left: 50%;

transform: translate(-50%, -50%);
}

3、使用绝对定位 + margin

{

position: absolute;

top: 0;

bottom: 0;

right: 0;

left: 0;

margin:auto;

}

4、typeof与instanceof区别

typeof的返回值是一个字符串,用来说明变量的数据类型;

instanceof的返回值是布尔值,用于判断一个变量是否属于某个对象的实例。

typeof 一般只能返回如下几个结果: number, boolean, string, function, object, undefined

5、什么是事件代理及优点

事件代理(也称事件委托)事件代理,俗地来讲,就是把⼀个元素响应事件 ( click 、 keydown ......)的函数委托到另⼀个元素;例如:不给每个子节点单独设置事件监听器,而是设置在其父节点上,然后利用冒泡原理设置每个子节点。

优点:

  • 减少整个⻚⾯所需的内存,提升整体性能
  • 动态绑定,减少重复⼯作

6、window.onload和$(document).ready区别

window.onload 方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行,即 JavaScript 此时才可以访问网页中的任何元素。

 jQuery 中的 $(document).ready() 方法注册的事件处理程序,在 DOM 完全就绪时就可以被调用。只要 DOM 就绪就可以操作了,不需要等待所有图片资源下载完毕。

7、JS中数组去重方法

  • .利用Array.from(new Set(arr))去重
  • 利用includes去重
     
    //includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
    let list = [ 8,6, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8]let newList2 = []list.forEach((item) => {// 空数组newList2 不包含item为false ,取反为true 执行数组添加操作// 如果数组包含了 item为true 取反为false 不执行数组添加操作if (!newList2.includes(item)) {newList2.push(item)}})console.log('newList2', newList2);
  • 利用map去重
    //map数据结构是es6中新出的语法,其本质也是键值对,只是其键不局限于普通对象的字符串 
    let list = [3, 4, 4, 5, 5, 6, 6, 7, 1, 2, 3, 4]let newList3 = [];let map = new Map()list.forEach((item) => {// 如果map.has指定的item不存在,那么就设置key和value 这个item就是当前map里面不存在的key,把这个item添加到新数组// 如果下次出现重复的item,那么map.has(item等于ture 取反 !map.has(item)  不执行if (!map.has(item)) {map.set(item,ture)newList3.push(item)}})console.log('newList3', newList3);

8、描述Vue组件生命周期,并简述各个周期作用

beforeCreate:实例刚在内存中创建出来,还没有初始化 data和 methods,只包含一些自带额生命周期函数
created: 实例已经在内存中创建完成,此时data和methods已经创建完成
beforeMount: 此时已经完成了模版的编译,只是还没有渲染到界面中去
mounted: 模版已经渲染到了浏览器,创建阶段结束,即将进入运行阶段

beforeUpdate: 界面中的数据还是旧的,但是data数据已经更新,页面中和data还没有同步
中间处理过程(非生命周期,便于学习抽象化的中间处理过程):
先根据data中的数据,在内存中渲染出一个新的DOM,当新的DOM树更新之后,会重新渲染到真实的界面中去,从而实现了从
数据层(model)—》视图层(view)的转换
updated: 页面重新渲染完毕,页面中的数据和data保持一致

beforeDestroy: 执行该方法的时候,Vue的生命周期已经进入销毁阶段,但是实例上的各种数据还出于可用状态

destroyed: 组件已经全部销毁,Vue实例已经被销毁,Vue中的任何数据都不可用

9、Vue中data为什么是一个函数

Vue组件中,data选项为一个函数的原因是为了保证每个组件实例都拥有独立的数据副本。当一个组件被多次使用时,每个实例都需要拥有自己的数据,而不是共享相同的数据副本。

10、Vue中watch 和 computed 的区别

1、computed是计算属性;watch是监听,监听data中的数据变化。

2、computed支持缓存,当其依赖的属性的值发生变化时,计算属性会重新计算,反之,则使用缓存中的属性值;watch不支持缓存,当对应属性发生变化的时候,响应执行。

3、computed不支持异步,有异步操作时无法监听数据变化;watch支持异步操作。

4、computed第一次加载时就监听;watch默认第一次加载时不监听。

5、computed中的函数必须调用return;watch不是。

6、使用场景:

computed:一个属性受到多个属性影响,如:购物车商品结算。

watch:一个数据影响多条数据,如:搜索数据。  

11、vue-router 路由有几种模式,有什么区别?

  • Hash: 使用URL的hash值来作为路由。支持所有浏览器。

  • History: 以来HTML5 History API 和服务器配置

  • Abstract:支持所有javascript运行模式。如果发现没有浏览器的API,路由会自动强制进入这个模式。

区别

hash模式:

  • url路径会出现 # 字符

  • hash值不包括在 HTTP 请求中,它是交由前端路由处理,所以改变hash值时不会刷新页面,也不会向服务器发送请求

  • hash值的改变会触发hashchange事件

history模式:

  • 整个地址重新加载,可以保存历史记录,方便前进后退

  • 使用 HTML5 API(旧浏览器不支持)和 HTTP服务端配置,没有后台配置的话,页面刷新时会出现404

12、vue组件传参有哪些方式?分别适用哪种组件?

1、Props:通过在父组件中定义props属性,将数据传递给子组件。子组件通过props属性接收数据;父传子

2、$emit:通过在子组件中触发事件,将数据传递给父组件。父组件通过在子组件上监听事件,接收数据。子传父

3、通过Vuex状态管理传递数据:祖先组件和后代组件都可以通过Vuex来管理应用程序的状态,从而实现数据传递。

4、通过事件总线传递数据:可以在Vue实例中创建一个事件总线,然后在兄弟组件中分别触发和监听事件,从而实现数据传递。

5、通过共同的父组件传递数据:如果两个兄弟组件有共同的父组件,可以通过在父组件中定义数据,然后通过props属性分别传递给两个兄弟组件

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

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

相关文章

CentOS 安装 Docker

注意:下文的命令使用的是 root 用户登录执行,不是 root 的话所有命令前面要加 sudo。 在安装 docker 之前,先说一下配置,我这里是 Centos7 Linux 内核:官方建议 3.10 以上,3.8 以上貌似也可以。 本文目录 1…

廉价的全闪存雷电 NAS 折腾笔记:NUC9 操作系统踩坑

上一篇文章中,分享了关于低成本全闪存 NAS 的个人方案选择。 本篇文章,来聊聊硬件相关部分,以及软件的基础配置部分,也聊聊雷电组网的踩坑之旅。 写在前面 我使用的设备是 NUC9i5QNX,这台设备的硬件基础规格&#x…

类和对象(3)

文章目录 1.回顾上节2. 拷贝构造3. 运算符重载(非常重要)4. 赋值运算符重载 1.回顾上节 默认成员函数:我们不写,编译器自动生成。我们不写,编译器不会自动生成 默认生成构造和析构: 对于内置类型不做处理对…

【面试心得】WebBench 整理

在面试九识的时候,被问到了WebBench的原理,当时没答上来,这里做一个整理 WebBench 源码【带注释】:GitHub - YukunJ/annotated-webbench-1.5: bilingually annotated Webbench-1.5 webbench是一个轻量的压测工具,可以…

抖去推爆款视频生成器怎么制作开发?--短视频矩阵系统研发

在当今的数字时代,短视频已经成为一种非常受欢迎的内容形式。人们通过观看短视频来获取娱乐、学习和营销信息。然而,制作优秀的爆款视频并不容易,这需要创意、技能和时间。为了简化这一过程,抖去推推出了一款爆款视频生成器&#…

【持续记录】深度学习环境配置

1080面对Transformer连勉强也算不上了,还是要去用小组公用的卡 完整记一个环境配置,方便后面自用✍️ nvidia-smi查看GPU信息 ** CUDA版本12.2 conda -V查询conda版本 22.9.0 新建conda环境 准备装python3.8 conda create --name caiman python3.8.2激…

【Prometheus】Prometheus+Grafana部署

Prometheus 概述 官网https://prometheus.io/docs/introduction/overview/ Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的…

从零开始的PICO教程(1)Pico游戏开发项目配置

从零开始的PICO教程(1)Pico游戏开发项目配置 文章目录 从零开始的PICO教程(1)Pico游戏开发项目配置一、前言1、大纲 二、成为Pico开发者1、注册 PICO 开发者帐号2、创建组织3、创建应用 三、导入PICO的SDK1、PICO设备开启 “开发者…

使用k8s helm离线部署spark-operator(私有仓库)

制作镜像 docker pull ghcr.io/googlecloudplatform/spark-operator:v1beta2-1.3.8-3.1.1 docker images docker save ImageID > ./spark.tar将制作的镜像上传到目的机器中&#xff0c;加载镜像 docker load < ./spark.tar打标签其中xxxx.xxx/xx/为私有仓库的地址 doc…

R语言用逻辑回归预测BRFSS中风数据、方差分析anova、ROC曲线AUC、可视化探索

全文链接&#xff1a;https://tecdat.cn/?p33659 行为风险因素监测系统&#xff08;BRFSS&#xff09;是一项年度电话调查。BRFSS旨在确定成年人口中的风险因素并报告新兴趋势&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 例如&#xff0c;调查对…

Java 毕业设计-基于SpringBoot的在线文档管理系统

基于SpringBoot的在线文档管理系统 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 技术栈简介 文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;sp…

MobaXterm工具软件使用介绍

大家好&#xff0c;我是虎哥&#xff0c;最近由于大部分嵌入式的系统都切换到了ubuntu20.04及更高版本的系统&#xff0c;导致我自己使用的Xshell也需要从5升级到7&#xff0c;但是Xshell7尽然开始收费了&#xff0c;网上也没有什么好用的破解版本&#xff0c;索性我就准备找个…

034:vue项目利用qrcodejs2生成二维码示例

第034个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

【C++】常用算术生成算法

0.前言 1.accumulate #include <iostream> using namespace std;// 常用算术生成算法 #include<vector> #include<numeric> //accumulate 的调用头文件void test01() {vector<int>v;for (int i 0; i < 100; i){v.push_back(i);}int total accumu…

TSINGSEE青犀视频AI算法助力构建城市市容·街面秩序管理解决方案

随着城市化进程加快&#xff0c;未经合理规划设置自然形成的马路市场越来越多&#xff0c;这不仅存在交通安全隐患&#xff0c;也造成了市容秩序混乱&#xff0c;严重影响城市市容面貌。 TSINGSEE青犀AI智能分析网关V3内部部署了几十种算法&#xff0c;包括人脸、人体、车辆、…

iTOP-RK3568开发板Linux 修改kernel logo

本文档配套资料在网盘资料“iTOP-3568 开发板\02_【iTOP-RK3568 开发板】开发资料\10_Linux 系统开发配套资料\05_Linux 修改内核 logo 配套资料”路径下。 5.3.1 准备 logo 系统默认内核 logo&#xff0c;如下图所示&#xff1a; 如 果 想 要 替 换 这 个 logo, 首 先 要 制…

神经网络-pytorch版本

pytorch神经网络基础 torch简介 torch和numpy import torch import numpy as np np_datanp.arange(6).reshape((2,3)) torch_datatorch.from_numpy(np_data) tensor2arraytorch_data.numpy() print(np_data,"\n",torch_data,"\n",tensor2array)torch的数…

2023年已过大半,光通信领域有哪些值得关注的技术趋势?

引言&#xff1a;上个星期&#xff0c;小枣君去深圳参加了CIOE中国光博会&#xff0c;获得了一些光通信领域的最新技术动态进展。今天&#xff0c;我来和大家做一个分享。 这次光博会&#xff0c;整个行业的参与热情很高。据主办方统计&#xff0c;为期三天的展会&#xff0c;现…

球谐函数实现环境光照漫反射实践

该文章以及代码主要来自 图形学论文解析与复现&#xff1a;【论文复现】An Efficient Representation for Irradiance Environment Maps 作者&#xff1a;Monica的小甜甜 与原文的不同&#xff1a; 对一些有问题的地方进行了修改添加了注释对有疑问的地方添加了疑问点引入了其…

基于python解决鸡兔同笼问题

一、什么是鸡兔同笼问题&#xff1f; 鸡兔同笼问题是一个经典的数学问题。问题描述&#xff1a;鸡和兔子共有头数a和脚数b&#xff0c;求鸡和兔子的数量。 解析&#xff1a;设鸡的数量为x&#xff0c;兔子的数量为y&#xff0c;那么可以得到以下两个方程&#xff1a; 1. x y…