拓冰建站拓冰建站
首页 / 资讯中心 / 正文

普通前端如何拿下百度offer?两周准备前端面试全复盘

先说下我的基本情况免得大家觉得标题是标题党。我做前端三年多技术栈以 Vue 为主React 能写但不算熟源码没系统啃过算法题是面试前两周才开始刷的 LeetCode 热题平时工作就是写后台管理系统、搭组件、改样式、处理接口跟我一样的人应该不少。面百度之前我也焦虑了很久觉得大厂门槛高、八股文背不完、手写题大概率挂。但实际走完整轮面试我发现大厂前端面试并没有传说中那么玄乎尤其是对“业务向”的前端考察的更多是基础扎实程度、项目里有没有自己的思考、以及遇到不会的问题时的反应。这篇面经我尽量还原真实过程包括问了什么、我答了什么、哪些地方差点翻车、以及我事后复盘觉得真正起作用的是哪些准备。如果你是跟我一样觉得自己是“混子”的前端这篇内容应该能给你一些参考。1. 投简历之前我先把“混子”二字拆开讲了1.1 我的真实水平基础、框架、工程化到底什么程度先说实话我在投百度之前对自己的定位非常清醒不是技术大牛不是源码型选手更不是算法高手。我属于典型的“项目驱动型”前端日常写业务很快组件封装、接口联调、样式还原、性能优化这些实操基本上手就来但如果你突然问我“Vue3 的响应式原理讲讲”我大概率只能说个大概细节早就还给八股文了。为了不让自己盲目乐观我列了一个水平自评表能力项我的真实水平面试前做的补齐动作JavaScript 基础闭包、原型链、事件循环能说但不够深复习 this 指向、Promise 实现、事件循环宏微任务框架Vue业务熟练源码没完整读过重点看响应式、diff、编译过程、Composition API 设计动机React能写函数组件hooks 常用原理不深只准备高频点fiber、diff、hooks 规则工程化用过 Webpack、Vite会配但不精通补 loader/plugin 原理、构建优化、模块联邦算法很弱基本等于没刷过刷了一百道左右热题集中在数组、链表、二叉树、动态规划入门计算机基础网络、浏览器缓存、渲染原理能聊重点补了 HTTP 缓存、HTTPS 握手、浏览器渲染流程这个自评表我建议每个人都做一下因为“混子”这个词其实很模糊。你是基础差还是项目没亮点是算法弱还是框架原理弱差距不一样准备策略完全不一样。1.2 简历怎么包装项目提炼比罗列更重要“混子”最怕的就是简历上全是业务功能没有技术含量。我第一版简历写的项目描述是“负责某某后台管理系统开发实现了订单管理、用户管理、权限管理等功能”这种东西投出去基本石沉大海。后来我把项目经历全部重写了一遍核心方法论是每个项目用一个“技术亮点业务价值”的结构来写让面试官一看就知道你在里面动了脑子。举个例子我负责过一个数据大屏项目原描述是“使用 ECharts 实现数据可视化”。改完之后我是这样写的“基于 Vue3 ECharts 搭建数据大屏通过 Web Worker 处理前端上报的万级数据点避免主线程卡顿首屏渲染耗时从 2.8s 优化到 1.2s”。虽然“优化数据”这件事听起来没那么高级但比光写“实现了大屏”强一百倍。1.3 时间安排两周突击重点在“知识框架”而不是“背题”我准备时间不到两周没有时间把所有知识点都过一遍。我的策略是先搭知识框架再往框架里填高频细节。框架大概分四层JS 语言基础、浏览器与网络、框架原理与源码、工程化与项目设计。每一层我都先列出“面试官最可能问什么”再针对性地准备回答思路而不是死记硬背。比如 JS 这一层我列的是事件循环宏任务、微任务怎么执行代码输出题怎么稳拿分闭包是什么它在实际项目里用在哪原型链是什么手写 instanceof 怎么实现深拷贝要注意什么循环引用怎么解决这种“问题清单”比对着博客一篇篇看效率高得多。我在正式面试前基本能做到每个问题不看答案、用自己的话讲三分钟这就够了。2. 面试流程其实比想象中稳初面、二面、经理面、HR面各在考什么2.1 百度前端面试的整体节奏我这次走的流程比较常规一共面了四轮技术初面、技术二面、技术经理面、HR面前后大概花了三周。技术面全都是视频面试面试官会共享一个在线文档让你写题手写题和算法题都在上面完成。整体节奏给我的感觉是初面快速筛基础二面开始上深度三面更看综合能力HR面基本是确认意愿和聊薪资。每一轮之间的间隔不会太长如果超过一周没消息大概率是排序排序中也不要太慌。2.2 各轮次考察重点先说我观察到的考察侧重点这样后面再讲具体的题时大家能知道背后的逻辑。初面大概 1 小时是典型的基础面。面试官先让我自我介绍然后就简历里的项目开始问接着快速过了一遍 JS 基础、浏览器、网络最后出了一道手写题和一道简单算法题。初面给我的感觉是“不卡人”主要是把基本功不行的筛掉所以只要基础概念能说清楚、代码能写出来问题不大。二面大概 1 小时 10 分钟明显开始深入了。项目追问非常多会揪着你项目里的某一句话连续问下去比如我说“用 Worker 处理了大文件上传”面试官立刻追问“Worker 的通信机制是什么文件分片的大小怎么确定如果切片上传中途断了怎么处理”这种连环追问本质是看你是真的做过、有自己的思考还是只会背概念。三面经理面大概 45 分钟几乎没有问具体 API 细节反而问了一些偏“方向感”的问题你怎么理解微前端如果让你设计一个组件库你怎么分层你们团队的前端工程化处于什么水平下一步打算怎么做这些问题没有标准答案面试官想听的是你有没有自己的技术判断力。HR面就是常规流程聊薪资期望、到岗时间、为什么想离开现在的公司没有太难的题。2.3 面试官风格和应对思路我说个比较主观的感受大厂面试官整体比较“温和”不会故意刁难人。但他们会用“沉默”来给你压力——你回答完之后他们不说话等你继续补充。我前两面都碰到了这种情况第一次很慌以为是自己说错了后来发现其实就是面试官在等你展开你补充得越完整他们越满意。比较好的应对方式是把回答当成“结构化输出”用“结论原因例子”的结构来组织。比如问“你们项目为什么用微前端”不要只说“业务需要”而要拆成三层现状痛点多个团队维护一个巨石应用发布互相影响、方案选择考虑过 iframe、npm 包、微前端为什么选了微前端、落地效果上线后发布频率从每周一次变成随时发。3. 核心考点实录八股、框架、工程化问题我是怎么接的前面说了那么多流程和宏观感受下面进入到这篇文章最硬核的部分我这次面试里实际被问到的问题以及我是怎么回答的。我把问题分成了四类JS 基础与浏览器、框架原理、工程化与性能优化、场景设计题。3.1 JS 基础与浏览器高频题和答题框架这一类几乎是每轮技术面的保留项目。我整理一下我这三次技术面里被问到的原题题目考察点我的回答思路事件循环代码输出题console.log(1); setTimeout(...); Promise.resolve().then(...) 输出顺序宏任务/微任务先同步再微任务再宏任务重点讲队列机制闭包是什么项目里哪里用过有什么缺点闭包原理函数 词法作用域举了一个防抖/节流的例子缺点说内存占用要用完置 null深拷贝和浅拷贝区别实现一个深拷贝对象引用浅拷贝只复制第一层深拷贝递归复制讲循环引用用 WeakMap 解决浏览器缓存机制强缓存和协商缓存区别缓存强缓存 200 from cache、协商缓存 304分别讲 Cache-Control、ETag从输入 URL 到页面渲染发生了什么网络渲染按 DNS → TCP → HTTP → DOM → CSSOM → Render Tree → Layout → Paint 讲HTTPS 握手过程网络安全四次握手、证书验证、对称加密 非对称加密混合这里我最大的体会是答题不要只背结论一定要把“为什么”带上。比如讲浏览器缓存不要只说“强缓存不走服务器”要把 Cache-Control 的 max-age、no-cache、no-store 区别讲清楚再举一个实际例子我们项目里静态资源怎么配缓存、接口怎么禁缓存。手写题我遇到的是实现一个 Promise.all、实现防抖函数、实现数组扁平化。这些属于高频手写题如果你们要面大厂这三道一定要练得非常熟最好能闭着眼睛写出来。我练手写题的方式是每天默写一遍不打开看答案错了就重来连续三天基本就形成肌肉记忆了。3.2 框架原理Vue/React 必须讲到什么程度我在简历上写的是“熟练掌握 Vue2/Vue3了解 React”所以面试官主要问了 VueReact 只问了一个基础题。我把 Vue 相关的问题整理一下Vue3 的响应式原理和 Vue2 有什么区别computed 和 watch 的区别底层实现有什么不同vue-router 的 hash 模式和 history 模式有什么区别key 的作用是什么diff 算法中 key 怎么用组件通信方式有哪些v-model 的语法糖本质是什么我重点说一下响应式原理这道题因为几乎必问。我的回答分了三层第一层Vue2 用 Object.defineProperty 对 data 的每个属性做 getter/setter 劫持递归遍历对象Vue3 用 Proxy 代理整个对象不需要递归性能更好而且能拦截数组、新增属性等操作。第二层依赖收集和触发更新的过程——每个组件实例有一个 watcher当模板中读取响应式数据时触发 getter把 watcher 收集到对应属性的 dep 中数据修改时触发 setter通知 dep 里的 watcher 更新。第三层Vue3 的 effect、reactive、ref 之间是什么关系Computed 和 Watch 分别依赖什么实现。你们看如果只是背第一层面试官大概率会追问“那依赖怎么收集的”这时候第二层就派上用场了。如果你的目标是大厂源码级的问题至少准备到这个程度不然很难过关。React 我被问到的比较基础函数组件和类组件的区别、useEffect 的依赖数组怎么工作、为什么不能在循环里写 hooks。这些都是 React 的高频基础题属于背了就能答上来的级别。3.3 工程化与性能优化项目里真实用过的才敢写工程化这个板块我认为是“混子前端”最容易逆袭的地方因为只要你做过几个真实项目必然踩过工程化的坑关键在于你有没有把自己的解决方案总结出来。我这次被问到的工程化问题Webpack 的构建流程是什么loader 和 plugin 有什么区别怎么优化首屏加载速度前端怎么做错误监控如果线上代码出问题了你怎么定位Vite 和 Webpack 的区别是什么为什么 Vite 开发环境快我印象最深的是“首屏优化”因为我项目里真的做过所以能讲得很细。我当时的思路是按“网络层-渲染层-代码层”来拆网络层开启 CDN 加速、配置 HTTP 缓存、小图片转 base64、接口做并发合并渲染层路由级代码分割、组件懒加载、骨架屏、减少重排重绘代码层Tree-shaking、按需引入第三方库、长列表用虚拟滚动。面试官接着追问了“Skeleton 是怎么实现的”我说了两种方案一种是写死的静态骨架另一种是根据真实数据结构动态生成骨架。然后他又问“虚拟滚动为什么能提升性能”其实就是只渲染可视区域内的 DOM用 padding 或 transform 撑起总高度滚动时复用节点。我发现工程化问题只要你真的动手解决过聊起来会非常流畅因为每一个细节都是你踩过坑之后知道的。这也是我建议所有“混子”前端在准备面试时重点打磨的板块——它比源码好准备又比八股文有区分度。3.4 场景设计题大文件上传、组件库抽离、微前端改造除了基础题和框架题百度面试比较爱问“场景设计题”这种题没有标准答案主要看你的思维是否系统。我遇到的第一道场景题是如果让你设计一个大文件上传功能你会怎么做这个问题跟我项目经验完全吻合我直接按生产环境的标准来回答。先分步骤文件分片比如每片 5MB→ 计算每片 MD5 → 并发上传 → 后端合并。然后讲了三个关键细节一是切片大小怎么确定不是越小越好太小会生成太多请求TCP 连接切换有开销一般 2MB 到 10MB 之间要测试权衡二是并发控制不能一次性把几百个切片全发出去要么用 p-limit 控制并发数要么用队列机制保证同时只有 5 个左右请求三是断点续传利用已经上传的切片记录刷新后跳过已上传的切片。面试官又问“如果切片上传到一半中途失败了怎么处理”我说了两种策略一种前端重新上传失败的切片重试机制另一种是后端在合并时校验所有切片 MD5不一致的退回前端重新传。他比较满意这个回答。第二道场景题是如果让你设计一个组件库你会怎么分层。我的回答是基础层Button、Input 等原子组件、组合层Form、Table、Tree 等复合组件、业务层针对具体业务场景的模板组件每层之间不能跨层依赖。然后说了要配套设计规范命名规范、色彩规范、文档系统、单元测试、按需打包。面试官追问了“按需加载怎么做”我说了两种一种是用 babel-plugin-import 之类的插件实现按需引入另一种是组件库构建时直接输出 ES Module让上层项目做 tree-shaking。第三道场景题比较开放说你们现在是一个巨石应用多个团队一起维护互相阻塞你打算怎么改造。这其实就是微前端的场景。我把微前端的三种主流方案讲了一遍iframe、web components、single-spa / qiankun对比了各自的优缺点。然后说如果是我来做选型会优先考虑 qiankun Vite 组合因为现有团队都是 Vue/React 混合qiankun 的 JS 沙箱和样式隔离能最大限度降低改造成本。这种题目其实没有一个“完美答案”面试官想看你有没有自己的分析框架。我的经验是“先分类、再定方案、最后说风险”只要框架清楚就算方案不是最优的也能拿到不错的分数。4. 差点翻车的三件事算法题、盲区追问、系统设计前面讲了很多我发挥得还可以的部分接下来这部分我要把自己最狼狈的瞬间也写出来因为“混子”最怕遇到的就是这些情况而它们几乎必然会遇到。4.1 算法题写不出来时我做了什么我刷题本来就不多LeetCode 只刷了一百道左右很多中等题其实见都没见过。第一轮技术面的时候面试官出了一道中等偏上的动态规划题我大概扫了一眼就能感觉到自己写不出来。我当时没有直接放弃而是先尝试说思路“这个题看起来是背包问题的变种我想到可以用二维 dp但是 dp 的状态转移方程我暂时没有理清楚可不可以先给我一点提示”面试官很配合给了个思路方向我顺着那个方向写了一个“半成品”的实现虽然时间复杂度不是最优但主体结构是对的。我事后复盘这道题其实扣分了但没让我挂核心原因是我没有直接说“不会”而是展示了一个工程师遇到陌生问题时该有的反应——先定性、再拆解、然后请求帮助、最后尽量给出可运行的代码。所以如果你们也遇到写不出来的情况千万不要慌更不要沉默把思考过程说出来面试官反而会给你加分。4.2 项目被追问到盲区承认不丢人关键是怎么接二面的时候我讲项目里用到了 Web Worker 做文件上传面试官很感兴趣一路追问“Worker 里面为什么不能操作 DOMSharedWorker 和专用 Worker 的区别Worker 线程里能不能发请求”前两个我答上来了第三个我确实没仔细研究过只知道 Worker 里有 fetch 但不确定它和主线程的 fetch 有什么本质区别。我当时说了句“这块我没深入过不太确定细节”然后马上补了一句“但我可以推测一下Worker 里的 fetch 应该走的是浏览器网络栈的同一套实现只是没有主线程的某些上下文限制比如 cookie 可能默认不带”。面试官听完没有追着这个问题不放反而说“这个推测是对的”。我后来专门查了下Worker 的 fetch 其实就是标准 fetch API但因为 Worker 环境没有 document所以涉及和页面关联的东西会有差异。这里我想说的是遇到盲区用“承认不确定 基于已有知识做合理推断”的方式回应要比硬编一个错误答案好得多。4.3 系统设计题思路混乱用“输入-处理-输出”拉回第三面经理面的时候面试官问了一个开放题“如果老板让你在一周内做一个内部数据可视化平台你怎么规划整个前端方案”我一开始有点乱想到什么说什么组件库选型、图表库、大屏适配、权限系统东一句西一句。面试官听着皱了皱眉。我意识到不对赶紧用自己习惯的“输入-处理-输出”框架拉回来重新讲。按这个框架拆完思路一下就清晰了输入数据来源怎么处理、接口怎么聚合、权限怎么控制→ 处理数据格式转换、前端聚合、图表计算→ 输出页面布局、组件设计、大屏适配、异常状态。面试官后面顺着我的框架继续问了几个细节气氛明显缓和了。这段经历让我意识到面试里遇到开放式问题时第一时间不要急着给方案先给框架再填细节永远是更稳的打法。5. 复盘下来最有用的“混子冲刺清单”面试全部结束后我花了一天时间把整个准备过程复盘了一遍。我发现有一些具体动作虽然看起来很不起眼但真的是“投入产出比”最高的这也是我最想分享给同类的几条经验。5.1 八股文复习路线先广度再深度“混子”最怕八股文因为知识点太多背不完。我的做法是先划范围再分优先级。必背层面是事件循环、闭包、原型链、Promise、this 指向、HTTP 缓存、浏览器渲染流程、Vue 响应式原理、diff 算法、组件通信。这些基本是每场面试都绕不开的优先级最高。中频层面是Webpack 构建流程、HTTPS 握手、虚拟滚动、微前端、模块联邦、CI/CD、错误监控、性能指标FP、FCP、LCP、CLS。这些属于项目里有对应经验就深讲没有经验就背概念级别的。低频层面是TypeScript 高级类型体操、各种新 CSS 特性、Vite 插件原理、Node 中间层等。这些我在准备时基本放弃了时间不够性价比低。我的建议是先保证必背层面达到“能脱稿讲三分钟”的程度再把时间分配在中频层面低频的能过就过不要因为少数冷门题没准备而焦虑。5.2 手写题怎么练每天默写不靠眼睛记住了手写题我遇到的有Promise.all、防抖、节流、深拷贝、数组扁平化、手写 instanceof、手写 new、发布订阅。这些题目大部分不是很难但如果你只是“看过”面试现场一定会卡壳。我的练习方法很简单每天晚上拿出白纸把题目写在一旁然后不看答案直接开写。写完对照标准答案如果错了隔天早上再写一遍。连续五天基本就能做到看到题目就条件反射地写出来。关于手写题我还要多提醒一句写完之后一定要用一句话总结这段代码的核心思想因为面试官大概率会追问“如果参数是空数组会怎样”“如果 then 里面报错你怎么处理”之类的边界问题。5.3 项目故事提前预埋面试前把每个项目写成“访谈稿”这是我整个准备过程中最值得做的一件事。我在面试前把简历上每个项目都变成了一个“访谈稿”总共三页纸内容分为四个部分项目背景与痛点、我负责的模块、技术选型与理由、我踩过的坑和后续优化方向。然后我预设了面试官可能会问的十几个问题一个个写在文档里每个问题下面写清楚回答思路。比如我写了“为什么这个项目要自研组件库而不是直接用现成的 element-ui”。我准备的回答是当时项目的权限体系很复杂表格要多种混合操作现成组件改造成本反而更高而且我们组件库的目标是跨项目复用所以需要一套内部规范来统一多个后台系统的交互。这个“访谈稿”其实没有人看但写完一遍之后我自己对项目的理解清晰了很多面试被追问时也更有底气。强烈推荐所有准备跳槽的人做这件事。5.4 心态管理少看“面经神仙”多关注自己的节奏面试前我特别焦虑的时候刷到过很多“两轮技术面聊算法”“手撕红黑树”之类的帖子一度觉得自己完全没戏。但实际面下来我发现百度不同部门、不同面试官的侧重点差异很大我的面试全程没有出现红黑树、没有出现特别冷门的源码题大部分还在正常范围内。所以我的经验是不要被别人的面经吓到面经可以看但只看跟你水平接近的人分享的。那些“大神级”面经的参考价值其实很低反而会给你制造恐慌。6. 写在最后面完百度的几点真实体会写到这里这篇文章的核心内容基本讲完了最后我再分享几个很个人、但我觉得很有价值的体会。第一个体会是大厂面试更像是一场“匹配”而不是一场“考试”。它考察的不是你能不能背出所有八股文而是你作为一个前端工程师在真实业务里能不能解决问题、有没有自己的判断力、值不值得培养。我的算法题没有全对有源码细节没答上来项目也被追问到过盲区但我最后还是拿到了 offer。这说明面试官看的不是“你有没有弱点”而是“你的优点能不能覆盖掉弱点”。第二个体会是普通前端千万别觉得自己没有机会。我这次能过很大程度上是因为我在项目深度上确实有一定的积累尤其是性能优化、组件库、大文件上传这些偏工程化的方向可能恰好是部门比较看重的。如果你还在犹豫要不要投大厂我的建议是先花两周时间把自己的项目整理清楚再花两周补基础八股然后大胆投。第三个体会是面试之后的复盘比面试本身更重要。我每面完一轮都会在文档里把被问到的问题记下来标注“答上来了/答得一般/完全不会”然后立刻查资料补上。等到下一轮面试时发现很多知识点是重复出现的原来不会的题在下一轮就被问到了这种“成长的即时反馈”特别有成就感。最后再分享一个我自己的小技巧面试前几天我会把高频问题录成语音早晚通勤时像听歌一样听一遍。这听起来有点蠢但对巩固记忆真的有效尤其是事件循环、HTTP 缓存、响应式原理这类逻辑性比较强的知识听几遍之后到了面试现场就特别自然地脱口而出了。希望这篇“混子”面经能给你一点信心。前端这个行业永远不缺基础好的人但缺那种“基础没那么完美、但能踏踏实实解决问题”的人只要找对复习方向你也能试试。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门