前段时间的面试,总结一下被问到的问题(一年经验)
基础八股文
1. mvc和mvvm详细区别 ,其中每个分别是什么?具体实现过程是怎样的?
(1)MVC全名是Model View Controller
:模型(model)-视图(view)-控制器(controller)的缩写。Controller负责将Model的数据用View显示出来,换句话说就是在Controller里面把Model的数据赋值给View。
(2)Mvvm定义MVVM是Model-View-ViewModel
的简写。即模型-视图-视图模型。在MVVM的框架下,视图和模型是不能直接通信的,它们通过ViewModal来通信,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的view自动更新;当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。并且MVVM中的View和ViewModel可以互相通信。
2. 为什么会选择Vue或者说vue的优点有什么?
1.轻量级的框架,循序渐进搭建。
2.响应式编程,双向数据绑定。
3.组件化。
4.虚拟dom操作。
5.可读性强(css、js、html在同一个页面)。
3. 数据双向绑定的原理?
采用数据劫持结合发布者-订阅者模式
的方式,通过Object.defineProperty()
来给各个属性添加setter,getter并劫持监听,在数据变动时发布消息给订阅者,触发相应的监听回调。
ps: Vue3.x改用Proxy
替代Object.defineProperty
实现数据劫持。
4. 盒子模型(很少问了)
5. BFC是什么?
- 内部的Box会在垂直方向,一个接一个地放置。
- Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。
- 每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
6. 选择器优先级
!important>行内样式>id选择器>类选择器>标签选择器>通配符>继承
7. 什么情况下会发生布尔值的隐式强制类型转换?
(1) if (…) 语句中的条件判断表达式。
(2) for ( … ; … ; … ) 语句中的条件判断表达式(第二个)。
(3) while (…) 和 do…while(…) 循环中的条件判断表达式。
(4) ? : 中的条件判断表达式。
(5) 逻辑运算符 ||(逻辑或)和 &&(逻辑与)左边的操作数(作为条件判断表达式)。
8. v-for、v-if优先级?
9. 同步和异步是什么?
(1)同步指的是当一个进程在执行某个请求的时候,如果这个请求需要等待一段时间才能返回,那么这个进程会一直等待下去,直到消息返回为止再继续向下执行。
(2)异步指的是当一个进程在执行某个请求的时候,如果这个请求需要等待一段时间才能返回,这个时候进程会继续往下执行,不会阻塞等待消息的返回,当消息返回时系统再通知进程进行处理。