Lei Zhang

时光已逝永不回,
往事只能回味。
... ...
春风又吹红了花蕊,
你已经也添了新岁。

▓░░░░░░░░░░░░░░ 5%



Shopee 前端面试

2018-12-25 » 自言自语 / 面试

在 V 站偶然看到 Shopee 的招聘贴, 由于现在呆的公司也是做跨境(澳大利亚 <=> 国内), 我也想出去看看别家公司的跨境是怎样做的, 能面上, 年后入职自然也是美滋滋!

面试的岗位是 "供应链前端工程师", 上五楼填表开始等, 等了近 40 mins, 面试官才进门喊我下去. (原来我面的这个岗在 2 楼, 他一直在下面等我...)

进去之后, 确定了两件事情:

1. 免费水果那些是真的;

2. 入职配 mac pro 是真的;

口水了一下 mac pro, 拿出我的 mac air, 突然觉得好 low...

由于自己也做过面试, 明白大部分面试官过来面试都是中断工作临时过来的, 可能也没有看过简历. 所以我一般的套路就是, 先自己介绍 (吹) 一波.

前前后后大概聊了近 2h, 把自己交代的一清二楚, 中途面试官会问 "在你开发过程中遇到的难点?", 我大概说了下自己给公司封装公共组件那块为了与现有微服务以及当前业务的一些难点, 不过好像并没有让他很满意.

自认为很厉害的一些博文和组织的沙龙, 面试官也觉得略基础, 没有特别亮眼的地方. 此外又问了一些项目相关的业务等等...

最后大概半小时样子, 问了些基础, 其中包括:

1. 数据类型判断

2. 原型和原型链

3. ES5 和 ES6 中的继承

4. 闭包

5. 事件循环

6. 防抖与节流

7. Vue 组件通讯 (因为我主技术栈是 Vue, 所以只问了 Vue 相关的东西)

8. 一道笔试题 (面试官好像觉得我答得不错, 最后没让我做这道笔试)

面完近 3h, 我以为很稳了, 结果他告诉我这是一面, 过没过都会有 HR 通知, 后面还有 2-3 面. 我等啊等啊, 等到今天, 快 1 周了, 邮箱还是空空如也~

面试的准备

面试准备

面试的收获

每次面试都伴随着一次收获, 乍一看上面 1-5 条, 好像对于平时的业务编码没太大的实用性. 例如第 5 条, 事件循环 (Event Loop), 平时编码几乎很少见.

JS 是单线程的, 它的一切都基于 调用栈、任务队列、事件循环, 举个例子, 在 Vue 中, 我们常会用到 $nextTick, 这个 api 就是基于事件循环所完成的.

当调用栈空闲后每次事件循环只会从 (macro)task 中读取一个任务并执行,而在同一次事件循环内会将 microtask 队列中所有的任务全部执行完毕,且要先于 (macro)task。另外 (macro)task 中两个不同的任务之间可能穿插着UI的重渲染,那么我们只需要在 microtask 中把所有在UI重渲染之前需要更新的数据全部更新,这样只需要一次重渲染就能得到最新的DOM了。恰好 Vue 是一个数据驱动的框架,如果能在UI重渲染之前更新所有数据状态,这对性能的提升是一个很大的帮助,所有要优先选用 microtask 去更新数据状态而不是 (macro)task,这就是为什么不使用 setTimeout 的原因,因为 setTimeout 会将回调放到 (macro)task 队列中而不是 microtask 队列,所以理论上最优的选择是使用 Promise,当浏览器不支持 Promise 时再降级为 setTimeout