每次我为一个软件工程师职位发布岗位要求的时候,许多申请人就开始快速涌入。但让我烦恼的是,有一些人总是无法理解『编程』的真正含义。
当然,他们对此有不同的想法。
我觉得,如果你仅仅了解 jQuery,你最好申请一个前端工程师的岗位。你难道认为『软件工程师』就只是意味着 HTML、JavaScript 和 CSS 技能吗?
(我喜欢那些人 - 他们一旦谈起 XML、JSON、XSLT、SOAP、HTTP、REST、SSL 等首字母缩略语总是滔滔不绝,如果他们还能区分整数与浮点数据类型的话,那就更好了。)
你真的可以编程吗?
对于软件工程师这个岗位,我的意思是指,你能够用代码编写出一些东西。我在这里谈论的是真正的编程:我给你一个问题,你可以使用任何你喜爱的编程语言构建出一个相应的解决方案。
你能够完成这项任务吗?
好吧,我们来做个约定:如果你无法在一个小时之内分别解决以下五个问题,你或许应该重新审视一下你的简历。在你目前的工作岗位上,你很可能干得相当地不错,但是你(暂时)还不能称自己为『软件工程师』(或者『程序员』或者『计算机专家』或者『软件开发者』。)你或许应该坦白地面对自己,并且情愿花费一些儿时间再一次加固一下自己的专长和技能。
五个问题
(以下问题表面看起来都非常简单,但是你很快就会发现,这些问题实际上还挺有难度,一开始你恐怕对此毫无头绪。我没有开玩笑噢!)
问题一
编写三个函数,分别使用一个 for 循环,一个 while 循环,以及一个递归,计算一个数值列表中的数值总和。
问题二
编写一个函数,通过交叉接受列表中的元素合并这两个列表。例如:两个列表 [a, b, c] 和 [1, 2, 3],函数应该返回列表 [a, 1, b, 2, c, 3]。
问题三
编写一个函数,计算斐波那契数列的前一百位。根据定义,斐波那契数列的前两位数分别为 0 和 1,每个序列数是前两个数的和。例如,斐波那契数列的前十位是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 以及 34。
问题四
编写一个函数,接受一个非负整数列表,并将其重新组合为一个最大的数。例如,一个数值列表 [50, 2, 1, 9],其可组合的最大数为 95021。
问题五
编写一个程序,输出符合以下条件的所有可能的数值组合:接受一个 1, 2, ..., 9 数列,然后利用加、减或者无操作使其结果总是等于 100。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
作者:Santiago L. Valdarrama,自 1994 年开始编写软件,现在 Levatas 就职。
原文:Five programming problems every Software Engineer should be able to solve in less than 1 hour
感谢:Qingniu 帮助审阅并完成校对。