面试大纲

136 阅读6分钟

原生js

1、jQuery.delegate() 函数详解

答:定义:delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)

2、js 事件机制有哪些? 冒泡的实现方式

3、js基本数据类型及引用数据类型

4、对象深拷贝、浅拷贝

5、什么是闭包?闭包的原理?优缺点?

6、原型链

Es6

1、es6 箭头函数和普通函数的区别?

2、用es5实现箭头函数?

3、let var const 区别?

4、Map和WeakMap的主要区别:

5、手写promise:

css相关

1、css 盒模型?两者的区别?

2、position 都有什么属性? realive 和 absoult 有什么区别 fixed和 absoult 区别是什么?fixed 是相对谁定位?

3、css中间自适应两边宽度固定实现?

webpack配置

1、webpack属性有哪些?分别是干什么的?

2、webpack 常用plugin有哪些?

3、webpack 配置mock.js 在哪配置?

vue相关

1、vue父子组件与兄弟组件是怎么传递的? 爷孙怎么传递的? 孙爷怎么传递的?

2、vue生命周期?vue生命周期除了常用的六个 还有其它的么 都在什么情况下用到了?

3、vue key的作用?

4、vue for循环key为什么最好不要用index设置?

5、vue diff算法原理?

6、vue2.0与vue3.0区别?

7、双向数据绑定的原理?

Vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。主要分为以下几个步骤:

    1. 需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上setter和getter这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化
    1. compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
    1. Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是: ①在自身实例化时往属性订阅器(dep)里面添加自己 ②自身必须有一个update()方法 ③待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退。
    1. MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果。

image.png

8、什么是mvvm?什么是mvc?mvc怎么交互的?

9、vue data 里面数组的修改 dom上面能更新么 为什么要用this.$set才能更新?

10、vuex是什么?

11、父子组件传值生命周期执行顺序是什么?

执行的先后顺序为父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

12、watch 和 computed 区别?

Computed:

  • 它支持缓存,只有依赖的数据发生了变化,才会重新计算

  • 不支持异步,当Computed中有异步操作时,无法监听数据的变化

  • computed的值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data声明过,或者父组件传递过来的props中的数据进行计算的。

  • 如果一个属性是由其他属性计算而来的,这个属性依赖其他的属性,一般会使用computed

  • 如果computed属性的属性值是函数,那么默认使用get方法,函数的返回值就是属性的属性值;在computed中,属性有一个get方法和一个set方法,当数据发生变化时,会调用set方法。

Watch:

  • 它不支持缓存,数据变化时,它就会触发相应的操作

  • 支持异步监听

  • 监听的函数接收两个参数,第一个参数是最新的值,第二个是变化之前的值

  • 当一个属性发生变化时,就需要执行相应的操作

  • 监听数据必须是data中声明的或者父组件传递过来的props中的数据,当发生变化时,会触发其他操作,函数有两个的参数:

    • immediate:组件加载立即触发回调函数
    • deep:深度监听,发现数据内部的变化,在复杂数据类型中使用,例如数组中的对象发生变化。需要注意的是,deep无法监听到数组和对象内部的变化。

总结:

  • computed 计算属性 : 依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值。

  • watch 侦听器 : 更多的是观察的作用,无缓存性,类似于某些数据的监听回调,每当监听的数据变化时都会执行回调进行后续操作。

13、data为什么是一个函数而不是对象

JavaScript中的对象是引用类型的数据,当多个实例引用同一个对象时,只要一个实例对这个对象进行操作,其他实例中的数据也会发生变化。

而在Vue中,更多的是想要复用组件,那就需要每个组件都有自己的数据,这样组件之间才不会相互干扰。

所以组件的数据不能写成对象的形式,而是要写成函数的形式。数据以函数返回值的形式定义,这样当每次复用组件的时候,就会返回一个新的data,也就是说每个组件都有自己的私有数据空间,它们各自维护自己的数据,不会干扰其他组件的正常运行。

react 相关

1、react shouldcomponentupdata 是做什么的?

2、react setstate是异步还是同步的? 异步的

网络相关

1、跨域的解决办法? cors 怎么实现前后端通信的? 跨域携带cookie 怎么实现?

2、http哪些状态码

3、options请求原理?

4、http和https区别?

5、 http缓存都有哪些?

6、get post区别 ?

移动端

1、rem、em、px 、vw、 vh、rpx区别?

2、移动端rem怎么实现的?

3、原生APP怎么嵌入H5

小程序

1、小程序首页优化方案

2、小程序的分享怎么实现的?

3、小程序的登录流程是什么样的?

4、mpvue或原生 遇到哪些问题?

5、小程序生命周期有哪些?组件内生命周期都有哪些?组件间通信方式?

6、微信小程序怎么判断登录是否过期?

7、小程序组件是怎么引入的?

nodejs: