最近答的不好的面试题记录

面试是一种对自己知识漏洞的查漏补缺。

记录一下自己面试中表现不佳的问题

1:如果在保证3个接口全部返回成功后,执行相应的函数?

我首先想到是是使用promise.allaxios库的all方法支持 另外还有async加await

let urls = [
  'https://jsonplaceholder.typicode.com/posts/1',
  'https://jsonplaceholder.typicode.com/posts/2',
  'https://jsonplaceholder.typicode.com/posts/3'
]
let axiosList = []
urls.forEach(url => {
  axiosList.push(axios.get(url))
})
axios.all(axiosList).then(function (res) {
  let p1 = (res[0].data)
  let p2 = (res[1].data)
  console.info(p1)
  console.info(p2)
})
var p1 = new Promise(function (resolve, reject) {
  setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
  setTimeout(resolve, 600, 'P2');
});
// 同时执行p1和p2,并在它们都完成后执行then:
Promise.all([p1, p2]).then(function (results) {
  console.log(results); // 获得一个Array: ['P1', 'P2']
});

2:如何在vuex中a模块使用b模块的actions ?

3:http的复杂请求和简单请求,如何避免或优化option请求?

跨域请求分为两种:简单请求和复杂请求

符合以下任一一种情况的就为复杂请求:

1.使用方法put/delete/patch/post;

2.使用json格式的数据(content-type: application/json)

3.请求中带有自定义头部

其他情况都为简单请求

option请求出现的情况有两种

1:获取后台服务器支持的HTTP的通信方式

2:对跨域请求进行preflight request (预检请求)

预检请求首先需要向另外一个域名的资源发送一个Http Options的请求头,以检查实际发送的请求是否是安全的,options请求是浏览器自发起的preflight request(预检请求)

preflight request 请求报文中有两个需要关注的header字段

(1): Access-Control-Request-Method: 告知服务器实际请求所使用的HTTP方法

(2): Access-Control-Request-Headers: 告知服务器实际请求所携带的自定义Header字段

同时服务器也会添加origin header,告知服务器实际请求的客户端的地址。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。

服务器所返回的Access-Control-Allow-Methods首部字段将所有允许的请求方法告知客户端,返回将所有Access-Control-Request-Headers首部字段将所有允许的自定义首部字段告知客户端。此外,服务器端可返回Access-Control-Max-Age首部字段,允许浏览器在指定时间内,无需再发送预检请求,直接用本次结果即可。

如要优化Option的请求,可以在服务器端设置返回的Access-Control-Max-Age 为最大值, 指定一定时间内,此接口不需要在发送Options请求

4:js为什么会有变量提升?

js的诞生是为了解决客户端人机交互的问题,是一种弱类型的语言,在如果js设计的如java那样严谨,必须要先声明在使用,就会导致客户端代码很多错误,非常影响用户体验

此外,

javascript并不是严格的自上而下执行的语言

它会将当前作用域的所有变量的声明提升到程序的顶部。

js和其他语言一样,都要经历编译和执行阶段。而js在编译阶段的时候,会搜集所有的变量声明并且提前声明变量,而其他的语句都不会改变他们的顺序,因此,在编译阶段的时候,变量已经声明,第二步就是赋值了

  1. js会将变量的声明提升到js顶部执行,因此对于这种语句:var a = 2;其实上js会将其分为var a;和a = 2;两部分,并且将var a这一步提升到顶部执行。
  2. 变量提升的本质其实是由于js引擎在编译的时候,就将所有的变量声明了,因此在执行的时候,所有的变量都已经完成声明。
  3. 当有多个同名变量声明的时候,函数声明会覆盖其他的声明。如果有多个函数声明,则是由最后的一个函数声明覆盖之前所有的声明。

5:如何在nodejs中使用多线程的?

使用 cluster模块  worker_threads模块

worker_threads模块

cluster模块

6:移动端的布局方案有哪些?

百分比

rem

媒体查询

px2rem 库

前端常见的布局方案大全

7:vue-router的底层原理是怎样的

使用Html5的pushState 与hashChange事件的监听来实现根据url匹配对应的页面资源

发布了177 篇原创文章 · 获赞 875 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/github_35631540/article/details/103729756
今日推荐