裸辞半年后,我靠一道前端面试题重新“上岸”了

神奇之太阳
2025-12-16 03:08
阅读 300

去年十月的一个下午,我坐在越秀区老东山一栋八十年代的旧楼阳台上,手里捏着半杯凉掉的鸳鸯奶茶,刷着某招聘APP——简历投出去三周,已读不回17家,连个HR的“在吗?”都没捞着。

那会儿刚裸辞三个月,存款从六位数慢慢滑向五位数。老婆看我的眼神已经从“支持你休息调整”变成“要不…先接个外包救急?”,连我家猫都开始用一种“铲屎官怎么还不去打工”的眼神盯着我。

我是广州土生土长的老广程序员,干了七年前端,前五年在某一线大厂(懂的都懂,就是那个logo像只企鹅的),最后两年在一家中型互联网公司带小团队。技术栈说起来挺唬人:React、Vue3、Webpack、Vite、Node.js、TypeScript……但说实话,很多东西都是“用过”,没深挖。

直到那次被一道看似简单的前端面试题问懵了。


事情发生在去年十一月底。一个朋友内推我去一家做跨境电商的初创公司,规模不大,但融资到了B轮,据说技术氛围不错。面试官是个看着比我小几岁的小伙子,穿着格子衫配洞洞鞋,一上来就笑:“哥,咱们不搞八股文,来点实操的。”

然后他甩给我一段代码:

// 请优化这个函数,让它在大数据量下不卡顿
function renderList(items) {
  items.forEach(item => {
    const div = document.createElement('div');
    div.textContent = item.name;
    document.body.appendChild(div);
  });
}

我当时心里一松:这不就是“避免频繁操作DOM”嘛!立刻答:“可以用DocumentFragment或者虚拟滚动。”

他点点头,又问:“如果items有10万条呢?用户要能实时搜索、筛选,还要保持60fps,你怎么搞?”

我卡壳了。

脑子里闪过requestIdleCallback、Web Worker、分片渲染……但具体怎么组合、边界情况怎么处理、性能瓶颈在哪,我说得支支吾吾。最后他委婉地说:“你的工程经验很丰富,但底层原理和性能优化这块,可能还需要再沉淀一下。”

走出珠江新城那栋玻璃大楼时,天正下着毛毛雨。我站在地铁口,突然意识到一个问题:我在大厂那几年,其实一直在“搬砖”,而不是“造砖”。组件库封装得再漂亮,业务逻辑再复杂,如果没真正思考过“为什么这样更快”、“浏览器到底干了啥”,那本质上还是高级调包侠。


回家后,我跟老婆坦白:“可能真得沉下心学点硬核的东西了。”她叹了口气,把账单推到我面前:“房租3500,房贷8200,娃下个月兴趣班又要交4000……你还有三个月缓冲期。”

于是我开始了“Gap期技术特训”。

每天早上送完娃上学,我就泡在图书馆(比在家效率高,主要是躲开家务和抖音)。目标很明确:搞懂前端性能优化的本质,不是背答案,而是能自己推导出最优解

我重翻了《高性能JavaScript》,把浏览器渲染流程从Parse HTML到Composite Layers画了张思维导图;用Performance面板分析自己写的demo;甚至手搓了一个简易版的虚拟滚动组件。

最狠的是,我把那道面试题当项目做了整整两周。

  • 第一天:用requestAnimationFrame分帧插入DOM,每帧最多处理50条。
  • 第三天:发现主线程还是卡,改用Web Worker解析数据,主线程只负责渲染。
  • 第五天:加入防抖+缓存机制,避免重复计算。
  • 第七天:引入IndexedDB做本地持久化,减少首屏加载时间。
  • 第十天:加上Intersection Observer实现懒加载……

过程中踩了无数坑。比如Worker里不能操作DOM,得靠postMessage传数据;再比如分片太小会导致调度开销大于收益。有次凌晨两点,我对着Chrome DevTools的火焰图发呆,突然悟了:“性能优化不是堆技术,而是在资源、体验、复杂度之间找平衡点。


今年二月,我又收到一家做SaaS工具公司的面试邀请。还是那道题,但这次我直接打开VS Code,现场写了个可交互的Demo,并解释每个决策背后的权衡:

“如果数据是静态的,我会优先用虚拟滚动;如果是动态且需要全文检索,我会把索引建在Worker里;如果用户设备低端,就降级到分页加载……关键不是技术多炫,而是匹配场景。”

面试官眼睛亮了。一周后,HR打电话谈offer,月薪从裸辞前的18k涨到了22k,还给了期权。

上周五晚上,我请老婆吃了顿炳胜。她夹了块白切鸡,笑着说:“看来Gap半年没白歇,至少头发还在。”我摸了摸日渐稀疏的头顶,心想:这半年不是躺平,是战略撤退,为了打得更准。


回头想想,很多前端同行(包括曾经的我)容易陷入两个误区:

  1. 过度依赖框架:以为会用React/Vue就等于会前端,但一旦脱离脚手架,连事件循环都说不清。
  2. 忽视浏览器原理:优化全靠“听说”,而不是实测+分析。比如盲目上SSR,结果首屏TTI反而更长。

其实,技术探索的本质,是培养“问题直觉”——看到一个卡顿,能立刻想到是Layout Thrashing还是Long Task;听到“大数据渲染”,条件反射考虑分片、Worker、缓存策略。

而面试题,不过是检验这种直觉的试金石。它考的不是标准答案,而是你解决问题的路径是否清晰、是否经得起追问。


现在我已经入职新公司一个月,团队规模小但节奏快,每天都在和真实性能问题死磕。昨天还因为一个图片懒加载的竞态问题debug到晚上九点,但居然觉得挺爽——因为我知道自己在解决“真问题”,而不是调UI颜色。

如果你也在焦虑、迷茫,或者刚裸辞不敢投简历,我想说:

技术人的价值,从来不在于你待过多大的厂,而在于你面对未知问题时,有没有底气说一句:“让我试试。”

Gap不可怕,可怕的是用“休息”掩盖“停滞”。这半年我没旅游、没追剧,把省下的通勤时间全砸在了技术深挖上。现在回头看,那些深夜的火焰图、报错堆栈、性能曲线,反而成了我重新出发最硬的底气。

最后送大家一句我贴在书桌上的老广俗语:“唔惊慢,只怕站。”(不怕慢,就怕停。)

共勉。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝