forked from elecrabbit/front-end-interview
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathproject.md
161 lines (88 loc) · 13 KB
/
project.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# 面试回答问题的技巧
点击关注本[公众号](#公众号)获取文档最新更新,并可以领取配套于本指南的 **《前端面试手册》** 以及**最标准的简历模板**.
技术面试通常至少三轮:
1. 基础面试: 主要考察对岗位和简历中涉及到基础知识部分的提问,包括一部分算法和场景设计的面试题,这一面可能会涉及现场coding.
2. 项目面试: 主要考察简历中涉及的项目,会涉及你项目的相关业务知识、扮演角色、技术取舍、技术攻坚等等.
3. HR面试: 这一面通常是HR把关,主要涉及行为面试,考察候选人是否价值观符合公司要求、工作稳定性如何、沟通协作能力如何等等.
当然,对于初级岗或者校招生会涉及一轮笔试,相当多的公司会在现场面之前进行一轮电话面试,目的是最快速有效地把不符合要求的候选人筛除,对于个别需要跨部门协作的岗位会涉及交叉面试,比如前端候选人会被后端的面试官面试,一些有管理需求的岗位或者重要岗位可能会涉及总监面试或者vp面.
而一个正常的技术面试流程(以项目面为例)分为大致三个部分:
1. 自我介绍
2. 项目(技术)考察
3. 向面试官提问
那么该如何准备技术面试,如何在面试中掌握主动权呢?
## 自我介绍
几乎所有的面试都是从自我介绍这个环节开始的,所以我们得搞清楚为什么自我介绍通常作为一个面试的开头.
### 为什么需要自我介绍
首先,有一个很普遍的问题就是面试官很可能才刚拿到你的简历,他需要在你自我介绍的时候快速浏览你的简历,因为技术面试的面试官很多是一线的员工,面试候选人只是其工作中的一小部分,很多情况下是没有提前看过你的简历的.
其次,自我介绍其实是一个热身,面试官和候选人其实是陌生人,自我介绍不管是面试还是其他情况下,都是两个陌生人彼此交流的起点,也是缓解候选人与面试官之间尴尬的一种热身方式.
最后,自我介绍是展示自我、引出接下来技术面试的引子,是你自己指定技术面试方向的一次机会。
知道了以上原因,我们才能进行准备更好的自我介绍。
### 自我介绍的几个必备要素
自我介绍归根到底是一个热身运动,因此切忌占用大量的篇幅,上来就把自己从出生的经历到大学像流水账一样吐出来的,往往会被没耐心的面试官打断,而这也暴露了候选人讲话缺乏重点、沟通能力一般的缺点。
但是,一些关键信息是必须体现的,就我个人而言,以下信息是必备的:
* 个人信息: 至少要体现出自己的姓名、岗位和工作年限,应届生则必须要介绍自己的教育背景,如果自己的前东家是个大厂(比如BAT)最好提及,自己的学历是亮点(985或者硕博或者类似于北邮这种CS强校)最好提及,其他的什么有没有女朋友、是不是独生子没人在意,不要占用篇幅。这个部分重点在于「你是谁?」。
* 技术能力: 简要地介绍自己的技术栈,切忌把自己只是简单使用过,写过几个Demo或者看了看文档的所谓「技术栈」也说出来,一旦后面问到算是自找尴尬。这个部分的重点在于「你会什么?」。
* 技能擅长: 重点介绍自己擅长的技术,比如性能优化、高并发、系统架构设计或者是沟通协调能力等等,切忌夸大其词,要实事求是,这是之后考察的重点。这个部分重点自在于「你擅长什么?」。
### 自我介绍要有目的性
#### 要重点匹配当前岗位的技术栈
你的面试简历可能包含了各种各样的技术栈,但是在自我介绍过程中需要匹配当前岗位的技术要求.
就比如你目前面试的是移动端H5前端的开发岗位,就重点在自我介绍中突出自己在移动前端的经验,而此时大篇幅得讲述自己如何用Node支撑公司的web项目就显得很不明智.
#### 要在自我介绍中做刻意引导
如果你的自我介绍跟流水账一样,没有任何重点,其实面试官也很难办,因为他都没法往下接话...
而只要你稍作引导,绝大部分面试官就会接你的话茬,比如「你在自我介绍中重点提及了一个项目,碰到了一些难点,然后被你攻克了,效果如何如何好等等」,如果我是面试官一定会问「你的xx项目的xx难点后来是怎么解决的?」。
面试官的目的是考察候选人的能力,对候选人做出评估,因此需要知道候选人擅长什么,是否匹配岗位,面试官绝大多数情况下很乐意你这种有意无意的引导,这样双方的沟通和评估会很顺利,而不是故意刁难候选人。
### 如何准备自我介绍
其实最好的方法也是最笨的方法就是把自我介绍写下来,这个自我介绍一定要体现上面提到的几大必备要素,在面试前简单过几遍,能把自我介绍的内容顺利得表达出来即可,切忌跟背课文一样.
自我介绍的时间最好控制在1-3分钟之间,这些时间足够面试官把你的简历过一遍了,面试官看完简历后正好接着你的自我介绍进行提问是最舒服的节奏,别上来开始10分钟的演讲,面试官等待的时候会很尴尬,这么长的篇幅说明你的自我介绍一定是流水账式的.
![2019-07-19-02-52-15]( https://xiaomuzhu-image.oss-cn-beijing.aliyuncs.com/9ffe42ee1436a587375986e8fee79361.png)
## 技术考察
一个好的技术考察的开始,必须得有自我介绍部分好的铺垫和引导,有一种情况我们经常遇见:
> 候选人说了一大堆非重点的自我介绍,面试官一时语塞,完全get不到候选人的重点,也不知道候选人擅长什么、有什么亮点项目,然后就在他简历的技术栈中选了本公司也在用的技术,候选人这个时候也开始冒汗,因为这个技术栈并不是他的擅长,回答的也磕磕绊绊,面试官的引导和深入追问也没有达到很好的效果,面试就在这种尴尬的气氛中展开了,面试结束后面试官对候选人的评价是技术不熟练、没有深入理解原理,候选人的感受是,面试官专挑自己不会的问。
所以在前面的部分,一定要做好引导,把面试官的问题引到我们擅长的领域,但是这样还不够,正所谓不打无准备之仗,我们依然需要针对可能出现的问题进行准备.
那么如何准备可能的面试题?
比如你擅长前端的性能优化,在自我介绍的部分已经做好了引导,接下来面试官一定会重点考察你性能优化的能力,很可能会涉及很有深度的问题,即使你擅长这方面的技术,但是如果没有准备也可能临场乱了阵脚.
### 多重提问
自我多重提问的意思是,当一个技术问题抛出的时候,你可能面对更深层次的追问
![2019-07-19-02-51-45]( https://xiaomuzhu-image.oss-cn-beijing.aliyuncs.com/ba5273b261f66c8c3881fcf4a8ac6301.png)
依旧以前端性能优化为例,面试官可能的提问:
1. 你把这个手机端的白屏时间减少了150%以上,是从哪些方面入手优化的?这个问题即使你没做过前端性能优化也能回答个七七八八,无非是组件分割、缓存、tree shaking等等,这是第一重比较浅的问题。
2. 我看你用webpack中SplitChunksPlugin这个插件进行分chunk的,你分chunk的取舍是什么?哪些库分在同一个chunk,哪些应该分开你是如何考虑的?如果你提到了SplitChunksPlugin插件可能会有类似的追问,如果没有实际操作过的候选人这个时候就难以招架了,这个过程一定是需要一定的试错和取舍的.
3. 在分chunk的过程中有没有遇到什么坑?怎么解决的?其实SplitChunksPlugin这个插件有一个暗坑,那就是chunk的id自增性导致id不固定唯一,很可能一个新依赖就导致id全部打乱,使得http缓存失效.
以上只是针对SplitChunksPlugin插件相关的优化提问,当然也可能从你的性能测试角度、代码层面进行考察,但是思路是类似的。
因此不能把自己准备的问题答案停留在一个很浅显的层面,一方面无法展示自己的技术深度,另一方面在面试官的深度体情况下容易丢分,因此在自己的答案后面多进行自我的追问,看一看能不能把问题做的更深入。
### 答题法则
很多面试相关的宝典都推荐使用STAR法则进行问题的应答,我们不想引入这个额外的概念,基础技术面试的部分老老实实回答面试官的问题即可,通常需要问题运用到这个法则的是项目面,比如让你介绍一下你最得意的项目,回答问题的法则有这几个要点:
* 项目背景: 简要说一下项目的背景,让面试官知道这个项目是做什么的
* 个人角色: 让面试官知道你在这个项目中扮演的角色
* 难点: 让面试官知道你在项目开发过程中碰到的难点
* 解决方案: 针对上面的难点你有哪一些解决方案,是如何结合业务进行取舍的
* 总结沉淀: 在攻克上述的难点后有没有沉淀出一套通用的解决方案,有没有将自己的方案在大部门进行推广等等
重点就在于后面三条,也是最体现你个人综合素质的一部分,我是面试官的话会非常欣赏那种可以发现问题、找到多种方案、能对多种方案进行比对取舍还可以总结沉淀出通用解决方案回馈团队的人。
从上述几点可以体现出一个人的技术热情、解决问题的能力和总结提高的能力。
### 刻意引导
是的,在回答面试官提问的时候也可以做到刻意引导。
我们就举几个简单的例子:
* 除了Vue还用过Angular吗? 这个时候很多候选人就很实诚回答「没有」,其实我们可以回答的更好,把你知道的说出来展示自己的能力才是最重要的,你可以说「我虽然没用过,但是在学习双向绑定原理的时候了解了一下Angular脏检查的原理,在学习Nestjs的时候了解了依赖注入的原理,跟Angular也是类似的」,面试官一定会接着问你脏检查和依赖注入的问题,虽然你没有用过Angular,但是Angular的基本原理你都懂,这是很好的加分项,说明候选人有深入理解原理的意愿和触类旁通的能力
* Vue如何实现双向绑定的? 很多候选人老老实实答了`object.defineproperty`如何如何操作,然后就没有了,其实你可以在回答完之后加上一嘴「Vue 3.0则选择了更好用的Proxy来替代object.defineproperty」或者「除了object.defineproperty这种数据劫持的方式,观察者模式和脏检查都可以实现双向绑定」,面试官大概率会问「Proxy好在哪?」或者「聊聊脏检查」等等,这样下一个问题就会依然在你的可控范围内
![2019-07-19-02-51-14]( https://xiaomuzhu-image.oss-cn-beijing.aliyuncs.com/f089e61ebe8d34a2965c19aecbc93d52.png)
我们第一个例子把本来回答不上来的问题,转化为了成功展示自己能力的加分项,第二个例子让自己更多的展示了自己的能力,而且始终使面试官的问题在自己的可控范围内。
## 向面试官提问
这个部分基本到了面试尾声了,属于做好了不影响大局,但是可能加分,如果做不好很容易踩雷的区域.
首先我们声明几个雷区:
* 切忌问结果: 问了也白问,绝大部分公司规定不会透露结果的,你这样让大家很尴尬
* 切忌问工资: 除了HR跟你谈工资的时候,千万别跟技术面试官谈工资,工资是所有公司的高压线,没法谈论
* 切忌问技术问题: 别拿自己不会的技术难题反问面试官,完全没意义,面试官答也不是不答也不是
有几个比较好的提问可供参考:
* 如果我入职这个岗位的话,前三个月你希望我能做到些什么?
* 我的这个岗位的前任是为什么离职的,我什么地方能做的更好?
* 你对这个职位理想人选的要求是什么?
尽量围绕你的岗位进行提问,这可以使得你更快得熟悉你的工作内容,也让面试官看到你对此岗位的兴趣和热情,重要的是这些问题对于面试官而言既可以简略回答,也可以详细的给你讲解,如果他很热情得跟你介绍此岗位相关的情况,说明你可能表现得不错,否则的话,你可能不在他的备选名单里,这个时候就需要你早做打算了.
## 总结
我们用大量篇幅介绍了技术面试中的一些应试技巧,但是归根到底候选人的基本功和丰富的项目经验才是硬道理.
如果你看完了整篇文章,并进行了精心的准备,他是可以让你从75分到85分的实用技巧,而不是让你从55到85的什么秘籍.
---
## 公众号
想要实时关注笔者最新的文章和最新的文档更新请关注公众号**程序员面试官**,后续的文章会优先在公众号更新.
**简历模板:** 关注公众号回复「模板」获取
**《前端面试手册》:** 配套于本指南的突击手册,关注公众号回复「fed」获取
![2019-08-12-03-18-41]( https://xiaomuzhu-image.oss-cn-beijing.aliyuncs.com/d846f65d5025c4b6c4619662a0669503.png)