shopee
本人本科毕业 5 年,1 年后端 + 4 年前端。面试了一波 shopee,最后成功入职。我是在 5 月中旬的专场招聘面试的,不得不说专场就是快,对比鹅厂那更是两个极端。因为在脉脉、leetCode 发现 shopee 今年还是挺火的,招的人也挺多,但是面经很少,所以记录一波,有需要的看下。
一面(视频面)
自我介绍
单向链表输出倒数第 K 个元素
看代码输出结果(考察变量、函数提升)
看代码输出结果(考察异步代码先后顺序)
手写 instanceof 关键字
手写 Promise
react 中为什么不能在 for 循环、if 语句里使用 hooks,说下 react hooks 实现原理。
说下 react fiber。
看你之前做过 RN 开发,说下 RN 的原理。
说下输入一个 url 地址的全过程。
http 的缓存策略。
说下 https,证书是如何校验的?
说下 http2,你觉得阻碍 http2 发展的问题是什么?(这题后面的问题挺有意思,可以网上搜下答案)
算法题。跳格子问题,假设一次只能跳一个格子和两个格子,N 个格子有多少种跳法?
二面(leader 面)
自我介绍
为什么要离职?
对你的项目经历中 RN 做的 app 挺感兴趣的,你能详细说下这个项目吗?
RN 中原生和 js 端是如何通信的?你说后面使用 JSI 了,你能说下 JSI 的实现原理吗?
如果要你对这个 app 进行性能优化,你有哪些办法(面试官问了三次还有其他办法吗?)
代码层面,按照 react 的优化,减少 re-render 次数。图片加载用 react-native-fast-image,页面初始化的逻辑使用 InteractionManager.runAfterInteractions。去掉无用的 View 层。进行分包加载,启动时只加载启动页面 bundle,二级及更深页面等访问到再加载。一些复杂的控件,写原生模块,比如日期选择、下拉选择、级联、播放器等。
- 你们的 RN 热更新服务是怎么做的?热更新原理是什么?你们的热更新策略怎么做的?
客户端用的微软的 code-push,服务端用的 code-push-server。热更新原理就是 app 每次启动会请求热更新服务器,对比下本地 bundle 版本和服务器的 bundle 版本,如果版本不一致,就会根据配置的更新策略下载、更新 bundle,然后重新 reload bundle。我们就是在检查到新的 bundle 后,会弹窗强制更新。
- 设计一个 RN 热更新服务,需要考虑哪些地方?
bundle 体积大的问题。打包的时候需要进行分包,使用增量更新,减少下载体积。用户的网络不稳定、网速差问题。需要用 CDN 加速,支持断点续传。安全性问题。bundle 被中间人劫持篡改。使用 https 下载,并按照 https 的加密思路,对 bundle 用 hash 算法进行签名,然后 app 端检验签名是否被篡改。bundle 下载地址被暴力攻击。检查 User-Agent,只允许手机设备下载,记录设备 id,在一定时间内限制下载次数。 8. 你有什么要问我的吗?
HR 面
就一些简单的问题,这里就不说了。到 hr 面,基本都能过。
总结
整体难度一般,一面没有区分度,感觉一年经验和五年经验都是一样的。二面不错,对项目进行了深挖,考察了架构设计。问的问题偏向于 RN,最后进来也是做 C 端的 RN 开发。
来 shopee 的原因就是给得多,不过给得多也是因为拿了 Q 音的 offer A 了一次,打工人还是向钱看吧。 在 shopee 的工作体验确实轻松,不卷,但是过于轻松,又担心自己的产出。