
2020年6月我在整整两个月的闭关刷题之后终于鼓起勇气点开了视频面试链接。那段时间的求职状态挺有意思的远程办公刚成为常态线上面试从少数公司的备选方案变成了几乎所有公司的默认流程。身边不少朋友连续挂了几场心态有点崩我自己也经历过一段感觉自己什么都不会的低谷期。但回过头看2020年上半年这一波线上面试潮其实暴露出很多以前没人讲清楚的面试技巧和踩坑点比如在线coding怎么和面试官配合、项目复盘怎么讲到点子上、技术面追问答不上来怎么救场。这个系列就是想把我的真实经历和复盘整理出来第一篇先覆盖求职准备、算法、技术栈、项目深挖和行为面这几个最核心的模块适合正在准备跳槽、或即将开始校招社招的朋友参考。1. 线上面试成为主流的这个6月求职节奏要跟着调整1.1 线上面试到底改变了什么2020年6月我最大的感受是面试的物理门槛变低了但信息损耗变大了。以前去公司面试面试官能看到你整个人你们共享一块白板你的反应、表情、思考过程都是沟通的一部分。现在屏幕一隔大家都盯着共享编辑器面试官常常只能看到你的光标在闪。这个变化带来三个直接影响面试轮次变多变碎。有些公司因为不用预约会议室交叉面约得很随意多了一到两轮聊天式的技术面考察内容变得飘忽得随时接住面试官随机抛来的问题。coding环节的互动方式变了。多数公司的在线编辑器不支持本地编译写错了只能靠眼睛查有些公司允许你本地写代码再共享屏幕但面试官其实更希望看到你边说边写。沟通成本被放大了。网速不稳、耳机回声、听不清对方的问题都会让面试体验直线下降。我第一个视频面试就是吃了这个亏——对方问我讲讲你们项目的缓存策略我硬是听成了讲讲你们项目的并发策略答到一半面试官皱眉打断场面一度很尴尬。所以如果你也处于线上面试环境我建议先把设备自检当第一优先级提前一天测试摄像头、麦克风、网络准备一副带降噪的耳机而不是依赖电脑外放开视频前用手机录一段自己讲项目的视频检查环境噪音。这些看起来很小的事直接影响你在面试官心里的第一印象。1.2 投递节奏和简历侧重点6月的招聘市场有个特点头部公司的岗位放出来很快招满也就一两周。我当时的策略是分层投递先投两家不是最想去、但流程规范的中型公司作为热身熟悉面试节奏再集中投目标公司和备选公司。热身公司的面试能帮你快速发现自己准备上的缺口比如我第一次面完就发现自己简历上一个用了三年的技术名词竟然讲不清楚底层原理。简历方面我踩过一个经典的坑。第一版简历写得太像JD复读机负责xx模块的开发与维护使用xx框架完成xx功能投出去好几周只有零星回复。后来我把每条项目经历改成问题-动作-结果的形式比如针对首屏加载慢的问题将图片改为WebP并做路由级代码分割页面加载时间从3.2秒降到1.1秒效果立竿见影。面试官的问题也更聚焦了会顺着你写的结果去追问细节你提前准备过的问题命中率反而更高。2. 算法题不是背题是一边思考一边沟通的过程2.1 那段时间高频出现的算法题型与优先级我统计了自己刷过的200多道题和身边朋友遇到的面试题发现2020年上半年算法考察集中在几个方向按出场频率大概是题型典型题考察核心数组与双指针三数之和、合并区间、接雨水边界处理和空间意识链表反转链表、环形链表、合并K个有序链表指针操作与递归思维二叉树层序遍历、最近公共祖先、路径总和树形结构的遍历框架动态规划打家劫舍、最长上升子序列、编辑距离状态定义与转移方程字符串无重复最长子串、括号生成、字符串解码滑动窗口与栈这个表不是让你背题而是建议你按优先级分配刷题时间。如果时间紧数组和二叉树优先因为它们最能体现思路是否清楚动态规划这类题往往是区分度最高的能想明白状态转移就能加分卡住了也不会直接判死刑关键看你怎么和面试官互动。我当时准备的方法比较笨但有效每做完一道题写一页笔记内容只有题目、思路、时间空间复杂度、一两个容易踩的边界点不写完整代码。这样笔记越来越薄考前只看笔记逼自己在脑子里复现解题链路。这个方法的额外好处是面试时即使遇到原题我也不会变成背答案模式而是能讲出推演过程。2.2 现场讲题的节奏和救场方法很多人的误区是写对代码就行了。其实在线面试的coding环节面试官更在意你怎么思考。我第一次在线coding就吃了闷亏上来直接写双指针最优解写完对面沉默了几秒问你上来就直接最优解是因为见过这个题吗那一刻我意识到缺少思考过程的答案反而让面试官怀疑。后面我总结出一套讲题节奏实战下来很稳先复述题目主动确认输入输出边界和异常情况比如数组为空怎么返回结果有多个要都输出吗。这会让面试官觉得你严谨。从暴力解或直觉解法说起比如先想到用哈希存遍历过的值复杂度是O(n)再讲怎么优化到双指针。即使最终只写一种解法也要让面试官看到你的思考层次。写完代码别急着说写完了自己挑一个测试用例走一遍流程顺手发现可能的越界问题。主动提复杂度包括时间和空间再说一句如果要优化可以从xx方向尝试。这套流程的核心是营造结对编程的氛围。面试官参与进来对你的容错度反而更高。另外一个救场方法也很重要卡住的时候不要冷场。你可以说给我一点时间梳理一下我现在的思路是……卡在这一步是因为……。大多数面试官会愿意给提示关键是让对话持续下去。我遇到一次动态规划卡壳面试官提示了你觉得这里需不需要二维状态我顺着他的提示往下走最终也写出了正解。3. 技术栈追问越来越深拼的是理解而不是用过3.1 前端方向React、浏览器与性能优化就我观察2020年前端岗位对React的考察细到让人头皮发麻。搜索react面经高频问题包括函数组件和类组件的本质区别、useEffect的依赖数组怎么工作的、React的diff算法和key的作用、Fiber架构解决了什么问题、状态管理工具到底解决什么问题、从输入URL到页面渲染全过程、前端性能优化手段等。我印象最深的是面试官问为什么React要引入Fiber。这个问题考察的是你有没有从架构层面思考过而不是停留在API使用。如果只说为了解决页面卡顿太浅了如果能提到React16之前的同步递归渲染无法中断、页面的渲染和用户交互抢占主线程、Fiber把渲染拆成一个个小单元并通过空闲时间调度再结合自己项目里遇到的长列表场景说一下优化前后的对比面试官才会点头。还有一个避不开的环节是手写题。我当时整理了一份高频手写清单防抖节流、深拷贝注意处理循环引用和Date/RegExp、手写Promise、数组去重至少说三种办法、实现一个简化版useEffect。面试官考手写不是考记忆力而是看你对JS运行机制、闭包、异步的理解是否真实。比如深拷贝很多人会背出一段递归但问到数组里面有函数要怎么处理Symbol作为key怎么处理就露馅了。准备这类题的时候一定要动手写写熟把边界情况想清楚。3.2 后端方向C、网络与操作系统后端岗位的考察点同样很底层。我投的一些偏基础架构的岗位面试官几乎默认你懂C内存管理和网络协议。常见题目包括智能指针的原理和循环引用怎么破、如何排查内存泄漏、堆和栈的区别、进程和线程的区别以及协程、死锁的四个条件和避免方法、TCP三次握手四次挥手、TIME_WAIT存在的意义、HTTPS握手过程。准备这些内容我的建议是不要只看面经答案最好动手做小实验。比如为了真正理解TIME_WAIT我用socket写了一个简单服务端主动关闭连接后查看TCP状态再查阅为什么客户端要等2MSL。为了理解shared_ptr的循环引用我故意构建了A指向B、B指向A的结构观察析构函数是否被调用。这些实验花不了多少时间但能让你在被追问细节的时候因为确实见过而答得更笃定。还有一个很容易被忽视的点简历上的每个技术词都是面试官深挖的入口。你写了用了多线程就会被问你们的线程模型是什么竞态条件怎么处理有没有用原子操作或者锁粒度怎么设计所以准备简历时每写一个技术点都要能讲出三层内容是什么、为什么选它、用的时候踩过什么坑。如果没有真实坑就去查资料补齐理解不要赌面试官不问。4. 项目深挖和场景设计题是拉开差距的关键4.1 用三段式讲清楚一个项目挑一个你最满意的项目讲一下基本是必问题。我一开始讲项目像报流水账背景、用户、功能、技术栈……讲完面试官脸上毫无波澜。后来我改成三段式效果立刻不一样第一段这个项目解决什么核心问题。一两句话说清楚业务背景和痛点不要上来就堆技术名词。第二段我承担什么职责遇到的最大的技术难点是什么我做了哪些方案对比为什么最终选这个方案代价是什么。第三段最终结果和复盘。用数字说话比如接口响应时间、崩溃率、用户量增长再说一句如果重来哪里会调整。最关键的是第二段里的难点和选型过程。很多候选人全程都在讲通过xx框架实现了xx听起来像在背项目周报。面试官真正想听的是这个技术坎是怎么被发现的你当时有没有考虑过其他方案最后的选择是基于什么权衡回答这些问题时要突出我而不是我们。比如我之前碰到上游接口超时导致整个请求链变慢对比了同步等待、异步回调、本地缓存三种方案最后为了实时性和实现成本之间的平衡选了本地缓存加超时降级这比我们用xx做了优化有说服力得多。我当时准备项目的方法很笨但很有效把简历上每个项目写成一份项目问答文档列了30个面试官可能追问的问题例如你的数据一致性怎么保证为什么不用Redis而用本地缓存如果系统流量再大10倍你怎么设计等。每天早上花20分钟读文档读到可以不看文档直接开讲的程度。后来我面试时确实被问到了其中七八个问题提前有准备回答的条理性和自信度完全不一样。4.2 场景设计题从混沌需求到有条理方案场景题对经验不多的候选人来说最容易慌但其实有套路可循。当时我遇到最多的是两类一类是功能设计比如设计一个短链服务设计一个实时聊天系统的消息模块另一类是性能调优比如线上接口突然变慢了你怎么排查。功能设计题我习惯用这个框架先问需求边界。用户量大概多少读写比例如何短链是否需要自定义需不需要过期时间把模糊问题变成具体问题。画高层架构。前端怎么交互、后端提供哪些接口、数据存储怎么做不需要画太细但要让面试官看到全局。展开关键细节。比如短链生成算法哈希冲突处理还是发号器、数据量估算用QPS和存储大小算一算、缓存策略、如果量大了怎么办。提扩展性。缓存、分库分表、消息队列、读写分离不必全用但要有我知道系统会演进的意识。这套框架最大的作用是让面试官看到你有从模糊需求到可执行方案的抽象能力哪怕方案不是最优逻辑通顺也能拿不错的基本分。性能调优题则更看重排查路径。我通常会先确认现象比如是偶发还是必现、是单接口还是全站、是变慢还是超时然后分层排查先用top、ping看机器和网络再看应用日志和慢SQL最后定位到具体瓶颈提出假设后用监控或复现来验证。加分项是主动提到监控和全链路日志这会让面试官觉得你有真实线上经验而不是只会背八股。5. 行为面和HR面别在最后放松警惕5.1 行为面试常见问题与回答思路技术面通过后行为面或HR面的淘汰率其实不低。常见问题有你最有成就感的事是什么你和同事产生过分歧吗怎么解决你最近在学什么新东西你怎么看待加班你的职业规划是什么回答这类问题的核心是真实结构化。我用的方法是情境-行动-结果但最重要的是避免空洞表态。比如被问你怎么看待加班低分回答是能接受年轻人多干点没事高分回答是我理解项目紧张时加班是必要的但我更倾向于通过优化流程和工具来减少无效加班。之前我在xx项目里通过导入自动化脚本把每天重复的发布工作从2小时压缩到20分钟让大家把时间花在更有价值的事上。这种回答既表明态度又展示了能力。还有一个小技巧准备案例的时候至少准备三个不同方向的故事分别是技术攻坚、团队协作、推动力。每个故事控制在2分钟之内讲完不要夹杂太多细节面试官追问时再展开。我当时就把做过的一个紧急故障排查经历反复打磨成了300字左右的版本后来在三次面试中都用了效果都很稳定。5.2 HR面聊薪水和提问环节避坑要点HR面相对轻松但细节决定成败。我自己的体会是谈薪前先想清楚底线和预期区间。不要直接报一个死数可以说我了解市场上这个岗位的薪资区间大概是xx到xx结合我的经验期望在xx左右。把问题抛给HR看他们怎么回应。被问到当前薪资时可以委婉一点比如我更关注的是这个岗位的薪资结构和整体发展空间如果对方坚持问给一个区间而不是精确数字。不要急着透露手里其他offer除非已经进入谈薪阶段那时候多个offer确实可以成为谈判筹码但要用得聪明。反问环节不要只问加班多吗这会显得关注点有点窄。我更推荐问团队目前最大的技术挑战是什么这个岗位在未来3-6个月最需要解决的事情是什么团队的技术氛围和成长路径是怎样的。这类问题既能帮你判断岗位是否适合也会让面试官觉得你思考深入。HR面本质是在评估你的合作成本。表现出焦虑、斤斤计较、毫无主见或者反过来过度强势都可能让人力在最后关卡把你拿下。保持礼貌、真诚、有主见是最好的姿态。6. 复盘与排坑实录这个系列第一篇先讲到这6.1 这一轮面试暴露出来的三个真问题6月我面了5家公司拿到2个offer。复盘下来暴露的问题很典型写出来给大家参考一开始基础题太求快边缘case考虑不周挂了两家二面。问题出在前期刷题形成了一种背答案的惯性遇到见过的题就直接写没仔细确认题目要求。后来我强迫自己每道题先花一分钟复述输入输出再动手。项目讲解缺乏量化数据被面试官连问提升了多少并发量多少的时候有点慌。面之前总觉得项目数据大概知道就行但面试官要的是精确数字甚至是你怎么测算的逻辑。后来我把每个项目的核心指标整理成了表格贴在准备文档最前面。在线面试的工具准备不足。有一次因为耳机回声严重面试官说你那边有点吵能换个设备吗我手忙脚乱换耳机节奏被打乱。后来我固定了一套设备检查清单视频软件提前打开、摄像头角度调好、蓝牙设备关闭、网络用有线或者5GHz频段确保不再出幺蛾子。这三个问题其实都不是能力问题而是准备问题。如果你正在面试我特别建议做一次模拟面试找朋友来扮演面试官或者用录音工具录下自己讲项目的过程。你听一遍就会发现自己讲项目时的语气、条理和深度往往比感觉中差很多。6.2 面经的价值是地图不是答案马上要写系列第二篇了预告一下下一篇我计划单开一篇整理高频手写题清单第三篇写系统设计场景题的完整答题模板还会结合真实例题一步步拆解。毕竟面经这个关键词搜索量一直很高说明大家都在找高效准备的路径但我想提醒的是面经真正的价值是一张地图帮你看到考察范围和重点题型而不是背下来的标准答案。如果你把宝押在背会这100道题就能过面试官随便往后问一句你就容易翻车反过来如果你把面经里的每个考点都当成一个索引回到源码、文档、实验室里把它吃透涨回来的不只是面试能力还有实打实的技术功底。关于2020年6月这段求职经历我个人最深的体会是面试本质上是在有限时间里高效沟通的职业技能而技术能力只是其中一个输入项。你会不会讲项目、会不会和面试官互动、会不会在卡壳时继续推进对话这些软技能决定了你技术能力的兑现率。如果你正在准备面试多给自己一点耐心把重心放在理解原理而不是背题上。基础扎实了节奏找对了结果通常都不会太差。这篇先聊到这儿我们下一篇见。