theydy / notebook

记录读书笔记 + 知识整理,vuepress 迁移中 https://theydy.github.io/notebook/
0 stars 0 forks source link

19.4.28 面试 #14

Open theydy opened 5 years ago

theydy commented 5 years ago

电话面试

  1. CSS 中盒模型?
分为标准盒模型和怪异盒模型两种
标准盒模型宽高只指内容宽高,不包括 border, padding
怪异盒模型宽高包括 context + padding + border
  1. 适应性布局?
rem 根据 html 标签设置的 font-size 字体大小变化
em 指的一个字体大小,如果当前元素的字体是 16px,那么 1em === 16px
flex
  1. flex 如何设置垂直居中?
看是否设置主轴还是交叉轴为垂直,
主轴居中 justify-content
交叉轴居中 align-items
  1. 说说 js 中的原型原型链?
js 中所有的对象都有一个 __proto__ 属性,这个属性指向它的原型对象。
对于函数来说,如果这个函数能够作为构造函数,则这个函数也有一个 prototype 属性指向原型对象。
因为对于一个构造函数来说,通过它生成的对象实例指向的原型对象都是同一个,所以可以在这个原型对象上定义一些通用的属性和方法。
多个不同类型的对象通过 __proto__ 属性连接起来,就形成了原型链。
  1. js 如何实现继承?
1. 构造函数实现继承
在子类的构造函数中通过 call, apply 调用父类的构造函数
2. 原型链实现继承
修改子类的 prototype 指向一个父类的对象实例
3. 组合继承
4. 寄生组合继承
5. class extend 实现继承
  1. call, apply 作用是? call, apply 区别?
call, apply 作用在与改变函数内部的 this 指向
call, apply 在传递参数有所不同,call 只能一个一个传,apply 可以传一个数组对象
  1. 说说 Promise ?
Promise 代表一个暂未完成但是在未来某个时刻会完成的异步任务,
Promise 有三个状态,pending, resolved, rejected。一旦状态改变,
就不能再次改变。而且 Promise 的状态不受外部影响。
Promise 主要解决回调地狱的问题,因为 Promise.then 最后会返回一个新 Promise ,
可以链式调用,所以通过 then 方法注册回调函数可以避免多层嵌套的问题。
Promise 的缺陷是,一旦开始无法取消,处于 pending
状态时不知道具体执行到哪里,只能通过回调函数捕获错误。
  1. vue 中父子组件通信方法?
1. props 传参, $emit 触发事件
2. provide/inject
3. $parent, $children 获得 vm 实例进行通信
4. $refs 进行通信
5. event bus
6. vuex
  1. 什么情况下会使用 mixin,mixin 混入的钩子函数和构造器中写的钩子函数执行顺序?
碰到通用逻辑的时候,会把通用逻辑提取出来写成一个 mixin。
mixin 混入的钩子函数会比构造器写入的钩子函数早执行。
  1. mutation 和 action 区别?
mutation 处理同步操作
action 处理异步操作或者多个 mutation 的操作
  1. vuex 如何在 B 模块中调用 A 模块的 mutation?
// https://stackoverflow.com/questions/42606091/change-another-module-state-from-one-module-in-vuex
// 感觉万能的 stackoverflow
commit('a_mutation', null, { root: true })
commit('A/a_mutation', null, { root: true })
第三个参数传 { root: true }
  1. webpack 如何设置打包出多个 chunk 文件?
// https://zhuanlan.zhihu.com/p/26710831
这个问题有点类似 webpack 中如何处理 code splitting
code splitting 有俩点
1. 分离业务代码和第三方库( vendor )
2. 按需加载(利用 import() 语法)

那么针对第 1 点来说,有以下方法
1. 在 entry 中增加一个入口 
{ entry: { app: './src/main.js', vendor: ['vue', 'axios'] }}
这样就会把 vue, axios 的第三方库独立打包出一个 vendor
但是这样实际上 entry chunk 中还是有 vue, 和 axios,所以还要配合
CommonsChunkPlugin 插件使用,
这个插件会把依赖 2 次及以上的模块移到 vendor 这个 chunk 里面。

一面

  1. vue 多环境如何配置?
webpack 配置项中有一个 mode 选项,可配置的有 production development 两个选项
然后通过 process.env.NODE_ENV 判断引入哪一块的配置文件
一般会配合 webpack.DefinePlugin 使用
  1. 数据绑定原理?
吧啦吧啦,Object.defineProperty 和 重写数组变异方法
  1. vue 数据绑定设计模式?
发布-订阅模式