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

shopee

一面

  1. 自我介绍

  2. 队列和栈的区别

  3. 排序算法以及各自的复杂度

  4. 快排什么时候复杂度最差

  5. 五层网络模型

  6. 应用层有哪些协议,哪些是 TCP,哪些是 UDP

  7. TCP 三次握手和四次挥手

  8. TCP UDP 的区别

  9. HTTP 请求有哪些缓存相关的 header 字段

  10. cache-control 和 expires 的优先级,为什么

    cache-control 是 http1.1 的,expires 是 http1.0 的

  11. Etag 和 Last-Modified 的区别

  12. Etag 返回什么状态码

  13. 3 开头的还有什么状态码,4 开头的呢,5 开头的呢,504 表示什么(网关超时)

  14. 事务的四个特性

    原子性、一致性、隔离性、持久性

  15. 进程与线程的区别

    1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
    2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
    而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
    3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
    4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
  16. nodejs 是单线程还是多线程的,Java 呢,C++呢

  17. nodejs 单线程的好处是什么

    (1)多线程占用内存高
    (2)多线程间切换使得CPU开销大
    (3)多线程由内存同步开销
    (4)编写单线程程序简单
    (5)线程安全
  18. 水平垂直居中怎么实现

  19. 箭头函数与普通函数的区别

  20. 箭头函数能实现 ES6 的类吗

  21. 判断数组的方式,instanceof 方法有什么弊端

  22. v-if 和 v-show 的区别

  23. display 和 visibility:hidden 的区别

  24. Vue 双向数据绑定原理

  25. Vue 怎么监听数组的变化

    Vue 通过重写数组的某些方法(7 种)来监听数组变化,而不是触发数组的 setter 方法

  26. Vue3 里通过什么方式监听数据

  27. Vue key 的作用

  28. 列表里调整顺序,虚拟 DOM 是怎么发生变化的

  29. 看代码输出

    Promise.resolve()
      .then(() => {
        console.log('1');
        throw 'Error';
      })
      .then(() => {
        console.log('2');
      })
      .catch(() => {
        console.log('3');
        throw 'Error';
      })
      .then(() => {
        console.log('4');
      })
      .catch(() => {
        console.log('5');
      })
      .then(() => {
        console.log('6');
      });
    // 1 3 5 6
    console.log('1');
    setTimeout(() => {
      console.log('2');
    }, 0);
    Promise.resolve()
      .then(() => {
        console.log('3');
      })
      .then(() => {
        console.log('4');
      });
    console.log('5');
    
    // 1 5 3 4 2
  30. 代码讲思路

    给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目, 以数组形式返回答案。
    换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
    
    示例 1:
    输入:nums = [8,1,2,4,3]
    输出:[4,0,1,3,2]
    解释:
    对于 nums[0]=8 存在四个比它小的数字:(1,2,4 和 3)。
    对于 nums[1]=1 不存在比它小的数字。
    对于 nums[2]=2 存在一个比它小的数字:(1)。
    对于 nums[3]=4 存在三个比它小的数字:(1,2 和 3)。
    对于 nums[4]=3 存在两个比它小的数字:(1,2)。
    
    示例 2:
    输入:nums = [6,5,4,8]
    输出:[2,1,0,3]

    思路:暴力循环,两层循环,时间复杂度 O(N^2) 如何优化:先用 map 将 nums 的元素与索引保存下来,然后对 index 排序,排完只要一层遍历即可,时间复杂度 O(NlogN)

    function solution(nums) {
      let map = {};
      nums.forEach((item, index) => {
        map[item] = index;
      });
      nums.sort((a, b) => a - b);
      let res = [];
      for (let i = 0; i < nums.length; i++) {
        let n = nums[i];
        res[map[n]] = i;
      }
      return res;
    }
  31. 反问

    部门业务,前端规模

二面

二面吧,体验感超级棒,一方面吧,面试官面了一天了,确实累,也就问了一个问题就没再问,另一方面吧,没问问题之后我俩就开始闲聊了,轻松愉快。 面试官也是很有意思的人,从他说话就能感觉他是一个很好相处的人

  1. 自我介绍

  2. 项目简介

  3. vue 双向数据绑定原理

  4. getter 的作用,在 getter 里面做什么

  5. nodejs 是单线程还是多线程

  6. 单线程的优势

  7. 反问

    • 不用写代码嘛?答:你要是写我可以给你来几道。我:不了不了
    • 那我问点能闲聊的吧,你在 shopee 呆了多久了。答:3 年多了,前 20 名员工。我:元老级员工
    • 都说现在前端的技术发展非常快,你有什么可以推荐我去了解学习一下的吗?答:这你可就问对人了,然后给我讲了 20min,很有深度值得思考

HR 面

  1. 为什么实习没有转正
  2. 找工作的关注点
  3. offer 做选择时候的会有一个优先级排序,说一说这个优先级
  4. 喜欢什么样的工作氛围
  5. 哪里人,独生子吗?
  6. 家里人对你未来找工作有什么样的意见
  7. 有拿到其他公司的 offer 吗
  8. 期望薪资
  9. 本科的专业排名,硕士的专业排名
  10. 两周内有结果,不论通过与否都会有消息

本文作者:前端小毛

本文链接:

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