顺丰科技前端面经

一面:

缩略图实现原理

ES6中的super做了什么

  • super类似于ES5语法中的call继承

ES6中class的静态属性和静态方法

  • 不会被实例继承

  • 只能直接通过类来调用

  • 可以被子类继承

  • 可以从super对象上调用

bind的具体原理

二面:

get和post区别

  • 在规范的应用场景上说,Get 多用于无副作用,幂等的场景,例如搜索关键字。Post 多用于副作用,不幂等的场景,例如注册。

  • 在技术上说:

    • Get 请求能缓存,Post 不能

    • Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里(当然你想写到 body 里也是可以的),且会被浏览器保存历史纪录。Post 不会,但是在抓包的情况下都是一样的。

    • URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的

    • Post 支持更多的编码类型且不对数据类型限制

插入排序几重循环

function insertion(array) {
 checkArray(array);
 for (let i = 1; i < array.length; i++) {
   for (let j = i - 1; j >= 0 && array[j] > array[j + 1]; j--)
     swap(array, j, j + 1);
}
 return array;
}

csrf攻击应对方案

  • SameSite

  • 验证Referer

  • Token

封装子组件

内存泄漏

1、意外的全局变量

js对未声明变量会在全局最高对象上创建它的引用,(是以属性存在的,而不是变量),如果在浏览器上就是window对象,如果在node环境下就是global;如果未声明的变量缓存大量的数据,它可能只有在页面被刷新或者被关闭的时候才会释放内存,这样就造成了内存意外泄漏。

2、console.log

作为前端平时使用console.log在控制台打出相对应的信息可以说是非常常见。但如果没有去掉console.log可能会存在内存泄漏。因为在代码运行之后需要在开发工具能查看对象信息,所以传递给console.log的对象是不能被垃圾回收。

3、闭包

首先闭包是一个函数A返回一个内联的函数B,即使A函数执行完,函数B也可以访问函数A里面的变量,这就是一个简单的闭包。本质上闭包是将函数内部和外部连接起来的一座桥梁。

4、DOM泄漏

浏览器中DOM和js采用的是不一样的引擎,DOM采用的是渲染引擎,而js采用的是v8引擎,所以在用js操作DOM时会比较耗费性能,因为他们需要桥来链接他们。为了减少DOM的操作,我们一般将常用的DOM采用变量引用的方式会将其缓存在当前环境。如果在进行一些删除、更新操作之后,可能会忘记释放已经缓存的DOM

5、被遗忘的timers

js中常用的定时器setInterval()、setTimeout(),他们都是规定延迟一定的时间执行某个代码,而其中setInterval()和链式setTimeout()在使用完之后如果没有手动关闭,会一直存在执行占用内存,所以在不用的时候我们可以通过clearInterval()、clearTimeout() 来关闭其对应的定时器,释放内存。熟悉的朋友都知道这类定时器是有误差的,所以游览器给出了专门的API-requestAnimationFrame()

原文地址:https://www.cnblogs.com/smalldy/p/12864642.html