前言
创业梦碎,回归现实,7 月底毅然裸辞,苦战两个月,拿到了美团和字节跳动的 offer,这算是从业以来第一次真正意义的面试,遇到蛮多问题,比如一开始具体的面试过程我都不懂,基本一直是摸着石头过河,所以结合我的经历和总计的前人经验,总结一下我认为还比较系统科学的面试大纲分享给大家,希望大家在系统的准备之后,都能找到自己满意的工作。
一、知识准备
1. 知识体系
知识体系是重中之重,优秀的开发者很多都有维护自身知识体系的习惯,建立知识体系能帮助认知知识全貌及迅速找到知识的关联,就像对碎片化的知识做了索引,无论工作还是面试中碰到的问题,能很快对号入座,举一反三,哪怕是不熟悉的知识点,也可以使用其他同体系的知识进行关联解释,知识体系可以帮助你尽快了解自己,帮助你查漏补缺,让你能够把宝贵的时间聚焦于自己的薄弱项。
如果还没有自己的知识体系,那就赶快行动起来吧,这里列出一些参考资料帮助你快速行动:
- 相关:浅谈如何搭建知识体系
- 工具:XMind、ProcessOn
- 分类:JavaScript、CSS、Html、计算机网络、数据结构与算法、浏览器原理、Nodejs、工程化、框架、业务项目等
- 自查:现代 JavaScript 教程 (推荐)
- 借鉴:ssh_晨曦时梦见兮、ConardLi、神三元、冴羽的博客、Winty 的前端知识体系准备
- 标记:优先级 = 自身掌握程度 + 知识点重要程度
2. 时间分配
梳理好知识体系之后,接下来就是制定一个合理的学习计划了,这一步需要你根据自己的个人时间进行安排(我就是时间安排不了一狠心就裸辞了,后面压力巨大),按照知识体系中标记的优先级进行系统的学习,总的时间根据自身情况,建议 1 ~ 3 个月即可,太长时间可能容易遗忘前面学习的知识。
针对不同模块,时间安排也有所不同,我列举一下我自己的安排以供参考:
- 基础知识 40%
- 项目与业务 20%
- 算法与数据结构 20%
- 设计思想与工程化 10%
- 框架与原理 10%
3. 整理算法
这里把算法单独拿出来,是因为近年来在大厂的面试中对数据结构和算法的考察越来越重视,不管是前端还是后端,首先我们是工程师,我们日常工作就是写程序的,程序 = 数据结构 + 算法,所以算法和数据结构的学习是很有必要的,虽然对于前端岗位的算法要求可能不会那么高,但是基本的递归、遍历、链表的操作、栈与队列的常见算法还是要会的。每天学习两三题,两个月后,你不会后悔的。
推荐一些社区内很不错的算法学习资料和经验:
- ssh_晨曦时梦见兮的算法进阶指南
- labuladong的算法小抄
- 神三元的算法练习指南
喜欢付费课程的话,比较不错的有:
- 慕课网 bobo 老师的《算法与数据结构体系课》
- 极客时间 覃超 老师的《算法面试通关40讲》
4. 整理面试题
这一步不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。可以搜集整理近两年来一线公司的面试题,做成笔记,你会发现面试题实际问的大同小异,只是考察的内容和形式有不同的目的性。提前熟悉,上场的时候才不会慌张。
推荐资料:
- 牛客网面经汇总
- fe-weekly-questions
- Daily-Interview-Question
- 掘金社区面经
5. 常见功能的手写实现
这块几乎是必考的,比如:深拷贝、事件总线、es5 继承,以及最近很火的手写 Promise 实现,这些手写功能不仅考察了面试者的编码能力也考察了对原理和规范的掌握程度。
虽然实际面试过程,面试官可能不会问的特别细节,比如让你实现一个完整的 Promise,但是我们自己学习这些手写功能的时候,不能浅尝辄止,需要考虑使用场景、错误处理、规范等细节的问题,千万不要背代码,不然手写代码一时爽,深挖细节火葬场。
笔者自己粗略的总结了一些前端面试常见的手写功能,供大家参考;
6. 项目实战
这部分是社招必考点,对自己负责或参与的项目,一定要深挖,要提炼出「难点」「痛点」「亮点」以及「解决方案」,更要体现出自己的「思考」和做出的「努力」,对应于 「问题 - 思考 - 解决 - 成果」这样的一个过程,是大厂很看重的能力,希望大家对于自己的参与的项目都能参考这个流程进行思考总结。
如果没有很丰富的项目经验,也可以多研究社区内技术大佬们的「项目经验」来获得,但一定要研究透彻,看过不等于会,不然面试问到只会坑了自己。
7. 执行学习计划
按照梳理的「知识体系」、「整理算法」、以及「整理面试题」,结合「时间分配」、给自己制定一个合适的学习计划,然后坚定认真的去执行它。
二、简历准备
1. 参考目录
【基本信息】不写无用的个人信息,比如:照片、籍贯、性别、地址、身高等;
【技术技能】对「了解、熟练掌握、精通」这类词有概念,不要随便用精通;
【项目经历】不写对求职无用项目经历、做的最好的项目 2 ~ 3 个即可,有数据支撑;
【工作经历】简略概述名称、在职时间、职位以及主要负责业务,也可以和项目经历结合起来写;
-
【教育背景】名称、时间等简要信息,普通院校建议放在底部即可,名校可以放在顶部;
参考简历模板:链接: https://pan.baidu.com/s/1I-9UtZ0qjxa1vNzrRJtYtA 提取码: gkxw
2. 项目经历
简历中最难写的应该就是「项目经历」了,这块也是最重要的,是面试官考察你的依据,也是你用来引导面试官提问的工具,项目经历的总结,要有数据思维,不能泛泛而谈,一般按照 STAR 法则进行描述,按照:情境(situation)、目标(target)、行动(action)、结果(result)四项对工作做一个精简描述,例如:
- 项目简介以及在 xx 项目中担任前端负责人
- 负责了 xxx 工作,实现什么目标
- 通过 xxx 方案解决了 xxx 问题;使 xxx 提升了 50%
- 总结了 xxx 解决方案
3. 注意事项
- 【突出亮点】如开源项目、大厂背景、社区影响力、知名项目、个人博客、技术亮点等;
- 【对症下药】针对不同公司职位,可以针对性的调整简历内容,准备多份简历;
- 【格式排版】PDF 格式,最好一页,最多不超过两页,像对待毕业论文一样去检查排版、错别字、标点符号、措辞;
- 【文件命名】姓名_职位_手机号.pdf(学历有优势的可以加上最高学历院校);
4. 投递简历
- 【筛选公司】相关因素:平台大小、发展前景、公司距离、个人喜好等;
- 【了解公司】通过网络、社区、认识的内部员工去了解面试的具体流程、周期、注意事项等;
- 【投递顺序】面试周期短的可以推迟,面试周期长的可以先面试,保证 offer 发放之间的时间跨度不会太长,便于集中对比选择;最想去的公司可以最后面试,这时已充分热身,甚至拿了 offer,心态方面也会更加从容;
- 【内推优先】优先找人内推,社区内有很多小伙伴愿意帮忙的;
三、面试准备
1. 自我介绍
面试官对你的基本信息都已知晓,所以这一步最好结合应聘职位直奔亮点进行简要概述,做了哪些亮点项目,遇到了什么难点,如何解决的,项目有什么收获,给团队或公司带来了哪些成果,按照这个方式去吸引面试官,同时这也是我们掌握主动权的方法,面试官喜欢根据我们表述的内容进行展开,这样由一段精心设计的自我介绍开始,进而引导面试官和你交流,这会让面试官的工作开展的很舒服。
注意自我介绍不必涉及过多的技术细节阐述,一是这些技术细节可能面试官不一定涉猎,导致面试官只能从其他方面寻找切入点让你陷入被动,二是占用过多时间,所以简要概述要点即可,随后面试官会根据这些点和你展开沟通的,这时再详细阐述不迟。
2. 面试过程
大厂的面试多为四轮,整个过程因人因公司而异,下面介绍一些常见的面试过程与注意事项:
一面
一般是你应聘职位的平级的骨干同事,是入职后和你一起并肩作战的伙伴,这一面一般也是最难的,会从多个方面考察你能不能胜任这份工作,侧重于学习能力、沟通能力、基础知识掌握程度、总结与思考、编码能力等;
这一面要特别注意编程题,如果遇到原题,不要太激动,面试官会从其他方面再进一步考察你,所以多思考一点,这也是上文说的,一定不要背题,不然一问就露馅;
遇到不会的知识,也不要太紧张,先尝试暴力解,然后逐步优化,也可以请面试官给予提示,如果能在面试中解决一个不会的问题,那一定会让面试官给你加分的;
二面
一般是团队骨干或直属 leader,这一面是对一面的延伸,除了基础知识之外,面试官还会从技术选型、架构、解决方案等方面提问,考察你对技术细节、项目优化、整体方案等方面的思考;
三面
三面一般是所属团队的 leader,这一面的技术细节考察你的不会太多,更多的是你对工作中涉及到的业务、产品、技术的思考,职业的规划与个人发展,以及一些职场软技能,常见问题举例:
- 项目中的角色、承担了哪些任务、遇到了哪些难点?怎么克服的?
- 和其他技术选型或者产品项目的对比有什么优劣?
- 团队怎么协作与分工的?
- 给自己的技术能力做一个评价
- 做了哪些提升团队的工作?
- 公司产品这样的?是否有竞争力?怎么盈利的?
- 你的个人职业规划?
四面
四面一般是 HR 面,这一面,尽力别说太多题外话,因为言多必失,保持积极乐观、礼貌友好的态度,当面试官问你为什么离职时,哪怕你上家公司老板和你打过架,也不要抱怨说出来。常见问题举例:
- 为什么从上家公司离职?(注意积极向上)
- 希望找一个怎样的工作,职业规划呢?(重发展,少谈钱)
- 谈谈自己最大的优点?(不要编,结合实际说就好,大家都有的,比如:专注、团队精神、技术热情与钻研精神、沟通能力、深度思考等)
- 谈谈自己最大的缺点?(和工作相关,又可以通过努力改变的点,比如:过于局限技术细节而忽视产品业务的重要性和理解,导致开发过程受阻,现在会积极参与产品业务的早起阶段,加强对业务的理解)
- 方便透露手上都有哪些 offer 了吗?(按实际情况说即可,好的 offer 可以突出一下,不好的,可以不说)
- 在 B 公司和我们之间,你怎么考虑的呢?(肯定选你啦)
3. 面试官:“你有什么想问我的吗?”
这个问题一般每一面都会遇到的,提问是面试中我们能够主动“索取”的环节,所以一定不要浪费这个机会,一些 leader 的回答还会带给你很多技术之外的思考与经验,让你受益良多,一定注意,不要问和待遇相关的问题,最后谈 offer 的时候再去问。
下面给出一些提问示例供参考:
- 一面:面试官一般是你的平级同事,可以多去了解实际的工作内容,便于后续对比 offer,例如:团队业务、日常工作、技术栈、协作、技术分析等
- 二面:面试官一般是团队骨干或直属 leader,可以多去了解业务和产品的规划、技术建设、对应聘职位的定位与期待等;
- 三面:面试官一般是部门 leader,这一步可以多了解技术之外的知识,比如面试官自己的成长经验、技术之外的能力、职位发展路线等;
- Hr 面:这一步可以多去了解公司本身相关的事,比如:你在公司工作的最大的感受是什么?晋升机制是怎样的?等等
4. 面试复盘
面试也是一个特别好的学习过程,能利用这个机会和其他团队的优秀的人沟通技术、交流心得、检验能力、了解优秀团队业务和产品,无论最后结果怎样,都值得好好总结下来。
- 【记录】每轮面试结束后,尽量详细记录整个过程,最好录音,方便分析自己的表现
- 【分析】按照自己的掌握程度对面试问题进行分类统计,分析沟通过程以及自己的表现
- 【补强】一知半解的问题优先复习掌握,不会的问题要去大致了解一下,如果没有时间掌握,可以暂时忽略
- 【总结】分析补强之后,可以总结成文,也可以分享给社区的小伙伴
五、Offer
当面试通过以后,你就要着手开始准备最后的 offer 沟通了,这一步,你要结合新公司的薪资构成,职位的薪资范围,自己估算涨幅后的年薪总包、社区了解的信息、公司发展前景、个人心里预期等去设定一个自己的薪资底线。
1. 年薪总包,是你在上家公司的税前年度总收入:『月薪 * 12 + 奖金 + 其他』,会要求银行流水进行证明,新公司会参考进行定薪,特殊情况可以主动说明,上一家公司的薪资知识参考,但也不是决定因素的。
2. 薪资谈判,这一步可以说是最考验沟通能力的环节了,这里提供一些信息:
个人实力 / 公司水平 | 优秀公司 | 普通公司 |
---|---|---|
个人实力优秀 | 保持底线、冲击高薪 | 没有底线、必须高薪 |
个人实力普通 | 降低底线、学习为重 | 保持底线、冲击高薪 |
- 薪资一般会在之前总包的基础上提高 30% ~ 50%;
- 实力优秀且入职优秀公司,翻倍不是不可能;
- 有些公司超过 50% 涨幅需要走特批,要求你承诺入职才会给你申请,这个说明一是公司对你认可,二是公司希望你尽快入职,所以如果公司不错,可以好好考虑一下;
- HR 询问薪资预期时,可以基于心里底线和职位薪资范围向上多要一些,大大方方的沟通即可,没有知乎上说的那么多戏,与其说 HR 压价,倒不如说 HR 是防止候选人狮子大开口,只要薪资的提升在一个合理的范围,谈薪还是比较简单的。
- HR 询问薪资时,一般还会问你都拿到了哪些 offer 了,如果你手上有比较不错的 offer 可以说一下,可以帮助 HR 更加确定你是一个优秀的候选人,薪资说不定还可以获得一个提升,但是一定不要为了提价胡编乱造 offer,诚信是本;
3. 何时入职,这一步,HR 都会问你何时能入职,这个结合你的当前工作和后续的面试计划,可以推迟入职日期,但是不宜太久,后续如果不能入职,一定要尽早通知 HR,要尊重别人的工作与付出,礼貌说明原因即可,别让人家等太久;
4. offer 对比,简单来说:有目标向前看,没目标向钱看,薪资很重要,但是技术人的职业发展更重要,而且大的平台在薪资上也不会让你吃亏;
六、注意事项
- 不要裸辞,不要裸辞,不要裸辞;
- 尽量 15 号之后办理离职,下个月的 15 号之前入职,这样能保证你的五险一金不断缴,平滑过度;
- 上家公司签的离职证明日期,不要和新公司的入职日期有重叠,所以拿到 offer 后,要留出时间先把当前工作的离职手续办完;
- 注意社交礼仪,IT 行业虽然没那么多繁文缛节,但是基本的礼节不能丢,着装得体整洁、不要迟到、进门敲门、出门关门、等;
- 有 offer,心不慌,可以先把还不错的 offer 留着,再去冲击大厂;
- 面试是七分实力三分运气,不同的面试侧重点也会不同,所以不要因为某一两次面试受挫就丢失信心,及时总结;
- 乐观积极、保持诚信、杜绝欺骗、避免负面情绪;
- 不抱怨同事、不抱怨上家公司;
七、扯点别的
感谢一下 @ssh_晨曦时梦见兮 给我内推,给我看简历,给我建议,一句:“我觉得你的简历还不错”,给了我很大信心,和晨曦开玩笑说:“自从遇到你好像所有的面试都顺利多了,争取做你同事”,最后虽然不在一个部门,也算是得偿所愿成了同事,就等面基吃饭啦。
感谢一下 @狼叔 * 阿里巴巴,和狼叔都有着一段困难的创业公司经历,在我辞职之后一直走不出内心对未来迷茫以及对过去痛心的情况下,我主动联系了狼叔,对于我的现状和规划,狼叔谈了自己的看法,给了建议,鼓励我:“有目标向前看,没目标向钱看,现在都还不晚,加油吧”。
最后手握 offer 后,甚至有点做梦的感觉,一路走来,一直感觉迷茫与无助,知道最后严重怀疑自己,但离职的这段时间,有不少朋友经常鼓励我:“自信点,你还不错,加油!”,也一直帮我找内推,我觉得没有这些朋友,我心态可能没那么快恢复过来,真的非常感谢他们。
稳定之后,我现在除了做好工作以外,还想做的一件事就是也试着去帮助一些我能帮助的人,也希望有机会鼓励他们:“自信点,你很棒,加油!”
八、说在最后
文章主要对面试的核心流程与准备工作做了一个大纲性的概述,重点在于对面试的一个整体的审视以及各个环节的重点,所以肯定有很多细节没有顾及到,如有疑问或者建议也欢迎留言一起交流讨论,也欢迎来找内推、聊简历、聊技术、侃大山。