Shopee 新加坡 前端 2022 春招 笔面经
菜鸡在 nowcoder 找了不少资料,复习也因此比较有针对性,是时候回馈社会了哈哈哈。
找的是校招的全职岗位。第一次发帖,就当写个流水账记录一下好了。
在线笔试 -- 2022.3.11
6道单选题,都是与js相关的题目1. 考引用
var o = {a: 1, b: 2};
var s = o;
s.a = 23;
del s.b;
console.log(o.a, o.b);
问输出是什么
2. 字符串和数组的区别
var str = 'lorem ipsum';
str[1] = h;
console(str[1]);
问输出是什么
3. 问:SessionStorage,Cookie,LocalStorage,IndexedDB中,哪个不能够跨tab访问
4. 问 箭头函数 怎么定义是正确的?给了4个选项,选const a = () => {}
5. 考了同步异步、setTimeout(xx, 0), Promise的执行顺序
function fun() {
console.log(1);
setTimeout(() => {
console.log(2);
}, 0);
new Promise(() => {console.log(3);});
console.log(4);
}
fun()
请问输出顺序是什么(这题挂了,应该选1342);
6. 考switch... case... break...,就是先跳到某个case分支,然后那个分支之后的分支都没有break,问会不会执行下去(当然会,跟java一样的)
2个编程题,比较简单
7. 给一个二叉树的根节点,要求计算所有非树叶节点的值和;(递归) 8. 给一个object,里面有scheme, host, path, params,请根据这个object里面的内容拼成一个URL;(直接写就好)
2022.3.11 当晚通知面试,预约 3.16 上午面试,祝自己 good luck。
在线面试 - 一面 -- 2022.3.16
一上来就手撕 3 道算法,一点八股都没考。 所有算法必须用 JavaScript 实现。
第1题:给一个十进制数 (假设是 n 位数),要求从数字中剔除 k 个数字,使得剔除之后形成的 n - k 个数字组成的数最小,并求这个数。
例如,有一个数字 613245,并给 k = 2,可以从中删掉 6、3,形成的数字 1245 就是所求。
分析你设计的算法的复杂度。
第2题:给定一个 object (如下所示),输入一个 from 和一个 to,要求返回从 from 到 to 是否存在路径:
{
"purse": "hand purse",
"bag": "backpack",
"backpack": "sports backpack",
"iphone": "apple watch",
"iphone": "iphone case",
"wallet": "leather wallet"
}
例如,给定 from = bag 和 to = sports backpack,应该返回的是 true,因为存在 bag - backpack - sports backpack 这条路径
给定 iphone 和 backpack,应该返回 false,因为不存在路径
第3题:题设跟上面一样,要求你在找到路径之后,还能够返回整条路径。
3道算法通过后就是反问环节了。问了贵司有没有996(回答:没有)、可否work-from-home(回答:疫情之后开始有这个option了)、上下班有无打卡制度(回答:好像有,但是没人care)、为啥一上来就算法,不考我八股文(回答:跟面试官偏好有关啦)、后续有无可能用英文面试(回答:有这个可能,但是英文不熟练也没有关系,语言不是考察的主要对象,主要交流OK、能理解面试官意思就可以了)之类的问题。
题目难度还可以。但是,因为一上来就算法,有点吃不消,脑子比较混乱😂第1题想了3分钟没想出什么方法……是经面试官点拨后才一步步实现的。面试官人很好,很有耐心,也很准时。
2022.3.16 当晚通知 3.23 下午第二轮技术面,再次祝自己 good luck。
在线面试 - 二面 -- 2022.3.23
问了面试官,二面可能是是因为一面表现不够好加面的。
面试 90分钟,使用烂的不行的 codebunk 记事本,只写了两道题:
一道是手写实现 object 的深拷贝,最初的需求是能够把普通的 object(value 只是基本类型)克隆一份,然后逐步加需求,比如如果其中有递归 object 怎么实现深拷贝,有其他类型 object 作为 value (日期等等)怎么实现深拷贝。。。
刚开始直接采用 JSON.parse(JSON.stringify(obj)) 来做。。。后面面试官要求手写一个,不要用 JSON,然后就开始了痛苦的手写实现。做到递归 object 以后,面试官看我太痛苦了,就换了下一题。
另一道是经典的 JS 异步红绿灯题目(https://www.kancloud.cn/cyyspring/more/2264755)
说是经典,其实我完全没见过这题,是面完上网查答案才知道人家是经典题目。。。上来完全不懂怎么做。怪我。
其实二面表现的很无语,都没勇气反问面试官有啥评价,感觉马上就感谢信了,谁知道约了后天面试,笑死。
在线面试 - 三面 -- 2022.3.25
三面上来就要求英文自我介绍(面试官应该是华人且会讲普通话)。讲一半顶不住了,询问面试官可不可以切换普通话,然后就开始快乐(bushi)的中文交流。
三面主要问了30分钟简历的内容,至于为什么会这么久,是因为面试官对简历上的一个(涉及nginx和反向代理的)点比较感兴趣,我直接结合从输入URL到渲染页面这个八股文给他balabala讲了快20分钟。毕竟辛辛苦苦看的八股不能浪费了。
看完简历,面试官发了链接,像二面一样打开烂的不行的 codebunk 记事本,开始代码测试。
面试官要求用熟悉的方法实现一个 toast(页面上方的暂时性提示框),先从 API 设计开始,实现要暴露的功能,然后再一步步设计类,然后再一步步用熟悉的方式实现刚设计的API。
由于 Vue 的一些 API 完全属于面向百度编程的熟练度,同时面试官不让写 JQuery 代码,因此我直接开始 document.create(''); document.remove(''); 。。。
面试官还问,你写的这个 component 怎么引入到页面的主 JS 代码文件里。我根据依稀印象写了 Vue 里面的 import (xxxx); components: {xxxxxx} 那一堆东西。
同时我有在观察面试官的表情,只见他微笑的表情逐渐凝重,眉毛上挑,感觉像是见到了一坨屎。
面试官又问怎么把 JS 引入到 HTML 页面,我直接给他来了个 <script src='xxxxxx'>。面试官问,script 标签的 defer,async 有用过吗?我说,暂时没有(实际上挺简单的,没复习到。拉倒了)。
整个过程很痛苦。写到第40分钟,面试官估计是看不下去了,就说今天就到这边吧。
然后开始反问。
由于整个过程对我造成了很大的痛苦,我一气之下(当然也是笑嘻嘻地)非常委婉地问了面试官一个刁钻的问题,翻译成人话大概意思就是「您觉得您对我们这种应届生小朋友,入职后有哪些期望?」。面试官回答的意思大概就是「没啥期望,我们会假设你们什么也不会」。
然后我又委婉动听地问了一个问题,翻译成人话大概意思就是「您觉得我们应聘前应该具备哪些素质或者准备到什么程度?毕竟学校也不教这些太细节的东西,很多情况都是我们自学的,就像今天碰到的这些问题一样」。面试官回答的意思大概就是「我只想招代码能力够的,细节会不会不重要」。
我的内心 OS:「我不理解,您说的代码能力就是 API 能力吗?」
三天后直接收到感谢信。终于能愉快滴去字节卖命了,拜拜了您内。