大家好,我是若川。持续组织了8个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列
本文作者是一名小厂前端 Leader。
说起面试,其实我自己面试的经验不多,而且我对八股文也不算通,算法更是短板。但是好在面过不少人,在筛选候选人上,也算是有自己的一点点经验。
在我看来,面试的唯一目的就是招人,一定是因为团队缺人需要补充,你才会放下手头的工作花时间去筛简历,约面试。那么作为面试官,这个时候就一定要告诉自己:
面试是为了寻找合适的人,而不是为了难倒候选人。
我见过不少互相刁难的面试,其实这个是最没有意义的,双方都浪费了时间还没达到目的。当你确定了你的目的是寻找合适的候选人,那么接着再问自己一个问题:
我需要找一个什么样的人?
如果你需要人做基础页面排版,薪资一般,那么就不要要求对方 “掌握数据结构和算法”。如果你需要图形化方面的伙伴,就不要要求人家 “精通 webpack 优化”。多多益善当然好,但是强制设置偏离需求的标准,那就不要怪招不到人了。
小厂不同于大厂,没有雪片般的简历,招人本来就困难。你只能放低各种硬性的无关的标准,抓大放小,然后通过面试聊天去挖掘有实力的人。
什么样的情况需要什么样的人,下面我举例。
短期需求
假设公司业务发展,来了好多项目,前端人手不够了。这个时候我们需要扩充人员来迅速推进业务开发。此时团队需要的是这类人:
2-3年经验,熟悉 Vue 全家桶,项目经验丰富,实战经验丰富
一句话,就是能干活。
选择候选人,工作经验 是至关重要的参考标准,这里为什么要求 2-3 年?
如果少于2年,可能是实习生或刚入行不久的新手,他们一般不能快速的接手业务并进入开发流程,需要有了解项目的同事带领一段时间。而我们项目紧急需要推进,新人短期不能上手,老人还要分出精力来带新人,这样就会拖延进度。
如果大于3年,比如你刚好碰到一个 3-4 年的候选人,面下来比较满意,我觉的也没问题,后续还能重点培养。但是如果超过 4 年的话,你就需要考虑的一件事:成本。
如果你的需求 2-3 年的候选人能满足,那你怎么说服老板花更多的钱呢?
攻坚需求
假设公司业务发展,前端要接触一些复杂领域,比如音视频,跨端,自动化等。而反观我们团队,大家都没接触过,并且也没有足够的能力做这些技术攻关。这个时候,我们就需要那些深度与广度兼具的大牛了:
3-5 年经验,掌握前端主流框架,掌握前端工程化,有较丰富的 Node.js 经验,对音视频,流媒体,直播点播原理了解并有实践经验。
寻找这一类人目标很明确,就是借助对方的已有经验或者技术攻坚能力,帮助团队快速打开陌生领域,更高效的让项目落地。
这个时候我们需要候选人有独当一面的能力,团队没有经验,需要你冲到前面开拓。这种情况下面试或聊天就不能总盯着八股文了,多交流实战经验,这样双方都会觉得沟通是有价值的。
独当一面且有攻坚能力,一般我会选 4 年左右的人。而且是否真正有能力,我们光看经验还不好说,必须通过面试,用基于实践的问题来挖掘能力,通过对方的表现来做判断。
长远需求
假如目前项目稳定,未来一年半年有新的业务方向,还需要人手,这个时候,我们就可以考虑一些实习生和两年内经验的小伙伴们了。
本科以上学历,1 年左右经验,前端基础扎实。
这类候选人的经验比较少,可以在学历上设置一些门槛。确实对于经验不具备参考价值的同学来说,学历和专业几乎就是你的评估标准。
因为短期没有项目紧逼,所以我们有时间去培养上述的这类新人,为团队注入新鲜血液。一个团队中,老人有老人的优势,新人也有新人的好处。
新人一般年轻,会为团队带来活力,并且做事有时候会比一些老人积极主动。同时呢在新人和老人“学”与“带”的过程中,可以促进团队分享交流,互相磨合,这也是必不可少的。
不过要注意,这一类经验不足的候选人,需要在试用期内做好考核。因为有些新人可能缺少主动思考,也遇到过包装简历这种,这时候就要在试用期内及时评估候选人的能力,看是否适合团队。
招一个候选人,越厉害越好吗?
以前我这么想过,抛开成本不谈,当然招过来的人越厉害越好啊。
但是后来我发现,事实并不是这样的。
首先,一个人的经验能力与他的配合程度几乎是成反比的。以上面说的情况一为例,你有了技术方案,需要招一波人进来快速推进,你希望这些人执行力强,指哪打哪,干就完了。
但是一个4-5年的程序员,他一定会有自己的思考,做东西不会拿来就做,脑子里会有“优化思维”。比如他拿到任务,觉得代码不合理不规范,忍不住就想要先优化。他会思考为什么要这样做?换一种思路能不能实现?换一种方案是不是代码更少?
这种思维没有问题,并且非常难得。只不过在项目推进的过程中,比起优化,快速执行的优先级显然更高。这个时候你就会发现,反而是那些无条件执行命令的“兵”,协作起来更顺利,更容易带领他们将项目快速推进。
所以呢,招聘候选人绝不是越有经验越好,越厉害越好,适合比经验和能力更重要。你要从团队协作和组成的角度去看整体缺乏哪些能力,而不是专注于某一个人。
因此在招人之前一定要想明白,我招他来要做什么?然后再去寻找适合的人。
本科生一定比大专生好吗?
我面试过的候选人里,本科生和大专生五五分吧(专升本暂时算是大专生)。总体看下来我发现这两波人还是有比较明显的区别。
以相同的经验(如3年)为前提,如果你问一些原理性的东西,也就是我们说的八股文,本科生答的相对比较好,这方面大专生就不会那么全面。
原因的话可能是本科生有计算机基础,或者应试能力比较强,准备比较充分,总之我的感觉是本科生在理论概念和言语表述方面确实比较突出。
不过呢从简历来看,本科生的技能清单中 Vue/React/性能优化
居多。再看大专生,我常常会看到一些惊喜,如 nodejs/linux/flutter
,很显然他们的接触面更广,尝试的东西比较多,细问起来的确是做过不少实践。
这个也是有迹可循,我听到最多的讲述是因为学历不好,所以只能在项目上面下功夫,尽可能的多接触多实践,深挖技术,我为这类的大专小伙伴们点赞。
在4年左右这个阶段,我还是比较喜欢项目经验丰富,有攻关能力和主动探索能力的人。
抛除学历和算法,如何评估候选人的真实能力?
众所周知,大厂面试筛选,首先看学历,其次考算法,这是职场进阶的两道门槛。
但是有学历,懂算法的人,工程能力和编码能力就一定强吗?其实未必。只不过大厂领头,小菜跟风,社区里大厂面试八股文的博客大受欢迎,可是真正的如何考验一个候选人的能力,反而很少有人分享。
比如我司是一个小公司,面试基本不看学历,因为人不好招,你再设置条条框框那就更难了。当然了算法也不问,最多问点八股文,然后就是项目经历,做过什么,解决过什么问题。
不看学历,算法,八股文也不多,那么 项目经验 就成了考核的重中之重。如何从候选人的项目经验中问出真实水平,这里分享一下我的个人小技巧。
当我拿到一份简历,我会先找这哥们最擅长的是什么。甚至当对方简单介绍完自己的项目,我会直接问他:你最擅长的是什么?
在我看来,一个有经验的前端,写写vue页面,排个版,做个状态管理,绝大多数都没有问题。但是一个人最擅长什么,一方面能体现出他的经验和沉淀,另一方面能体现出对这个领域喜欢,感兴趣,钻研了,所以才擅长。
当我得知对方最擅长的是什么,那么就可以沿着这条线往深了问。比如对方说我擅长性能优化,那么我就接着三连问:
1. 为什么要做性能优化?
2. 怎么做性能优化?是否了解过其他方案?
3. 现有方案有什么问题?有没有改进思路?
第一问是为什么,这个非常关键。当你使用一项技术,一定是为了解决某个问题。如果你不清楚为了解决什么问题,只是因为别人在做所以我也做,那么很难理解这项技术的精髓。
第二问是怎么做,这是个选择项。一个问题会有许多个解决方案,当你选择某一个,一定是经过调研和对比,发现了它的优势,所以才会选择它。这个如果说不出来,那么当你遇到问题需要找解决方案的时候,你可能很难找到最优解。
第三问是改进思路,这是考复盘能力。当你做完一个功能,可能并不完美,或者只是解决了当前的问题。善于思考的人会复盘,我这个功能还有什么不完善的?未来有哪些隐患?然后在后来的某个时间处理掉它。
如果你完成了任务就扔到一边,没有更多思考,那么长远来看,你完成工作的质量偏低,评估风险的能力也会低。
上面的三个问题,综合下来就是挖掘对方 解决问题的能力,或者是做事的思维。因为你问的是最擅长的嘛,所以也不会因为正好碰到了对方的短板而漏掉合适的候选人。
还有一个必问问题:
4. 聊聊你遇到过最困难的几个问题,最后怎么解决的?
这个话题非常好,聊最困难的问题,几乎可以看出对方的技术深度。然后越困难的问题解决过程可能越刁钻,你们可以聊尝试过哪些方案,这些可以帮你判断对方的思考能力和实践能力。
并且这个话题也能体现出一个人在团队里承担什么样的角色,如果这个人加入你的团队,那么他多半也会是这样的角色。
大概就讲这么多吧,个人理解偏多,也许并不普适,欢迎留言区讨论。
················· 若川简介 ·················
你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇,在知乎、掘金收获超百万阅读。
从2014年起,每年都会写一篇年度总结,已经坚持写了8年,点击查看年度总结。
同时,最近组织了源码共读活动,帮助3000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。
扫码加我微信 ruochuan02、拉你进源码共读群
今日话题
略。分享、收藏、点赞、在看我的文章就是对我最大的支持~