以下哪项常规 表达式无法转化为 一个只使用的基本运算符
|
和*
(Kleene star)和分组( () ) *
/adt[ui]t+\S?/
/b[^e]ac?h+\s\s\sBALL/i
/he{5}[Ly]+o\bwo[^r]L(?!d)/
/ab?c+(de{1,3})/
管理高级程序员职位这是一个公平的问题吗?
答案 0 :(得分:23)
在我看来没有:因为它依赖于非常具体的知识,似乎是试图抓住受访者。
打包你的负面前瞻断言,然后回到绘图板。
我个人更喜欢能让一系列能力以正确的方式回应的问题,并且不依赖受访者记住一个模糊的事实。
例如,“解释以下一系列正则表达式”。
另一方面,他们这些天不让我采访。
答案 1 :(得分:4)
如果你要求一个正则表达式大师并且有人声称自己是一个......但是“普通”的高级程序员 - 我会对他们的工作项目更感兴趣,如何他们解决了手头的问题,他们认为导致项目失败/成功的因素,他们从成功/失败中学到的东西等等。
答案 2 :(得分:4)
短语“Kleene star”是一个有人在谈论理论CS意义上的常规语言的提示,即,那些可以被deterministic finite automata识别的语言。同一个开发人员是否也提出了涉及pumping lemma的问题?
通过提供更多背景信息,帮助我们回答您的问题。根据您的评论,我认为对正则表达式的透彻理解在您的组织中并不重要,所以这是对知识的直接测试吗?您是否试图衡量候选人抽象收集信息和推理的能力?是否愿意走出框并回答上述情况?你有没有征求这些面试问题?如果是这样,你是否提供了指导方针,或者它是“今天COB需要3个潜在的面试问题,并且请提交TPS报告封面!”分配
答案 3 :(得分:3)
并非所有编程都涉及使用复杂的正则表达式。例如,我怀疑你会在Linux内核中找到任何内容。所以,如果你说出你会问面试问题的高级程序员,你的问题才有意义。
答案 4 :(得分:3)
@jpinto3912 - 好的:
/adt[ui]t+\S?/ == adt(u|i)tt*(\S|)
// this one is a pain due to the insensitive casing, but is do-able
/b[^e]ac?h+\s\s\sBALL/i ==
(B|b)((a|A)|(b|B)|(c|C)|(d|D)|(f|F)|...|(z|Z)|..special characters..)(a|A)(c|C|)
(h|H)(h|H)*\s\s\s(b|B)(a|A)(l|L)(l|L)
// fail on negative lookahead
/he{5}[Ly]+o\bwo[^r]L(?!d)/ == heeeee(L|y)(L|y)*o\bwo(all characters not r)L
/ab?c+(de{1,3})/ == a(b|)cc*d(e|ee|eee)
答案 5 :(得分:2)
嗯,我认为你问这个问题并不是一个公平的问题,因为你承认自己不知道答案;可能是,如果候选人在简历上有正则表达,并且面试人员能够很好地理解这个问题。
然而:我个人选择不使用强烈依赖于特定知识的“谜题”问题;我试着提出更一般的问题,这让我决定候选人如何解决问题。人们可以学习新技术,但是为解决问题带来正确的态度却难以学习/教授。
答案 6 :(得分:2)
我是许多人来寻求正则表达式帮助的人,并且在多年的这段时间里,我到目前为止从未有使用预测。因此,除非提供参考,否则这是一个技巧问题,不会告诉您程序员的技能。此外,这非常适用于正则表达式使用此特定语法进行前瞻的语言。
答案 7 :(得分:2)
通过提出这个问题,我会问自己到底想要找出什么。如果有人无法回答,是否意味着他是一个糟糕的程序员?如果他回答,这是否意味着他是一个优秀的程序员?在采访中我仍然会问这个问题,但我会对人们的想法更感兴趣。
答案 8 :(得分:2)
我猜你的公司必须只在正则表达式中编码才能成为一个很好的高级面试问题。
答案 9 :(得分:1)
这看起来很合理,假设你给他们几分钟(也许是笔和纸)。我不是正则表达式大师 - 而不是任何意义上的“高级程序员” - 但我可以想象那个。
有些人可能会陷入一些不太常见的正则表达式语法 - 例如,我不知道“?!”除了一周前我不得不使用它之外,操作员是我的头脑。每次你必须制作一个非平凡的正则表达式时,很容易看一个参考表,所以我可以理解是否有人不清楚语法。
那就是说,你可能会找到一个更简单的问题,更直接地测试候选人是否对正则表达式有点熟悉(这真的是你关心的事情,对吗?)
答案 10 :(得分:1)
我会说这是一个有效的问题iff您正在尝试查看开发人员要求尝试解决问题中含糊不清的问题。
奖励点也可以让正则表达式足以解决。
答案 11 :(得分:1)
我知道问题已得到解答,但对于那些感兴趣的人......
正则表达式的基本运算符是union,concatenation和Kleene star(零个或多个副本)。所以问题基本上是问正则表达式语法是否超出了这个范围。
[ab]只是(a + b),即联合。
一个?只是(a + epsilon),其中epsilon是空字符串。
a +只是一个*。
a {5}只是aaaaa。
e {1,3}只是(e + ee + eee)。
[^ e]只是(a + b + c + d + f + ... + x + y + z)这是杂乱的,可能还需要包含大写字母,具体取决于你的字母。
/ i(忽略大小写)很乱但可行,它几乎是事情的两倍。
像?!d我必须抬头看。
大多数情况下,你不能做反转,或向前看或向后看或寻找可变数量的东西(虽然常数或常数范围是可以的)。
答案 12 :(得分:0)
这不是一个“问题公平”的问题,而是你对这个问题给出了多少分量,从而给出了答案。这个问题的目的是什么?
1)是否知道他们是否知道这种详细程度的正则表达式(理论上是因为工作需要它)?
2)是否能够在提交时能够找出棘手的问题? (总是很了解潜在的候选人。)
3)或者它是否只是为了看看他们在放弃(或简单猜测)之前愿意付出多少努力?如果他们不愿意在面试中工作,那么他们很可能也不想在面试之外做很多工作。
或者,由于其他六个原因之一,您可能会提出类似的问题。你试图尽可能多地了解你的候选人。您的问题只是帮助您做到这一点。你问的问题以及你如何衡量答案应该符合你的需要,而不是候选人。通过这种方式,您可以获得自付费以来所寻找的内容。
答案 13 :(得分:0)
对于你正在招聘编写真实世界代码的程序员来说,这个问题毫无意义,因为现实世界中没有人只使用你提到的功能来使用裸骨的正则表达式。
如果你想把正则表达式拼图放到你的面试中,提供一个正则表达式,并要求候选人写一个详尽的可能匹配列表作为第一个问题,并提供一个详尽的匹配列表,要求正则表达式作为第二个问题。这就是现实世界的程序员所做的。