我在质疑嵌入式软件工程师的候选人(在我们公司,我们主要使用C,有时候是C ++)。 我经常给候选人一点麻烦的问题。我没有提到,当它不明显时,它可以通过一点点琐事来解决。我也接受的解决方案,而无需使用位操作,但后来我引导应试者进入位(例如说:“如果你不能用什么模运算符”)。示例问题可能是:
在我看来,这样的问题应该很容易在一分钟内用任何像样的软件工程师(甚至应届毕业生)解决了,不管他工作的软件领域。然而,我的老板最近抱怨这些问题对于那些正在工作的人而言太低了。在GUI中。它来到的情况下,在我的追问下是没有用的,因为我的老板雇用的是完全的失败本主题中的候选人,但他声称,他在QT(我不能检查这一点,因为我从来没有使用的Qt,以及经验丰富的出于某种原因,我是目前唯一可以采访他的人。)
所以我的问题是:是位摆弄任何(嵌入式)软件工程师一个很好的问题,还是我的老板是正确的,我应该放弃它要求所有候选人
答案 0 :(得分:2)
我认为需要注意的是,你不是在询问知识的位置,无论受访者是否掌握,基本上都是随机的。对于你的例子,我不能立即记住那些令人讨厌的黑客攻击最重要的一些问题(找到它,然后四舍五入到下一个2的幂)。我知道有些黑客可以查找,我知道GCC上的__builtin_clz
当然不可移植。
那么,我没有通过面试吗?如果是这样,你确定我不适合你公司的Qt计划吗?你正在实施一个过滤器,你只需要考虑误报率(有多少人会知道苦恼但是员工很差)和误报率(有多少优秀员工忘记了这些错误)
当然,所有采访都有误报率。贵公司雇用员工的成本相当高,所以你必须确定。出于这个原因,我认为如果这个员工结果是好的,那可能更多的是运气而不是公司的判断 - 你不应该雇用某人作为Qt程序员而不用Qt或其他东西测试他们的能力类似。与你雇佣最好的一个人的价值相比,你的一个Qt人员对三个最佳候选人中的每一个进行第二次面试的成本是多少?考虑到这次面试对招聘决定没有影响,你的面试时间是多少?
请记住,不同类型的程序员在他们的直接命令下拥有不同的知识,并确保您的问题与您想要的程序员类型密切相关。在这个特定的主题上,它所证明的是受访者花了很多时间,可能是在最近的过去。从好的方面来说,那是他们花在编程上的时间。从消极方面来看,他们没有花时间写作和学习Qt。
如果有人不知道如何检查lsb,我会担心,并且不知道正值和2的补码负值,lsb对于奇数是1而对于偶数是0。那是因为我希望程序员知道二进制表示是什么。如果有人认为x & 1
可能在某种程度上比x % 2
更好,我也会担心,因为这意味着他们使用了糟糕的编译器; - )
如果有人不记得popcount的位旋风,我不会太担心。稍微多一点,如果你给他们一个更简单的方法之一后他们无法弄清楚它的代码:“我怎么能用bit-twiddling来计算2位整数的popcount?OK现在写一行来为4位整数的每个顶部和底部2位并行执行。好的,现在写一个32位的popcount“。
答案 1 :(得分:1)
如果你是用C语言编程,我会说是的。比特小说不是你每天都做的事情,而是表明你了解计算机如何处理数据的东西。
如果您使用更高级别的语言编程,我认为它不那么重要。
答案 2 :(得分:1)
对于嵌入式工程师或软件工程师而言,他们必须应对与特定硬件等的交谈,这些问题都很好。他们很可能不得不编写那些随处可见的代码。不确定这是否可以在1分钟内解决,尤其是如果有问题的工程师想要以通用的方式进行解决。
答案 3 :(得分:1)
我的观点是每个电子和/或软件工程师都必须知道这些事情。这些是数字计算和计算机编程的基础。
答案 4 :(得分:0)
我认为这取决于他们将要开发什么类型的嵌入式系统,以及他们将使用它们做什么; “嵌入式”涵盖了非常广泛的硬件。如果他们需要编写低级代码或与小型微控制器一起工作,那么像bit-twiddling这样的东西比更高级别的代码更重要,就像PC兼容的SBC一样。
然而,即使使用功能更强大的系统而不编写低级代码,依旧熟悉按位操作仍然很重要 - 至少足以处理位标志等(至少)。