面试题要有区分度。不能太容易,让对方有屈辱感(“看不起人么?让我做这个?”);也不能太难,把所有候选人都干掉,对自己的时间也是一种浪费。其实挺难选的。
很多大公司,因为买方市场,大把候选人排队等着挑,所以干脆把面试题弄得难一些,目的是筛选,只要好的,合适不合适另说。而一些小公司,比如我厂,得到优秀简历的机会本就不多,如果因为面试题设计不好,没法很好的考察候选人的水平,或者让候选人感到不舒服拒接 offer,都是损失。
这里分享我近期总结的三道编程题,对应初中高三档候选人,我觉得很有区分度,大家也可以试试。
初级
写一段程序,将数字转换成中文大写。比如 1024 => “壹仟零贰拾肆”。
这道题其实是很经典的面试题,我第一次跳槽面试就做的这道题。《算法的乐趣》一书中也有对它的解析。这道题并不难,但是对编程的基础概念覆盖的比较全面,判断、循环、数组,等等。理论上说大部分同学,包括应届生,只要受过编程训练,熟悉一种语言,都应该能够写出来。
如果能够先写测试用例,然后再写伪代码,再写实现,就更好了。
中级
我有一个项目,文案都是中文,我现在想对它进行 i18n 改造,请写一个脚本,遍历源码目录,提取所有文案,输出成一个 PO 文件。
这道题比前面复杂不少。首先不是任何语言都能完成了,还要求候选人熟悉 Node.js 相关的 API——我觉得中级前端一点 Node.js 不会实在说不过去。涉及到文件读取,势必包含异步操作,可以考察候选人是用回调(接下来就可以让他改造成 Promise),还是 Promise,还是 async/await。以及,Node.js 12 直接提供 Promise 风格的接口,可以简介考察候选人是否关注行业动态。
而且,文件夹有嵌套,需要用到递归;查找中文,需要用到正则。PO 文件知道不知道都无所谓,输出 CSV 也无妨(BOM 不在考察之列)。
这段 JS 我写过,大概50行,考察点很密集,工作量不太大,我觉得蛮好的。
高级
我有一个项目,文案都是中文,我现在相对它进行 i18n 改造,计划用 vue-i18n 框架。请写一个脚本,把代码中所有中文都替换成
$t('中文')
这样的调用。(附加题:)并且调整框架,加载 PO 文件。
这道题,基本含有上一题的每个考点,还需要候选人具备一定的语法分析经验。因为 Vue 里面使用文案主要有三种方式:
- 模板中字符串
span 你好
- 属性字符串
placeholder="用户名"
- JS 中的字符串
title="标题"
这三类文案需要不同的替换方式,所以候选人需要分析上下文,找出特征,用最合适的方案替换。
附加题方面,主要考察候选人对前端工具链的熟悉程度,毕竟到了高级,知识的广度也是很重要的。
总结
实际上,上面三道题,第一道我用过很多次,第二道只用过一次,第三道还没用过……
所以,欢迎看到这篇文章的同学,给我一些反馈。
欢迎吐槽,共同进步