【前端】面试题6~10

news2024/11/15 6:37:43

目录

一、说一说BFC

1、BFC的概念

2、BFC布局规则

3、BFC形成的条件

3、BFC解决能的问题

4、BFC的其他

5、总结

二、说一说Vuex是什么,每个属性是干嘛的,如何使用 ?

1、Vuex是什么

2、Vuex 的属性

3、使用方法

4、简单总结

三、说一说JavaScript有几种方法判断变量的类型?

四、说一说样式优先级的规则是什么?

1、样式优先级的规则

2、使用!important要谨慎

3、总结

五、说一说JS实现异步的方法?


一、说一说BFC

1、BFC的概念

  •  BFC(Block Formatting Context)块级格式化上下文,是Web页面一块独立的渲染区域,内部元素的渲染不会影响边界以外的元素。

2、BFC布局规则

  • 内部盒子会在垂直方向,一个接一个地放置。
  • Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  • 每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
  • BFC的区域不会与float box重叠。
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  • 计算BFC的高度时,浮动元素也参与计算。

3、BFC形成的条件

  • float 设置成 left 或 right
  • position 是absolute或者fixed
  • overflow不是visible,为 auto、scroll、hidden
  • display是flex或者inline-block

3、BFC解决能的问题

  • 清除浮动

4、BFC的其他

  •  BFC的方式都能清除浮动,但是常使用的清除浮动的BFC方式只有overflow:hidden,原因是使用float或者position方式清除浮动,虽然父级盒子内部浮动被清除了,但是父级本身又脱离文档流了,会对父级后面的兄弟盒子的布局造成影响。如果设置父级为display:flex,内部的浮动就会失效。所以通常只是用overflow: hidden清除浮动。
  • IFC(Inline formatting contexts):内联格式上下文。IFC的高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的padding/margin影响),IFC中的line box一般左右都贴紧整个IFC,但是会因为float元素而扰乱。
  • GFC(GrideLayout formatting contexts):网格布局格式化上下文。当为一个元素设置display值为grid的时候,此元素将会获得一个独立的渲染区域。
  • FFC(Flex formatting contexts):自适应格式上下文。display值为flex或者inline-flex的元素将会生成自适应容器。

5、简单总结

1.定义:块级格式化上下文,独立渲染区域,不会影响边界外的元素

2.形成条件

        a.float

        b.position

        c.overflow

        d.display

3. 布局规则:

        a.区域内box从上到下排列

        b.垂直方向由margin决定

        c.同一bfc内box会外边距重叠

        d.bfc不会与float重叠

        e.bfc计算高度,也会计算float元素

4.解决问题

        a.清除浮动

        b.外边距重叠

        c.高度塌陷

  • 级格式化上下文、独立的渲染区域、不会影响边界以外的元素、形成BFC条件、float、position、overflow、display块

二、说一说Vuex是什么,每个属性是干嘛的,如何使用 ?

1、Vuex是什么

  • Vuex是集中管理项目公共数据的。

2、Vuex 的属性

state、mutations 、getters、actions、module五种属性

  • state属性用来存储公共管理的数据
  • mutations属性定义改变state中数据的方法, 注意:不要在mutation中的方法中写异步方法ajax,那样数据就不可跟踪了 。
  • getters属性可以认为是定义store的计算属性。就像计算属性一样,getters的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
  • action属性类似于mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态。Action 可以包含任意异步操作。
  • moudle属性是将store分割成模块。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块,从上至下进行同样方式的分割

3、使用方法

  • state :直接以对象方式添加属性
  • mutations :通过store.commit调用
  • action:通过 store.dispatch`方法触发
  • getters:直接通过store.getters.调用 加分回答 可以使用mapState、mapMutations、mapAction、mapGetters一次性获取每个属性下对应的多个方法。
  • VueX在大型项目中比较常用,非关系组件传递数据比较方便。

4、简单总结

1. 概念:Vuex是全局状态管理仓库,相当于window对象挂载了一个全局变量。

2. 属性:state(数据源)、actions(处理异步事件)、mutations(处理同步事件)、getters(过滤数据)和modules(模块)

三、说一说JavaScript有几种方法判断变量的类型?

  • JavaScript有4种方法判断变量的类型,分别是typeofinstanceofObject.prototype.toString.call()(对象原型链判断方法)、 constructor (用于引用数据类型)
  • typeof常用于判断基本数据类型,对于引用数据类型除了function返回function其余全部返回object
  • instanceof主要用于区分引用数据类型,检测方法是检测的类型在当前实例的原型链上,用其检测出来的结果都是true,不太适合用于简单数据类型的检测,检测过程繁琐且对于简单数据类型中的undefined, null, symbol检测不出来
  • constructor用于检测引用数据类型,检测方法是获取实例的构造函数判断和某个类是否相同,如果相同就说明该数据是符合那个数据类型的,这种方法不会把原型链上的其他类也加入进来,避免了原型链的干扰。
  • Object.prototype.toString.call()适用于所有类型的判断检测,检测方法是Object.prototype.toString.call(数据) 返回的是该数据类型的字符串。 这四种判断数据类型的方法中,各种数据类型都能检测且检测精准的就是Object.prototype.toString.call()这种方法。
  •  instanceof的实现原理:验证当前类的原型prototype是否会出现在实例的原型链__proto__上,只要在它的原型链上,则结果都为true。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,找到返回true,未找到返回false。
  • Object.prototype.toString.call()原理:Object.prototype.toString 表示一个返回对象类型的字符串,call()方法可以改变this的指向,那么把Object.prototype.toString()方法指向不同的数据类型上面,返回不同的结果

简单总结:

  • 1. typeof(根据二进制判断),不能判断数据类型:null和object
  • 2. intanceof(根据原型链判断),基本数据类型不能判断
  • 3. constructor.name(根据构造器判断),不能判断null数据类型
  • 4. Object.prototype.toString.call()(用Object的toString方法判断)所有类型数据都能判断,记住判断结果打印为:'[object Xxx]'

四、说一说样式优先级的规则是什么?

1、样式优先级的规则

标准回答 CSS样式的优先级应该分成四大类

  • 第一类 !important,无论引入方式是什么,选择器是什么,它的优先级都是最高的。
  • 第二类引入方式,行内样式的优先级要高于嵌入和外链,嵌入和外链如果使用的选择器相同就看他们在页面中插入的顺序,在后面插入的会覆盖前面的。
  • 第三类选择器,选择器优先级:id选择器>(类选择器 | 伪类选择器 | 属性选择器 )> (后代选择器 | 伪元素选择器 )> (子选择器 | 相邻选择器) > 通配符选择器 。
  • 第四类继承样式,是所有样式中优先级比较低的。
  • 第五类浏览器默认样式优先级最低。

2、使用!important要谨慎

  • 一定要优先考虑使用样式规则的优先级来解决问题而不是 !important
  • 只有在需要覆盖全站或外部 CSS 的特定页面中使用 !important
  • 永远不要在你的插件中使用!important
  • 永远不要在全站范围的 CSS 代码中使用 !important优先级的比较指的是相同的样式属性,不同样式属性优先级比较失效,比如:在设置max-width时注意,已经给元素的max-width设置了!important但是还不生效,很有可能就是被width覆盖了 

代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            max-width: 400px !important;
            height: 200px;
            background-color: tomato;
            width: 200px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

3、简单总结

  • !important、行内样式、嵌入样式、外链样式、id选择器、类选择器、标签选择器、复合选择器、通配符、继承样式
  • !important > 内联样式(style) > ID选择器(id) > 类选择器(class) > 标签选择器

五、说一说JS实现异步的方法?

  • 所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行。、

回调函数

  • 回调函数是异步操作最基本的方法,比如AJAX回调
  • 回调函数的优点是简单、容易理解和实现
  • 缺点是不利于代码的阅读和维护,各个部分之间高度耦合,使得程序结构混乱、流程难以追踪(尤其是多个回调函数嵌套的情况),而且每个任务只能指定一个回调函数。
  • 回调函数不能使用 try catch 捕获错误,不能直接 return Promise包装了一个异步调用并生成一个Promise实例,当异步调用返回的时候根据调用的结果分别调用实例化时传入的resolve 和 reject方法,then接收到对应的数据,做出相应的处理。

Promise

  • Promise不仅能够捕获错误,而且也很好地解决了回调地狱的问题
  • 缺点是无法取消 Promise,错误需要通过回调函数捕获。

Generator(生成器)

  • Generator函数是 ES6 提供的一种异步编程解决方案
  • Generator 函数是一个状态机,封装了多个内部状态,可暂停函数, yield可暂停,next方法可启动,每次返回的是yield后的表达式结果。
  • 优点是异步语义清晰,
  • 缺点是手动迭代`Generator` 函数很麻烦,实现逻辑有点绕 async/await是基于Promise实现的

async/await

  • async/await使得异步代码看起来像同步代码
  • 优点是,使用方法清晰明了
  • 缺点是await将异步代码改造成了同步代码,如果多个异步代码没有依赖性却使用了await会导致性能上的降低,代码没有依赖性的话,完全可以使用 Promise.all 的方式

async/await函数是对Generator函数的改进

  • 内置执行器。 Generator 函数的执行必须靠执行器,而 async 函数自带执行器。也就是说,async 函数的执行,与普通函数一模一样,只要一行。
  • 更广的适用性。 yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的await 命令后面,可以跟 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)。
  • 更好的语义。 async 和 awt,比起星号和 yield,语义更清楚了。async 表示函数里有异步操作,awt 表示紧跟在后面的表达式需要等待结果。 目前使用很广泛的就是promise和async/await

JS异步编程进化史:callback ---> promise ---> generator/yield ---> async/await。

总结

1. 回调函数

2. promise

2. setTimeout/setImmediate

3. async/await

4. generator/yield

异步微任务:回调函数,promise, async/await

异步宏任务:setTimeout setIntervial

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

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

相关文章

Jsp基础了解(二)

文章目录Jsp基础了解&#xff08;一&#xff09;7&#xff0c;MVC模式和三层架构7.1 MVC模式7.2 三层架构7.3 MVC 和 三层架构8&#xff0c;案例8.1 环境准备8.1.1 创建工程8.1.2 创建包8.1.3 创建表8.1.4 创建实体类8.1.5 准备mybatis环境8.2 查询所有8.2.1 编写BrandMapper8.…

无模型深度强化学习算法

无模型深度强化学习算法&#xff1a;直接训练类神经网络模型来表示策略。这里的“无模型”指的是不建立环境模型&#xff0c;而非不建立任何机器学习模型。这样的策略模型可以直接用策略梯度&#xff08;policy gradient&#xff09;[3]训练&#xff0c;但是策略梯度的变异性太…

使用extundelete恢复文件-尚文网络xUP楠哥

~~全文共1462字&#xff0c;阅读需约5分钟。 进Q群11372462&#xff0c;领取专属报名福利&#xff0c;包含云计算学习路线图代表性实战训练大厂云计算面试题资料! 假如遇到一些恶意者试图入侵服务器或者遇到Linux系统架构师不小心误删文件或目录&#xff0c;可以通过extundele…

DFS 、BFS、回溯

1、dfs(res,当前结构&#xff0c;当前候选热数据&#xff0c;当前目标值&#xff0c;当前搜索的层级&#xff09; 2、BFS&#xff08;Breadth first search&#xff09; 对于树来说&#xff0c;BFS就是层次遍历 而图的BFS 与树的BFS 不同点在于&#xff0c;树有根节点&#xf…

GPIO口,232串口,USB接口,485接口等接口保护电路

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录前言一、GPIO口1、输入端2、输出端二、USB口三、232口前言 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时更…

Ansible最佳实践之 AWX 启用facts缓存和模板问卷调查

写在前面 分享一些 AWX 启用facts缓存和模板问卷调查的笔记博文内容涉及&#xff1a; 启动facts缓存相关配置Demo启用模板调查来设置变量demo 食用方式&#xff1a; 需要了解 Ansible理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&a…

基础入门 - Spring Boot HelloWorld 第二节

简化配置 Spring Boot 把所有的配置都固定编写在 application.properties 里&#xff0c;文件名是固定写法&#xff0c;不能改 我们如果想更改配置&#xff0c;几乎所有的配置都在这里面更改就可以&#xff0c;而且&#xff0c;就算你不更改&#xff0c;不编写配置&#xff0c;…

计算机毕业设计java基于springboot医院急诊挂号系统

项目介绍 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue 人难免会有生病的时候&#xff0c;尤其是当一些突发情况下&#xff0c;一旦发生一些疾病很可能会危及生命。这时候如果按照常规的方式进行挂号是很浪费时间…

SwiftUI 中的水平条形图

水平条形图以矩形条的形式呈现数据类别,其宽度与它们所代表的数值成正比。本文展示了如何在垂直条形图的基础上创建一个水平柱状图。 水平条形图不是简单的垂直条形图的旋转。在 Numbers 等应用程序中,水平条形图被定义为独立的图表类型,而不是垂直条形图。除了条形差异外…

Jsp基础了解(一)

文章目录JSP1&#xff0c;JSP 概述2&#xff0c;JSP 快速入门2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3&#xff0c;JSP 原理4&#xff0c;JSP 脚本4.1 JSP 脚本分类4.2 案例4.2.1 需求4.2.2 实现4.2.3 成品代码4.2.4 测试4.3 JSP 缺点5&#xff0…

实验模拟TCP连接的各种异常情况(三次握手丢包,两端异常)

实验模拟TCP连接的各种异常情况&#xff08;三次握手丢包&#xff0c;两端异常&#xff09; 环境搭建 秋招结束&#xff0c;闲来无事&#xff0c;正好把计算机网络一些协议实验过一遍&#xff0c;于是用vmware搭建了一个两机通信的环境&#xff0c;在建立环境的过程中遇到了一…

HTTP Mime-Type对照表

HTTP Mime-Type对照表 : Content-Type&#xff08;Mime-Type&#xff09; 文件扩展名 小贴士&#xff1a;CtrlF 快速查找 Mime-Type类型 文件扩展名Content-Type(Mime-Type)文件扩展名Content-Type(Mime-Type).*&#xff08;二进制流&#xff0c;不知道下载文件类型&#xff09…

Java基础教程:多线程(4)-----线程的生命周期

任何对象都有生命周期&#xff0c;线程也不例外&#xff0c;它也有自己的生命周期。线程的整个生命周期分为六个阶段&#xff0c;分别是新建状态(New)、可运行状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、等待状态(Waiting)和死亡状态(Terminated)&#xff0c;线程…

1 基础知识

基础知识 1 汇编语言产生 1.1 机器指令 机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平&#xff0c;以使计算机的电子器件受到驱动&#xff0c;进行运算。 每一种微处理…

r语言绘制动态统计图:绘制世界各国的人均GDP,出生时的期望寿命和人口气泡图动画动态gif图

使用的数据 nations.csv 来自世界银行指标的数据。warming.csv 有关1880年至2017年全球年平均温度 。 yearvalue 全球平均温度&#xff0c;与1900-2000年的平均温度相比。 simulations.csv美国国家航空航天局&#xff08;NASA&#xff09;对历史温度的模拟数据&#xff0c;估计…

NetSuite Plug-In 101

进入了我的学术休假季&#xff0c;开始做一些自己喜欢的题目。今天就来扒一扒一个NetSuite落满灰尘的功能--Plug-In。 大家可能听到过一个叫做Email Approval的应用场景&#xff0c;可以让用户在不登录NetSuite系统的情况下&#xff0c;跟NetSuite产生交互。例如&#xff0c;通…

ArcGIS基础:字段的别名和字段属性域设置

【1】别名设置&#xff1a; 别名设置时需要注意的是在SHP格式里&#xff0c;进行设置仅仅是临时存贮&#xff0c;关闭属性表后&#xff0c;属性的别名就会丢失&#xff0c;需要将其存储到地理数据库里才可以永久包括。 存放在地理数据库后&#xff0c;找到数据&#xff0c;右…

Replugin 插件中MutliDex 分多包 后加载插件报错的问题解决

Caused by: java.lang.ClassNotFoundException: Didn’t find class “com.qihoo360.replugin.Entry” on path: DexPathList[[zip file “/data/app/com.topdraw.replugintest2-1/base.apk”],nativeLibraryDirectories[/data/app/com.topdraw.replugintest2-1/lib/x86, /syst…

图论算法(2)—————拓扑排序

在几天前写了一篇最小生成树的文章 今天再讲解一下图论的另一个算法&#xff1a;拓扑排序 注&#xff1a;今天只讲解kahn算法&#xff0c;各位如果对dfs算法有需求可联系我进行讲解 说到拓扑排序&#xff0c;不得不先了解下拓扑是个什么东东 拓扑&#xff0c;它是一种结构 …

Elasticsearch 进阶

一、核心概念 1.1 索引(Index) 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新…