2022-09-18大厂面经00
请注意,本文编写于 75 天前,最后修改于 75 天前,其中某些信息可能已经过时。

上海腾讯 PCG 腾讯视频

一面

  1. 自我介绍

  2. 项目

  3. Vue 组件通信

  4. Vue nextTick 的作用

  5. 讲讲 js 的技术

  6. prototype constructor

  7. 宏任务和微任务

  8. css 清除浮动

  9. css 水平垂直居中

  10. 手撕代码:二分查找和快排

    // 二分查找
    function binarySearch(arr, target) {
      if (arr.length < 1) return false;
      let mid = arr.length >> 1;
      if (arr[mid] === target) {
        return true;
      } else if (arr[mid] < target) {
        return binarySearch(arr.slice(mid + 1), target);
      } else {
        return binarySearch(arr.slice(0, mid), target);
      }
    }
    // 快排
    function quickSort(arr, l = 0, r = arr.length - 1) {
      if (l >= r) return;
      let baseId = l;
      let baseVal = arr[baseId];
      let [i, j] = [l, r];
      while (i < j) {
        while (j > i && arr[j] >= baseVal) {
          j--;
        }
        while (i < j && arr[i] <= baseVal) {
          i++;
        }
        [arr[i], arr[j]] = [arr[j], arr[i]];
      }
      [arr[baseId], arr[i]] = [arr[i], arr[baseId]];
      quickSort(arr, 0, i - 1);
      quickSort(arr, i + 1, r);
      return arr;
    }
    console.log(quickSort([3, 1, 5, 2, 6, 4]));
  11. 反问

    • 部门:CSIG 企业产品部
    • 前端规模 30-40 人
    • 技术栈:Vue

二面

  1. 自我介绍

  2. 聊项目

  3. Vue 双向数据绑定原理

  4. 怎么监听数组呢 数组的 push 方法可以监听到,为什么通过下标的方法修改无法监听呢

    vue 对数组的 7 个方法(push、pop、shift、unshift、splice、sort、reverse)实现了响应式 其实是可以监听到数组的变化的,根据尤大大的回答是性能代价和获得的用户体验收益不成正比,参考文章 vue 为什么不能检测数组的变化

  5. XSS 防御 对用户输入校验的时候需要对什么进行编码 那将< >转码成什么呢

    & 编码成 &amp;
    < 编码成 &lt;
    > 编码成 &gt;
    " 编码成 &quot;
    ' 编码成 &#39
  6. CSRF 防御措施 token 是客户端还是服务端产生的 怎么传给客户端呢

  7. 手撕代码 冒泡排序 异步加载图片 在数组的 push 方法执行前打印 123,怎么实现

    // 冒泡排序
    function bubbleSort(arr) {
        for (let i = arr.length - 1; i >= 0; i--) {
            for (let j = 0; j < i; j++) {
                if(arr[j] > arr[j+1]) {
                    [arr[j], arr[j+1]] = [arr[j+1], arr[j]];
                }
            }
        }
        return arr;
    }
    console.log(bubbleSort([3,6,2,5,1,4]));
    
    // 异步加载图片
    function loadImage(url) {
        return new Promise((resolve, reject) => {
            const image = new Image();
            image.src = url;
            image.onload = function () {
                document.body.appendChild(image);
                resolve('ok');
            }
        })
    }
    let p = Promise.resolve();
    const imgs = [url1, url2, url3, ..., urln];
    for (let url of imgs) {
        p.then(() => loadImage(url))
    }
    
    // 一直没理解意思,反正下面的代码能实现,但面试官的意思是要是我换成shift splice的话你还需要重新写
    let flag = true;
    Array.prototype.push = function (...args) {
        if (flag) {
            flag = !flag;
            console.log(123);
            return this.push(...args);
        }
    }
    
    let arr = [1,2,3];
    arr.push(4,5)
    console.log(arr);
  8. 反问

    • 业务 主要是做企点(营销 QQ 企业 QQ) qidian.qq.com

三面

  1. 项目介绍

  2. webpack 优化方法

  3. 不同页面之间如何通信

  4. cookie localStorage SessionStorage 的区别

  5. TCP 三次握手,SYN 同步序列是怎么产生的,能设置相同的吗

  6. HTTPS 建立连接的过程

  7. vue 双向数据绑定

  8. iframe 除了不利于 SEO,还有什么缺点

  9. CSRF 的原理以及防御机制

  10. 对第一份工作地点的看法以及你现在手头已经拿了哪些家的意向书

  11. 反问

    • 部门业务情况: 属于腾讯云旗下,主要是一些 toB 的业务,比如内部系统,服务于营销 客服这类人
    • toC 的业务情况

本文作者:前端小毛

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!