Shopee前端二面面经

问的东西不多,先问了下项目,然后居然问了体系结构,问了我内存的读取相关的,我就说不记得了
之后问了httponly和协商缓存,怎么学习前端的,其他的就记不清了,
最后让我在本地写了个程序(用的是zoom视频会议,分享屏幕),面试官觉得性能太慢,改了两次后面也没写出来

程序很简单,就是对有序数组去重,但是要求在原数组上操作,于是一些骚操作(比如用set)就用不了了,甚至新建数组也不行

一开始,我忘了是有序数组,就用map记录数组的每一项,如果重复就用splice一个个删除,然后面试官说这个方法太慢了,如果有1万个0,运行会很慢

我才想起来是有序数组,然后就想找重复的相同元素一次删除,比如连续的1,除了第一个之外后面几个一次删除,然后面试官评价还是很慢,如果数组是[1,1,2,2,3,3,4,4...]这种,还是每次删除一个数组

于是我才想到那就干脆最后一次删除,刚开始把数组前面相同元素都替换成不相同的就好了,然后再截尾。然而写的完之后发现结果有点问题,然后时间原因就没有继续了,后面我自己看了下,发现找到非重复项,交换顺序后忘了写break结束循环,结果导致每次都是和一个数交换顺序。

感觉后面的算法面试挺好的,我写的程序性能不够也会提醒,感觉和其他面试相比可以有一点成长

这里贴一下我昨天下午面试完之后改的代码,i记录的是数组重复项,j用来查找数组中没有重复的项,语言当然是js

(前面两行是我试下速度,拿了10万个0看看,因为面试官说我前面的太慢,算个10万个0得很久,实测下来现在1s不到就结束了,hhh)
// arr = Array.from({ length: 100000 });
// arr.fill(0);
arr = [1, 1, 1, 2, 2, 3, 3, 3, 3,3]

reduce = (arr) => {
  let map = new Map();
  let i = 0;    
  for (let j=0; j < arr.length; j++) {
      if (!map.has(arr[j])) {
        i != j && ([arr[i], arr[j]] = [arr[j], arr[i]]);
        map.set(arr[i++], true);
      }    
  }
  arr.splice(i, arr.length - i)
};

reduce(arr);

console.log(arr);




#shopee前端面经##Shopee##前端##面经#
全部评论
LeetCode26
3 回复 分享
发布于 2020-05-11 14:24
快慢指针
1 回复 分享
发布于 2020-04-21 15:59
我跟你是一个面试官,我是直接用你最后说的那方法,不过全程他都没怎么提示我,我就在那里写了十几分钟,他也等了我十几分钟...
点赞 回复 分享
发布于 2020-04-11 19:31
其他问题都好像跟你一样,我看其他人好像跟我们不是同一个面试官
点赞 回复 分享
发布于 2020-04-11 19:31
让我估计下计算机读取1kb数据要多长时间,我说我不会😂
点赞 回复 分享
发布于 2020-04-11 19:33
10 号下午面试的吗?
点赞 回复 分享
发布于 2020-04-11 20:40
是不是一个帅气的留着寸头的面试官昂
点赞 回复 分享
发布于 2020-04-11 22:50
请问楼主,一面之后多久收到二面通知的?
点赞 回复 分享
发布于 2020-04-18 23:07

相关推荐

5 21 评论
分享
牛客网
牛客企业服务