两道看似简单的面试题,通过率为0
昨天和同事面试了十几个求职者,大部分人简历上写的是培训班出来的,科班的也有几个。同事现场发挥出了两道题,要求他们现场编程实现一下,我看了下他出的题,第一反应是这小子可真狠,挖了那么大一个大坑给别人跳。废话不多说上题:
以下题目可以采用自己熟悉的任意语言进行描述:
第一道题:已知有一家化工厂,日常生产的商品有5种类型,商品名称分别为硫酸(编号001),硝酸(编号002),盐酸(编号003),氢氟酸(编号004)和硫酸亚铁(编号005)。要求编写一个函数用以描述以下内容,通过输入商品名称返回对应的商品编号;
第二道题:编写一个函数,如果参数输入为“男性”时返回true,如果为“女性”时返回false。(按照中国现行法律考虑,不用考虑其他性别);
就是这样两道看似极其简单的题,第一道题虽然全部都描述正确了,但是也仅仅只是描述正确而已,从代码看起来没有一个人明白这道题的真正用意。第二道题全部通过了。但是只有两道题都通过才算真正的清楚出题人到底是想考察些什么。其实同事想让他们明白什么时候不应该去过度设计。
其实我看了第一道题以后,我就估计这次有90%的人要被Pass掉,因为如果只是使用if+else来写的话,就正好掉坑里了。我也不知道他们为什么设计之前不问问自己,如果这样设计的话,日后工厂商品种类增加了或者某个商品的编号改变了怎么办?打开function直接改?既然都已经意识到了函数内部有这样的变化,为什么不去抽象这个变化。然而很遗憾没有一个人使用KeyValuePairs去分离这个变化,当商品种类增加或改变时,直接注册键值对到散列表里或者修改散列表键对应的值就可以了,而不是去修改function。
再看第二道题,恰恰告诉我们不要去过度设计,因为这里描述的性别除了两种没有其他的可能性(按照中国法律),返回的值改变的可能性也是极低的,用最简单的if+else就可以了。
大家可以一起讨论讨论