面试记录1

165 阅读3分钟

2020.06.03  bawu

sessionStorage,localStorage,cookies区别? 他们和服务端交互有什么区别? 

都是浏览器用来存储数据的,存储的都是字符串类型的键值对

cookies 存储大小每个不超过4K, 会随http请求发送给服务端,可以设置过期时间,后端也可以通过http请求Set-Cookie设置客户端的cookies,一般用来存储一些认证信息

sessionStorage:临时存储,存储大小有5M,刷新页面数据依旧存在,数据会在当前浏览器页面关闭后删除,不会发送数据到服务端

localStorage:永久存储,存储大小有5M,数据保存在硬盘里,浏览器被关闭了,该数据仍然存在,除非手动删除,不会发送数据到服务端

同一浏览器的相同域名和端口的不同页面间可以共享相同的 localStorage,但是不同页面间无法共享sessionStorage的信息

同源策略?怎么解决跨域?CORS有什么安全性问题?

同源策略是浏览器的安全机制,浏览器对非同源请求返回的结果做了拦截,如果两个 URL 的 protocolport (如果有指定的话)和 host 都相同的话,则这两个 URL 是同源

解决跨域的方法:script,jsonp,iframe,postMessage,CORS,  nginx反代理
CORS的Access-Control-Allow-Origin不要设置为通配符“*”,尽量设置为具体的域名地址,还有就是CORS虽然默认不传Cookie,但Access-Control-Allow-Credentials设为true就能允许,这样也可能会有CSRF攻击的风险

更多了解:www.cnblogs.com/qiao-blog/a…

Vue和React有什么差别?

JSON和XML有什么区别? 

XML 指可扩展标记语言,被设计用来传输和存储数据, 它是以纯文本格式进行存储

[13,3,4,5,1,23,4,5,0,3] 数在左侧,偶数在右侧时间复杂度O(n),空间O(1),不要用递归,  什么是时间复杂度?什么是空间复杂度? 

const arr = [13,3,4,5,1,23,4,5,0,3]
let result = []
let countOdd = 0
let countEven = arr.length-1
for(var i = 0; i <= arr.length-1; i++) {
  if(arr[i] % 2) {
    //奇数
    result[countOdd] = arr[i]
    countOdd++;
  } else {
    // 偶数
    result[countEven] = arr[i]
    countEven--;
  }
}
console.log(result)

我的SB方法,空间复杂度不符合要求

function fun(arr) {
  const result = [];
  for(let i = 0; i < arr.length; i++) {
    if(arr[i] % 2 === 0) {
      result.push(arr[i])
    } else {
      result.unshift(arr[i])
    }
  }
  return result;
}

网上查到的方法:

双指针法:

function fun(arr) {
  let i = 0, j = arr.length - 1;
  while(i < j) {
    while(arr[i] % 2 === 1) i++;
    while(arr[j] % 2 === 0) j--;
    if(i < j){
      const temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
      i++;
      j--;
    }
  }
  return arr;
}

巧用sort()

var arrA = [6,2,4,3,5,1];
arrA.sort( function(x, y) {
if (x % 2 == 0) return 1;
if (x % 2 != 0) return -1;
});
document.writeln(arrA)

拓展:

/**
 *  一个数组,一半奇数,一半是偶数,要将数组按照偶奇偶奇的顺序排序
 *  思路,找出下标是偶数但值是奇数的,和下标是奇数但值是偶数的,两个互换,直到结束
 */

const arr = [1,2,1,2,1,2];
function fun(arr) {
  let i = 0, j = 1;
  while(i < arr.length && j < arr.length) {
    if(arr[i] % 2 === 0) {
       i+=2;
    } else if(arr[j] % 2 === 1) {
       j+=2;
    } else {
      const temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
    }
  }
  return arr;
}
console.log(fun(arr));

什么是闭包?如何解决内存泄漏问题? 

用过Angular吗? 介绍一下人才管理系统,你扮演什么角色? 

为什么想换工作?之前面过吗?现在还在职吗?对新工作有什么要求吗?