去年回杭后,除了在新的公司沉迷业务开发、业余吹水以外,趁着人手不足顺便作了些电话和现场面试的工做( 固然主要是面向初级前端岗候选人 )css
从两年前初入行的校招生,到现在扮猪吃老虎的面试官,感受能够写篇文章介绍下本身的面试心得和套路、html
充实下一年未更新的“技术博客”前端
尬聊
用“简要”的话来讲,是在较短的时间内尽量地了解候选人的技术能力、成长空间、过往经历及将来规划等信息,为团队招到靠谱的伙伴;同时做为公司的门面,展现团队的技术实力和工做态度。vue
面试自己上是一次双向选择的过程。电话、视频和现场面试对候选人来讲通常是比较可贵的经过在职工程师了解团队的机会,良好的工做习惯和态度会显著提升双方的体验,能够说是一门基本功。html5
好比:node
尬聊
不少刚开始作面试官的同窗很容易把天聊死,或者进入空气忽然安静的环节。在面试前提早准备一个 “剧本”,或者用一个固定的、惯用的 “套路” 会好不少。react
我的的面试习惯(套路)是,不管是什么类型的候选人(校招 / 社招),起手是让对方来段简单的自我介绍,然后按照入行的缘由 / 契机、上一份工做或实习的状况、为何想换团队以及对将来工做的指望这个顺序聊下来。 “前戏”
通常不超过6分钟,遇到比较会聊的候选人应该及时拉回来或者开启下一个话题。webpack
有了上面的无压力的沟通作铺垫,基本能够稍微了解对方的状况、交流的风格甚至我的的水平和视野。nginx
然后能够直接进入正式的环节,若是对方有前端的工做经验,我会更倾向于按照简历的内容作面试,既然是写在简历上的,应该是候选人真实经历过的业务场景、技术需求,至关于给予对方主场做战的机会。好比询问在以前团队作了哪些项目,而后抓住项目中的一些问题和需求点展开去问解决思路、技术细节、实际成果、反馈等信息。把每个项目经历当成一棵树遍历下去,很快就能探到这些内容是否真实和候选人的技术层次。不过经常会有项目技术深度不足的状况(毕竟我遇到的初级岗比较多……),那么就在下文概括的题库中临时找几个相关的问题提问。git
另外一种状况,若是工做经验不足或者几乎没有(好比校招生、实习生),建议加一个小问题,好比是怎么学习前端的,了解下对方的学习能力和方式。然后便让 TA 走随机题库的模式,开始客场做战吧~ 下一章中会介绍我的经常使用题库。
面试过程当中比较应该避免问较大的、 “务虚”
的场景,好比设定一个项目场景,让对方设计前端架构、工做流程、项目规范什么的…… 以及要避免诸如“若是让你来作xxxx,你会怎么作”这种提问(这点是看到其余人分享的面试经验中很认同的一点)。上述“务虚”的场景很容易带来的结果是,只考察了对方的吹水能力。
还有种状况是提的问题卡住面试者,一来是先要确保不是问题的表述问题(歧义之类的,若是是题库问题有歧义,这个应该及时修正避免复现),然后能够提醒对方讲讲本身的想法,若是已经有必定思考的话建议做出一些提示,看看是否能在帮助下开拓思路。实在是无头绪,能够直接用 “不要紧,咱们先聊下一个问题” 这样的台阶切题。正常状况不适合给对方做出解答,可能面试官自身理解有误差误导候选人(笑),可能候选人会钻牛角尖甚至对问题有比较大的意见,主要仍是时间成本。(有遇到过比较迷茫但潜力挺大的新人,仍是会稍微讲完整的思路和我本身的理解 ^ ^)
按照这个流程走,基本不会很尬。沟通的过程当中最主要的仍是要掌握主动权,不要被带着走 (:з」∠) ,固然感受把控不住只能用比较 low 的强行打断……
结束提问后,可让候选人提几个本身关心的问题、表达TA以为没有被关注到的点。能够给本身一个反馈,也算是提高面试能力。
目前咱们团队的面试最佳实践是,coding 是简单粗暴地考察候选人能力和技术素质的方式。在视频和现场中,咱们会倾向于留出较多时间给对方作题,上面 尬聊
技术和项目的环节每每会推到这后面。
注:本章出现的题库只收录了部分经常使用题
使用题库的原则是尽可能不要太看重候选人对 API 或者语法糖的熟悉程度,主要仍是综合能力与素质。
题库的话我是按几个方向去分类的:
CSS
/ HTML
/ Javascript
/ HTTP & 浏览器
/ 工具 & 工程化
框架 (vue react angular)
/ Node
Hybrid & JsBridge
/ React Native & Weex
/ Electron & NW
/ 微信小程序
个人一个实践是按类概括问题,从上到下按复杂程度或者难度罗列知识点,从左到右按深度罗列该知识点的问题及扩展。
(不过不可避免的是,问题涉及多个类,html常常和css相关什么的……)
先讲使用姿式吧:
好比个人部分 CSS
题库:
px pt em rem vw vh vmin vmax ex ch
% 等等 )→ rem 具体定义? → vw vh 具体定义,为何没普遍使用,兼容程度?position
定位取值、默认值 (这个能刷很多人) → absolute 定位规则 → sticky 定位规则 → 三个同级 div 给第二个 div 只设置 position: absolute
会发生什么 → 文档流 → 不脱离文档流的 fixed 定位方式有想法吗visibility: hidden / display:none / opacity: 0
有什么区别、具体使用场景box-sizing
是个啥 → 设置背景颜色会影响 margin padding border 的哪些区域?::after / ::before
什么用flex
布局有了解么? → 主轴副轴 → Grid
布局呢@import
加载样式有什么缺点 → 怎么避开这个缺点@media
媒体查询有用过么 → 如何用这个作响应式 → max-xxx & min-xxx 是开区间么?(这个是调戏)BFC
的概念及生成 哪些样式会新建 composite layer
→ BFC 与 composite layer 的关系 → composite layer 过多的优化icon-font
有了解么 → 怎么使用自定义的中文字体 → 怎么减小开销Data URI Scheme
能够表示哪些类型的数据 → 性能有了解么我的体验是前十题挑着问几个就差很少了。
HTML
题库:<head>
里 → <style>
标签放在一个 dom 节点里会发生什么width=device-width, initial-scale=2.0
会怎样alert(0)
会怎么显示 → 加了 defer / async
呢?<object>
标签 )html 和 css 都是比较基础的、因此实际用的时候问的题都很少。
HTTP & 浏览器
题库:Cache-Control / Last-Modified / Etag ...
的具体规则cookie
通常用来作什么 → 数据格式、如何设置、有效时间、安全性? → 写一段解析和设置代码(可选) → 没有 cookie 及其余浏览器存储作登陆态的状况下,如何定位同一个匿名用户(浏览器指纹)localStorage sessionStorage
是什么,区别在哪里 → 什么状况下会失效?http 2.0
和 http 1.x
的区别 → 多路复用、 https
、服务端推送如何实现?SSR
相关细节 → QPS
相比于客户端渲染会降低么 → 主要瓶颈在哪里,怎么解决?DOMContentLoaded
和 loaded
有什么区别 → 监听这两个事件有什么实际应用Javascript
题库:NaN
) → '123' / new String('123')
的区别 → Symbol
的实际使用场景正则表达式
→ 贪婪匹配与非贪婪 → 怎么写邮箱的正则匹配map reduce forEach
第二个参数是干啥的 (不推荐API细节) → 原生 sort
使用的是哪一种排序算法事件模型
)→ 第三个参数若是是对象呢, passive
事件是否有了解arguments
什么的 ) → Promise
相关Proxy
能作什么async await
解决了什么问题,和 generator yield
那套的异同点jsonp
最主要的原理 / cors 怎么作 / iframe
跨域 / 标签 src 跨域…… 细节Event Loop
JS 事件循环描述一下 → Node 中的事件循环 → timers / microTaskQueue / nextTickQueue / poll
等概念有了解么Ps. js相关问题在面试中吹水容易 “务虚”,建议少问,更多依赖笔试题、编程题状况。
工具 & 工程化
git
→ revert / reset / rebase
的区别 → cherrypick
什么用 → git flow
是怎么协做的nginx
如何配置,能够根据哪些规则转发( 域名,端口,协议等 )→ 如何作负载均衡lint
是否有使用babel
是否有使用 → 踩过哪些坑webpack
作了哪些工程化的事情、有哪些好用的功能 → 打包慢怎么优化框架类
angular
的脏检查为何“脏”,对比其余两框架created
和 mounted
对比 → 父子组件嵌套的状况下生命周期触发顺序 → $nextTick
api具体是知足了什么需求 → 为何使用 vuex
react
组件生命周期 → 组件更新先后分别发生了什么 → 为何会有纯函数组件、高阶组件的概念 → 组件设计的时候有没有考虑组件的边界在哪里?( 哪些应该 state
内部维护,哪些应该 props
传入,哪些应该有回调函数 ) → redux
源码有了解么,更新状态树的时候内部还执行了那些操做 → react
通过打包出来的代码结构是怎么样的,和 vue
打出来的有哪些异同react / vue / angular
如何作性能调优ssr
的如何作性能调优hash / history
两种模式的区别,兼容性Node
Koa
相关 → MVC
相关 → 怎么设计一个日志框架跨界型大杂烩
jsbridge
怎么实现的 → 限制在哪里 → 和 RN / Weex / 小程序
这些的区别RN
怎么实现的 → 如何用原生封装的模块给 js 调用 → 踩过哪些坑 → 性能优化怎么作 → 如何作多端复用小程序
踩过哪些坑,现有的问题你以为是什么 → 五层页面跳转的限制怎么作 → 页面多计时器如何维护(即秒级 setData
的状况下如何作优化)→ 如何作组件化,自定义组件有哪些问题Weex
没写过也没接触过,不会问相关题目 (:з」∠)Electron
和 NW
的区别 → 应用架构是怎么样的 → 相比于 web 前端还能使用哪些 native 资源 → 怎么作窗口间通讯 → 怎么科学打包其实题目基本源于本身的工做经验、学习内容,仍是要多提高本身~~
而后建议是不管电话、视频、现场,都控制时间在 30——40min,有编程题的适当延长。
(有空再补充一些编程题)
Ps.在目前公司是这么作的,不一样公司、团队流程不同
面试者问印象或者结果
婉拒,若是清楚流程的话最好反馈一下能给到结果的时间点。
面试者水平比较差
20min 结束面试,并记录好细节。
电话面试以为很ok
直接约现场或者远程编程。
若是你以为不错,或者发现文章中的错误,或者有更好的建议,欢迎评论或进前端全栈群交流讨论,866109386。 (PS:内有大牛分享 css webpack node vue angular react 面试 等等的相关内容。)