几个月前我走了 Lyft frontend engineer 的 loop,senior 级别(L5 对标)。分享一下,因为我在面试前找到的准备建议都挺表面,我是自己拼出来他们实际怎么考的。
背景:4 年经验,主要是 React,一些 TypeScript,上份工作用过一点 Vue。通过 Lyft 的朋友内推。
Phone screen: 一道 coding,重点是 DOM 操作。不是 React。纯 JavaScript。我很久没写原生 DOM 了,暴露得有点明显。题目大概是 "implement a simple virtual DOM diffing function(实现一个简单的 virtual DOM diff 函数)"。当然不是让你实现完整的 React reconciler,但你得理解真实的 reconciler 在做什么。哪怕你天天写框架,也建议补一下 JS 基础。
Onsite(4 轮):
第 1 轮:前端 coding。我拿到的是一个 UI 组件实现题:做一个可筛选的列表组件,支持实时搜索。他们给一个空的 HTML/JS 文件,不用框架。还是那句:vanilla JS。要会 event listener、debounce、基本的 DOM 更新模式。
第 2 轮:另一轮 coding。这轮比 UI 更偏算法。中等难度,图相关(给一组 pickup zone 之间的道路,找最短路径,本质就是 Dijkstra)。题面是交通领域的,但底层算法很标准。我觉得他们是故意这么设计的,因为和他们真实产品相关。
第 3 轮:系统设计,前端架构。"Design the real-time driver tracking UI that riders see during a trip.(设计乘客在行程中看到的实时司机追踪 UI。)" 这轮挺有意思。聊到的点包括:WebSockets vs. polling、怎么优雅处理断连、客户端如何缓存司机位置更新、用户把 app 切到后台时组件生命周期怎么处理。他们要的是状态管理和数据流的深度,不只是 UI 视觉。
第 4 轮:behavioral。标准 STAR。冲突故事、一个技术很复杂的功能、一个和 design 合作的故事。没什么特别。
让我意外的点: vanilla JS 比我想象的多很多,明明他们是 React 公司。他们明显想确认你理解平台本身,而不只是框架抽象。如果你只做过 React、没怎么想过底层发生了什么,建议花时间补一下。
实时 tracking 的系统设计是我感觉最好的一轮。面试前值得把 websocket 的常见模式想一遍。
Offer:L5,Seattle,base 大概 $185k。现在回头看,没谈得够狠。