您在候选筛选过程中发现哪些简单的算法或数据结构相关的"白板"问题?
我有一些简单的用于验证解决问题的技能,可以简单地表达,但有一些机会来应用一些启发式方法.
我用于初级开发人员的基础之一是:
编写一个C#方法,它接受一个包含一组单词(一个句子)的字符串,并将这些单词X向右旋转.当句子的最后位置中的单词被旋转时,它应该显示在结果字符串的前面.
当候选人回答这个问题时,我会看到他们可以使用.NET数据结构和方法(string.Join,string.Split,List等)来解决问题.我也寻找他们来确定优化的特殊情况.就像需要旋转的单词实际上不是X的次数一样,它是X%的单词数.
您用来采访候选人的白板问题是什么?您在答案中寻找的是什么(不需要发布实际答案).
我喜欢经典的"LinkedList和ArrayList之间的区别(或链接列表和数组/向量之间的差异),为什么你会选择其中一个?"
我希望的答案包括以下讨论:
插入性能
迭代性能
内存分配/重新分配影响
从开头/中间/结尾删除元素的影响
如何知道(或不知道)列表的最大大小会影响决策
有一次,当我在大学面试微软时,那家伙问我如何检测链表中的循环.
在上周的课堂上讨论了问题的最佳解决方案后,我开始告诉他.
他告诉我,"不,不,每个人都给我解决方案.给我一个不同的解决方案."
我认为我的解决方案是最佳的.他说,"我知道这是最优的.给我一个次优的."
与此同时,这是一个非常好的问题.
在最近的采访中,我经常被要求实现一个数据结构,通常是LinkedList或HashMap.这两个都很容易在短时间内完成,并且足以消除无能为力.
这并不一定涉及OOP功能,但在我们的最后一组访谈中,我们使用了Bug of the Month列表中的一些错误代码.观察候选人发现错误显示他们的分析能力,显示知道如何解释别人的代码
编写一个接受字符串的方法,如果该字符串是一个数字,则返回true.(任何正则表达式作为面试最有效的答案)
请编写一个抽象的工厂方法,它不包含开关并返回基类型为"X"的类型.(寻找模式,寻找反射,寻找它们不要侧面步骤并使用if else if)
请通过标记"|; |"拆分字符串"every; thing |; | else |; | in |; | he; re".(至少在.net中不允许使用多字符标记,因此寻找创造力,最好的解决方案是完全破解)
图表很难,因为如果需要的不仅仅是算法草图,那么大多数非平凡的图形问题往往需要大量的实际代码才能实现.很多问题往往归结为候选人是否知道最短路径和图遍历算法,熟悉周期类型和检测,以及他们是否知道复杂性界限.我认为关于这些东西的很多问题归结为琐事而不是现场的创造性思维能力.
我认为与树有关的问题往往会涵盖图问题的大部分困难,但没有那么多的代码复杂性.
我喜欢Project Euler问题,要求找到树下最昂贵的路径(16/67); 共同的祖先是一个很好的热身,但很多人都看到了它.要求某人设计一个树类,执行遍历,然后找出他们可以重建树的遍历,也可以深入了解数据结构和算法实现.Stern-Brocot编程挑战在板上也很有趣且快速开发(http://online-judge.uva.es/p/v100/10077.html).
跟进这样的问题:"你怎么能改进这个代码,以便维护它的开发人员可以弄清楚它是如何工作的?"
实现一个函数,给定一个可能是循环的链表,交换前两个元素,第三个与第四个,等等...