Nutanix 访问了我的校园。一共进行了3轮:
第 1 轮(编码轮):
2 个问题要在 1 小时 15 分钟内解决。
问题 1:
给定一个字符串,确定它是否是一个“sum-string”。如果字符串满足以下属性,则称为 sum-string:
镜头>3
子串(i,x) + 子串(x+1,j) = 子串(j,l)
例子:
“12358”是一个和字符串。解释: 1+2 = 3 ; 2+3 = 5 ; 3+5 = 8
“199100199”是一个和字符串。解释: 1+99 = 100 ; 99+100 = 199
“2368”不是和字符串。
问题2:
给定 2 个字符串s1 和 s2,确定 s2 是否是 s1 的 shuffle。其中 shuffle 被定义为在二叉树中切换节点的 2 个子节点的操作。
Example:
s1 = great
s2 = taerg
binary tree for s1
great
/ \
gr eat
/ \ / \
g r e at
after shuffle we obtain,
great
/ \
eat gr (shuffle gr and eat as they are children of great node)
/ \ / \
at e r g
/ \
t a
所以 taerg 是 s1 的 shuffel字符串。
这是 2 的一个棘手问题。
12名学生晋级下一轮。我解决了第一个问题的所有测试用例和问题2的5个测试用例。所以我被选中进入第二轮。
第二轮:
我被要求解决动态规划问题。仅给定由运算符(+ 和 *)分隔的数字字符串。然后以这样的方式将字符串括起来,首先我们得到可能的最大值,然后我们从字符串得到可能的最小值。返回计算出的两个值的差值。我不得不在一张纸上解决这个问题并解释整个方法。我花了 30 分钟完成了纸上的代码以及解释。然后面试官在一些简单的情况下测试了我的代码:2*2+2 => 最大值是 2*(2+2) = 8,最小值是 (2*2)+2 = 6。
然后他问我有没有什么问题要问他。
我的解决方案和编码风格给他留下了深刻的印象,干净整洁,带有注释和驼峰式变量。
包括我在内,共有 6 名学生入围第三轮。
第 3 轮:
面试官让我调试一个涉及读写锁的代码。这是一个操作系统问题,读者-作者问题的修改版本。我指出了代码的 5 个问题,语法和逻辑都存在。存在死锁情况,写后写不一致,写后读不一致,if then else 错误和语法错误。我花了 10 分钟来指出所有问题并编写正确的代码。面试官的手机上有一个秒表,我在 5 分钟后才知道。