摸底测试

223 阅读2分钟

摸底测试

1. 什么是闭包,必包的好处,缺点分别是什么?

a. 闭包就是将函数内定义的变量 通过 return 返回一个函数交给外部来使用
b. 好处:
c. 容易造成内存泄漏

2. 给一个不定宽高垂直水平居中你有哪些方式 (不需要写出具体代码)

a. margin:auto
b. display:flex;just-content:center;align-item:center;
c. top:50%;left:50%; transfrom:-50% -50%;

3. post 和 get 的区别?

a. post 传输的内容是加密的,get 实在 url 上传输明文,post 更加安全
b. get 传输内容有大小限制 1024 字节,post 没有限制,有的话那就是浏览器限制了
c. 访问网页,请求静态文件一般都是 get,调用接口一般都是 post

4. 描述下浏览器从输入网址到渲染页面的整个过程 (简述或者语音发给面试官)

a. 首先输入 url 按下回车之后,浏览器会拿着 utl 去 DNS 服务器寻找它的 ip,如果没有就去上一层 DNS 服务器去找,最后去根 DNS 寻找,找到后会返回 ip,否则查找失败
b. 浏览器拿着 ip 去请求服务器对应的资源
c. ip 服务器接收到客户端的 syn 数据包后会进行一个确认连接,会发一个 syn + ack 给客户端,客户端接受到 syn+ack 后会再发给 ip 服务器一个确认包,到此完成 3 次握手
d. 然后 ip 服务器把客户端请求的资源返回,客户端拿到资源后进行渲染,首先把 css 和 html 文件编译成 cssOM 和 DOM 树,当有 js 加载的时候暂停渲染处理 js,进行重绘和回流,完成之后展现给用户

5. 实现寄生组合继承

function Person(name, age) {
  this._name = name;
  this._age = age;
}
Person.prototype.getName = function () {
  return this._name;
};
const son = new Person('link', 22);
son.__proto__.getAge = function () {
  return this._age;
};
console.log('====================================');
console.log(son.getName());
console.log(son.getAge());
console.log('====================================');

6. [3,24,63,9,8] 对这个数组进行排序,使用冒泡排序

var arr = [3, 24, 63, 9, 8];
const length = arr.length;
console.log(arr);
for (let i = 0; i < length; i++) {
  for (let j = i + 1; j < length; j++) {
    const temp = arr[i];
    if (arr[i] > arr[j]) {
      arr[i] = arr[j];
      arr[j] = temp;
    }
  }
}
console.log(arr);

7. 两数之和 --》leetcode-cn.com/problems/tw…

var twoSum = function (nums, target) {
  const length = nums.length;
  for (let i = 0; i < nums.length; i++) {
    for (let j = i + 1; j < nums.length; j++) {
      if (nums[i] + nums[j] === target) {
        return [i, j];
      }
    }
  }
};

8. 四数之和 --》leetcode-cn.com/problems/4s…

// 没做出来
var fourSum = function (nums, target) {
  let length = nums.length;
  var arr = [];
  var map = new Map();
  for (let i = 0; i < length; i++) {
    for (let j = i + 1; j < length; j++) {
      for (let k = j + 1; k < length; k++) {
        for (let l = k + 1; l < length; l++) {
          if (nums[i] + nums[j] + nums[k] + nums[l] == target) {
            const list = [nums[i], nums[j], nums[k], nums[l]];
            const str = list.toString();
            console.log(map.has(str));
            if (map.has(str) == false) {
              arr.push(list);
              map[str] = list;
            }
          }
        }
      }
    }
  }
  console.log(map);
  return arr;
};