前端全模块常见面试题与答案详解

2023-05-16

🍓 作者主页:💖仙女不下凡💖

🍓 学习建议:以下👇 内容不建议死记硬背,而且内容太多也记不住,建议了解链接里面的详情解释之后在理解我总结的面试回答,相信看到这篇文章的小伙伴相当一部分是没有工作经验的初学者,所以我会简单提到这些知识点什么时候使用,因为个人开发经验不算丰富总结内容常有不全,欢迎指正修改!

🍓 欢迎点赞👍 收藏⭐ 留言📝 如有不足与错误敬请指正!


🎄一、HTML与CSS部分

🍬1.css盒模型

✨ 重点理解: 盒模型分为标准盒模型与IE盒模型,元素在网页实际占位为content + padding + border + margin标准盒子模型与低版本IE盒子模型区别就是取宽高的时不同,标准盒模型宽高指content的宽高;低版本IE盒子模型宽高指content + padding + border
📢 问题拓展: CSS 如何设置这两种模型? 标准盒模型(默认)box-sizing : content-box;
IE盒模型box-sizing : border-box

🍬2.行元素与块元素水平居中、垂直居中、水平垂直居中

📢 问题拓展: CSS水平居中+垂直居中+水平/垂直居中的方法总结

🍬3.h5新特征

✨ 重点理解: 增加了❶新语义元素(新标签和新属性,如<header></header>) ❷加强本地存储(增加了sessionStoragelocalStorage等) ❸表单新增功能(from) ❹css3等。
📢 详情文章: h5新特性有哪些

🍬4.H5 存储类型有什么区别?

✨ 重点理解: H5能够本地存储数据,在之前都是使用cookies使用的。H5提供了下面两种本地存储方案: localStorage( 用于持久化的本地存储,数据永远不会过期,关闭浏览器也不会丢失)与sessionStorage(同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储)。

🍬5.H5标准提供了哪些新的API

✨ 重点理解: 我们记住几个吧,如XMLHttpRequest对象:H5标准新增了更多的属性和方法和事件;多媒体Media API等等,很多很多。

🍬6.H5 应用程序缓存和浏览器缓存有什么区别?

✨ 重点理解: 应用程序缓存是H5的重要特性之一,提供了离线使用的功能,提高网站性能,让应用程序可以获取本地的网站内容,例如HTML、CSS、图片以及JavaScript

3.flex弹性布局

5.css3新特征

🍬7.px em rem vh vw的区别

✨ 重点理解: px是绝对长度,而em rem vh vw都是相对长度,rem em区别rem只能在html标签里面设置rem的依赖的值到底是多少,而em是可以在自己元素以及父级元素设置em依赖的值到底是多少。vhvw:就是根据窗口的宽高,分成100等份,100vh就表示满高,50vh就表示一半高。

🍬8.用css画一个三角形

width: 0;
height: 0;
border-top: 40px solid transparent;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 40px solid #ff0000;

🍬9.为什么要初始化 CSS 样式 ?

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。

🍬10.清除浮动

1.父级div定义height
原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题
优点:简单,代码少,容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题。
建议:不推荐使用,只建议高度固定的布局时使用
2.最后一个浮动元素后加空 div 标签 并添加样式 clear:both。(理论上能清除任何标签,增加无意义的标签)
3.包含浮动元素的父标签添加样式 overflow 为 hidden 或 auto。
4.父级 div 定义 zoom(空标签元素清除浮动而不得不增加无意义代码的弊端,使用zoom:1用于兼容IE)
5.用after伪元素清除浮动(用于非IE浏览器)

🍬11.深拷贝与浅拷贝

🍬12.请解释一下CSS3的flexbox(弹性盒布局模型)以及适用场景?

该布局模型的目的是提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间。在传统的布局方式中,block 布局是把块在垂直方向从上到下依次排列的;而 inline 布局则是在水平方向来排列。弹性盒布局并没有这样内在的方向限制,可以由开发人员自由操作。
试用场景:弹性布局适合于移动前端开发,在Android和ios上也完美支持。


🌈二、JavaScript部分

🌈🌈🌈 前言: 学习JavaScript之前我建议要把他的技术发展的时间线做一个大概的了解。下图是我在之前文章的总结截图,我们知道ES505年版本的统称,ES615年版本所有版本的统称,下面的面试题我尽量按照ES5ES6两版不同对比总结。
✨前端学习笔记-javascript,完整版
js技术发展时间线

🔥1.JavaScript的数据类型

✨ 在ES5版本中有6种数据类型▶️基本数据类型Undefined、Null、Boolean、Number、String,▶️复杂数据类型Object
📢 详解文章:js的基本数据类型有哪些?

ES6之后引入两种新数据类型SymbolbigInt
📢 详情文章:

🔥2.常见数组操作方式

📢 详情文章:js中数组操作方法整理
✨ 重点看遍历数组的方式与数组去重的方法。

🔥3.常见对象操作方法

✨ 重点理解: 操作对象的方法很多,建议记住几个常用的方法即可。其中apply、call、bind是改变this指向的方法,此处也是一个面试常见题目。

🔥4.this指向相关

✨ 重点理解: ⑴ 改变this指向apply、call、bind三种方法的区别?⑵ this指向window有哪些?⑶ 哪些实际应用:其实在实际开发中并不算是常用与常用的数据操作方法使用频率相差很多,但是比如在某个方法中想调用其他方法或者数据会使用。
📢 详情文章:this、apply、call、bind

🔥5.常见数据类型检测方法

✨ 重点理解: typeof()、instanceof()这两个方法常用,instanceof()ES6方法,在实际项目中很少直接使用,那什么时候用呢?一般都是不确定后台返回什么数据类型时打印一下到底返回了什么,比如console.log(typeof(xxx))

🔥6.new操作符

✨ 总结理解: 调用new构造函数例var obj = new Base();这样代码的结果是什么?new操作符具体干了什么呢?其实很简单就干了三件事情。❶ var obj = {};创建一个新对象 ❷obj.__proto__ = Base.prototype;Base.call(obj);新对象的_proto_属性指向构造函数的原型对象,同时返回新对象obj,所以构造函数中不用return值。
📢 详情文章:js中的new关键字都干了些什么?

🔥7.__proto__与prototype

✨ 总结理解:4.new操作符中相信有人对于function Base(){放了一堆方法}; obj.__proto__ = Base.prototype;不理解,其实这部分也是JavaScript中的原型链知识点、非常重要,一句话总结 prototype是函数才有 的属性实际使用时有一些组件或整个项目常用的方法会放在里面;而 __proto__是每个对象都有的属性 (但是万物皆对象,所以__proto__谁都有)
📢 详情文章:__proto__与prototype

🔥8.节点操作

✨ 重点理解:
📢 详情链接:

5.浏览器如何渲染页面的?
6.http请求

🔥for…in和for…of区别

✨ 重点理解: 这个问题很简单for…infor…of都是循环数据使用,不同的是for…in循环的是键名,for...of循环的是键值。

    const arr = ['a', 'b', 'c']

    for (let i in arr) {
        console.log(i)
    };  /执行结果为0 1 2/
    
    for (let i of arr) {
        console.log(i)
    };  /执行结果为a b c/

但是for...in有一种特殊情况

    const arr = ['a', 'b', name:'qiqingfu']
    
    for (let i in arr) {
        console.log(i)
    };  /执行结果为a b name/

🔥ES6提供的Set和Map数据结构

✨ 重点理解: ES6引入了两个新的数据结构:▶️Set与▶️Map
➡️Set数据容器是一个能够存储无重复值的有序列表。

let set = new Set([1,2,3,3,3,3]);
console.log(set.size);  /执行结果为3,  因为重复的值去除了, 所以set数组中只有3个变量长度为3/

➡️Map数据结构类似于对象,也是键值对的集合。“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果需要“键值对”的数据结构,MapObject更合适。Map的键是跟内存地址绑定的,只要内存地址不一样,就可视为两个键。这样解决了同名属性碰撞(clash)的问题,如果使用对象作为键名,就不用担心自己的属性与原作者的属性同名。
📢 详情链接: 深入理解ES6–7.Set和Map
📢 详情链接: JavaScript中Map的用途是什么?

🔥继承

✨ 重点理解: 这个概念我其实在实际项目中基本没有用到过,不过也是面试的知识点。
📢 详情链接:前端必知必会ES5、ES6的7种继承

🔥JavaScript的三种弹出

✨ 重点理解:
📢 详情链接:

🔥闭包

✨ 重点理解:
📢 详情链接:

🔥Object.defineProperty()

✨ 重点理解: 我在刚刚接触这个方法的时候一直有个疑问,为什么要用这个方法,这不是更加不方便了么,后来慢慢理解了,这个方法可以限制加入的数据是否可以遍历、是否可以删除等。
📢 详情链接:深入浅出Object.defineProperty()

🔥Proxy对象ES6

✨ 重点理解: Proxy对象是ES6引入的新知识点,建议结合Object.defineproperty()vue框架的双向数据绑定一起理解。
📢 详情链接:详解es6中Proxy代理对象的作用
📢 详情链接:面试官: 实现双向绑定Proxy比defineproperty优劣如何?

🔥防抖与节流

✨ 重点理解: 关于防抖节流的应用,其实在实际应用中发生滚动事件、input事件、页面resize事件等较常遇到,➡️防抖含义是对于短时间内连续触发的事件,让某个时间期限内,事件处理函数只执行一次;➡️节流含义是对于短时间内连续触发的事件,让某个时间期限内,事件处理函数每定期执行一次;
➡️防抖和节流的区别: 防抖是将多次执行变为最后一次执行,节流是将多次执行变为每隔一段时间执行。
📢 详情链接:浅谈 JS 防抖和节流


☃️三、网络基础http

☃️☃️☃️ 前言: 既然我们是前端开发那就势必要与后端配合,来请求后台的服务器的数据,这时候就是网络http出场的时间了,个人建议在看该面试题之前建议先将http基础复习一遍,方便了解下面的面试题以及总结的答案。前端工程师必须要知道的HTTP部分。

❄️1.GET与POST请求方式的区别

✨ 重点理解: 我们在前言复习时了解到,http请求方式不止GETPOST,还有PUT等其他请求方式,但是不作为重点了解。
✨ 面试时回答3点我认为足够了!!!
GETPOST不安全,因为GET提交的数据放在URL中,POST则不是(POST也不安全,因为HTTP是明文传输抓包就能获取数据内容,要想安全还得加密)。
GET回退浏览器无害,POST需要再次提交请求(GET有缓存中拿结果,POST没缓存)。
GETPOST还有一个重大区别,简单的说:GET产生一个TCP数据包,POST产生两个TCP数据包。换句话说:对于GET方式的请求,浏览器会把http headerdata一并发送出去,服务器响应200(返回数据),而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。也就是网络请求的两次握手,我记得在哪见过解释。
📢 详情链接:你敢在post和get上刁难我,就别怪我装逼了

❄️2.Cookies与Session,SessionStore,LocalStore的区别及使用

✨ 重点理解: 又上一个面试题我们知道,在实际开发中前端展示的数据大都是通过http网络请求后后台服务器返回的数据,所以这就引出了Cookies、Session、SessionStore、LocalStore这几个浏览器的缓存机制,来保存必要的数据,这样就大大的减少了请求次数!
📢 详情链接:Cookie、session和localStorage、以及sessionStorage之间的区别

https 的握手过程


🎄四、ajax前后端交互

🎃1.

✨ 重点理解:
📢 详情链接:

1.ajax的代码书写步骤
2.ajax中get和post请求的区别
3.如何解析json数据:JSON.parse()
4.Promise异步函数


🌼五、Vue 部分面试题

再看这些面试题之前,希望了解一些基本概念,什么是Vue实例,什么是Vue组件,什么是$el,路由,基本的javascript语法等。如果时间充足建议花两个星期的时候研读下面的笔记已经对应的视频,很多问题就可以迎刃而解了。
前端学习笔记____Vue2+Vue3全家桶
浅谈Vue构造、Vue实例、Vue组件的区别

🎨1.解决 vue 页面加载时出现 {{message}} 闪退

使用 v-cloak 解决,它是是一个特殊属性,Vue 实例创建完毕并接管容器后,会散删掉v-cloak属性;使用 css 配合 v-cloak 可以解决网速慢时页面展示出 {{xxx}} 的问题。

<h2 v-cloak>{{name}}</h2>  
/如果不加v-cloak页面会显示{{name}},5秒之后插值表达式才会解析/

🎨2.el 与 data 的两种写法

el 的两种写法

<head>
  <script text="text/javascript" src="../js/vue.js"></script>
</head>
<body>
  <div id="root">容器</div>
</body>

<script type="text/javascript">
  const vm = new Vue({
    el: '#root', /第一种写法,直接与容器关联/
    data: {},
  })
</script>
<head>
  <script text="text/javascript" src="../js/vue.js"></script>
</head>
<body>
  <div id="root">容器</div>

  <script type="text/javascript">
    const vm = new Vue({
      data: {},
    });
    vm.$mount('#root');  /mount挂载,写法灵活,比如可以加定时器控制执行时间/
  </script>
</body>

data 的两种写法

<head>
  <script text="text/javascript" src="../js/vue.js"></script>
</head>
<body>
  <div id="root">容器</div>
</body>

<script type="text/javascript">
  const vm = new Vue({
    el: '#root',
    data: {},   /第一种写法,对象式/
  })
</script>
<head>
  <script text="text/javascript" src="../js/vue.js"></script>
</head>
<body>
  <div id="root">容器</div>
</body>

<script type="text/javascript">
  const vm = new Vue({
    el: '#root',
    data: function(){  /第二种 函数式,function可以省略,组件必须使用函数式/
      return: 'xxx',
    },
  })
</script>

思考:为什么组件中 data 必须使用函数式写法?这个也是一个面试题。

🎨3.为什么组件中 data 必须使用函数式写法

🎨4.Vue 中的 key 有什么作用?react、vue中的key有什么作用? (key的内部原理)

key 是为 Vue 中 vnode 的唯一标记,通过这个 key,我们的 diff 操作可以更准确、更快速。
🌼 虚拟DOM中key的作用:key是虚拟DOM对象的标示,当数据发生变化时,Vue会3据新数据生成新的虚拟DOM,随后Vue进行新虚拟DOM与旧虚拟DOM的差异比较。比较规则如下:
🌼 对比规则:❶旧虚拟DOM中找到了与新虚拟DOM相同的key;若虚拟DOM中内容没变,直接使用之前的真实DOM;若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM。❷旧虚拟DOM中未找到与新虚拟DOM相同的key创建新的真实DOM,随后渲染到页面。
🌼 用index作为key可能会引发的问题:❶若对数据进行:逆序添加、逆序删除破坏操作( 会产生没有必要的真实DOM更新 ==> 界面效果没问题,但效率低 )。⑵如果结构中还包含输入类的DOM( 会产生错误DOM更新 ==> 界面有问题 )。
🌼 开发中如何选择key?
❶最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号、学号等唯一值。❷如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。

🎨5.自定义指令的使用(directives)

示例代码如下

/需求1: 定义一个v-big指令,与v-text类似但是会把绑定的数值放大10倍/
/需求2: 定义一个v-fbind指令,与v-bind类似但可以让其所绑定的input元素默认获取焦点/
<body>
  <div id="root">
    <h2>当前的n值是:<span v-text="n"></span> </h2>
    <h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
    <button @click="n++">点我n+1</button> <hr/>
    <input type="text" v-fbind:value="n">
  </div>
</body>

<script type="text/javascript">
  Vue.config.productionTip = false;
  new Vue({
    el: '#root'
    data: { n:1 },
    /局部自定义指令/
    directives: {
      /两种方式,第一写成对象big:{}(完整),第二种写成函数big(){}/
      big(element,binding){  /element是真实DOM元素,binding是一个对象存各种信息/
        element.innerText = binding.value * 10;
      },
      fbind:{  /包含3个钩子函数/
        console.log(this);  /注意此处的this指向window/
        bind(element,value){ element.value = binding.value },  /指令与元素成功绑定时调用/
        inserted(element,value){ element.focus() },  /指令所在元素被插入页面时调用/
        upddate(element,value){ element.value = binding.value }  /指令所在的模板被重新解析时调用/
      }
    },
  })
</script>

🌼 局部指令 new Vue({ directives:{指令名:配置对象} })new Vue({ directivea(){} })
🌼全局指令Vue.directive(指令名, 配置对象)Vue.directive(指令名, 回调函数)
🌼 配置对象中常用的3个钩子函数:
❶ bind 指令与元素成功绑定时调用
❷ inserted 指令所在元素被插入页面时调用
❸ update 指令所在模板结构被重新解析时调用。
⚠️指令定义时不加 v-,但使用时要加 v- ;指令名如果是多个单词,要使用 kebab-case 命名方式,不要用 camelCase 命名。

🎨6.谈谈对SAP单页面的理解,它的优缺点分别是什么?

总结理解: 先了解什么是 SAP 单页面应用,用一句话总结就是整个应用只有一个完整页面,点击页面中的导航只做局部刷新,如下图。

  • 优点: ①用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染;②基于上面一点,SPA 相对对服务器压力小;③前后端职责分离,架构清晰。
  • 缺点: ①初次加载耗时多;②前进后退路由管理:由于单页应用在一个页面中显示所有的内容,所以不能使用浏览器的前进后退功能,所有的页面切换需要自己建立堆栈管理;③SEO 难度较大。

📢详解文章:

🎨7.谈谈对 MVVM 模型的理解?

总结理解: Vue 参考了该 MVVM 模型,在 Vue 之前就有 MVVM 的模型理念。
M模型(Model): 对应data中的数据;V视图(View): 模板;VM视图模型(ViewModel): Vue实例对象。❶data(即M模型)中所有的属性,最后都出现在了vm身上;❷另外vm身上所有的属性及Vue原型上所有属性,在Vue模板中都可以直接使用。

🎨8.Vue 是如何实现数据双向绑定的?

总结理解: 其实双向数据绑定分为两种:Vue2.x底层语法是 Object.defineProperty(),Vue3.1是Proxy,这个也衍生出他们两个的区别或者说,3.X版本有什么优点,可以自行思考一下。通过这个话题其实可以衍生出 Proxy 与 Object.defineProperty 优劣对比(ES6)语法?与 JavaScript 部分呼应。
📢详解文章:Vue 是如何实现数据双向绑定的?

🎨9.v-model 的原理?

总结理解: 一句话概括就是,绑定数据并且监听数据改变。v-model 是:value="msg" @input="msg=$event.target.value"的语法糖,其中:value="msg"是绑定了数据,value 就是 input 输入框里的值;@input="msg=$event.target.value"就是监听 input 输入框里值的变化,然后改变值。
📢详解文章: 你知道v-model的原理吗?说说看

🎨10.跨域

总结理解:
📢详解文章:

🎨11.v-if 与 v-show 的区别

总结理解: v-if 是真正的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建;也是惰性的:如果在初始渲染时条件为假,则什么也不做,直到条件第一次变为真时,才会开始渲染条件。v-show 不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 的 “display” 属性进行切换。所以,v-if 适用于在运行时很少改变条件,不需要频繁切换条件的场景;v-show 则适用于需要非常频繁切换条件的场景。
📢详解文章:

🎨12.谈谈你对 Vue 生命周期的理解?

总结理解: Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模版、挂载 Dom->渲染、更新->渲染、卸载等一系列过程,即 Vue 的生命周期。我们要知道 Vue 实例生命周期有8个,但是 keep-alive 有两个专属的生命周期,详解如下图。

生命周期详解
beforeCreate组件实例被创建之初,组件的属性生效之前
created组件实例已经完全创建,属性也绑定,但真实 dom 还没有生成,$el 还不可用
beforeMount在挂载开始之前被调用:相关的 render 函数首次被调用
mountedel 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子
beforeUpdate组件或实例数据更新之前调用,发生在虚拟 DOM 打补丁之前
update组件或实例数据更新之后
activitedkeep-alive 专属,组件被激活时调用
deactivatedkeep-alive 专属,组件被销毁时调用
beforeDestory组件或实例销毁前调用
destoryed组件或实例销毁后调用

📢详解文章:

🎨13.Vue中如何动态绑定Class与Style?

/绑定class样式--字符串写法,适用于:样式的类名不确定,需要动态指定/
    <div class="basic" :class="mood" @click="changeMood">{{name}}</div><dr/>
    /绑定class样式--数组写法,适用于:要绑定的样式个数和名字不确定/
    <div class="basic" :class="classArr">{{name}}</div><dr/>
    /绑定class样式--对象写法,适用于:要绑定的样式个数和名字确定,但是要动态决定用不用/
    <div class="basic" :class="classObj">{{name}}</div><dr/>
    
    <div class="basic" :style="{fontSize: fsize+'px'}">{{name}}</div>
    /绑定style样式--数组写法/
    <div class="basic" :style="styleObj">{{name}}</div>
    /绑定style样式--对象写法/
    <div class="basic" :style="styleArr">{{name}}</div>

🎨14.怎样理解 Vue 的单向数据流?

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。

这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

子组件想修改时,只能通过 $emit 派发一个自定义事件,父组件接收到后,由父组件修改。

有两种常见的试图改变一个 prop 的情形 :

  • 这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用。 在这种情况下,最好定义一个本地的 data 属性并将这个 prop 用作其初始值:
props: ['initialCounter'],
  • 这个 prop 以一种原始的值传入且需要进行转换。 在这种情况下,最好使用这个 prop 的值来定义一个计算属性
props: ['size'],

🎨15.this 指向

总结理解: 关于 this 指向:①组件配置中data函数、methods中的函数、computed中的函数它们的this指向均是【VueComponent实例对象】②new Vue()配置中data函数、methods中的函数、computed中的函数它们的this指向均是【Vue实例对象】。

🎨16.router 与 route 的区别

总结理解: router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由包含了许多关键的对象和属性。route是一个跳转的路由对象,每一个路由都会有一个route对象,是一个局部的对象,可以获取对应的name,path,params,query等
📢详解文章: vue2.0中的$router 和 $route的区别

🎨17.vue-router 路由模式有几种?

总结理解: vue-router 有 3 种路由模式:hash、history、abstract
📢详解文章:vue-router路由模式有几种?

🎨18.能说下 vue-router 中常用的 hash 和 history 路由模式实现原理吗?

总结理解: 先理解hash 与 history 是什么?他们其实是路由的两种工作模式。vue默认为 hash 模式,转变为 history 模式方式如下图。▶️1. hash模式:❶地址中永远带着#号,不美观;❷若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合适;❸兼容性好。▶️2. history模式:❶地址干净,美观;❷兼容性和hash模式相比略差;❸应用部署上线时需要后端人员支持,解决刷新页面服务端404问题。
路由的工作模式切换
📢详解文章: 能说下 vue-router 中常用的 hash 和 history 路由模式实现原理吗?

🎨19.谈谈你对 keep-alive 的了解?

总结理解: keep-alive 其实就是缓存路由组件,可以不使用,使用之后的优点是:让不展示的路由组件保持挂载,不被销毁,使用方法如下

<--⚠️如不写include属性,代表所有的router-view中所有层级都缓存不销毁 -->
<keep-alive include=['组件名1', '组件名2']>
  <router-view></router-view>
</keep-alive>

📢详解文章: 谈谈你对 keep-alive 的了解?

🎨20.Vue 的父组件和子组件生命周期钩子函数执行顺序?

总结理解: 加载渲染过程:父beforeCreate => 父created => 父beforeMount => 子beforeCreate => created => 子beforeMount => 子mounted => 父mounted;子组件更新过程:父beforeUpdate => 子beforeUpdate => 子updated => 父updated;父组件更新过程:父beforeUpdate => 父updated;销毁过程:父beforeDestroy => 子beforeDestroy => 子destroyed => 父destroyed

🎨21.在哪个生命周期内调用异步请求?

总结理解:
📢详解文章:

🎨22.怎么利用 computed 的缓存性?

总结理解:
📢详解文章:

🎨23.computed 和 watch 的区别和运用的场景?

总结理解:
📢详解文章:

🎨24.对于 vue3.0 特性你有什么了解的吗?

总结理解:
📢详解文章:

🎨25.你有对 Vue 项目进行哪些优化?

总结理解:
📢详解文章:

🎨26.在什么阶段才能访问操作DOM?

在钩子函数 mounted 被调用前,Vue 已经将编译好的模板挂载到页面上,所以在 mounted 中可以访问操作 DOM。vue 具体的生命周期示意图可以参见如下,理解了整个生命周期各个阶段的操作,关于生命周期相关的面试题就难不倒你了。

🎨27.虚拟 DOM 实现原理?

总结理解:
📢详解文章:

🎨28.虚拟 DOM 的优缺点?

总结理解:
📢详解文章:

🎨29.Vue 怎么用 vm.$set() 解决对象新增属性不能响应的问题 ?

总结理解:
📢详解文章:

🎨30.Vue 框架怎么实现对象和数组的监听?

总结理解:
📢详解文章:

🎨31.使用过 Vue SSR 吗?说说 SSR?

总结理解:
📢详解文章:

🎨32.你使用过 Vuex 吗?

总结理解:
📢详解文章:

🎨33.Vue 组件间通信有哪几种方式?

总结理解:
📢详解文章:

🎨34.直接给一个数组项赋值,Vue 能检测到变化吗?

总结理解:
📢详解文章:
内置关系VueComponent.prototype.proto === Vue.prototype

🎨35.父组件可以监听到子组件的生命周期吗?

总结理解: 可以。有两种方法:1.在父组件中定义一个事件,在子组件中用$emit去触发。2.父组件引用子组件时,给父组件添加@hook 来监听。其它的生命周期事件,例如:created,updated 等都可以监听。
📢详解文章:父组件可以监听到子组件的生命周期吗?

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

前端全模块常见面试题与答案详解 的相关文章

  • 企业运维之 openstack 的私有网络以及图形化配置

    企业运维之 openstack 的私有网络以及图形化 1 私有网络2 图形化配置虚拟机3 封装镜像4 上传镜像5 块存储6 kolla ansible 在上一篇的基础上 xff0c 来继续完善 openstack 的相关配置 先将控制节点启
  • AD 软件的学习--基本操作

    一 界面认识 如果某个空间消失了就在设置中的VIEW进行一个复位 device 元器件 xff1b connector 连接器 库所在文件夹 原理图大小设置 二 基本过程 放元器件时 xff0c 空格键进行旋转 先选好元件 xff0c 摆在
  • ROS学习记录(三)C++与Python文件的配置

    本篇文章依托于赵虚左老师的ROS课程 xff0c 实现HelloWorld打印 xff0c 并安装VScode环境 课程链接 讲义链接 文章目录 前言一 基本操作过程1 先创建一个工作空间 xff1b 2 再创建一个功能包 xff1b 二
  • STM32学习笔记-SMT32使用HAL库UART中断方式使用

    目录 1 引言 2 配置 3 流程 1 引言 近来需要使用蓝牙模块 xff0c 再了解到蓝牙模块等无线模块许多使用串口透传 xff0c 便决定在研究一下串口UART 的使用方法 由于用的板子种类每次都不一样 xff0c 有F103 有G0
  • Jetson Nano-USB和HDMI无响应,无法开机问题+jetson nano的烧录记录

    问题描述 xff1a Jetson Nano USB和HDMI没输出 xff0c 电源Led正常绿灯 xff0c 但端口无供电 xff0c 无法正常使用和开机 经查阅相关资料 xff0c 初步猜测应该是系统崩溃了 xff0c 导致usb驱动
  • expect/spawn小记

    usr bin expect set timeout 3 spawn ssh l root 10 239 81 207 expect 34 passwd 34 send 34 123456 r 34 interact
  • 人脸识别(了解知识)

    上节课我们学习了 xff0c OpenCV的基础知识和基本的读取数据方法 这节课 xff0c 让我们继续来了解人脸识别的知识 一 xff0c 图片灰度转换 OpenCV 中有数百种关于在不同色彩空间之间转换的方法 当前 xff0c 在计算机
  • 医疗实验室信息管理系统源码(云LIS)

    云LIS系统源码是一种医疗实验室信息管理系统 xff0c 提供全面的实验室信息管理解决方案 它的主要功能包括样本管理 检测流程管理 报告管理 质量控制 数据分析和仪器管理等 云LIS源码技术说明 xff1a 技术架构 xff1a Asp N
  • java 算法之快速排序

    1 快速排序是一种比较高效的排序算法 xff0c 采用 分而治之 的思想 xff0c 通过多次比较和交换来实现排序 xff0c 在一趟排序中把将要排序的数据分成两个独立的部分 xff0c 对这两部分进行排序使得其中一部分所有数据比另一部分都
  • 设置机器人的tf变换

    设置机器人的tf变换 转载自古月居 xff1a ROS探索总结 xff08 二十二 xff09 设置机器人的tf变换 1 什么是tf变换 ROS中的很多软件包都需要机器人发布tf变换树 xff0c 那么什么是tf变换树呢 xff1f 抽象的
  • matlab仿真建立机器臂模型并得到其D-H参数表

    最近老师要求我们在matlab中构造下图机器人的模型 其初步构型长这样 想要实现图示关节的构型 xff0c 必须在正确的坐标位置绘制出圆柱体 xff08 为圆柱指定位置和z轴方向 xff09 xff0c 那么就必须先获得机器臂各个关节的位姿
  • 自动控制原理中matlab的应用

    知识点汇总 生成传递函数 sys 61 tf xff08 num xff0c den xff09 xff1b num为分子多项式系数 xff0c den为分母的多项式系数多项式乘法 den 61 conv xff08 den1 xff0c
  • 解决 linux下编译.sh文件报错 “[: XXXX: unexpected operator” 问题

    原因 xff1a linux下能正常执行的脚本 xff0c 在ubuntu系统中都会编译报错 xff0c 因为二者使用的解释器不一同导致 Linux xff1a sh ubuntu dash 因为ubuntu默认的sh是连接到dash的 又
  • 刚下好ROS,如何从零开始实现px4的无人机仿真

    刚刚入门ROS开发 xff0c 作为刚刚挺过艰难的ubuntu安装 ros安装的萌新来说 xff0c 你应该正处于ROS开发的初始过渡阶段 一方面 xff0c 你庆幸你解决了许多安装新系统的许多bug xff0c 跨过了阻拦了无数人入门RO
  • 信号与系统——matlab

    一 信号的matlab表示与绘图 1 连续信号绘图 xff0c 例 xff1a t 61 0 0 0001 5 a 61 5 b 61 0 8 x 61 a exp b t sin pi t 注意是 plot t x 绘制出信号关于变量t的
  • 无人车仿真:带反馈的绕圈路径实现

    前期入门ros xff0c 无论是无人机还是无人车等的控制 xff0c 基本都是先以仿真学习为主 xff0c 成熟的仿真理解与功能实现 xff0c 再搬到现实世界的无人车无人机就变得简单随意 xff0c 也能减少许多不必要的硬件损坏 但是很
  • stm32中C语言知识巩固

    此文知识来源于江科大老师b站视频讲解 C语言数据类型 需要注意的是 xff0c 在51单片机中int是16位的 xff0c 32单片机中int是32位的 后面两行是对其重命名 xff0c 因为左边的数据类型名字比较长 xff0c 且有很多名
  • Rviz中控制机器人模型运动(arbotix)

    前言 xff1a 通过 URDF 结合 rviz 可以创建并显示机器人模型 xff0c 不过 xff0c 当前实现的只是静态模型 xff0c 如何控制模型的运动呢 xff1f 在此 xff0c 可以调用 Arbotix 实现此功能 简介 A
  • Gazebo仿真环境搭建(04)

    Gazebo 中创建仿真实现方式有两种 1 直接添加内置组件创建仿真环境 1 1启动 Gazebo 并添加组件 1 2保存仿真环境 添加完毕后 xff0c 选择 file gt Save World as 选择保存路径 功能包下 world
  • 树莓派4b安装ubuntu18.04和ros-melodic(一)

    因为用到了树莓派这个集成计算机 xff0c 所以买了张sd卡自己配置了一下环境 每个人环境都不一样 xff0c 但是大体方法流程都是一样 xff0c 我用了一周的时间配置好的 xff0c 说实话真的很麻烦所以在这里我把方法分享给大家 xff

随机推荐

  • 集成学习详解

    入门小菜鸟 xff0c 希望像做笔记记录自己学的东西 xff0c 也希望能帮助到同样入门的人 xff0c 更希望大佬们帮忙纠错啦 侵权立删 目录 一 集成学习的产生原因与相关定义 1 产生原因 2 相关定义 xff08 1 xff09 同质
  • 深度学习之优化算法

    入门小菜鸟 xff0c 希望像做笔记记录自己学的东西 xff0c 也希望能帮助到同样入门的人 xff0c 更希望大佬们帮忙纠错啦 侵权立删 目录 一 优化算法与深度学习 1 优化算法对于深度学习的意义 2 优化算法与深度学习的关系 3 优化
  • Redis常用命令(超详细整理)

    1 字符串string操作命令 Redis中字符串类型常用命令 xff1a SET key value 设置指定的key值 GET key 获取指定key的值 SETEX key seconds value 设置指定key的值 xff0c
  • linux/android中aplay/arecord用法以及命令

    linux xff1a 1 查看声卡 xff1a root 64 sos dom0 aplay l List of PLAYBACK Hardware Devices card 0 broxtontdf8532 broxton tdf853
  • linux怎么查看防火墙状态

    1 通过SSH连接登录linux系统 2 输入如下命令 xff1a systemctl status firewalld 3 敲回车即可查看防火墙的状态 xff0c 如下状态表示防火墙已经关闭 4 又或输入命令 xff1a service
  • 一闪一闪的星星特效效果

    首先让我们看一下一闪一闪的星星特效效果如下图 xff1a 让我们先看一下布局 xff1a span class token tag span class token tag span class token punctuation lt s
  • 实现红绿灯的效果

    首先看一下效果如下 xff1a html部分 xff1a span class token tag span class token tag span class token punctuation lt span div span spa
  • 图书管理系统数据库SQL设计思路

    1 x1f58d 需求分析 一个图书管理系统包括用户信息维护 图书馆信息 图书信息维护 书籍借出 书籍归还 借书记录 支付查询等 此系统功能用户可以借书 续借 归还 查询书籍 增加 修改和删除 2 x1f58b 需求 1 用户信息维护 xf
  • jQuery夹娃娃小游戏

    点击开始 xff0c 爪子开始往下移夹娃娃首先让我们看一下它的效果图如下 xff1a 页面布局代码如下 xff1a span class token tag span class token tag span class token pun
  • 酒店管理系统数据库SQl设计思路

    第一节 x1f58d 需求分析 一个酒店管理系统包括很多个模块 xff0c 首先我们先要分析一下需求 一 实时房态图 动态生成实时房态图 在房态图上进行房态修改 换房操作 xff0c 续住操作 选择房间进行散客 团队预定 散客 团队入住 散
  • 超经典的20道SQL题目(附加解题思路)

    最近学了SQL的内容 xff0c 老师也给我们发了练习题 xff0c 感觉在做题的过程中得到了提高 xff0c 所以将题目和我自己的答案分享一下 xff0c 希望对大家有所帮助 我使用的是SQL Server 2014 Management
  • 《酒店管理系统》项目总结

    一 项目模块 二 业务流程图 三 业务流程功能实现 1 首先客人接待 xff1a 实时房态图 xff0c 可以直观的显示出所有客房的状态 2 客人预定 xff1a 根据客人的基本资料做预订 xff0c 在房态图上的客房添加一个预定的标识 3
  • Java基础语法

    一 基础语法 Java大小写敏感 比如HelloWorld和Helloworld是不一样的 包名 Package 公司 组织 个人的域名的反向 xff0c 一般是英文字母 英文字母必须是小写 类名 xff08 ClassName xff09
  • Java中的分支语句

    一 前言 本篇文章讲解的知识点是 xff1a 分支语句 xff0c 希望大家能掌握 二 分支语句 提示 xff1a if else 语句可以看作有4种形式 xff1a 1 if 语句 代码 xff1a span class token ke
  • Linux 下ALSA音频工具amixer,aplay,arecord使用

    ALSA音频工具amixer aplay arecord ALSA音频工具编译安装 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Java中的循环语句

    一 前言 本篇文章主要讲解Java知识点是 xff1a 循环语句 希望大家读完这篇文章之后能掌握以下几种循环语句的知识点 二 循环语句 提示 xff1a 循环语句分为以下几种 xff1a 1 for循环 循环场景 xff1a 更适用于明确循
  • Java数组

    对于所有的编程语言来说数组都是相对比较重要的数据结构之一 在Java中数组主要用来存放一组固定大小的相同类型的数据 xff08 一 xff09 数组变量的声明 数组声明有两种写法 xff1a dataType span class toke
  • 运用C在Linux系统中写贪吃蛇小游戏

    最近在学习Linux操作系统的运用 通过写下贪吃蛇这个小游戏 xff0c 加深对c语言的理解以及Linux操作系统的运用 在文章中逐步解析贪吃蛇的整个构建逻辑 并将它记录下来 1 运用ncurses库编写贪吃蛇小游戏 在开始编译贪吃蛇小游戏
  • Vue3入门级别笔记-适用于入门

    前言 xff1a Vue3快速上手 1 Vue3简介 2020年9月18日 xff0c 发布Vue js3 0版本 xff0c 代号 xff1a One Plece xff08 海贼王 xff09 2 Vue3带来了什么 性能升级 打包大小
  • 前端全模块常见面试题与答案详解

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 学习建议 xff1a 以下 x1f447 内容不建议死记硬背 xff0c 而且内容太多也记不住 xff0c 建议了解链接里面的详情解释之后在理解我总结