前几天终于收到人生第一份面试通知,面试了深圳的一家创业型公司,查了一下这家公司还挺不错的,有很大的发展前景,面试官也很nice,无论面试结果如何,经过此次宝贵的面试机会也给我带来知识上的查漏补缺。javascript
原本打算录下整个面试过程,带上了心爱的AirPods,开启了一波操做,面试完才发现一点儿声音都没录进去,当场裂开,查了下缘由是由于戴上AirPods录屏就没声音,因此趁着刚面试完立刻写下这篇面试总结。css
balabala...html
讲了项目的一些基本的功能,当时有点紧张,并且是电话面试,没有把功能讲得很全,还好我在简历提供了项目预览网址。前端
我记得简历上没写小程序,面试官忽然就问起了小程序的内容。。当时的心情是what?vue
答:了解过mpvue可是没作过项目,不会原生小程序。对vue比较了解。html5
看来要好好系统的学习小程序了,恰好最近在M课网买了小程序课程,学起来!java
《微信官方文档指南》node
答:vue的单文件组件,即以.vue结尾的文件,有一个template标签,用来放页面的结构,script标签用来放js相关逻辑的内容,style标签用来放相关的样式,能够提供一个scoped属性防止样式污染。web
网上的标准答案:单文件组件面试
这个还真没想起来,网上查了一下
SPA( single-page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。一旦页面加载完成,SPA 不会由于用户的操做而进行页面的从新加载或跳转;取而代之的是利用路由机制实现 HTML 内容的变换,UI 与用户的交互,避免页面的从新加载。
优势:用户体验好、快,内容的改变不须要从新加载整个页面,避免了没必要要的跳转和重复渲染;
基于上面一点,SPA 相对对服务器压力小;
先后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理;缺点:
初次加载耗时多:为实现单页 Web 应用功能及显示效果,须要在加载页面的时候将 JavaScript、CSS 统一加载,部分页面按需加载;
前进后退路由管理:因为单页应用在一个页面中显示全部的内容,因此不能使用浏览器的前进后退功能,全部的页面切换须要本身创建堆栈管理;
SEO 难度较大:因为全部的内容都在一个页面中动态替换显示,因此在 SEO 上其有着自然的弱势。
答:经过用v-bind指定绑定class属性,能够用对象的方式也能够用数组的方式提供类名,通常用来切换样式,如某个条件为true时就添加这个类名样式。
官方文档:Class和Style绑定
答:v-if是真正的条件渲染,v-show是渲染了,经过display为none控制。
答:emmmmm...忘了
其实这个好久前看过,可是复习的时候没复习到。。。
能够看掘金大佬这篇:《深刻剖析:Vue核心之虚拟DOM》
答:vuex经过state提供状态,mutations修改转态,actions异步函数也能够编写多个mutation一并提交,getters获取状态,至关于computed。
最近刚作了一个音乐web app,对vuex真的熟透于心啊!
官方文档:vuex
这个概念我给忘了,其实就是父组件传递子组件,只能单向传递,子组件不能修改父组件传递过来的数据。。。全部的 prop 都使得其父子 prop 之间造成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,可是反过来则不行。子组件能够经过$emit派发一个自定义事件,父组件接收到后,有父组件修改。
答:能够经过watch监听,当数组发生变化时,就会触发watch中对应变量的函数。
官方文档:watch侦听器
我听成字母k。。。问面试官是否是字母的k,他说是,当场懵了,后面就说没听过,面试完才想起来是key。。。
key通常跟v-for配合使用,还有vue的transition-group
也须要绑定key。
key
的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。若是不使用 key,Vue 会使用一种最大限度减小动态元素而且尽量的尝试就地修改/复用相同类型元素的算法。而使用 key 时,它会基于 key 的变化从新排列元素顺序,而且会移除 key 不存在的元素。有相同父元素的子元素必须有独特的 key。重复的 key 会形成渲染错误。
答:vue的生命周期分为三个阶段,初始化、运行中、销毁。一个完整的生命周期,从开始建立、初始化数据、编译模板、挂载dom、渲染、更新、渲染、销毁
beforeCreate=>new Vue(),初始化事件和生命周期,而后就执行beforeCreate,此时数据尚未挂载,没法访问数据和dom,通常不作操做
created=>挂载数据,绑定事件触发,可使用数据更新数据,但不会触发updated函数,通常用来作初始数据的获取
beforeMount=>render函数首次被调用,找实例或者组件对应的模板后触发,虚拟dom建立,准备渲染,这里也能够用来初始数据的获取,不会触发updated钩子
mounted=>渲染了真实dom,组件出如今页面中,但不保证全部子组件都被挂载,可使用vm.$nextTick确保全部组件都被挂载
beforeUpdate=>当组件或实例的数据更改以后立马指向,通常不在这个钩子作什么事
updated=>当数据更新完后当即执行
beforeDestory=>当通过某种途径调用$destroy方法后,当即执行beforeDestroy,用来清除计时器、清除非指令绑定的事件等等
destoryed=>组件的数据绑定、监听...去掉后只剩下dom空壳,这个时候,执行destroyed,在这里作善后工做也能够
答:emmmmm...没有。
而后问面试官什么是ssr,面试官说是一种服务端渲染,才想起来原来是NUXTJS,听过可是没用过唉。
Vue.js 是构建客户端应用程序的框架。默认状况下,能够在浏览器中输出 Vue 组件,进行生成 DOM 和操做 DOM。然而,也能够将同一个组件渲染为服务端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上彻底可交互的应用程序。
即:SSR大体的意思就是vue在客户端将标签渲染成的整个 html 片断的工做在服务端完成,服务端造成的html 片断直接返回给客户端这个过程就叫作服务端渲染。
面试官:那我来问一下基础吧。
心想还好以前怒刷了一遍红宝书和阮老师的ES6入门。
答:闭包就是一个函数能够访问另一个函数内部的变量。闭包的优势是能够延伸变量的做用范围
面试官:缺点呢。
答:容易形成内存泄漏,而后就讲了会形成内存泄漏的几种场景,定时器、DOM引用、全局变量。
答:在js中,每一个对象都有个prototype属性指向原型对象,balabala...,而后顺便讲了new的过程。
面试官:Object的原型对象指向什么
答:null
能够参考我写的这一篇:理解原型与原型链
答:!important>内联样式>ID选择器>类选择器>标签选择器>继承
感受回答得不是很好,其实还要考虑到优先级的计算。
网上标准答案:CSS选择器优先级
答:BFC简称块级格式上下文,BFC是页面上的一个隔离的独立容器,不受外界干扰或干扰外界;
触发BFC的条件是float不为none;overflow不为visible;position为absolute或fixed;
display为inline-block或table-cell、table-caption
BFC通常被用来清除浮动、避免某些元素被浮动元素覆盖、阻止外边距重叠
答:有两种盒子模型,IE盒子模型和标准盒模型,IE盒模型经过box-sizing属性设置为border-box,IE盒模型width属性等于盒子的总宽度,标准盒模型宽度等于width+border+padding。
答:rem是基于html的font-size,em基于父元素的font-size。
答:语义化标签: