强缓存:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />(适合http2)
<meta http-equiv="Expires" content="0" />(适合http1)
协商缓存:每次请求都会与服务器交互,第一次是拿数据和标识的过程,第二次浏览器就会询问服务器资源是否有更新的过程,如果返回的是304就是取的缓存
2.http1和http2的区别
http2:采用二进制格式而非文本格式,比http1更加的安全。http2压缩了报头,减少来回的延迟,
3.new的原理
1.创建一个新的对象,
2.把对象的原型链指向构造函数
4订阅模式和发布模式
发布模式(observer)要求希望接收到主题统治者的观察者必须订阅内容改变的事件
订阅模式使用了一个时间通道,这个通道节约订阅者和发布者之间,避免订阅者和发布者禅城依赖
数据劫持:object.definepropty();vue的双向绑定就是通过数据劫持+订阅发布模式实现的
addEventListener:添加监听事件
监听同一个按钮:他的顺序是按照排版实现的
深拷贝和浅拷贝的区别和用法
基本的数据类型:number,string,boolean,null,undefined
引用数据类型:object
深拷贝:拷贝对象各个层级的属性(json转换,es6的进程extends,递归复制,);
.extend( [deep ], target, object1 [, objectN ] ):deep=true 为深拷贝,false为浅拷贝
浅拷贝:只拷贝对象的第一层属性(object.assion(),es6的扩展语法(param,...))
jsonp的原理:动态生成js脚本,只支持get请求,支持跨域
css:面试
rem和em的区别,rem怎么计算的:
是基于html元素的字体大小来决定, 根元素大小*你的rem 根元素为16px, 10rem等同于10*16=160px
而em则根据使用它的元素的大小决定 父级元素字体大小*你的em 父级元素16px,10rem 等同于10*16=160px
何时使用rem和em
根据浏览器的字体大小设置缩放使用rem
媒体查询使用rem
已经确定字体大小可以使用em
不要在多列布局中使用 em 或 rem -改用 %。
es6:面试
promise优缺点:
优点:promise对象,可以将 异步操作 以 同步操作的流程 表达出来,避免层层嵌套
缺点:promise对象是一个构造函数
1.无法中途取消promise,
2.如果不设置回调函数,promise内部抛出的错误,不会反应到外部
3.处于进行中状态时。无法得知目前进展到那个阶段
vue:面试
vue的双向绑定原理:通过数据截取和订阅发布模式完成的,通过object.definepropty()里面的set和get来进行数据劫持,通过dep进行订阅,通过observer进行发布
vue3:用的是最新的Proxy来进行数据劫持,是es6语法,不支持ie
vue的按需加载:
1:动态加载路由:
{
path: '/promisedemo',
name: 'PromiseDemo',
component: resolve => require(['../components/PromiseDemo'], resolve)
}
2:es6的import :const ImportFuncDemo1 = () => import('../components/ImportFuncDemo1')
3:使用webpack的,也可以实现按需加载:
{ path: '/promisedemo', name: 'PromiseDemo', component: resolve => require.ensure([], () => resolve(require('../components/PromiseDemo')), 'demo') },复制代码
vue组件的按需加载
通过require来进行加载
Vue.component('async-webpack-example', function (resolve) { // 这个特殊的 `require` 语法将会告诉 webpack // 自动将你的构建代码切割成多个包,这些包 // 会通过 Ajax 请求加载 require(['./my-async-component'], resolve) })
es6的import
Vue.component( 'async-webpack-example', // 这个 `import` 函数会返回一个 `Promise` 对象。 () => import('./my-async-component') )
vue的深度监听:deep;浅监听就只监听值类型,深度监听需要加deep;深度监听监听的是引用类型,监听地址
混合开发的 JSBridge返回的是string和object格式,他是前端和原生之间连接的桥