前端实习面试题(自己当笔记用)

2023-10-27

一、CSS

01.Flex布局

display:flex; 在父元素设置,子元素受弹性盒影响,默认排成一行,如果超出一行,按比例压缩 

容器属性:

1.flex-direction属性

取值:row(默认) | row-reverse | column | column-reverse

用于控制项目排列方向与顺序,默认row,即横向排列,项目排列顺序为正序1-2-3;row-reverse同为横向排列,但项目顺序为倒序3-2-1。

column 与row相反,为纵向排列,项目顺序为正序1-2-3,column-reverse同为纵向排列,项目顺序为倒序3-2-1。

2.flex-wrap属性

取值:nowrap(默认) | wrap | wrap-reverse

用于控制项目是否换行,nowrap表示不换行;

举个例子:比如容器宽度为300px,容器中有6个宽度为60px的项目,nowrap情况下,项目会强行等分容器宽度从而不换行,那么项目实际宽度也就只有50px了,而非我们自己设置的60px。

3.flex-flow属性

flex-flow属性是flex-deriction与flex-wrap属性的简写集合,默认属性为row nowrap,即横向排列,且不换行,如果需要控制项目排列与换行,推荐使用此属性,而非单独写两个。

4.justify-content属性

取值:flex-start(默认) | flex-end | center | space-between | space-around | space-evenly;

用于控制项目在横轴的对齐方式,默认flex-start即左对齐,center 为居中,对应的flex-end为右对齐。space-between为左右两端对齐,即左右两侧项目都紧贴容器,且项目之间间距相等。space-around为项目之间间距为左右两侧项目到容器间距的2倍;space-evenly为项目之间间距与项目与容器间距相等,相当于除去项目宽度,平均分配了剩余宽度作为项目左右margin。

5.align-items属性

取值:flex-start | flex-end | center | baseline | stretch(默认)

用于控制项目在纵轴排列方式,默认stretch即如果项目没设置高度,或高度为auto,则占满整个容器,下面第一张图的项目没设置高度,其余图片中均为60px。flex-start会让项目在纵轴紧贴容器顶部,flex-end与之相反:center使用最多,自然不会陌生,在纵轴中心位置排列:baseline比较特殊,它让项目以第一行文字的基线为参照进行排列:

6.align-content

取值:flex-start | flex-end | center | space-between | space-around | space-evenly | stretch(默认);

用于控制多行项目的对齐方式,如果项目只有一行则不会起作用;默认stretch,即在项目没设置高度,或高度为auto情况下让项目填满整个容器,与align-items类似

项目属性:

1.order

取值:默认0,用于决定项目排列顺序,数值越小,项目排列越靠前。

2.flex-grow

取值:默认0,用于决定项目在有剩余空间的情况下是否放大,默认不放大;注意,即便设置了固定宽度,也会放大。

假设默认三个项目中前两个个项目都是0,最后一个是1,最后的项目会沾满剩余所有空间。

3.flex-shrink

取值:默认1,用于决定项目在空间不足时是否缩小,默认项目都是1,即空间不足时大家一起等比缩小;注意,即便设置了固定宽度,也会缩小。

但如果某个项目flex-shrink设置为0,则即便空间不够,自身也不缩小。

4.flex-basis

取值:默认auto,用于设置项目宽度,默认auto时,项目会保持默认宽度,或者以width为自身的宽度,但如果设置了flex-basis,权重会width属性高,因此会覆盖widtn属性。

5.flex

取值:默认0 1 auto,flex属性是flex-grow,flex-shrink与flex-basis三个属性的简写,用于定义项目放大,缩小与宽度。

该属性有两个快捷键值,分别是auto(1 1 auto)等分放大缩小,与none(0 0 auto)不放大不缩小。

6.align-self

取值:auto(默认) | flex-start | flex-end | center | baseline | stretch,表示继承父容器的align-items属性。如果没父元素,则默认stretch。

用于让个别项目拥有与其它项目不同的对齐方式,各值的表现与父容器的align-items属性完全一致。

02.CSS3新特性

  1. transition:过渡
  2. animation:动画
  3. transform:形状转换
  4. 选择器
  5. box-shadow:阴影
  6. border-radius:边框圆形化处理
  7. rgba:颜色
  8. 弹性布局Flex
  9. audio 音频
  10. video 视频
  11. text-shadow

03.img中alt和title的区别

alt属性是在图片不能正常显示时出现的文本提示。

title属性是在鼠标在移动到元素上的文本提示。

 04.用纯CSS创建一个三角形 

<style>
    div {
        width: 0;
        height: 0;
        border-top: 40px solid transparent;
        border-left: 40px solid transparent;
        border-right: 40px solid transparent;
        border-bottom: 40px solid #ff0000;
    }
    </style>
</head>
<body>
  <div></div>
</body>

05.CSS的盒子模型

box-sizing:conten-box(标准模型)| border-box(IE模型)

标准盒子模型:宽度=内容的宽度(content)+ border + padding

IE盒子模型:宽度=内容宽度(content+border+padding)

 06.div水平居中

a. 已知宽度,block元素 ,添加添加margin:0 auto属性。

b.已知宽度,绝对定位的居中 ,上下左右都为0,margin:auto

07.div水平垂直居中

div {

position: relative / fixed; /* 相对定位或绝对定位均可 */

width:500px;

height:300px;

top: 50%;

left: 50%;

margin-top:-150px;

margin-left:-250px; 

}

div {

position: relative / fixed; /* 相对定位或绝对定位均可 */

top: 50%;

left: 50%;

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

}

div {

display:flex;

justify-content:center;

align-content:center;

}

 08.清除浮动

  1. clear清除浮动(添加空div法)在浮动元素下方添加空div,并给该元素写css样式 {clear:both;height:0;overflow:hidden;}
  2. 给浮动元素父级设置高度
  3. 父级同时浮动(需要给父级同级元素添加浮动)
  4. 父级设置成inline-block,其margin: 0 auto居中方式失效
  5. 给父级添加overflow:hidden 清除浮动方法
  6. 万能清除法 after伪类 清浮动(现在主流方法,推荐使用)

float_div:after{ content:"."; clear:both; display:block; height:0; overflow:hidden; visibility:hidden; } .float_div{ zoom:1 }

 09.display:none 和 visibility: hidden的区别

display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,就当他从来不存在。

visibility:hidden 隐藏对应的元素,但是在文档布局中仍保留原来的空间。

 10.CSS中 link 和@import 的区别

  1. link属于HTML标签,而@import是CSS提供的页面被加载的时,link会同时被加载(并行),而@import引用的CSS会等到页面被加载完再加载(串行)
  2. import只在IE5以上才能识别,而link是HTML标签,无兼容问题
  3. link方式的样式的权重 高于@import的权重.

 11.position的absolute与fixed共同点与不同点

共同点: 改变行内元素的呈现方式,display被置为block 让元素脱离普通流,不占据空间 默认会覆盖到非定位元素上

不同点: absolute的”根元素“是可以设置的 fixed的”根元素“固定为浏览器窗口。当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。

 12.transition和animation的区别

主要区别是transition需要触发一个事件才能改变属性, 而animation不需要触发任何事件的情况下才会随时间改变属性值,并且transition为2帧,从from .... to,而animation可以一帧一帧的。

transition 规定动画的名字 规定完成过渡效果需要多少秒或毫秒 规定速度效果 定义过渡效果何时开始 animation 指定要绑定到选择器的关键帧的名称

13. CSS优先级

  1. !important(优先级最高)
  2. id 选择器
  3. class选择器、属性选择器、伪类选择器
  4. 标签选择器、伪元素选择器
  5. 通配符选择器、关系选择器 (优先级最低)

 14.title与h4的区别、b与strong的区别、i与em的区别?

 <b>与 <strong>用在网页上都能使字体加粗,二者的不同是:<b>是物理元素 ;<strong>是逻辑元素

物理元素强调的是一种物理行为。比如说,把一段文字用b加粗,意思是告诉浏览器应该加粗显示,没有其他作用。而<strong>可以从字面理解知道它是强调的意思,<strong>是逻辑标签,强调文档逻辑。

 对于搜索引擎(SEO)来说,<strong>比<b>重视的多。

<em>和<i>都是斜体,但是<em>是逻辑元素,<i>是物理元素

15.BFC

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与,

哪些情况会产生BFC:

  1. 根元素
  2. float属性不为none
  3. position为absolute或fixed
  4. display为inline-block, table-cell, table-caption, flex, inline-flex
  5. overflow不为visible

 二、JS

0.基本数据类型

  1. null
  2. undefind
  3. Boolean
  4. String
  5. Number
  6. symbol

1.typeof和instance of 检测数据类型有什么区别?

相同点: 都常用来判断一个变量是否为空,或者是什么类型的。

不同点:

  1. typeof 返回值是一个字符串,用来说明变量的数据类型
  2. instanceof 用于判断一个变量是否属于某个对象的实例

 2.元素消失的方法

  1. opacity:0,该元素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定了一些事件,如click事件也能触发。
  2. visibility:hidden,该元素隐藏起来了,但不会改变页面布局,但是不会触发该元素已经绑定的事件。
  3. display:node, 把元素隐藏起来,并且会改变页面布局,可以理解成在页面中把该元素删掉。
  4. z-index:-1

 3.浅拷贝和深拷贝

浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间

深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。

 4.es6的新特性

  1. let定义块级作用域变量 没有变量的提升,必须先声明后使用 let声明的变量,不能与前面的let,var,conset声明的变量重名
  2. const 定义只读变量 const声明变量的同时必须赋值,const声明的变量必须初始化,一旦初始化完毕就不允许修改 const声明变量也是一个块级作用域变量 const声明的变量没有“变量的提升”,必须先声明后使用 const声明的变量不能与前面的let, var , const声明的变量重 const定义的对象\数组中的属性值可以修改,基础数据类型不可以
  3. ES6可以给形参函数设置默认值
  4. 数组之前加上三个点(...)展开运算符
  5. 数组的解构赋值、对象的解构赋值
  6. 箭头函数的特点 箭头函数相当于匿名函数,是不能作为构造函数的,不能被new 箭头函数没有arguments实参集合,取而代之用...剩余运算符解决 箭头函数没有自己的this。他的this是继承当前上下文中的this 箭头函数没有函数原型 箭头函数不能当做Generator函数,不能使用yield关键字 不能使用call、apply、bind改变箭头函数中this指向 Set数据结构,数组去重

 5.==和===区别是什么?

==返回一个布尔值;相等返回true,不相等返回false; 允许不同数据类型之间的比较; 如果是不同类型的数据进行,会默认进行数据类型之间的转换; 如果是对象数据类型的比较,比较的是空间地址

=== 只要数据类型不一样,就返回false;

6.call bind apply 的区别?

  1. 都是用于改变this指向
  2. 通过apply和call改变函数的this指向,他们两个函数的第一个参数都是一样的表示要改变指向的那个对象,第二个参数,apply是数组,而call则是arg1,arg2...这种形式。
  3. 通过bind改变this作用域会返回一个新的函数,这个函数不会马上执行。

7.js继承方式

  1. 原型链继承 核心: 将父类的实例作为子类的原型
  2. 构造继承 核心:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类
  3. 实例继承 核心:为父类实例添加新特性,作为子类实例返回
  4. 拷贝继承
  5. 组合继承 核心:通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现 函数复用
  6. 寄生组合继承 核心:通过寄生方式,砍掉父类的实例属性,这样,在调用两次父类的构造的时候,就不会初始化两次实 例方法/属性,避免的组合继承的缺点

8.闭包的理解

在函数的内部可以访问全局变量,但是在函数的外部无法访问函数内部的局部变量。 有时候我们需要获取函数内部的局部变量,此时就要使用到闭包。 做法就是在函数内部再定义一个函数,这个函数就可以访问外部的变量,之后我们再把内部函数作为外部函数的返回值,这样就可以在外部函数中读取到局部变量了。 闭包就是定义在一个函数内部的函数,是连接内外函数的桥梁。

9.原型和原型链

 把所有的对象共用的属性全部放在堆内存的一个对象(共用属性组成的对象),然后让每一个对象的 __proto__存储这个「共用属性组成的对象」的地址。而这个共用属性就是原型,原型出现的目的就是为了减少不必要的内存消耗。而原型链就是对象通过__proto__向当前实例所属类的原型上查找属性或方法的机制,如果找到Object的原型上还是没有找到想要的属性或者是方法则查找结束,最终会返回null

10.浏览器输入网址到页面渲染全过程

  1. DNS解析
  2. TCP连接(三次握手)
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 关闭TCP连接(四次挥手)

11. cookies,sessionStorage 和 localStorage 的区别

相同点:都是保存在浏览器端,且同源的。

不同点:

  • cookie数据始终在同源的http请求中携带,即cookie在浏览器和服务器间来回传递。
  • 而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
  • cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。 存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据。
  • sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。 数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;
  • localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;
  • cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;
  • localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。

12.js中跨域方法

  1. jsonp跨域(只能解决get)
  2. document.domain 基础域名相同 子域名不同
  3. window.name 利用在一个浏览器窗口内,载入所有的域名都是共享一个window.name
  4. 服务器设置对CORS的支持 原理:服务器设置Access-Control-Allow-Origin HTTP响应头之后,浏览器将会允许跨域请求
  5. 利用h5新特性window.postMessage()
  6. Web Sockets

13. 页面优化方法

  • 减少 HTTP请求数
  • 从设计实现层面简化页面
  • 合理设置 HTTP缓存
  • 资源合并与压缩
  • 合并 CSS图片,减少请求数的又一个好办法。
  • 将外部脚本置底(将脚本内容在页面信息内容加载后再加载)
  • 多图片网页使用图片懒加载。
  • 在js中尽量减少闭包的使用
  • 尽量合并css和js文件
  • 尽量使用字体图标或者SVG图标,来代替传统的PNG等格式的图片
  • 减少对DOM的操作
  • 在JS中避免“嵌套循环”和 “死循环”
  • 尽可能使用事件委托(事件代理)来处理事件绑定的操作

14.Ajax步骤

  1.  创建ajax实例
  2. 执行open 确定要访问的链接 以及同步异步
  3. 监听请求状态
  4. 发送请求

15. 数组去重的方法

function unique(arr){

var arr2 = arr.sort();

var res = [arr2[0]];

for(var i=1;i<arr2.length;i++)

{ if(arr2[i] !== res[res.length-1]){ res.push(arr2[i]); } }

return res; }

利用下标查询

function unique(arr){

var newArr = [arr[0]];

for(var i=1;i<arr.length;i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } }

return newArr; }

16. ajax中get和post请求的区别

  • get 一般用于获取数据
  • get请求如果需要传递参数,那么会默认将参数拼接到url的后面;然后发送给服务器;
  • get请求传递参数大小是有限制的;是浏览器的地址栏有大小限制;
  • get安全性较低
  • get 一般会走缓存,为了防止走缓存,给url后面每次拼的参数不同;放在?后面,一般用个时间戳
  • post 一般用于发送数据
  • post传递参数,需要把参数放进请求体中,发送给服务器;
  • post请求参数放进了请求体中,对大小没有要求;
  • post安全性比较高;
  • post请求不会走缓存;

17.ajax的状态码

 2开头(成功)

  • 200 : 代表请求成功;

3开头(重定向)

  • 301 : 永久重定向;
  • 302: 临时转移
  • 304 : 读取缓存 [表示浏览器端有缓存,并且服务端未更新,不再向服务端请求资源]
  • 307:临时重定向

4开头(客户端)

  • 400 :数据/格式错误
  • 401: 权限不够;(身份不合格,访问网站的时候,登录和不登录是不一样的)
  • 404 : 路径错误,找不到文件

5开头(服务器)

  • 500 : 服务器的问题
  • 503: 超负荷

18. 常见的异步任务

  1. 定时器
  2. ajax
  3. 事件绑定
  4. 回调函数
  5. async await
  6. promise

19. 作用域

  1. 全局作用域
  2. 私有作用域
  3. 块级作用域
  4. 上级作用域

20. Promise处理异步

他是ES6中新增加的一个类(new Promise),目的是为了管理JS中的异步编程的,所以把他称为“Promise设计模式” new Promise 经历三个状态:padding(准备状态:初始化成功、开始执行异步的任务)、fullfilled(成功状态)、rejected(失败状态)== Promise本身是同步编程的,他可以管理异步操作的(重点),new Promise的时候,会把传递的函数立即执行 Promise函数天生有两个参数,resolve(当异步操作执行成功,执行resolve方法),rejected(当异步操作失败,执行reject方法) then()方法中有两个函数,第一个传递的函数是resolve,第二个传递的函数是reject ajax中false代表同步,true代表异步,如果使用异步,不等ajax彻底完成

21. map和forEach的区别

相同点

  • 都是循环遍历数组中的每一项 forEach和map方法里每次执行匿名函数都支持3个参数,参数分别是item(当前每一项)、index(索引值)、arr(原数组),需要用哪个的时候就写哪个 匿名函数中的this都是指向window 只能遍历数组

不同点

  • map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。(原数组进行处理之后对应的一个新的数组。)
  • map()方法不会改变原始数组 map()方法不会对空数组进行检测
  • forEach()方法用于调用数组的每个元素,将元素传给回调函数.(没有return,返回值是undefined)

22.async await函数

  •  异步代码的新方式
  • 基于promise实现的
  • 异步代码更像同步代码
  • await 只能在async函数中使用,不能再普通函数中使用,要成对出现
  • 默认返回一个promise实例
  • await下面的代码是异步,后面的代码是同步的

23.this指向

  •  普通函数非严格模式下调用的时候指向于Window,严格模式指向为undefind
  • 构造函数调用this指向于实例对象
  • 对象方法调用this指向与该方法所属的对象
  • 事件绑定方法this指向于绑定事件对象
  • 定时器函数this指向于Window
  • 自执行函数中的this永远指向window
  • 箭头函数没有this,this是指向于外面的一层,如果没有则指向Window

24. 异步回调(如何解决回调地狱)

promise、generator、async/await

promise: 1.是一个对象,用来传递异步操作的信息。代表着某个未来才会知道结果的时间,并未这个事件提供统一的api,供进异步处理 2.有了这个对象,就可以让异步操作以同步的操作的流程来表达出来,避免层层嵌套的回调地狱 3.promise代表一个异步状态,有三个状态pending(进行中),Resolve(以完成),Reject(失败) 4.一旦状态改变,就不会在变。任何时候都可以得到结果。从进行中变为以完成或者失败 promise.all() 里面状态都改变,那就会输出,得到一个数组 promise.race() 里面只有一个状态变为rejected或者fulfilled即输出 promis.finally()不管指定不管Promise对象最后状态如何,都会执行的操作(本质上还是then方法的特例)

25.前端事件流

  1. 事件捕获
  2. 事件目标
  3. 事件冒泡

26.事件如何先冒泡后捕获

 在DOM标准事件模型中,是先捕获后冒泡。但是如果要实现先冒泡后捕获的效果, 对于同一个事件,监听捕获和冒泡,分别对应相应的处理函数,监听到捕获事件,先暂缓执行,直到冒泡事件被捕获后再执行捕获事件。

27. 如何判断一个变量是对象还是数组(prototype.toString.call())

千万不要使用typeof来判断对象和数组,因为这种类型都会返回object。

28.cookie、Session和token的区别

Token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件,Token的状态是存储在客户端。

cookie就是写在客户端的一个txt文件,里面包括你登录信息之类的,这样你下次在登录某个网站,就会自动调用cookie自动登录用户名;

session和cookie差不多,只是Session是写在服务器端的文件,也需要在客户端写入cookie文件,但是文件里是你的浏览器编号。Session的状态是存储在服务器端,客户端只有Session id;

29.JS全局函数

  1. escape( )
  2. eval_r( )
  3. isFinite( )
  4. isNaN( )
  5. parseFloat( )
  6. parseInt( )
  7. unescape( )

 30.JS内置可迭代对象

  1. Array
  2. Map
  3. Set
  4. String
  5. TypedArray
  6. 函数的 arguments 对象
  7. NodeList 对象

31.数组常用的方法

常用的方法有14个,6个会改变原数组的方法,8个不会改变原数组的方法

改变原数组的方法:

  1. push() :尾增 返回新增元素后数组的长度
  2. pop() :尾删 被删除的项
  3. shift() :头删 被删除的项
  4. unshift() :头增 删除元素后数组的长度
  5. reverse():反转 反转后的新数组
  6. sort(fun(){}) :排序 排序后的新数组
  • 参数为一个函数,该函数有两个形参,对应为before和after,可以这个函数中书写排序的方法,返回值为负值时,升序,正值降序,也可以直接写return a>b 或者return a<b前者对应降序,后者对应升序

不改变原数组的方法:

  1. slice(a,b) :查找 查找出的值组成的数组
  • (n,m) 查找下标:[n,m)
  • (n) 查找下标:n到最后一个元素
  • (0) 复制一遍原数组,可用于克隆
  • (-m,-n)从后往前查,-1表示最后一项,-2表示表示倒数第二项
  1. splice(n,x,m) :增、删、改 对应操作后得到的新数组
  • (n,x,m)从下标为n的元素开始,删除x个元素,在此位置将m插入
  • (n,0,m)从下标为n开始,不删除元素,直接插入m
  • (n,x)从下标为n开始,删除x个元素
  1. join('-'): 返回用指定分隔符拼接成的字符串
  2. concat(arr1, arr2, str3...) :拼接 拼接后的新数组
  3. indexOf(item, star) : 从star下标开始查找,第一次出现item元素的索引,未找到返回-1
  4. lastIndexOf(item, star) : 最后一次出现的索引
  5. includes(item) : 是否包含指定元素
  6. forEach(function(item, index, arr){}) :遍历
  • item:遍历的每一项
  • index:索引
  • arr:当前数组

三、Vue

 1.V-model的原理

vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)。

2.谈谈对生命周期的理解

  • beforeCreate阶段:vue实例的挂载元素el和数据对象data都是undefined,还没有初始化。
  • created阶段:vue实例的数据对象data有了,可以访问里面的数据和方法,未挂载到DOM,el还没有
  • beforeMount阶段:vue实例的el和data都初始化了,但是挂载之前为虚拟的dom节点
  • mounted阶段:vue实例挂载到真实DOM上,就可以通过DOM获取DOM节点
  • beforeUpdate阶段:响应式数据更新时调用,发生在虚拟DOM打补丁之前,适合在更新之前访问现有的DOM,比如手动移除已添加的事件监听器
  • updated阶段:虚拟DOM重新渲染和打补丁之后调用,组成新的DOM已经更新,避免在这个钩子函数中操作数据,防止死循环
  • beforeDestroy阶段:实例销毁前调用,实例还可以用,this能获取到实例,常用于销毁定时器,解绑事件
  • destroyed阶段:实例销毁后调用,调用后所有事件监听器会被移除,所有的子实例都会被销毁

3. vuex的流程

页面通过mapAction异步提交事件到action。action通过commit把对应参数同步提交到mutation。 mutation会修改state中对于的值。 最后通过getter把对应值跑出去,在页面的计算属性中 通过mapGetter来动态获取state中的值

4.vuex有哪几种状态和属性

  • state中保存着共有数据,数据是响应式的
  • getter可以对state进行计算操作,主要用来过滤一些数据,可以在多组件之间复用
  • mutations定义的方法动态修改state中的数据,通过commit提交方法,方法必须是同步的
  • actions将mutations里面处理数据的方法变成异步的,就是异步操作数据,通store.dispatch来分发actions,把异步的方法写在actions中,通过commit提交mutations,进行修改数据。
  • modules:模块化vuex

5.vue路由的两种模式

  • hash ——即地址栏URL中的#符号(此hsah 不是密码学里的散列运算) hash 虽然出现URL中,但不会被包含在HTTP请求中,对后端完全没有影响,因此改变hash不会重新加载页面。
  • history ——利用了HTML5 History Interface 中新增的pushState() 和replaceState() 方法

这两个方法应用于浏览器的历史记录站,在当前已有的back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改是,虽然改变了当前的URL,但你浏览器不会立即向后端发送请求。

6.vue中 key 值的作用

key是vue中的 vnode标记的唯一id,通过这个key,我们的df算法操作可以更准确,更快速的算出那个dome元素需要修改。如果不加key,那么vue会选择复用节点vue的就地更新策略),导致之前节点的状态被保留下来,会产生一系列的bug

key的作用主要是为了高效的更新虚拟DOM。

7. $route$router的区别

  • $route是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。
  • $router是“路由实例”对象包括了路由的跳转方法,钩子函数等。

8.vue-router守卫

全局守卫

  • router.beforeEach 全局前置守卫
  • router.afterEach 全局后置守卫

组件守卫

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave

9. vue修饰符

  • stop:阻止事件的冒泡
  • prevent:阻止事件的默认行为
  • once:只触发一次
  • self:只触发自己的事件行为时,才会执行

10.vue项目中的性能优化

  1. 不要在模板里面写过多表达式
  2. 循环调用子组件时添加key
  3. 频繁切换的使用v-show,不频繁切换的使用v-if
  4. 尽量少用float,可以用flex
  5. 按需加载,可以用require或者import()按需加载需要的组件
  6. 路由懒加载

11.V-if和V-show区别

v-if是”真正”的渲染,每次为ture的时候会渲染dome元素出来, v-show页面一初始化的时候就渲染出来,只是根据条件去改变 display的属性,实现显示和隐藏,如果是经常切换的条件不建议使用vⅱ进行条件判断,非常频繁的切换建议,使用 v-show进行判断比较好。 

秋招参考

转载:

最新的前端大厂面经(详解答案) - 掘金 (juejin.cn)

转载:

2021年我的前端面试准备 (juejin.cn)

转载:

听说前端面试手写”节流防抖“你不会?用动画带你秒懂! (juejin.cn)

转载:

前端常考的算法题 (juejin.cn)

[译] 送你 43 道 JavaScript 面试题 - 掘金 (juejin.cn)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端实习面试题(自己当笔记用) 的相关文章

随机推荐

  • linux非常实用的命令和技巧

    1 串行 单核CPU 进程一个个执行 2 并行 单核CPU 感觉多个进程同一时间执行 3 并发 多核CPU 同一时间有多个进程执行 4 apt get install f修复所有软件包的依赖关系 可以提高软件包的安装成功率 5 ls 2 g
  • ‘str‘ object is not callable

    r HttpRequest http request url item url data item data cookies item Cookie http method item method auth item auth 用reque
  • 华为手机怎样才算激活了_手机电池寿命,到底使用多久才算正常

    最近这几天 同事叫我给他更换华为P9的电池 目前是充不上电 使用时间短 非常不稳定 他的P9是2016年10月份左右购买的 已经使用2年多一点点 先给大家科普一下 手机电池的寿命问题 电池寿命 锂离子电池只能充放电500次 相信绝大部分消费
  • 阿里云ECS漏洞处理(centos): NetworkManager 安全更新

    影响说明 软件 NetworkManager tui 1 10 2 14 el7 5 命中 NetworkManager tui version less than 1 1 12 0 8 el7 6 路径 usr bin nmtui 软件
  • 【Three.js】第八章 Fullscreen and resizing 全屏和调整大小

    08 Fullscreen and resizing 全屏和调整大小 介绍 我们的画布目前有一个固定的分辨率800x600 项目中不一定需要 WebGL 填满整个屏幕 但如果您想要身临其境的体验 填满整屏的体验可能会更好 首先 我们想让画布
  • win10电脑服务器在哪个文件夹下,Win10桌面背景在哪个文件夹?Win10桌面背景所在文件夹介绍...

    最近有Win10用户反映 之前电脑有设了张很好看的桌面背景 但后来不小心给换成了别的 现在想换回来 却不知道要在哪个文件夹找那张桌面背景 用户为此非常困恼 那么 Win10桌面背景在哪个文件夹呢 下面 我们就一起往下看看Win10桌面背景所
  • 计算机图标被选定无法取消,我电脑桌面上图标全被选中的状态,去不掉怎么处理?...

    1 鼠标右键单机 我的电脑 属性 高级 性能 设置 勾选下方的 在桌面上为图标标签使用阴影 OK 2 右键桌面空白处 在 排列图标 里去掉 锁定桌面的web项目 OK 3 到 控制面板 里 用户帐户 中重新建立一个新帐户 使用新帐户登陆即可
  • 超详细的ARM架构安装Mysql8.0

    一 安装环境 系统 Mac Linux版本 CentOS 9 二 安装 1 先卸载MariaDB 在CentOS中默认安装有MariaDB 是MySQL的一个分支 主要由开源社区维护 CentOS 7及以上版本已经不再使用MySQL数据库
  • 迁移学习&finetune详解

    文章目录 一 为什么要用迁移学习 二 几种方式 三 三种方式的对比 四 具体训练策略建议 一 为什么要用迁移学习 1 站在巨人的肩膀上 在已经上线的基础模型的效果可以接受的情况下 表明模型有效 可以分辨数据集基础特征 没有必要重复造轮子 每
  • MySQL中删除id为最小的数据

    方法1 delete from 表名 where id in select id from select min id id from 表名 c1 t1 方法2 delete from 表名 order by id asc limit 1
  • 链表随机指针

    我卡住的一个原因是 我曾想便利两次 想在第二遍的同时把两个链表分离开 结果失败了 必须三遍 以为random指针很可能指到前面已经断开的节点 而这个还是不用哈希的方式 因此如果前面的链表断开了 就都乱套了 Definition for a
  • Android Studio模拟器启动后不停闪烁(已玄学解决)

    问题描述 Android Studio模拟器启动后不停闪烁 解决方法 右侧点击Device Manager打开设备管理 点击修改标志 将Graphics 图样 换成Software 软件 点击Finish 这个方法是网上找的 但是不好使TA
  • Linux命令 - cp命令

    Linux命令 cp命令 cp 是copy的缩写 Linux中 cp命令用来复制文件或者目录 一般情况下 shell会设置一个别名 在命令行下复制文件时 如果目标文件已经存在 就会询问是否覆盖 不管你是否使用 i参数 但是如果是在shell
  • python图像差分法目标检测_运动目标检测(4)—背景差分法

    背景减法利用图像序列中的当前帧和事先确定的背景参考模型间的差异比较 来确定运动物体位置 是一种基于统计学原理的运动目标检测的方法 这种方法的性能取决于背景建模技术 Gloyer等人使用单高斯模型的思路 但常常不能准确地描述背景模型 1999
  • Android调用系统发送短信界面

    很多软件都有分享的功能 不少是支持短信分享的 其实就是调用系统发送短信的Activity 代码实现非常简单 发送短信 param smsBody private void sendSMS String smsBody Uri smsToUr
  • Elasticsearch基本概念及CRUD常用操作

    Elasticsearch基本概念及CRUD常用操作 一 介绍 二 REST 风格 三 索引CRUD 3 1 创建索引 3 2 查询索引 3 3 删除索引 四 文档CRUD 4 1 添加文档 4 1 1 普通添加 随机ID 4 1 2 普通
  • Mybatis学习笔记-Mabatis缓存

    Mybatis学习笔记 Mybatis缓存 缓存就是内存中的数据 常常来自对数据库查询结果的保存 使用缓存 我们可以避免频繁的与数据库进行交互 进而提高响应速度 MyBatis提供了对缓存的支持 分为一级缓存和二级缓存 可以通过一下图解来理
  • 解决github访问不了的方法

    1 打开网站http tool chinaz com dns 在A类型的查询中输入 github com 找到最快访问的ip地址 并复制下来 2 修改系统文件的hosts文件 进入C Windows System32 drivers etc
  • 董事聘任书

    EX 10 38 4 future s1a3 ex1038 htm DIRECTOR OFFER LETTER Exhibit 10 38 The Future Education Group Inc Room 501 Gaohelanfe
  • 前端实习面试题(自己当笔记用)

    一 CSS 01 Flex布局 display flex 在父元素设置 子元素受弹性盒影响 默认排成一行 如果超出一行 按比例压缩 容器属性 1 flex direction属性 取值 row 默认 row reverse column c