原文:最近我面试常问的一道… - @宝玉xp的微博 - 微博 (weibo.com)
最近我面试常问的一道题是“Remove Duplicates from an Array”,给个姓名字符串数组排重,基本上都能做出来,尤其是刷过题的,很快就能用 HashMap 或者 Set 给出最优解。
但接下来我会继续问:“如果把数组里面的项改成数字和字符串混合怎么办?”那么一些JS代码可能就不正确执行了。
接下来我又会问:“如果数组里的是一个User对象而不是字符串,怎么只根据id属性排重?”到这一步很多只会刷题的已经卡住了,完全无法根据之前HashMap的方案变通。
再接下来的问题会是:“如果要根据多个属性排重,比如id/name/age”,那么怎么办?这一步又要卡住一些人,又回到了原始的遍历查询,而不能坚持原本HashMap的方案。
前面的如果都通过了,最后还会问:“是否可以将这个方法变成一个通用的方法?即使不同的对象类型,不同的key组合,也可以共用”,如果有候选人能将获取key的方法作为参数,那应该可以得到一个比较高的评价。
这其实也是我面试时喜欢用的一种策略:
- 从简单的问题开始,让候选人可以轻松进入状态
- 逐步变更需求,考察候选人是不是在日常工作学习中对这些问题有过深入思考,能去解决一类问题而不是一个问题
- 尽可能贴近实际项目——比如上面的例子,如果写过Cache的get和set,其实不复杂