Open zhengwei1949 opened 7 years ago
Vue的双向数据绑定的原理 答:vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 具体步骤: 第一步:需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter和getter 这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化 第二步:compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图 第三步:Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是: 1、在自身实例化时往属性订阅器(dep)里面添加自己 2、自身必须有一个update()方法 3、待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退。 第四步:MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果。
Vue的生命周期的理解: 答:总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后。 创建前/后: 在beforeCreated阶段,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。在created阶段,vue实例的数据对象data有了,$el还没有。 载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完成,data.message成功渲染。 更新前/后:当data变化时,会触发beforeUpdate和updated方法。 销毁前/后:在执行destroy方法后,对data的改变不会再触发周期函数,说明此时vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在
理解iframe跨域最好的文章 http://www.jb51.net/article/33711.htm
shouldComponentUpdate是react性能优化非常重要的一环。组件接受新的state或者props时调用,我们可以设置在此对比前后两个props和state是否相同,如果相同则返回false阻止更新,因为相同的属性状态一定会生成相同的dom树,这样就不需要创造新的dom树和旧的dom树进行diff算法对比,节省大量性能,尤其是在dom结构复杂的时候。不过调用this.forceUpdate会跳过此步骤。
如何看懂chrome的火焰图 http://www.ruanyifeng.com/blog/2017/09/flame-graph.html
推荐看的书: 《数据结构与算法JavaScript描述》 《学习JavaScript数据结构与算法 第2版》 《图解http》 《Node与Express开发》 《GitHub入门与实践》
定位
CSS类
假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。
请写出五到七种方案,并说出各种方案的优缺点和兼容性
左侧菜单栏占300px,右侧内容可以根据浏览器自适应。根据此要求,编写html css代码
CSS选择器又哪些?有哪些新特性?有哪些伪类?
清除浮动的几种方式,优缺点
图片如何实现垂直居中的
css hack你知道哪些?
谈谈你对CSS盒模型的认识
谈谈你对BFC的了解
JS类
DOM事件
Event
对象的常见应用场景?JS原生
new Person()
时发生了什么?JSON.parse
实现一个深拷贝的方法JQuery
ES6
工程化
框架
MVVM
框架解决了什么问题?带来了什么问题?shouldComponentUpdate
方法的实际使用场景?HTTP
前后端通信
jquery
的ajax
方法安全
CSRF
的原理以及如何防御XSS
的原生和如何防御渲染机制
DOCTYPE
及作用?标准模式和兼容模式有什么区别?JS运行机制
Event Loop
,请简述其过程服务器
错误处理
页面性能
async
和defer
的区别是什么?缓存
cookie
、sessionStorage
和localStorage
的区别项目问题
正常非技术问题
故意挖坑的问题
代码运行结果,并解释