美文网首页
2020 秋季前端面试题合集

2020 秋季前端面试题合集

作者: awesome_lewis | 来源:发表于2020-10-25 00:02 被阅读0次
    1. CSS 居中完全指南
    2. 数组扁平化
    3. 优雅处理前端异常
    4. 前端跨域
    5. 前端缓存
    6. web 安全之 XSS
    7. web 安全之 CSRF
    8. CommonJS 与 ESM
    9. Virtual Dom && Diff原理,极简版
    10. 如何合理地设计State
    11. 深入 JS 系列
    12. 前端综合考察清单
    // 评测题目: 无
    Array.prototype.func1 = () => console.log(1)
    Array.func2 = () => console.log(2)
    
    const a = new Array();
    a.func1(); // 1
    a.func2(); // undefined
    
    const b = new Array();
    
    this.ref = a
    this.ref = b
    
    class Array {
      
      constructor() {
        this.func1 = this.func1.bind(this);
        this.func4 = this.func1.bind(this);
        
        // this.func1 === this.func4
      }
    
      func1() {
        // this1 === a // true 
      }
      
      static func2() {
        // this2 === a // false // this2 = Array
      }
      
      func3 = () => {
        // this3 === a // 
      }
      
      
      func5() {
        // this5
      }
      
    
      render() {
        return <div onClick={this.func5} />
      }
    }
    
    all([promise1, promise2, ... ]).then((res) => { const [res1, res2] = res; }).catch(e => { ... })
    
    function all(promises) {
      return new Promise((resolve, reject) => {
        const res = [];
        promises.forEach(promise => {
          // res.push(promise.then(resolve => resolve()))
          promise.then(data => {
            res.push(data)
            if (res.length === promises.length) {
              resolve(res);
            }
          }).catch(reject);
        })
      })
      
    }
    
    1. 给你两个有序整数数组 nums1 和 nums2,请你合并num1和nums2,返回一个有序数组。
      说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。不能使用sort
    var nums1 = [1,2,3,7], m = 3;
    var nums2 = [2,5,6], n = 3;
    输出: [1,2,2,3,5,6]
    
    /**
     * @param {number[]} nums1
     * @param {number} m
     * @param {number[]} nums2
     * @param {number} n
     * @return {void} Do not return anything, modify nums1 in-place instead.
     */
    var merge = function(nums1, m, nums2, n) {
    
    };
    
    1. 使用闭包实现一个counter函数,全局下每次调用返回值 +1
    console.log(counter()); // 1
    console.log(counter()); // 2
    console.log(counter()); // 3
    
    const counter = (() => {
        let a = 0
        return () => ++a
    })()
    
    1. 冒泡排序、二分查找
    2. 实现Promise.all

    快手工程效能部

    一面:

    1. 聊项目,聊如何技术选型,如何架构

    2. react 纯函数组件和 class 组件什么区别,组内如何制定使用哪种方式开发
      期间提到了 react hooks

    3. react hooks 利弊、原理

    4. 使用 react hooks 多 state 如何处理?处理方案:拆分有关联的 state 到自定义 hooks 中

    5. 虚拟 dom 树原理

    6. react 的负作用,讲一下什么情况下使用 setState 这一套 react 的流程会有负作用,如何解决。
      一开始我反复问负作用啥意思,没太理解他的问题,后来我回答的主要是动画相关的,很多动画需要使用requestAnimation 直接操作 dom,如果使用 state 渲染,性能反而更低,因为会触发子组件重新渲染。而且经过虚拟 dom 再渲染动画会卡顿。

    7. 看到简历说近期主要工作是性能优化,说一下前端性能优化的点

    8. 如何统计前端性能,都有哪些时间点可以统计
      白屏时间、用户可以操作的时间、资源加载完的时间、TCP 时间、请求时间等等

    9. EventLoop 的各种题(10道左右)、宏任务、微任务
      各种 setTimeout、while、Promise 判断输出时间啥的
      其中一道题:什么时间输出 end(答案是不会输出,都被 while 阻塞了)

    setTimeout(function(){ 
       t = false; 
    }, 1000);  
    
    while(t){ }  
    console.log('end')
    
    1. script 标签相关问题
      被我反问了,我说你是要问 defer async 啥的么,我就开始巴拉巴拉说了一下,他说这题太简单了换一个。
    2. 如果页面中有一个 script 脚本阻塞住了,会影响渲染么
      我一开始说如果是放在 body 标签最下面就不会
      面试官给了个例子, 下面 abc 是否会渲染
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
     <div>abc</div>
        <script>
            while(true){}
        </script>
    </body>
    </html>
    

    无法渲染,被阻塞了,引申问了问啥会阻塞。

    1. 接着上面的问题 onLoad 与 domContentLoaded 区别,domContentLoaded在 react 中和 componentdidmount 谁先执行
    2. 装饰器、HOC 原理、实际应用
      写一个保存页面滚动条位置的 HOC,要求再回到这个页面的时候可以回到滚动位置
    3. web 中软键盘的兼容性问题

    二面:

    1. 简单聊了一下项目,redux、ssr
    2. ssr 中初始化数据是怎样的流程
    3. redux 保存的数据用户刷新就消失了,怎么处理,比如用户登录信息存在哪里
    4. 用户登录如何做鉴权、cookie/session/token
    5. virtual dom 原理,如何渲染到页面的
    6. virtual dom 真的比直接操作 dom 快么?为什么?什么情况下virtual dom不如直接操作 dom
    7. 既然 virtual dom 渲染不都是更好的方案,首屏是否会因此变慢?如何优化?
    8. diff 算法了解多少,如何做对比如何做节点替换
    9. Node 堆、栈、v8、libuv
    10. js 解释器、编译器
    11. Node 流如何处理
    12. CommonJs 和 ES6 Module 什么区别,如何编译运行的
    13. CommonJs 中两个文件都引用同一个文件,这个文件会执行两次么,为什么。
    14. 红黑树了解么
    15. websocket封装成promise调用
    ws.send({id:xx, value:xx})
    ws.on(‘message’, (response) => {
        console.log(response.id, response.value)
    })
    

    封装一个MyWs类,使其能够这样使用:

    let myWs = new MyWs(ws)
    myWs.send(data).then((response) => {
      console.log(response.id, response.value)
    })
    
    myWs.send({'phone': 111 }).then((response) => {
      console.log('手机号为111的姓名是', reponse.name)
    })
    
    myWs.send({'phone': 222}).then((response) => {
      console.log('手机号为222的姓名是', reponse.name)
    })
    
    1. 手写二叉树、二叉树广度优先遍历
    2. 二叉树一开始写成链表了,就着链表问了点问题
    3. 原型链prototype__proto__什么区别

    三面:

    1. 自我介绍

    2. 知识广度:问了 node;linux;shell 脚本;nginx;java;redis mongodb 等等问的都比较浅

    3. 世面上有很多组件库,为什么很多团队还要自己开发组件库

    4. 自己开发组件库如何维护,这个问的比较多,组件库实现细节,维护细节,如果后续没有精力维护了该怎么办。

    5. 问了三道算法题,都比较简单

      • 第一题。实现一个 fn(intArr) => outArr
      const intArr = [{ id: 'A', name: 'a1'}, {id: ''B', name: 'b1'}, {id:'A', name: 'a2'}]
      const outArr = [{ id: 'A', name: ['a1', 'a2']}, {id: ''B', name: 'b1'}]
      
      • 第二题。假设小王持有股票数组const arr = [135,43,1,24,5, ..., 777]
        规定现在必须卖一次再买一次,而且卖必须在买前面操作,求最大收益的买卖下脚标
    6. 设计实现一个 markdown 编辑器,给你几分钟时间整理,说出详细步骤和注意点
      主要围绕如何实时同步 view 来问的。
      后续扩展问题 如何实现这样一个编辑即预览的markdown 编辑器 https://typora.io/img/beta.mp4
      问了很多细节,如何分词、如何同步、怎么做草稿之类的

    7. 开始聊团队管理问题,太多了具体记不太清了,举几个例子

      • 团队怎么和 pm 、后端撕逼(人家问的比较斯文)
      • 给团队中两个人分配任务,第一周检查进度说都 ok,第二周两个人说 bug 比较多不能按时提测,如何解决这种问题。
      • 接着上面的问题,如果其中一个人说自己的 bug 都清了,剩下的都是另一个人的 bug 跟他没关系,这种情况怎么做。
      • 如何分配实习生资源

    相关文章

      网友评论

          本文标题:2020 秋季前端面试题合集

          本文链接:https://www.haomeiwen.com/subject/jnkgmktx.html