面试题总结 第一期

下马问前程,温酒敬长空。


近期参加的各种面试,对相关内容进行总结,持续更新中。。。

 

1.箭头函数和普通函数的区别:

1.箭头函数 语法更为简洁、清晰

2.箭头函数会捕获其所在上下文的this,作为自己的this

3.箭头函数不能作为构造函数,不能使用new关键字(因为箭头函数没有自己的this,它的this其实是继承了外层执行环境中的this,且this指向永远不会改变,作为构造函数其的this要是指向创建的新对象)

4.箭头函数没有自己的arguments,箭头函数中访问的arguments的值实际上是外层执行环境中的值

5.call apply bind 不会影响箭头函数的this指向

6.箭头函数没有prototype原型

7.箭头函数不能作为generator函数,不能使用yield关键字

2.vue 和 react 的区别

1.监听数据变化的原理不同:

vue借由getter/setter方法,能够准确检测到对象属性的变化,关注数据的可变性

react更加强调数据的不可变性,比较引用的方式,这回导致不必要的vdom重新渲染

2.数据流向不同:

vue1.0 是可以对props进行双向绑定的,vue2提供了语法糖,不鼓励对props进行修改

react 单向数据流,子组件和dom是通过setState实现替换,而非直接修改

3.组件通信

vue 事件,回调函数,但更加倾向于事件

react 回调函数

4.模板渲染方式

vue html扩展语法渲染; 指令 的存在

react jsx模板,更加接近远胜过

5.vuex redex

vuex 更新 直接修改数据,直接注入到组件中,灵活

redux 使用旧的state来替换新的state,每个组件需要使用connect把props和dispatch进行连接

3.fetch ajax axios 的区别

1.Ajax 允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax。核心使用XMLHttpRequest对象

2.axios 一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,是promise的实现

3.fetch 采用Promise方式来处理数据。是一种简洁明了的API,比XMLHttpRequest更加简单易用

区别: axios、fetch请求后都支持Promise对象API,ajax只能用回调函数

4.websocket 和 http 的区别

相同点: 都是基于tcp协议的应用层协议

不同点:

1.websocket 双向传输,可以双向发送接收; http 是单向的

2.websocket 需要握手来建立连接,也就是会依赖http请求

5.为什么建立连接时是3次握手,而关闭时却是4次挥手呢?

建立连接时,server可以 SYN同步报文,ACK应答报文一起发送;

关闭连接时,server收到 FIN报文,不会马上关闭,只能先回复ACK应答,只有等server把所有字段发送了,才能发送FIN报文

6.http 1.0/ 1.1/ 2.0的不同

http 1.0(构建可扩展性)

http 1.1(标准化的协议)

http 2.0(为了更优异的表现)

不同: http2.0是二进制而不是文本协议;复用协议;压缩了headers;允许服务器在客户端缓存中填充数据,通过服务器推送机制来提前请求。

7.宏任务与微任务

宏任务:script、setTimeout、setInterval、requestAnimationFrame

微任务: promise.nextTick MutationObserver、promise.then || catch || finally

8.async/await 和 promise 区别

async/await优点:串行同步的写法,容易理解,代码清晰

async/await缺点:

1.无法处理promise的reject对象,需要借助tray catch

2.await会导致代码的阻塞

3.try...catch...内部的变量无法传递给下一个try...catch...

promise的问题:

1.一旦执行,中途无法停止,链式调用无法跳出

2.错误在外部捕捉不到

3.promise内部执行无法检测

9.Get 和 Post 的区别

1.GET 更加快速灵活,参数写在url后面,请求数据长度有限制,主要对数据进行查询

2.POST 更加安全,参数写在messageBody中,请求长度没有限制,主要对数据进行增删改

POST的场景:大量数据;用户敏感数据;无缓存的数据

10.defer 和 async 区别

优化的一种方式就是 非关键脚本的异步加载

1.defer 异步加载,延迟执行,domLoaded;如果脚本之间存在依赖 需要规定顺序时就可以使用 defer 延迟调用

2.async 异步加载立即执行,不能保证脚本的执行顺序

 

你可能感兴趣的:(javascript,vue.js,es6)