首页 > shopee 前端一面
头像
木子凡凡
编辑于 2020-09-11 20:24
+ 关注

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:none和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. 反问

    部门业务,前端规模

更多模拟面试

全部评论

(7) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐