一篇鸡汤文,几个vue面试题

3,266 阅读4分钟

游泳健身了解一下:github 和小伙伴一起搞的日常总结

加油

我们总是听到从五年后看现在,但是我想说从五年后你想要成为的人,看自己,(请你一定不要停下来,成为你想要成为的人)。先2年规划,然后再逐步规划。不要抱怨,反思自己,不埋怨(就算埋怨也是无用功,你改变不了别人,你能改变的只有自己)。持续不断的学习(哪怕是阶段性)(只要持续不断)。我不喜欢别人说是金子一定就会发光的这句话,金子发光也是需要媒介的。所以一定不要急躁,一定不要急躁,一定不要急躁。只要脚不停,那么终点肯定就比别人远一点,(对于某些人正确的废话当然是废话,但是另一些人我觉得还是有说的必要的)

学会算账

假设你会一百个知识点,那么按10年收益计算100个收益对价格,100个知识点可以提高5k来算,那么每个知识点价格 5k1012/100每个题的收益就是 6k,卧槽这么一算是不是感觉很赚,每个知识点就可以赚那么多。

面试

如问vue watch和computed区别 怎么养回答可以让你得到90分呢?(通常回答知其然,知其所以然,可以拿高分)

可以从几个角度去讲,1是否缓存,但是为什么支持缓存,怎么实现的缓存呢?2.computed不能异步,watch可以异步,为什么呢?(其实也是因为,computed缓存了值的问题)

computed 实质上也是new了一个watch 不同的是 多了一个 lazy 的属性

computed 在watch.update 的时候只改变了,dirty 为 true(下面就会讲为啥会缓存)

watch 在队列里添加当前的this,进行一个异步的渲染

只有当dirty 为true 的时候当前才会去watch 里面去取新的值,否则用之前的值,而一调用之后 dirty 就会 false

所以大家会怎么回答呢,首先,回答 watch 和 computed区别 一个不能缓存一个可以缓存,一个可以异步一个不能异步 那么如果面试的人不问为什么可以缓存呢,我觉得你可以说原理是因为当前computed 多了一个lazy 为true 的属性,通过lazy 属性然后赋值dirty通过dirty 进行的一个缓存,而在watch的update里面lazy 为true 就只做了当前dirty为true,所以不能进行异步,而watch进行了一个队列,队列是通过nextTick 进行一个异步的渲染。我觉得这样回答可以拿到高分,知其然知其所以然,单单只说(一个不能缓存一个可以缓存,一个可以异步一个不能异步)就像背面试题,肯定不能拿高分。

最常见的问题是vue的原理知道吗?那么怎么实现的里面做了什么,update 的时候做了什么?依赖收集?我通常做法是画一个图,然后从observe 讲 compiler 里面做了啥,其中几个重要的点(1.发布订阅,2.队列,3.异步渲染),随着转行前端以及培训班越来越多,导致僧多肉少,所以从前几年好找工作,到现在都问原理源码,生活不易,所以大家努力

那么是你vue的原理你会怎么讲?

new vue 做了什么?流程?讲源码做了什么,首先是初始化了一堆的数据给vueprototype上如init的数据给vue的prototype上如:_init,set,deletedelete,watch ,on,on,emit,_update,forceUpdate,forceUpdate,destroy,nextTick,nextTick,render 等一堆api,初始化之后会初始化当前 initGlobalAPI ,util,use,mixin,extend,等,执行_init 方法,进行组件等初始化 api,parentparent,root,childrechildre,refs,slotsslots,createElement等 然后就执行 beforeCreate生命周期,初始化data,然后执行 created 生命周期,所以我们在 created 里面可以拿到data 的数据,然后把我们的组件进行 mount进行一个挂载,mount 进行一个挂载,mount 里面也做了很多事情 beforeMount 生命周期 updateComponent 页面渲染 => _render 函数的执行得到 VDOM mounted 生命周期

回答可以精简,希望可以了解

$mount

$mount

_init _init

结尾

不喜勿喷