ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

前端校招面经:字节阿里腾讯美团四厂面试全记录

前端校招面经:字节阿里腾讯美团四厂面试全记录 说实话现在回头看2021届的校招依然觉得那是一段很特别的日子。作为前端方向的学生我在2020年从春招实习一路面到秋招陆续投了字节跳动、阿里巴巴、腾讯、美团这四家基本把国内主流大厂的前端面试风格都感受了一遍。这篇文章就把我的真实面试经历、考到的题目、以及踩过的坑原原本本整理出来希望能给正在准备前端面试的同学一些具体可参考的东西。面试归根结底看三样基础扎实程度、项目深度、以及面对未知问题时的思路。这篇面经会围绕这三点展开既有题目复盘也有我自己的反思适合正在准备校招或者实习面试的同学阅读。1. 面试前的准备简历、项目、算法这三座大山1.1 简历怎么改才能让面试官愿意深挖前端简历和别的岗位不一样面试官看简历时最在意的不是你列了多少个技术名词而是你有没有真正解决过问题。我一开始的简历就是典型的“技术栈堆砌型”把Vue、React、Webpack、Node全部往上写结果约面率很一般。后来找学长帮忙改了简历核心改动是每个项目都写了“背景-方案-结果”三段式并且用数字量化结果。举例来说不要写“负责商城前端开发”要写“基于Vue3 TypeScript重构商城商品列表页首屏加载时间从3.2s下降到1.8sLCP提升44%”。面试官看到这种描述心里会立刻有画面知道这个候选人是有意识在做性能优化而不是单纯写业务页面。另外我建议在简历里留一两个“钩子”——比如写上“对前端工程化有深入研究”这是主动引导面试官往你准备好的方向去问。我在简历里写了“实现了一个小型打包工具”结果美团二面、腾讯二面都顺着这个点深挖了很长时间但我因为提前准备过所以答得比较稳。还有一点很容易被忽略简历上写的每一项技术栈都要准备一个“为什么用它而不用别的”的回答。比如写了Webpack就要能说清楚webpack和其他打包工具的区别写了React Hooks就要知道Hooks和class组件各自的适用场景。面试官顺着简历随便挑一个词来问你都要接得住。1.2 项目经验前端面试的主战场校招候选人普遍没有太复杂的工业级项目所以面试官考察的重点其实不在于项目的规模而在于你对项目有没有自己的思考。我准备了一共两个核心项目一个是个人博客用React Node写的另一个是参加比赛做的校园二手交易平台Vue WebSocket。这两个项目难度都不高但我在面试前花了很多时间把每一个可能的追问点都提前模拟了一遍。比如个人博客项目面试官几乎必问“为什么用React而不用Vue”、“怎么做SEO优化”、“首屏加载慢怎么排查”、“如果用户量涨到十万你的方案哪里会先崩”这类问题本质上不是在考框架API而是在考你的知识边界和思考路径。我的经验是不要背答案而是把项目的整个设计过程理清楚包括一开始为什么选这个方案、中间遇到过什么坑、最后怎么权衡取舍。能讲出背后的故事面试官才觉得这个项目真的是你做的。关于项目数量我的建议是“两深一浅”就够了。两个能深挖到底的项目加上一个简单但要能讲清楚技术亮点的项目。与其准备六个项目但每个都讲不透不如把一个项目的来龙去脉吃透。1.3 算法准备前端也要刷题但不用刷太多“前端要不要刷算法”这个问题很多学弟学妹问过我的回答是要刷但不用按后端标准刷。字节和腾讯的算法题基本都在LeetCode简单到中等难度美团和阿里偶尔会考偏思维的题很少出现hard级动态规划。我统计了一下自己四家面试遇到的所有算法题大部分集中在数组遍历、双指针、二叉树、基础动态规划这几类。推荐的刷题顺序是先搞定链表反转、合并、环形检测再做二叉树前中后序、层序遍历、最近公共祖先然后是双指针和滑动窗口最后是几道经典动态规划斐波那契、爬楼梯、零钱兑换。不用追求题量关键是每个类型吃透三五道代表性题目能讲清楚时间复杂度和空间复杂度。字节一面的算法题我记忆很深刻面试官让我手写“给定一个字符串找出其中不含有重复字符的最长子串的长度”这道题就是很典型的滑动窗口题。我当时先和面试官确认了边界条件空字符串、全重复字符然后边写边解释思路最后在复杂度分析上也答出来了。刷题过程中一定要逼自己“说题”也就是边写代码边用口述的方式讲清楚每一步在做什么。面试时写题和自己在IDE里写题是完全不同的体验你能不能在高压下保持思路清晰这需要提前练习。我最后两个月基本每天保持两到三道题不是求量而是保持手感。2. 字节跳动三轮技术面加HR面全程高能2.1 一面基础考点都是硬功夫字节是我秋招的第四家面试春招实习时挂过一次后来秋招又投了整体感觉是节奏快、问题密集、代码考得多。一面的面试官很年轻没有太多寒暄上来直接进入正题。先是JS基础连环问闭包是什么、闭包有哪些应用场景、闭包会不会造成内存泄漏、怎么排查这个问题乍一看很简单但追问多了之后很多人会卡在“内存泄漏怎么排查”上。我当时的回答思路是先说闭包的定义和作用再举一个防抖函数中保存timer变量的例子然后说明如果闭包引用的对象长期存活且不再被使用就可能造成泄漏最后说可以用Chrome DevTools的Memory面板做Heap Snapshot对比。这样的回答从原理到实践都有面试官比较认可。接下来是一道经典的CSS手写题“实现一个长宽比为16:9且宽度自适应的容器”。这题考的是对CSS属性掌握的扎实程度可以用padding-top: 56.25%这个经典方案也可以用aspect-ratio: 16/9。我先把两种方案都写了一遍然后对比了它们的兼容性和适用场景。字节的面试官比较喜欢听这类“多方案对比”的回答因为这能体现候选人的知识广度。一面最后是手写题实现一个函数防抖debounce和节流throttle并说明两者区别。这道题我至少练了不下十遍终于在这里派上了用场。代码不难但一定要写对边界this指向、参数透传、取消方法的实现。我在写完防抖后又主动补充了带immediate参数版本的实现面试官明显满意了很多。2.2 二面项目深挖让我重新认识自己的代码二面时长一小时前四十分钟全部在聊项目而且是那种一层一层往下挖的“夺命连环问”。面试官先让我介绍博客项目的整体架构然后突然问“你博客用的React路由底层是怎么实现的HashRouter和BrowserRouter有什么区别”这个问题我想过所以答得还行先说两种路由的URL形态差异再说核心区别在于hashchange事件和history.pushState以及History模式需要服务端配合配置try_files。但面试官并没有停在这里继续追“React Router在路由切换时是怎么触发组件重新渲染的”这下我有点卡住了。我当时只记得Router组件会通过context传递路由信息但到底怎么在URL变化时触发更新我说得支支吾吾。事后复盘我才知道React Router的history库会通过setState强制刷新Router然后通过context往下传递location对象所以底层还是React的状态更新机制。这个知识点我之前确实没吃透面试官问得很有水平。想提醒大家任何你在项目里用过的东西面试官都可能追到源码那一层平时用库的时候多想想它是怎么实现的不要停留在“会用”的层面。二面的算法题是一道二叉树相关的题目层序遍历二叉树。这题本身不难用队列做BFS就好但面试官在我写完后又加了一个扩展问题“如果要求每一层单独用一个数组存放怎么做”其实就是在BFS循环里多套一层for循环记录当前队列长度。这道题让我感觉到字节的算法题往往是“基础题一道追问”的组合基础题是门槛追问是区分度。2.3 三面总监面考的是思维和软素质三面是部门总监面面试风格和前两面完全不同不再抠细节而是抛出一个比较大的问题让我现场设计方案。原题大概是“如果让你设计一个前端错误监控系统你会怎么做从采集、上报、展示三个维度来讲。”这种题没有标准答案考的是知识面和思维框架。我当时的回答分了几层先说错误分类JS运行时错误、资源加载错误、Promise异常、React组件错误边界再说采集方式window.onerror、addEventListener(error, ..., true)、unhandledrejection、ErrorBoundary然后说上报策略采样、批量打包、请求失败重试最后说SourceMap还原源码位置和错误聚合分析。这个回答算比较完整但我觉得真正打动面试官的是我主动提了“千万级别的错误日志怎么做聚合展示”这个性能问题体现了我对大规模场景的思考。三面还问了一些偏价值观的问题比如“你遇到过最难的bug是什么怎么解决的”。这种问题面试前一定要认真准备一个真实案例我当时讲了一个WebSocket断线重连时出现消息重复消费的问题从现象、定位抓包日志分析、到解决客户端生成消息幂等ID服务端去重完整讲了一遍。面试官追问“为什么想到了这个方案”我说是在看消息队列相关文章时受到幂等设计的启发。字节秋招整个流程走下来给我的感觉是基础扎实的人一面能稳过但二面三面拼的是项目思考深度和知识体系完整度。面试官很年轻交流氛围相对轻松但题目的密度和深度是四家里最高的。3. 阿里巴巴体系化考察与业务认知3.1 阿里的面试风格完全不同阿里的面试流程比较长我当时面的是前端岗位一共经历了四轮技术面加一轮HR面。整体感受是阿里更看重候选人的技术体系和业务敏感度问题不追求快准狠但会层层递进逻辑性极强。一面开头和大部分公司一样是自我介绍。阿里一面的面试官很温和没有急着出题而是问我“你是怎么学前端的”。这个问题看似闲聊其实是在考察学习方法和自驱力。我的回答是从大二接触网页制作讲起然后说到开始看Vue源码、写技术博客、参与开源项目。这个过程中要突出“我自己有主动学习的动力”而不是被动接受课程内容。技术题部分阿里比较喜欢从你的回答里找下一个问题。我记得很清楚当时聊到原型链面试官让我说Function和Object的关系并且画出原型链图。这个问题我到现在都认为是JS基础最经典的考点Function.__proto__ Function.prototypeObject.__proto__ Function.prototypeFunction.prototype.__proto__ Object.prototype。能把这个关系理清楚说明对JS对象机制真的理解了而不是死记硬背。3.2 Vue/React底层原理绕不开而且问得很深阿里一面和四面都问到了框架原理。我主要用的是Vue所以被重点问了Vue的响应式原理。面试官问“Vue 2的响应式是基于Object.defineProperty实现的那这个方案有哪些缺陷Vue 3为什么改成Proxy”这个问题属于“只要准备过就能答好”的类型我分了三层来回答。第一层说Object.defineProperty只能拦截属性的读取和赋值对数组的push、pop等方法是拦截不到的所以Vue 2需要重写数组方法。第二层说新增和删除属性无法被检测到所以Vue 2提供了Vue.set和Vue.delete来弥补。第三层说Proxy可以直接代理整个对象包括属性新增、删除、数组索引和长度变化而且性能上惰性劫持比递归遍历更好。回答完之后我主动补充了Vue 3的reactive和ref的区别把整个知识链讲完整了。React方向我也被问到过最典型的是“React setState到底是同步还是异步”。这个问题如果只回答“异步”那就太浅了关键是要说清楚在React事件处理器和生命周期函数里setState是异步批处理的但在setTimeout、原生事件回调或者Promise回调里它是同步执行的。更深一层的原因是React 18的自动批处理和fiber调度机制setState不是真正的异步而是因为React需要把多次更新合并成一次渲染所以表现出“看起来是异步”的效果。这两家我都面过之后最大的感受是Vue和React原理并不是二选一只要前端面试就会问最好两个都准备。阿里的面试官尤其喜欢让你对比两个框架的设计差异这背后考察的是你对前端框架本质的理解而不只是API的使用。3.3 业务场景题从技术思维到产品思维阿里三面的面试官级别较高P8左右问的题目明显偏业务和架构“我们的活动页面大促期间流量暴涨首屏加载变得很慢你会怎么排查和优化”这类题前端面试几乎必考尤其是电商业务。我的回答思路是分步骤的先明确症状是首屏慢然后按照“网络链路—资源体积—渲染路径”三方面排查。网络链路看DNS解析、TCP连接、有没有CDN回源慢的问题资源体积看JS/CSS有没有做代码分割有没有加载不必要的依赖渲染路径看有没有阻塞渲染的脚本、图片有没有懒加载、接口请求能不能提前。优化手段上我提到了SSR和预渲染、路由级代码分割、Gzip、HTTP/2、图片WebP和CDN加速。面试官听完没有继续追问方案而是问了一句很有意思的话“如果老板说我不管你说的这些技术手段明天就要上线你怎么推动”这个问题考的是落地能力。我的回答是先做性能分析定位最大瓶颈优先做性价比最高的改动比如压缩图片、开启Gzip小步快跑灰度上线用数据证明优化效果后再争取更多时间做深度优化。这个回答方向应该是对的面试官点了点头。阿里的HR面是我面过的所有公司里问得最细的它会考察你的家庭情况、课余时间安排、职业规划、对加班的预期等。这里我给的建议只有一个真实但积极。不要说空话套话但也要展现抗压能力和学习意愿。4. 腾讯网络基础与性能优化是重头戏4.1 网络协议题这些经典考点一定要背熟腾讯系的前端面试有一个很明显的特征对计算机网络基础问得特别多、特别细。我面腾讯一共三面每一面都问了TCP相关的问题。一面问“说说TCP的三次握手和四次挥手”二面问“为什么TCP要三次握手而不是两次”三面问“HTTP和HTTPS的区别”。这些题目看着基础但想答出亮点不容易。比如三次握手的问题不能只背流程要能回答“两次握手会有什么问题”。我的理解是两次握手服务端无法确认客户端是否已经收到自己发送的同步报文如果第一次握手的请求在网络中滞留客户端会重发服务端就会建立两个连接造成资源浪费三次握手可以确保双方都有收发能力并同步初始序列号。HTTP缓存也是腾讯面试的重灾区。面试官让我详细讲讲浏览器缓存机制我的回答分两条线强缓存Cache-Control、Expires和协商缓存Last-Modified / If-Modified-Since、ETag / If-None-Match然后重点说了为什么有时候修改了文件名但浏览器还是显示旧内容——因为HTML文件本身的缓存策略不对。腾讯的面试官似乎很喜欢用这套理论来解释线上问题我建议大家把缓存机制和实际场景结合起来准备。4.2 性能优化从输入URL到页面显示这条链路要能讲明白腾讯一面的最后一道题是一道综合性的性能优化题“从浏览器地址栏输入网址到页面完全展示中间发生了什么每一步可能影响性能的点在哪里”这道题基本是前端面试必考题但腾讯问得更细要求每个环节都说出可优化的点。我按步骤展开第一步DNS解析优化点是DNS预解析dns-prefetch和CDN边缘节点缓存第二步TCP连接优化点是HTTP/2多路复用减少连接次数、TLS握手优化TLS 1.3第三步发送HTTP请求优化点是减少请求数量合并、雪碧图、请求体积Gzip、Brotli第四步服务端处理优化点是缓存策略、SSR直出第五步浏览器解析HTML并构建DOM树和CSSOM树优化点是CSS放head、JS放body末尾加defer第六步渲染优化点是减少重排重绘、使用will-change、虚拟滚动等。回答完这一长串之后面试官问了个很实际的问题“这些优化手段里你觉得哪个是收益最大但大家最不愿意做的”我的回答是“分析和数据埋点”因为很多团队只做优化不衡量效果没有数据支撑后续优化就像无头苍蝇。这个回答算是比较有共鸣的。4.3 手写代码环节实现一个有难度的场景题腾讯二面有一道手写题让我印象非常深刻“实现一个带并发控制的请求调度器要求最多同时发起N个请求请求结束后自动取下一个待执行任务。”这题考察的是异步编程和队列思想。我当时用了class来实现内部维护一个任务队列queue和一个当前活跃请求数activeCount。核心逻辑是add方法把任务包装成Promise放入队列然后调用runrun检查activeCount max时从队列里取出任务执行执行完后无论成功失败都要递减计数然后继续调用run。这道题代码量不大但很考验对Promise执行时机的理解尤其是finally处理活跃数递减这个细节。面试官后来加了一个追问“如果某个请求永远pending会不会有问题”我回答会出现“任务卡死”现象因为活跃数永远不会降下来所以需要给请求加上超时控制用Promise.race包裹。面试官对我的补充比较认可。腾讯整体的面试节奏比字节稍微舒缓一些但问题的深度不减。给我的感觉是腾讯很看重候选人的网络基础、性能优化意识和代码稳定性这跟腾讯不少业务对高并发访问场景的重视密切相关。5. 美团工程化、微前端与团队协作5.1 工程化考察webpack配置问得很细美团在前端工程化方面的积累是有口碑的所以在美团面试的整个过程中我明显感觉到面试官对工程化的考察占比很大而且问得特别细。一面问的是webpack基础“webpack的loader和plugin有什么区别你项目中用过哪些loader和plugin”这个问题我准备得很充分。loader本质上是一个转换器作用是在模块加载过程中对文件内容进行编译转换比如babel-loader把ES6转成ES5、css-loader处理CSS中的import和url()、style-loader把CSS注入到DOM中。plugin则是基于事件流Tapable的扩展可以在webpack构建的各个生命周期节点上执行额外的任务比如HtmlWebpackPlugin自动生成HTML、MiniCssExtractPlugin抽离CSS、BundleAnalyzerPlugin分析打包体积。两者定位完全不同一个管“转换”一个管“增强”。二面问得更深入“如果你的项目构建时间从10秒涨到了2分钟你会怎么优化”这个问题考的是webpack构建性能优化。我答了几条实用手段用HappyPack不过现在更推荐thread-loader开启多进程构建、用cache-loader缓存loader结果、用DllPlugin预编译第三方库、用include/exclude缩小loader处理范围、开启mode的production自动压缩、把sourceMap从eval-source-map换成cheap-module-source-map。美团面试官显然是对这块有实操经验的我在说DllPlugin时他补了一句“这个方案现在维护成本很高Vite项目里已经不太用了”说明他对工具链的演进很了解。5.2 微前端面试里的加分项也是实际业务里的真需求美团三面聊到了微前端。这当时让我有点意外因为面到三面本来以为会问架构或业务理解结果面试官从我的简历上看到了一个“后台管理系统迁移”的项目经历顺势就问“如果老项目是jQuery时代的旧代码公司希望逐步迁移到新框架你会怎么设计迁移方案”这个问题其实就是微前端的典型落地场景。我的回答是先介绍微前端核心思想主应用负责加载和调度子应用子应用可以独立开发、独立部署技术栈可以不同。然后说方案选型可以自己实现基于single-spa的封装也可以直接用qiankun阿里开源或者micro-app京东开源这类现成框架。我当时的项目就是基于qiankun实现的所以回答时很自然地讲了主应用如何注册子应用、子应用如何暴露生命周期钩子、JS沙箱如何处理全局变量冲突、CSS隔离怎么做。面试官接着问了一个很刁钻的问题“你是怎么处理子应用之间公共依赖的是每个子应用都打包一份React还是抽出来”这刚好是我实际项目中纠结过的问题。我的实践结论是如果网络环境好可以抽公共依赖用externals配合CDN引入如果在内网环境且网络不稳定就各打包各的牺牲体积换稳定性。面试官对我的“不能盲目追求优雅方案得看环境约束”这个观点很认可这让我觉得美团确实在考察候选人的落地思维而不是空谈架构。5.3 团队协作与项目复盘软实力也是硬指标在美团二面的时候面试官问了一个让我印象很深的问题“如果你的同事写的代码出了线上问题但影响面很大你会怎么处理”这个问题初看是考察责任心实际上是在考察危机处理能力和协作方式。我当时的回答分了四个步骤先保证业务可用如果问题很严重先回滚到上一个稳定版本然后拉上相关同事一起排查不指责、先定位定位到原因后在群里同步进展给出根因分析和修复方案最后组织复盘看能否通过自动化测试、code review机制避免同类问题。美团面试官听完之后说“你这样的处理方式在团队里是受欢迎的。”这句话对我的认可度很高。美团整体给我的感受是务实、认真、重视工程化和协作意识。面试流程相对紧凑没有太多花哨的拷问但每个问题都贴近实际工作场景是个很适合踏踏实实做事的人去的公司。6. 高频考点整理一份可速查的“八股文”清单面完这四家之后我把面试中被反复问到的高频考点整理成了一张清单。虽然网上有很多“前端面试八股文”但自己亲手整理一遍的效果完全不一样建议你也这么做。表格里这些是我被问到的原题或者同类题我按模块做了分类模块高频考点考察频次JS基础闭包、原型链、this指向、事件循环、深浅拷贝四家全部涉及异步编程Promise、async/await、微任务宏任务、手写Promise四家全部涉及浏览器渲染流程、重排重绘、缓存机制、存储方案四家全部涉及网络TCP三次握手/四次挥手、HTTP缓存、HTTP/2、HTTPS腾讯、美团问得最多CSSFlex、Grid、BFC、水平垂直居中、CSS选择器优先级字节、腾讯爱考手写框架虚拟DOM、diff算法、Vue响应式原理、React fiber阿里、字节问得最深工程化webpack构建原理、loader与plugin、构建优化、微前端美团问得最多性能优化首屏优化、代码分割、懒加载、SSR腾讯、阿里必考算法链表、二叉树、双指针、滑动窗口、动态规划入门字节笔试、其他视频面6.1 JS基础闭包、作用域、事件循环JS基础是所有前端面试的入场券这部分如果答不好后面再强的项目经验也救不回来。我就被问到过一道看似简单但非常容易翻车的题“var和let的区别除了作用域还有什么”很多人会答“var有变量提升let没有”但更关键的是let存在暂时性死区TDZ在声明之前访问变量会报ReferenceError而var只是undefined。还有全局作用域下var声明的变量会成为window的属性let不会。事件循环是另一个被反复问的点。有一次面试官直接让我“讲一下事件循环”我没急着背微任务宏任务的顺序而是先画了一个执行栈和任务队列的图来说明然后举了一个经典的例子console.log(script start)、setTimeout、Promise.resolve().then的执行顺序。最后由这个例子引到“为什么需要事件循环”这个问题上——因为JS是单线程的而浏览器的I/O操作是异步的只有通过事件循环机制才能在阻塞主线程的同时处理异步任务。6.2 浏览器与网络缓存、渲染、跨域浏览器缓存机制值得单独拿出来说因为几乎所有公司都爱考。我建议你按照“强缓存-协商缓存-缓存位置-实际场景”这条线来复习。强缓存相关字段是Cache-Controlmax-age、no-cache、no-store和Expires协商缓存相关字段是Last-Modified/If-Modified-Since和ETag/If-None-Match。面试时一定要说清楚no-cache并不是“不缓存”而是“每次都要向服务器验证是否可用”很多人栽在这里。跨域问题也是高频中的高频。CORS的简单请求和预检请求preflight的区别、跨域的解决方案JSONP、CORS、代理、postMessage、以及如何配置Nginx反向代理解决跨域这三层都要掌握。腾讯面试官问得很细“预检请求的Access-Control-Allow-Methods如果没写OPTIONS会怎么样”这个问题我当时答得不太完整后来查资料才知道预检请求的方法是OPTIONS如果服务端没有在Access-Control-Allow-Methods中显式允许浏览器就会认为跨域失败。6.3 框架原理虚拟DOM、diff算法、响应式框架原理题是拉开差距的地方。虚拟DOM的题目比较常规“为什么需要虚拟DOM直接操作真实DOM不行吗”我的理解是虚拟DOM的价值不在于“比直接操作DOM更快”而在于把“命令式操作DOM”抽象成“声明式描述UI”让开发者可以专注于状态管理由框架负责高效地更新视图。跨平台能力也是虚拟DOM的重要价值React Native和小程序就是利用这个特性。diff算法的题目要能说清楚为什么同级比较、为什么用key来优化列表更新、key为什么不能用index。我在字节二面被问过“列表渲染时key取index会有什么问题”我回答如果列表顺序发生变化复用的组件会获得错误的DOM状态比如输入框中的内容会串到其他行。面试官追问“怎么解决”我说用唯一id而不是index做key如果没有唯一id可以考虑给数据项增加唯一标识字段。响应式原理我前面已经提过这里再补充一个点Vue 3的computed是基于effect和依赖收集实现的计算属性只有在依赖变化时才会重新求值并且内部有缓存机制。React和Vue在设计理念上有本质区别React是“UI f(state)”状态变化后通过diff去更新Vue是“状态变化后精确追踪依赖并更新”。面试官很喜欢你对比这两者因为这是考察你是否真正理解框架本质。6.4 手写题清单面试前一定要练熟手写题是前端面试的特色环节我建议大家把下面这些题练到“闭着眼睛都能写出来”的程度深拷贝考虑循环引用、引用类型、symbol防抖和节流带取消功能和立即执行选项Promise.all和Promise.race的手写实现发布订阅模式 / 事件总线数组去重至少三种方法手写new、call、apply、bind函数柯里化实现一个简单的useState/useEffectReact原理二叉树的前中后序非递归遍历基于数组的队列和栈这里特别强调一下手写Promise.all我在腾讯二面手写题环节差一点挂在这道题上。核心思路是返回一个新的Promise遍历传入的所有Promise记录每个的结果用计数器判断是否全部完成如果某个Promise reject直接reject整个结果。要特别注意处理传入值是普通值的情况需要用Promise.resolve包一层。7. 踩坑实录与心态管理我走过的弯路希望你别走7.1 三个让我差点挂掉的失误第一个失误发生在字节春招实习面试时简历上写了“熟悉Node.js”但实际并没有做过任何Node服务端的项目。面试官追问了“Node.js怎么处理请求并发”时我只能硬着头皮瞎编结果被面试官当场指出逻辑漏洞。那次之后我删掉了简历上所有没有实际经验支撑的技术栈在面试中不设防的真实比不懂装懂要重要得多。第二个失误是阿里二面时面试官问我“TCP和UDP的区别”我答了“TCP可靠、UDP不可靠”之后就停住了。面试官追问“TCP是怎么保证可靠传输的”我一时语塞场面很尴尬。复盘之后我才意识到基础概念类的回答一定要做成体系TCP的可靠传输包含校验和、序列号、确认应答、超时重传、流量控制、拥塞控制六个方面从这六个维度去答面试官会觉得你是真的理解而不是背概念。第三个失误是美团终面我答漏了一个问题。当时面试官问我“你的职业规划是什么”我回答得特别空“想在技术上不断精进成为一个优秀的工程师”。后来HR反馈说这个回答“太单薄”。正确的思路应该是结合部门和业务方向说出自己三到五年的阶段性目标比如“前两年在业务中打牢基础做好模块负责人三到五年深入工程化和性能优化方向能独立负责一条业务线的前端架构”。有具体方向、有可操作步骤的回答才显得真实可信。7.2 面试节奏与offer选择心得秋招面试的时间跨度很长我四家公司面完差不多用了两个月。这中间最容易出问题的不是技术不行而是心态崩掉。我记忆最清楚的是阿里三面和腾讯二面排在了同一天上午面完阿里状态还行下午面腾讯时明显感觉精力不够用回答问题语速都变快了。所以面试安排一定要预留充足休息时间一天最多安排一到两场不要贪多。关于offer选择我的经验是不要只看薪资和公司名气。我最后在腾讯和美团的offer之间纠结了很久两者的薪资差距不大但业务方向差异明显。我最终选择美团是因为面试时和团队主管聊得非常细他对技术方案的思考深度和对团队成员的培养规划都很清晰这比“大厂光环”更让我安心。回头看我身边拿到不错offer的同学共同点都是不盲目海投把精力花在最想去的几家公司上不焦虑别人面试进度按自己的节奏准备不打无准备之仗每次面试结束后都当天完成复盘记录所有没答好的问题。7.3 给学弟学妹的实用建议如果你正在准备前端校招我最想给你的建议有三条第一条把基础打牢比追新框架重要得多。现在前端框架更新很快今天学明天可能就换了但Javascript语言本身、浏览器原理、网络协议、数据结构和算法这些底层知识十年之内变化不大。我面试时发现面试官最看好的并不是我知道多少新库而是遇到陌生问题时的分析能力。第二条每场面试后一定要做复盘笔记特别是把没答上来的题记下来回去查资料弄懂。我整理了一份80多题的面试错题本秋招后半段基本只刷这些错题和薄弱点效率比漫无目的地看面试题文章高很多。我在美团三面前就靠复盘笔记把微前端的知识点补上了结果面试正好考到这种感觉非常值得。第三条面试中遇到不会的题很正常不要慌。可以先说“这块我了解得不够深入但我的初步理解是这样的”然后给一个思路。面试官往往更看重你面对未知问题的反应而不是你什么都会。我腾讯三面被问到“Service Worker实现离线缓存时更新缓存和页面显示的版本不一致怎么解决”时确实不太会但我从浏览器加载流程和缓存优先级的角度做了推理面试官没有打断我而是听完之后补充了正确的解决方案。这种“不会但敢想”的态度很多面试官是认可的。面完这四家之后我最大的感受是前端校招面试虽然看着题目又多又杂但内核其实是稳定的——基础、项目、软素质、学习能力这么多家公司考的也无非是这四件事。希望这篇面经能帮你在准备过程中少走一些弯路。最后再分享一个我亲身验证过的小技巧每次面试前找一个朋友帮你模拟面试一轮哪怕朋友不懂前端也没关系把要讲的思路说出来和在心里默念是完全不同的体验多说几遍之后正式面试时你会自然很多。
返回列表