面试进阶
公司目前的组织架构、项目组成、技术方向、客户群体
es6; css3; 闭包;原型链;事件委派;作用域;作用域链
面试
-
axios(请求机制)
是基于promise,用于浏览器和node.js的一个http客户端
主要用于向后台发起请求,在请求中做更多的控制
支持promise、提供一些并发的方法、提供拦截器、支持csrf(跨站请求伪造)
-
axios、fetch、ajax的区别
前两者支持promise、后面是使用的callback方式
fetch、本质上脱离xhr、、默认不传cookie、不能监听请求的进度。
-
vuex(并发上来看适不适合)
一个专门为vue构建的状态集管理(目的:解耦,集中式管理)
- 主要是解决组件间状态共享的问题,原本是组件与组件之间的交流,转变为组件与仓库之间的交流
方便调用一些共用的数据、方便日后的维护、数据流更加清晰、代码更方便管理
vuex的核心
state、存放数据
mutations、变更状态
getters、相当于computed
actions、动作-----mutations
modules、对仓库拆分,方便对数据取(state中数据越存越多,进行拆分)
弹窗为form表单,关闭再打开保持状态(使用vuex)
- computed:在vue中动态渲染的一个函数
-
v-show:给dom对象添加display:none;
v-if:将dom对象移除
v-model:表单的数据双向绑定
- 等同于 v-bind绑定了一个value的属性, 用v-on把当前的元素绑定到了一个事件上
-
路由
全局的钩子函数
beforeEach:在路由切换开始时调用
afterEach:在路由切换离开时调用
局部到单个路由
beforeEnter
组件的钩子函数
beforeRouterEnter
beforeRouterUpdate
beforeRouterLeave
-
关于vue
vue是由饿了么团队开发并维护的一个渐进式js框架
使用了mvvm框架,数据驱动、双向绑定、组件
- vue生命周期
-
vue组件封装
目的:复用性高,便于解耦
1.采用ES6的
import ... from ...
语法或CommonJS的require()
方法引入组件
2.对组件进行注册,代码如下// 注册 Vue.component('my-component', { template: '<div>A custom component!</div>' })
3.使用组件
<my-component></my-component>
- 制作组件时,组件为中data为函数形象,主要是防止组件与组件之间的变量互相影响。
-
nextTick 解决dom异步操作,解决数据异步加载、后置型,初始化数据先执行
-
路由懒加载 延迟加载、按需加载
return ()=> import(`@/components/${view}.vue`)
-
vue-loader:
加载器、把vue组件转化为javaScript模块
- 动态渲染一些数据
- 三个标签都做了相对应优化,style可以直接使用es6、style也可以默认使用sass、提供了作用域的选择
- 开发阶段,提供热加载(实时更新)
-
插槽(slot)占位的(公交车占位),使组件的复用性更高
默认插槽(匿名)
具名插槽
作用域插槽(slot-scope)只作用于当前的solt
- 借助组件来实现,封装好的组件中加一个slot标签,在使用它的组件中标签对内添加内容
- 匿名只能添加一个,具名可以添加多个(可以添加名称,name属性),顺序问题
- 提供组件复用,提高效率
-
虚拟dom以js对象形式出现
真实dom以dom树的形式出现
优化了diff算法
更适合批量的修改dom,
设置key,可以最大程度的去利用节点
- 不设置key值,没有复用,再次重新追加
- 可以进行相关复用,减少消耗,对应索引
采用了新旧dom的对比,比较节点,获取你差异的dom,一次性更新到你真实的dom上
-
mvvm
MVC模式 m(模型) v(视图) c(控制器) 反馈不及时
MVVM模式 数据双向绑定 (三层)
view视图 model 数据, view与model与viewmodel都是双向的,而model与view之间没有任何关系,通过viewmodel中间这个媒介来进行相关的交互,以至于view与model可以更专注于做自己事情。
vue是专注于vue与viewmodel的框架,对应model的处理比较弱化,不过提出一个vuex来进行补充增强
-
keep-alive(保持我活着)
让不活动的组件活着
提供了include与exclude 两个属性 ,允许组件有条件的缓存
在生命周期created的时候,把需要缓存的node节点给保持到cache,需要的时候,在render中,根据name再进行取出来
vue中路由meta,meta中可以设置一些状态(路由元信息)
-
节流和防抖都是减少触发频率
节流:固定的单位时间内就能触发一次(不执行下一个事件)
防抖:固定的时间内反复触发,触发多次,只有最后一次生效。(删除前一个事件)滚动条滚动
搜索框输入(快慢的搜索)
-
node常用的模块
path:处理文件路径模块
fs:操作文件系统
http:提供http服务器功能
url:用来解析url
querystring:解析url中的查询字符串
zlib:压缩
- 切换node版本----nvm use/install
js与jquery
-
面向过程
先干什么,后干什么,顺序的来
-
面向对象
不同异步谁先谁后(找到角色,确定职责)
-
this指向
- this总是指向函数的直接调用者
- 如果有
new
关键字,this
指向new
出来的那个对象 - 在事件中,
this
指向触发这个事件的对象 - 函数预编译过程中,指向window;全局作用域中this指向window
- 函数.bind(obj),会生成一个新函数,新函数的this,会永久的指向obj,因此,this被绑定了
-
箭头函数
不能当构造函数来使用,不能使用构造函数,没有自己的this
当箭头函数不存在,来去寻找this,父级上下文的this
不可以使用
arguments
对象,该对象在函数体内不存在。如果要用,可以用Rest
参数代替 -
垃圾回收机制
引用计数法
标记清除法
复制整理法
闭包----外面的执行函数上有计数,不会被清0;