面试题记录 持续更新中.....

1.浏览器的缓存 答:缓存分为强缓存和协商缓存,并且强缓存优先于协商缓存。

 强缓存:

<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:添加监听事件

element.addEventListener(event,function,useCapture) 第一个函数标识触发,第二个是函数,第三个设置是否冒泡或者捕获 ,true:捕获 false:冒泡 默认false

监听同一个按钮:他的顺序是按照排版实现的


深拷贝和浅拷贝的区别和用法

基本的数据类型: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怎么计算的:

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的require.ensure,也可以实现按需加载:

{
 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格式,他是前端和原生之间连接的桥



转载于:https://juejin.im/post/5d0991245188256de15dae6f

猜你喜欢

转载自blog.csdn.net/weixin_33853794/article/details/93177219