ARTICLE DETAIL

资讯详情

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

前端面试经验:西安与杭州城市对比、技术栈与Offer选择

前端面试经验:西安与杭州城市对比、技术栈与Offer选择 2019年12月我在两个城市之间跑了一整月面试手里攥着两套简历投递记录一套标着西安一套标着杭州。那阵子前端市场刚从年中回暖招聘量比2018年寒冬期明显活跃但面试难度没有降尤其对三年左右经验的中级前端考察维度已经从“会不会写页面”变成了“能不能独立扛项目”。这篇前端面经我把面试中真正被问到的技术点、两个城市真实岗位差异、以及谈薪和选Offer的细节全部整理出来给正在准备跳槽的人一个参考。没有废话按面试流程讲。先交代背景再拆题最后说一些只有跑过两个城市才会懂的经验适合正在准备前端面试的人也适合纠结去哪个城市发展的同学。1. 为什么是2019年12月为什么是西安和杭州1.1 那个时间点前端的招聘环境2019年下半年前端就业市场处于一个微妙的平衡阶段。一方面PWA、微前端、Flutter跨端这些概念开始频繁出现在JD里另一方面大部分公司的实际业务还在用Vue 2和React 16写管理系统。这导致一个典型错位面试官按“未来趋势”出题候选人按“日常业务”准备互相都觉得对方不靠谱。我自己的体感是12月不是招聘旺季但反而不容易被淹没。秋招刚结束社招主力都在等年终奖愿意冒着损失年终奖风险出来看机会的人不多竞争反而小。投出去的简历回复率明显比九十月份高约面试也顺利。1.2 西安和杭州的岗位供给画像选择这两个城市是因为它们代表两种典型前端生态。西安是传统软件外包和银行软开的大本营国网、银行、军工软件供应商密集岗位JD里写Vue的比例极高技术栈相对统一工资区间集中在10k到15k。杭州则是互联网快消品化最典型的地方电商、直播、SaaS、ToB服务五花八门技术栈分裂严重有写React的、有写Vue的、也有直接上TS加微前端架构的薪资范围从12k到25k甚至更高都有。看下面这个对比就能感受差异维度西安杭州主要岗位来源银行软开、外包、本地软件企业互联网大厂、创业公司、ToB服务商主流技术栈Vue 2 Element UIReact / Vue / 微前端 / TS中高级前端薪资10k - 16k14k - 25k面试轮次2-3轮3-4轮对算法考察基本不考察一二面常出现住房成本两室月租2k-3k带独卫单间2k-3k这也是我为什么选择这个时间点把两个城市都跑一遍西安的面试节奏快、技术偏向实用性可以在短时间内验证自己的工程能力杭州的面试深度强、链路长可以测出自己在算法和原理层面的短板。跑完后两个城市的Offer互相之间也能作为谈薪筹码。2. 简历准备与投递策略两个城市的岗位差异在哪里2.1 简历上的技术栈怎么写才不被刷前端简历在2019年的普遍筛选规则是关键词匹配优先项目经验第二技术深度第三。HR和面试官筛简历时最先看的就是你写没写Vue、React、小程序、Node、webpack这些词。西安的岗位JD里出现频率极高的组合是Vue全家桶加Element UI所以投西安的简历我重点写了用Vue 2.6重写后台管理系统的项目包括动态路由、权限指令封装、组件库二次封装这三个点。杭州的岗位则更看重跨端能力和工程化经验我在投杭州版本的简历里把小程序开发和webpack优化放在显著位置还加了一个TS重构老项目的经历这一招在杭州回复率明显更高。提示同一个岗位方向可以准备两版简历针对不同城市的技术栈偏好做微调但不夸大。面试官一定会按简历上的技术点深挖写上去的内容必须经得起连环追问。2.2 投递渠道和回复周期的实际差异西安的岗位主要通过本地招聘平台和外包中介流转猎头手上大量是银行驻场或外包岗位特点是面试流程短、发Offer快有的当天面完当天就口头通知。杭州的岗位更依赖内推和主流招聘平台面试流程通常需要一到两周因为中间会穿插交叉面和Leader面。我的策略是先投西安用两到三个节奏快的面试练手把自己最擅长的Vue相关题目刷熟再去杭州面那些需要深度原理和算法准备的岗位。这个顺序在实际执行中帮助很大因为面试状态是“练出来”的很久没面的人后面到算法轮很容易卡壳而前面的模拟战能帮你把表达节奏和对高频题的反射速度拉回来。2.3 一个重要经验招聘JD里的隐藏信息2019年底的JD写得比现在就直白得多但也需要反着读。比如职位描述里写“熟悉canvas优先”但工作内容全是后台管理系统的大概率是想找一个人顺手把可视化图表也做了写“不加班”的反而可能是加班最少的一批。还有一条很关键如果JD里根本没有提到团队规模和技术栈版本通常这个团队还在用旧技术或老代码去看岗位上“稳定”的基本都是坑比较深。3. 面试核心八股拆解那个阶段最常问的技术点3.1 JavaScript基础闭包、this、事件循环JavaScript基础题目在西安和杭州面试中都绕不开但考察方式不太一样。西安的面试官喜欢问“闭包是什么”“this指向怎么判断”更侧重概念准确杭州面试官则喜欢直接甩代码让你输出执行结果。有几个题目几乎算是2019年12月前端的必考题我复盘后整理成一段后面面试的同学可以直接拿去自查// 题目1事件循环输出顺序 console.log(1); setTimeout(() { console.log(2); }, 0); Promise.resolve().then(() { console.log(3); }); console.log(4); // 输出1 4 3 2// 题目2this的指向变化 var name global; var obj { name: obj, fn: function () { console.log(this.name); } }; var fn obj.fn; fn(); // 输出 global obj.fn(); // 输出 obj这类题考察的是对执行上下文和微任务/宏任务队列的理解背答案没用需要把调用栈和任务队列的状态在脑子里推演一遍。一个快速入门的方法是记住执行顺序口诀同步代码先执行微任务在宏任务之前清空Promise then注册的回调属于微任务setTimeout回调属于宏任务。3.2 框架原理Vue响应式、diff算法、生命周期Vue 2.x的响应式原理是那个阶段西安面试问得最细的一块。需要说清楚Object.defineProperty如何拦截get和set每个组件实例对应用一个Watcher依赖收集时Dep和Watcher之间如何互相订阅。问到diff算法重点在于为什么是O(n)级别的比较同层比较怎么降低复杂度哪些场景会触发组件更新。杭州的面试则会升级到Vue-Router的实现原理和Vuex的state设计有技术Leader还会追问“如果让你从零实现一个简单的响应式系统你会怎么设计”。这个问题最稳的回答思路是三步先定义Observer观察者再实现Dep依赖收集器最后用Watcher连接数据和视图更新。3.3 工程化与构建webpack配置和优化前端工程化和构建配置是2019年底面试非常高频的场景。西安面试中webpack相关的问题一般只要求解释loader和plugin的区别杭州面试则会上升到优化层面比如首屏加载速度、打包体积、缓存策略。一个我在杭州某家电商公司面试中真正被问到的题目是首屏JS过大你会怎么优化。答案可以从几个方向展开路由懒加载、第三方库CDN化、代码分割按需加载、把公共依赖单独提取、开启gzip、图片压缩和懒加载。最好能随口说出几个配置项比如optimization.splitChunks的chunks参数设为async或all以及它背后的原理。注意问到webpack优化时不要一股脑把所有方案都说一遍。正确策略是给出大方向然后挑一个方案往深处讲比如拆包的权衡逻辑、缓存组怎么设深度比广度加分更多。3.4 手写题和代码输出题面试官真正在考察什么12月那轮面试中手写题比重明显增加了。西安大多手写数组去重、节流防抖、深拷贝属于基础工具函数杭州则会要求手写一个简单的事件发布订阅、手写实现一个Promise.all有一些公司的面试官还会拿LeetCode Easy到Medium的题目现场考察。手写题常见的失分点是不先和面试官确认边界条件就直接写代码。我记得有一次在杭州面试题目是实现防抖函数我拿到就开始写写完了才发现面试官其实是想看最后一次调用之后是否还需要立即执行版的参数控制。从那以后凡是手写工具函数先讲三个问题参数是什么、返回值是什么、边界情况怎么处理。// 带立即执行参数的防抖是面试最常见版本 function debounce(fn, wait, immediate false) { let timer null; return function (...args) { if (immediate !timer) { fn.apply(this, args); } clearTimeout(timer); timer setTimeout(() { fn.apply(this, args); timer null; }, wait); }; }4. 从一面到终面真实面试流程拆解与值得回味的细节4.1 西安两轮技术面加一轮HR面节奏快但深度有限西安一家本地银行软开中心的两轮技术面给我留下的印象最深不是因为题目难而是因为流程特别标准。第一面是技术负责人围绕我简历里写的Vue后台管理项目问了权限控制实现、动态路由注册、按钮级别权限指令封装每一个都是常规问题没有陷阱。第二面是团队里更资深的前端开始追问细节比如Vue Router的addRoutes方法在动态权限里怎么用、刷新页面后权限数据怎么恢复存储。这类岗位面试的特点是看重“能不能快速上手接项目”不太会问源码层面的问题但会反复确认你做过的东西到底是不是自己写的。面试官会挑一个项目细节让你把交互流程从头到尾讲一遍然后开始连环追问数据流设计、错误处理方案、接口异常场景任何一处逻辑漏洞都可能被直接抓出来。4.2 杭州算法轮和项目深挖是分水岭杭州的面试难度是断崖式的。我面的一家做SaaS服务的公司第一面就问了一道LeetCode上“无重复字符的最长子串”的变体难度并不算高但要求在25分钟内手写并讲清楚复杂度。第二面则是项目细节深挖加技术原理连环问面试官会拿着你简历中的一段项目描述一层层追问直到你说不出来为止。最让我印象深刻的是面试官问了一个关于我在小程序里实现图片懒加载的方案我简单回答用intersectionObserver实现后他紧接着就问如果intersectionObserver在低版本微信浏览器里不支持怎么办然后问合理降级方案、这个方案的性能损耗以及有没有考虑过滚动监听和防抖。这类问题没法靠临时背题应对只能靠日常开发时的深度思考积累。4.3 一面到HR面的常规节奏参考综合我12月跑的二十多场面试可以按城市和公司类型总结出一个大致节奏西安外包/银行软开笔试可选 - 技术面1轮 - Leader面 - HR面西安大型企业自研团队技术面2轮 - HR面杭州中大型互联网公司代码面/算法面 - 技术面1-2轮 - Leader面 - HR面杭州创业公司创始人/技术负责人面 - 交叉面 - 谈薪一个细节是杭州的二轮面试经常是交叉面面试官不是未来跟你合作的团队成员。这种面侧重考察协作与思维模式会问你怎么分工、怎么推进项目、遇到和同事意见不合怎么处理。回答这类问题重点不是证明自己技术能力强而是证明自己是一个能合作、能沟通、情绪稳定的人。4.4 一个特别值得留意的面试陷阱反问环节每轮技术面试结束前面试官几乎都会问“你有什么想问我的”这个环节在12月的重要性被很多人忽视了。西安的面试官会更在意你问不问公司业务和项目细节杭州的面试官则更在意你问不问团队技术演进和业务目标。我个人使用最多的反问是这三个团队目前前端的主要技术栈和版本是多少未来一年有做技术升级的计划吗团队前端的研发流程是什么样的有没有设计稿评审和Code Review这个岗位对应的核心业务目标是什么团队现在最大的技术挑战在哪里这三个问题既能展示你是一个关注团队和业务的候选人又能从对方的回答中判断团队状态——如果面试官连技术栈版本都答不上来那这个岗位大概率是刚搭起来的新团队风险需要自己评估。5. 薪资谈判与Offer选择钱、城市与成长的三角博弈5.1 西安薪资谈法关注加班费和稳定性的隐性价值西安的薪资结构比较传统很多公司是固定月薪加年终奖年终奖占比高的能达到4到6个月。谈薪时不能只看月薪要算全年的总包。银行软开岗位还会额外有一些福利性收入包括公积金比例高、餐补、交通补贴算下来月薪虽然不如杭州显眼但实际到手的可支配收入差距被压缩了。另一个隐性价值是稳定性。2019年西安的裁员潮远低于杭州很多岗位能稳定上下班周末基本可以保证双休。对已经有家庭或者更看重生活节奏的人这种稳定性的价值会体现在每天的精力余量上。5.2 杭州薪资谈法用实力说话但也要留好回旋余地杭州的薪资谈判空间明显更大但只对能在面试中证明自己技术实力的人开放。我拿到的一份杭州Offer初始报价比我当前薪资高约30%电话沟通中我表达了更希望对方认可自己的工程化能力并提出希望涨幅在45%左右结果HR没有直接拒绝而是让我追加了一轮技术面最终定在涨幅38%。有两个谈薪经验值得分享。第一所有薪资预期都在电话里沟通不通过文字留底保持谈判弹性。第二给出期望薪资时永远给的是一个带弹性的区间而不是一个具体数字这样HR在内部审批时会有操作空间不至于因为你的报价卡死在某个流程上。5.3 选Offer时真正重要的三个维度面对不同城市的Offer很多人纠结的点都在月薪数字上但结合我自己跑了两个城市之后的体验更建议用三个维度来评价维度权重建议实际考量月薪与总包30%包括年终奖、公积金、加班费、涨薪频率业务与项目35%项目技术深度、业务成长性、工作中能否积累核心技能生活成本与时薪35%房租、通勤、加班时长、可自由支配时间算时薪而不是算月薪是一个容易被忽视的重要方法。月薪15k但每天加班到十点的岗位和月薪12k但六点能下班的岗位换算成时薪后差异没有想象中大。跑完两个城市后我越来越认为第一份工作或第一次跳槽更应该关心自己能积累什么把薪资数字放在第二位去思考。6. 踩过的坑与复盘那些面试后才知道的事6.1 我犯过的三个典型错误第一是投递时间太集中。西安的面试流程和杭州在节奏上差异很大我把面试时间排在一周内结果周一面的公司还在走流程周三面的另一家又已经要求入职时间节奏陷阱导致自己变得非常被动。复盘后我认为更优做法是先在西安面2到3家练手拿到至少一个保底Offer后再集中安排杭州的面试这样心态和底气完全不同。第二是简历里写了不熟悉的技术点。我在简历里写了“熟悉小程序开发”但实际项目里只写过一个工具类小程序面试官让我详细讲自定义组件通信机制和分包加载原理时回答明显不稳。后来我把这句话改成了“了解小程序开发有工具类小程序从0到1的实践经验”场面立刻正常了。第三是算法准备太晚。杭州两场面试都在算法环节表现不好这直接让我失去了进入下一轮的机会。复盘时发现算法题准备并不是一个能临时冲刺的事情需要大量高频题的积累。建议至少提前一个月开始刷题并且对每一道题亲手在纸上画执行过程这样才能在面试时真正理解题目考察点。6.2 关于面试状态管理的一些经验面试状态这件事实际影响远超我的想象。跑西安面试时我连续几天没有休息好自我介绍环节明显发虚后面的技术问题回答得也不够干脆。后来调整了策略每场面试前一天晚上不做任何新题或复习新知识点只把已经掌握的高频题以口述方式过一遍保证睡眠充足。此外我习惯面试当天提前半小时到达面试地点附近的咖啡店找个安静的位置把目标公司的业务和技术栈再看一遍然后心里模拟一遍自我介绍时间差不多了再上楼。这一套流程下来面试前期的紧张感会明显降低。6.3 面试复盘表从每次面试中提炼信息每次面试结束后我都会在当天记录一份复盘笔记包括四块内容被问到的所有题目、每道题回答的流畅程度、面试官追问的方向、以及我自己回答时最有漏洞的地方。这个动作在连续面试了几家之后效果非常明显因为同一分数段的公司问的面试题高度重复复盘几轮之后几乎能预测出下一家公司的出题风格。这类面经总结的方法有人觉得繁琐但真的跑过面试之后才会发现每一次面试都是暴露自己盲区的机会面了不记等于白面。尤其是当你经历了好几个城市、好几轮面试之后只有复盘笔记才是自己最有价值的参考资产。6.4 一些送给后来者的实在建议如果现在让我总结那段跑两个城市面试的经验核心就是一句话先保底再冲刺。先用节奏快的城市和公司拿到一个保底Offer再去挑战那些需要深度准备的岗位你会发现整个人的状态完全不一样。还有一个容易被忽略的点面试不只是公司选你也是你选公司。面试过程中观察面试官的状态和态度能侧面判断这个团队的技术氛围和管理风格。面试官全程没有笑容且不断打断你回答的要慎重面试官愿意在反问环节认真回答你的问题甚至主动分享团队技术规划的通常值得考虑。技术栈会过时市场环境会变化但面试背后真正考察的是长期积累和思考方式。希望这篇面经总结能帮你在面试路上少走一些弯路祝顺利。
返回列表