• 顺丰科技前端面经


    一面:

    缩略图实现原理

    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()

  • 相关阅读:
    刷新
    自定义背景色
    会议通js
    Flex Layout Attribute
    spin.js
    jq size()与length的区别
    初识node.js
    [Swift]归并排序 | Merge sort
    [Swift]桶排序 | Bucket sort
    [Swift]计数排序 | Counting sort
  • 原文地址:https://www.cnblogs.com/smalldy/p/12864642.html
Copyright © 2020-2023  润新知