最近观看了《前端跳槽面试必备技巧》,视频出举出了很多实用技巧,特在此记录。
视频开头给出了面试的定义:面试是测查和评价人员能力素质的一种考试活动。具体地说,面试是一种经过组织者精心设计,在特定场景下,以考官对考生的面对面交谈与观察为主要手段,由表及里测评考生的知识、能力、经验等有关素质的一种考试活动。
一、面试准备
在面试前,对公司的情况、技术栈、企业文化、要求的知识点等都得做足够的了解和准备。
1)职位描述(JD)分析
对公司的分析,快速判断这个岗位是否与自己匹配,以及自己是否能Hold住该岗位。通过这样的分析能快速决定是否要去面这个岗位,再有针对性的做技术准备,包括知识内容、准备程度等。
以京东金融的前端招聘信息为例,通过职位描述和任职要求(如下所列)来分析要求的知识点和技术栈。
职位描述:
1、负责京东金融企业业务PC端和移动端相关的前端开发工作;
2、负责企业金融App H5开发,完成前端界面与后端交互开发;
3、负责与后端工程师沟通协作、调试数据接口;
4、负责京东金融前端组件库的建立;
5、负责对现有系统的优化与重构。
任职要求:
1、3年以上相关工作经验,精通HTML5特性,了解HTML5最新规范,能够熟练运用HTML5特性构建移动端的WebApp;
2、熟悉当前流行的JavaScript类库,熟悉JavaScript面向对象编程方法;
3、熟悉Web标准,对表现与数据分离,HTML语义化等有一定理解,至少熟悉一种前端MVC框架并且具有实际经验(不限React、Vue、Angular等);
4、具有前端结构分析与设计能力,一贯坚持编写易读、易维护、高质量、高效率的代码,习惯于OOP开发方式;
5、对用户可用性,用户体验,用户研究等相关知识有深入的了解和实践经验;
6、对Web前端技术有强烈兴趣,能对Web前沿技术研究和新技术调研,有良好的学习能力和团队合作精神;
7、了解CSS预编译语言,例如Sass、Less等;
8、熟悉Web构建工具Grunt、Gulp,能够自己搭建前端构建环境;
9、有服务端(不限语言)开发经验者优先。
职位描述分析:
1、PC端和移动端相互交叉,说明至少负责两块内容,并且两者要求的技术栈不同,在面试过程中会考察两个方面的知识。
2、第一层是Hybrid技术栈,需要准备JSBridge知识;第二层是纯H5开发,与Native客户端没有交互,例如专题、活动等。
3、前端对沟通要求比较高,不仅要与后端沟通,还要与UI、产品等沟通,数据Mock(即模拟数据)是最基本的技能。
4、最重要的职位描述之一,前三条是基本要求,这一条是对岗位的难度设立,并且需要点时间准备,一两天内是无法完成的。要求具备三点要求:
(1)基本功扎实,对原生JavaScript、CSS的理解是否到位。
(2)之前是否有前端组件库的创建经验。
(3)是否通读过市面上其他的组件库源码。
5、难度与第四条相当,是否有能力对现有公司系统进行优化,并能一一列出,要做哪些步骤,做哪些工作,效果是什么。
任职要求分析:
1、3年以上是个虚数,不是重点。移动端在该技术团队中很重要,需要掌握HTML5的内容,并且暗含对新知识有追求。
2、要求对面向对象和原型链非常熟悉。
3、理解最新的Web标准,前后端数据分离,做好一两个小项目给面试官演示,语义化切忌通篇div,熟悉框架,不仅会用还要有实战经验,一定会问使用过程中遇到的问题。
4、这个不是初级岗位,初级前端精力放在业务上,对系统的架构和设计能力略有欠缺。准备一个项目的架构,把公司现有项目拿过来重新设计,包括目录结构、复用性、模块化、自动化测试等,要想的清楚和考虑周到。克制随意的写代码习惯,要易读易维护。
5、考察的点不是技术本身,而是候选人对产品的感觉,同样写下拉框,考虑的不仅是完成任务,还要考虑下拉框的性能以及如何改进。
6、去GitHub上多看几个前端项目,阅读源码,多看技术博客的前沿技术研究。
7、前端基本技能,需要具备。
8、一定要好好准备,面试官可能会问Gulp和Grunt的区别、如何搭建自己的构建环境、是否写过Gulp插件等。
9、看自己实际情况。
职位描述注重工作职责,任职要求注重技术深度、工作能力。
2)技术栈准备
简历上体现过jQuery,需要阅读源码,包括核心架构、事件委托、插件机制、兼容性等。
三大框架准备一个即可,需要阅读源码,可在网上寻找相关资料。
准备实战中遇到的问题,包括如何解决、思路是什么等。
前端工程包括预编译(Sass、Less)、构建工具(Gulp、Grunt)、打包工具(webpack)、npm(场景命令、npx)等。
3)自我介绍
自我介绍分为两块,第一块是简历,包含四个关键点:
1、基本信息,姓名、年龄、手机、邮箱、籍贯。
一定年龄的人理应达到一个什么样的技术水平,如果没有达到,那么技术或能力不符合公司要求。
2、学历,从大到小,博士》硕士》本科》大专。
3、工作经历,时间、公司、岗位、职责、技术栈、业绩。
给公司带来了哪些业绩,攻克了哪些技术难点。如果还没有做出这些成绩,那么现在就可以开始梳理哪些工作没做好,重新研究方案(用代码实现),作为工作产出(即工作难点),写在简历中。
4、开源项目,GitHub和说明。
开源项目不是一撮而就,现在就可以开始,参与一些开源项目,切忌不能作假。
第二块是自我陈述,包含两个关键点:
1、把握面试的沟通方向。
在校招时,学生经常会说帮实验室导师做过什么什么项目,还有的人说我在实验室项目中是负责人。第一个,作为面试官,关注的点是:
(1)这个项目是做什么的?
(2)和前端的结合点是什么?
(3)你的角色是什么?
(4)你在项目中承担的责任是什么?
(5)你做出了哪些成绩?
第二个,最吸睛的是负责人三个字,作为面试官,关注的点是:
(1)你这个项目有几个人参与?
(2)你这个负责人是个什么样的角色,是项目管理还是技术管理?
(3)你做出了什么样的成绩?
(4)项目管理上,你的项目是怎么分配的?成员之间是怎么协作的?
(5)技术管理上,你是怎么解决技术配合的?遇到了哪些技术难点,如何解决?
很多人最后都招架不住,就是因为自己说的题目太大,让面试官问了很多自己不擅长的问题。
万事俱备只欠东风,前面那些内容就是为了夯实基础,知识点系统细化,这就是所谓的万事俱备。而东风就是此处的自我陈述,要擅于把准备好的内容通过合适的话题,引入到准备好的知识点上来。举个例子:
我平时喜欢研究一些网站,爱看背后的技术原理和好玩的点,然后自己会思考,并愿意尝试使用更好的实现方式。
点到即止,后半句留给面试官。面试官之后会问你,你平时喜欢去哪些网站?研究了哪些代码?这时候就引导了面试官,自然而然顺理成章的引到了自己准备好的知识点上。
2、豁达、自信的适度发挥。
语音洪亮,自信不要自卑,别不敢聊。当不自信的时候,气场已经下来,处于劣势,聊天不会顺畅。适度发挥是一个很有技巧的动作,在引到自己擅长的领域后,不要骄傲,不能膨胀,不要有这种心态。你的目的是让他欣赏你,而不是证明不如你。
面试官问的问题完全是根据简历和自我陈述而来,不会凭空想象,而是量身定制的问题。
关于自我陈述的实例有两个口诀:
(1)自如谈兴趣、巧妙示实例、适时讨疑问。
面试就是聊天沟通,要豁达自信,不能瞎谈,聊与前端有关的兴趣;说半句留半句,引导面试官;不懂就要问,但不要以不知道、不清楚、我不懂作为结束语,应该要思考一下,然后亲切地说能否指点一下、给些建议、分享些资料等。
(2)节奏要适宜、切忌小聪明。
坦诚如实、心态平缓,不要不屑、耍小聪明。例如布局,大部分人写了两个就不耐烦了,这是不对的,你这叫实现,但如果写出四个、甚至六个,面试官对你的评价就会从了解基础变为追求技术难度、聪明,评价一下子上升了一个高度。面试题没有标准答案,只说一个是不够的,要表现出比别人聪明、可培养。
关于自我陈述的实战也有两个口诀:
(1)方向要对,过程要细。
二面和三面会问很多实战内容,例如你是否做过技术决策。即使是做业务也会有技术决策,例如性能优化。大方向要对,即要围绕所有的项目中跟这个优化相关的内容,要能列出优化原理。
(2)胆子要大,心态要和。
给你出再难的题目,不要心急也不要自卑,例如出算法题,准备不充分的话,很多都会放弃。但你一定要先想,放心大胆的猜,根据自己的经验分析出方案,即使是错的,也不要紧。
胆子要大表现的是勇于承担责任,敢于挑战未知。如果在这个难题前,表现出思维独特,视角独特,解决问题的能力独特,不管最后结果如何,你都已经赢了。
心态要和分两方面,当问的问题都能对答如流时,不要表露出得意,认为这里的面试很水;当问的很多问题都答不上时,不要瞬间自卑,也不要有怨气,这很容易让面试提前终止。
二、面试项目
1)面试技巧
1、准备要充分。重点掌握项目原理和背后的技术难点。技术负责人会问项目问题,而且是有深度的,例如项目架构、技术能力、人员组织以及技术难点攻克。
2、描述要演练。提前组织语言,描述要展示的点,并把握好时间,模拟演练。面试官特烦啰里啰嗦半小时,却没有说出亮点和难点。他要重点摸清你所有的项目经验,考核项目难度,判断你能否经得起公司业务的考验。
3、引导找时机。如果业务负责人没有问项目,也要想办法找时机把准备的资料说出来,但不能太生硬。当他不想问你事情、对当前话题不感兴趣或对你有些失望时,要赶紧表现自己的优势。或者当你和面试官聊的很投机时,你为了加大他对你的认可度,也可以点出自己准备的项目优势。
4、优势要发挥。这时候不要谦虚,自己优秀的能力要发挥出来。
5、回答要灵活。不要把话说满,别得意,技术没有标准答案,都是为了解决业务,至于哪个方案是最优的呢?没有标准说法。
2)面试模拟
考查的点包括:
1、业务能力。例如:
(1)我做过什么业务?用一两句话简短描述。例如独立负责360数据彩票走势图开发。
(2)负责的业务有什么业绩?列出用户量、收入、性能等能量化的数据。例如历时3周完成所有彩票开发,用户量上涨15%。
(3)使用了什么技术方案?别人做不到的,你做到了,这就是难点。例如区别常规Canvas方案,使用vml+svg方案。
(4)突破了什么技术难点?没有遇到问题,说明你研究的不够深入。例如解决了走势图高级绘图板的开发。
(5)遇到了什么问题?例如橡皮擦的问题、动态连线计算等。
(6)最大的收获是什么?经验的沉淀和积累,业务上有什么收获,技术上有什么收获。例如对业务的理解更加深入、对技术图表更能把控。
2、团队协作能力,面试官不会直接问,而是通过面试过程中的一些描述,总结你的协作能力。例如:
(1)对彩票足彩的奖金算法有深入研究,业内第一。
(2)为H5、客户端讲解算法并协助完成开发。
(3)和PHP、PM同学在几小时内快速支持竞猜活动。
(4)和leader独立负责彩票PC站。
3、事务推动能力,跨部门或跨组,涉及效率问题。例如:
(1)对历史算法更新换代。
(2)推动专题的CMS架构。
(3)主导客服系统的建设。
(4)完成多项专利的申请。
4、带人能力。例如:
(1)带一个社招生完成数字彩的开发和维护。
(2)带一个实习生完成专题活动的开发。
(3)代码规范、Review。
5、其它能力。
三、HR面
1)面试技巧
1、乐观积极。
2、主动沟通。
3、逻辑顺畅。
4、上进有责任心。
5、有主张,做事果断。
2)职业竞争力
1、业务能力。可以做到行业第一。
2、思考能力。对同一件事可以从不同角度去思考,找到最优解。
3、学习能力。不断学习新的业务和技术,沉淀、总结。下班后参加一些小型的分享会。
4、无上限的付出。对于无法解决的问题可以熬夜、加班。虽然没人喜欢加班,但也不要明确的拒绝加班。
3)职业规划
1、宏大目标。在业务上成为专家,在技术上成为行业大牛。
2、近阶段的目标。不断的学习积累各方面的经验,以学习为主。先清楚分配的岗位做什么,快速梳理难点和突破点,近一年时间要把它做到极致。
3、长期目标。做几件很有价值的事情,例如开源作品、技术框架等。
4、方式方法。先完成业务上的主要问题,做到极致,然后逐步向目标靠拢。希望公司有技术分享,让新人成长。公司提供哪些资源和平台。
5、多赞美公司,多赞美HR。说好话,谁都爱听,但夸人要夸到点上。
PS:2019年自己整理了些面试资料,打算2020年挪窝的时候用,主要分为几块。
- 面试经中包括面试的技巧,简历的包装,面试官点评简历等。
- LeetCode 算法题,按真实面试中的出现频率降序排列。
- 和朋友一起翻译了一本外国的面试书《101 Toughest Interview Questions》,以问答的形式总结了 101 个问题,可以拓展一下自己的面试思路。
- 手工整理了 1000+个计算机专业英语单词,单词来源于《计算机专业英语(第 3 版)》,分为文章中使用到的词汇表和附录中的专业英语词汇表。
- 面试题目以前端的为主,包括 React、Vue、ES6、性能等,有些总结过的是有答案的,而有些则是没有答案的,还搜集了一些 GitHub 上优秀的面试仓库。