一次对几十名前端开发程序员的面试,我们需要若干 3 年左右经验的前端工程师开发维护一些移动单页模块,和一些 PC 增删改查前端应用。因为采用了外包模式,所以预定的策略是技术能用即可,不要求独立完成项目,只是对业务经验有一定要求,对简历筛的很松。面试重点放在了考察应聘者的业务理解,沟通,以及性格上。
也是因为这个原因,这一波面试让我感受到了一些令我有点吃惊的“前端生态”。
对web开发技术感兴趣的小伙伴,欢迎加入:前端学习圈,不管你是小白还是大牛我都欢迎
我先挑两个我出的面试题给大家看看。
第一个是经典问题,考察闭包的使用:
// 请问输出什么
for (var i = 0; i < 10; ++i) {
setTimeout(function () {console.log(i)}, 0);
}
第一问,这段代码输出什么?第二问,如果想让这段代码输出0123456789,应该怎么修改?
第二个问题是口述实现,设计场景如下:
某个应用模块由文本框 input,以及按钮 A,按钮 B 组成。点击按钮 A,会向地址 urlA 发出一个 ajax 请求,并将返回的字符串填充到 input 中(覆盖 input 中原有的数据),点击按钮 B,会向地址 urlB 发出一个 ajax 请求,并将返回的字符串填充到 input 中(覆盖 input 中原有的数据)。
当用户依次点击按钮 A、B 的时候,预期的效果是 input 依次被 urlA、urlB 返回的数据填充,但是由于到 urlA 的请求返回比较慢,导致 urlB 返回的数据被 urlA 返回的数据覆盖了,与用户预期的顺序不一致。
请问如何设计代码,解决这个问题?
我想对于大部分的前端工程师来说,这简直就是小儿科的问题,尤其是第一题,随便找个面试题大全都能找到,第二题虽然是开放式的,但是需求也很简单,只要能想出方法即可,不要求编写代码。
然而面试的结果是,第一题,大部分人没答对,第二题,几乎所有的面试者都想不出方法,甚至有不少人缺乏思考的耐心,放弃回答。
同时,绝大部分应聘者都对框架表现出了极大的热情,对于框架相关的问题,不管能不能答到重点,普遍滔滔不绝。然而当我提问能否给出一个方法实现双向绑定时,我没有收到一个靠谱答案,确切的说,是几乎没有人肯回答(虽然这样的问题对这次招聘来说是超纲的)。
我并没有对框架批判一番的意思,我想说的是另一个问题——
通过交流,我发现这些应聘者中很多人都贷款买了房子,有些 5 年以上的资深应聘者,都已经有了孩子。其中年龄最大的一个应聘者每月按揭 6000+,孩子将要上初中。
所以你知道我为什么有点吃惊了吧——我看到了巨大的风险。
按照我的理解,能回答上面的两个面试题,是顺利从事 js 编程工作的最基本的要求——首先你对语言不能太陌生,然后你至少要具备一点通过编程解决实际需求的能力。
这些来应聘的前端工程师们,主要还是靠技术吃饭的,所以这不是一个关于热爱、情怀的问题,这是极其现实的,关于按揭贷款的问题。这里面比较年长的人,可能在前端火爆之前就已经在业内工作了,关于如何生存,他们自有一套(比如有个 VB 时代过来的哥们,已经买了若干商铺,出来工作纯属玩票)。
可是还有一些相对年轻的,可能在前端最火爆的时候,通过参加培训,顺利地找到工作,加入了前端工程师行列。在同学还在住地下室的时候,他们已经月薪上万,早早买了房子。