# interview-questions **Repository Path**: zeroone0011/interview-questions ## Basic Information - **Project Name**: interview-questions - **Description**: 记录一些前端的面试,这里面记录的是纯面试这种类型的 - **Primary Language**: HTML - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-23 - **Last Updated**: 2021-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 记录自己学过的面试题 * [Webpack Tree shaking 深入探究](https://juejin.im/post/6844903687412776974) ### 网络通信层 ### 1. 什么叫标签语义化? 合理的标签干合适的事情,可读性 2. 都有哪些标签?都是什么意思? 行内标签 span 块级标签: div 3. 行内标签和块级标签的区别 4. opacity 兼容处理 5. filter还能做哪些事情 6. display: flex ## 学习的视频 刷完: [4天突击大厂常见前端面试题(2020版)](https://www.bilibili.com/video/BV1ek4y1r7GT?p=1) ## 面试题 [前端经典面试题 ( 60道前端面试题包含 JS、CSS、React、网络、浏览器、程序题等)](https://mp.weixin.qq.com/s/RBK318_QiurLqCyaVSFNYg) [Vue面试题,中级](https://juejin.cn/post/6844903934314676231#heading-18) generator怎么保存上下文的。 Proxy怎么实现的,用es5写一下。 this设计缺陷。 能不能主动用装饰器。 响应式编程优点。 ## 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实现双向数据绑定是采用数据劫持和发布者-订阅者模式。 数据劫持是利用ES5的Object. defineProperty(obj,key,val)方法来劫持每个属性的getter和setter,在数据变动是发布消息给订阅者,从而触发相应的回调来更新视图 ## 清除浮动的方法 1. 使用CSS中的clear:both;(放一个空的div,并设置上述css),属性来清除元素的浮动 ```html