首页 > 笔经面经 > 2021 Shopee前端提前批校招 面经

2021 Shopee前端提前批校招 面经

头像
PremiumWetTissue
编辑于 2021-01-21 06:20:05 APP内打开
赞 1 | 收藏 64 | 回复14 | 浏览10213
去年年底在牛客网找了Shopee新加坡的前端内推,目前已完成终面,来分享一下经验。
面试流程一共四轮:
HR电话面(简单了解情况,无技术内容):
是哪里人,为什么会选择新加坡岗位,找工作优先考虑哪些因素,为什么选择前端

第一轮技术面:
一上来先简单问了下做过项目的难点,然后顺带问了一下浏览器的强缓存和协商缓存机制。
接着是几道手撕代码题(有几题记不清了
1. 实现数组reduce方法
2. 实现如下功能:
function subscribe(func){} //接受一个函数名作为参数,订阅此函数
function unsubscribe(func){} //接受函数名作为参数,退订此函数
function elicit(){} //执行所有订阅的函数
subscribe(func1);
subscribe(func2);
unsubscribe(func1);
elicit(); //执行func2

这题只讲了大概思路,我说需要用map或数组存储订阅的函数名,退订的时候修改map或数组,最后对所有订阅函数执行一次。

3. CSS实现一个圣杯布局

第二轮技术面:
这轮考察数据结构和算法,全程就一道题手撕代码。
输入如下:
const sourceData = [
["bag", "purse"],
["purse", "hand purse"],
["bag", "backpack"],
["purse", "purse wallet"],
["purse wallet", "coin wallet"],
["purse wallet", "man purse"],
["shoe", "nike shoe"],
];

根据输入建立一个如下图的sankey diagram(类似电商的商品搜索路径图)
“bag”  ➡  “purse”     ➡  “hand purse”
↘             ↘
↘             “purse wallet”  ➡  “coin wallet”
↘                           ↘
↘                           “man purse”

“backpack”
“shoe”  ➡ “nike shoe”

要求实现一个函数返回该图的width(最长路径)和height(路径总数)。如上图的width = 4, height = 5。
我的思路是用类似树状结构存储数据,每个树节点有一个array用来存放子节点。然后用DFS遍历整棵树求出叶子节点个数即为height,用backtracking思想可求出最长路径width。
(我自定义树节点构造函数的时候有挺多语法错误,有点尴尬;面试官说我思路正确,然后点了几个可以优化的地方让我修改了下)。

第三轮team leader技术面:
终面也是技术面。上来先做自我介绍,问了一些项目经历(我项目经历真的少),问我为什么使用Django,为什么会学习React,怎样学习CSS的,学习编程语言的方法;
然后问了从在浏览器地址栏输入url,到用户看到页面发生了什么。
我说的有点笼统,然后又详细问了DOM树和CSSOM树的元素是不是一一对应的(我真不会);
浏览器先加载<script>还是先渲染页面,为什么会这样;
如果<script>有defer属性将如何执行,问我了不了解<script>的defer和async(我真不了解async);
接着问了cookie的具体存储形式,是由浏览器还是服务器端设置的,为何能保存用户登录信息(问的太细了,我真没咋准备好)。
顺带问了cookie, session storage, local storage的异同,我提到了同源,又问了一下同源是什么;

然后给了一个场景,给定一个DOM元素和一个字符串,问如何根据DOM元素的最大宽度返回能容纳的最长的子字符串(说思路即可)。
我实在不会DOM的API,面试官就给了一个Helper函数,能返回字符串在页面中的实际宽度。
然后我的想法是从后往前截短字符串,直到子字符串实际长度小于等于最大宽度。
面试官于是问了时间复杂度(O(n)?),问我如何优化;我说二分法应该可以优化到O(logn)。
又问有没有O(const)的解决方案,我当时没想出来(现在想想应该是用个map记录所有合法字符的所占宽度,然后从头扫描字符串当总宽度大于DOM元素宽度时停止,这样空间换时间应该能达到常量时间复杂度)。

接着问了我平时怎么学习新技术(我说上MDN看文档,看GitHub项目源码,大神博客),问我会不会去看CSS标准(说实话没咋看过)
问我在这个团队希望能学到什么东西,为什么;
然后就是反问环节,我水了两个问题就结束了。



总结:面试体验很好,面试官都很年轻很随和。
二面就一道题考数据结构和算法,考的挺全面的,基础一定还是要打好,各种链表二叉树BFSDFS等等都得熟练。
终面真的就是一路追问到你答不上来为止(也可能我太菜了,感觉我终面说得最多的一句话就是“这部分我没有深入了解”),千万不要给自己挖坑随便提一些不了解的知识点。


许愿能上岸吧。
祝各位也好运。















更多模拟面试

14条回帖

回帖
加载中...
话题 回帖

推荐话题

相关热帖

笔经面经近期热帖

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

近期精华帖

热门推荐