软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

2
虚假的唤醒说明听起来像是一个不值得修复的错误,对吗?
根据维基百科有关虚假唤醒的文章 “即使没有线程向条件变量发出信号,线程也可能从等待状态中唤醒”。 虽然我已经知道了这个“功能”,但是直到同一篇文章中,我才知道真正的原因是什么 “虚假唤醒听起来可能很奇怪,但是在某些多处理器系统上,使条件唤醒完全可预测可能会大大减慢所有条件变量的运行。” 听起来像是一个不值得修复的错误,对吗?


4
组件和模块之间有区别吗
我对术语模块和组件有一些疑问。在我看来,模块是捆绑的类,只能通过定义明确的接口访问。它们隐藏了所有实现细节,并且可以重用。模块定义了它们所依赖的模块。 组件有什么区别?我在一些书中进行了查找,但是组件的描述非常相似。

2
编写低延迟的Java
是否存在用Java编写低延迟代码的特定于Java的技术(不适用于C ++的技术)?我经常看到Java低延迟角色,并且他们要求获得编写低延迟Java的经验-有时似乎有点矛盾。 我唯一能想到的就是JNI的经验,将I / O调用外包给本地代码。也可能使用破坏者模式,但这不是实际技术。 有编写低延迟代码的Java特定技巧吗? 我知道有一个实时Java规范,但是我被警告实时与低延迟不一样。

5
返回不良样式/危险后使用finally子句进行工作吗?
作为编写迭代器的一部分,我发现自己正在编写以下代码(剥离错误处理) public T next() { try { return next; } finally { next = fetcher.fetchNext(next); } } 发现它比阅读起来稍微容易一些 public T next() { T tmp = next; next = fetcher.fetchNext(next); return tmp; } 我知道这是一个简单的示例,在可读性方面的差异可能不会那么大,但我对这样的一般情况感兴趣:在没有涉及异常的情况下,使用try-finally是否不好?如果在简化代码时实际上是首选。 如果不好,为什么?风格,性能,陷阱...? 结论 谢谢大家的回答!我猜得出的结论(至少对我而言)是,如果第一个示例是通用模式,则它可能更具可读性,但事实并非如此。因此,使用超出其目的的构造所带来的混乱,以及可能造成混淆的异常流,将胜过任何简化。

6
在Python函数调用中用于未使用的返回参数的样式
是否有任何推荐的/普遍接受的编码样式用于处理以下情况:函数返回一个值的元组,但之后仅使用这些值中的一个(请注意,这主要是我无法更改的库函数的意思–编写包装器这个电话可能有点矫kill过正...)?而不是做 a, b, c = foo() 然后不使用band c,则应首选以下哪个变体(或还有另一个变体?): 变体1(下划线) a, _, _ = foo() (这非常简单明了,但可能会_ = gettext.gettext在许多使用翻译的应用程序中使用) 变式2(虚拟名称) a, unused, unused = foo() (我认为这不是很吸引人,其他名称也是如此dummy) 变体3(索引) a = foo()[0] (对我来说,这些()[0]看起来很不可思议……)

8
惰性评估的概念为何有用?
表达式的惰性求值似乎会使程序员失去对代码执行顺序的控制。我很难理解为什么程序员会接受或期望这样做。 当我们无法保证将在何时何地评估表达式时,该范式如何用于构建可预期运行的可预测软件?

10
作为单独开发人员编写提交消息?
在我和其他程序员共享存储库的项目中,即使我是主要开发人员,我也总是编写提交消息。 但是在那些我是一个项目的单独开发人员的项目中,该存储库托管在我的个人笔记本电脑上,甚至不由客户端托管,因此,除了我自己之外,没有人会看到提交,如果我仍然编写提交,消息? 到目前为止,我一直在写它们,但是我发现我从未回过头来查看我的提交消息。我抽出时间来写下这些消息,但是即使我也再也看不到它们。 作为单独的开发人员写提交消息有什么充分的理由,还是您应该跳过它们而只专注于开发?

8
字典与清单
所以我遇到了Dictionary<int, int>今天的工作。这对我来说似乎很奇怪,因为我可能会改用a List<int>。有区别吗?是否会有用例,其中一种结构优于另一种结构?

4
从去年开始更新开源项目的版权日期是什么?
在2011年,我发布了一些使用Apache许可证授权的开源代码。因此,所有源文件的顶部都显示以下样板消息: /* Copyright 2011 My Name Licensed under the Apache License... <blah blah> */ 所以现在是2012年,我准备发布1.1版。这样,大多数所有源文件都以某种方式被触摸。并且添加了一些新的源代码文件。 如何更新现有文件的版权日期?以下是对每个源文件的正确更新吗?(即将2011更改为“ 2011-2012”) /* Copyright 2011-2012 My Name Licensed under the Apache License... <blah blah> */ 新的源文件是否Copyright 2011-2012同样适用?还是新代码刚得到Copyright 2012?


12
如果大三学生没有采纳您的建议,该怎么办?[关闭]
我正在领导一个由3-4个初级开发人员组成的团队。除编写代码外,我的工作是为大三学生提供监督和指导。 但是,我完全理解有多少开发人员会珍惜他们的工作自主权,并且我不想通过用我的思想和算法来喂他们来破坏他们的内在动力。我希望他们以自己的方式探索问题,自己思考,只有在他们真正面临无法解决的问题时才来找我。 当他们来找我时,有时我不得不提出一种完全不同的算法来解决该问题,因为他们的算法不够健壮(请记住,我是大四学生,而且看到的不止于此)。当然,我会以一种很好的方式来解释这一点,以免伤害他们的感受,并且我会轻轻地概述一下我的解决方案比他们的解决方案优越得多,没有屈尊的语气或谴责的词语。 但是,尽管如此,他们有时还是不愿意接受我的建议,部分是因为他们在自己的算法上投入了很多,或者部分是因为担心使用新方法会花费更多的学习时间,并使他们看起来像是在管理层无处可去。但是我内心深处非常清楚,我的算法比他们的算法好得多,他们应该采用它。 如果他们不采纳我的建议该怎么办?我应该只是要求他们按照我的方式走,还是应该让他们的头撞在墙上很多次,等他们回来?前者会使我成为独裁者,而后者则会花费我们宝贵的开发时间,并导致错误修复成本。我真的在两难中。

7
选择将Web服务公开为SOAP或REST服务的决定因素是什么?
据我所知,使用SOAP需要使用SOAP堆栈,因此客户端很难使用,即他们需要确保已拥有适当的SOAP堆栈来正确格式化POST数据和标头,然后为您提供一些数据结构,而使用REST,您只需使用查询字符串中的参数发出HTTP GET请求,然后获取一些我想可能是XML的文本。 那么,SOAP的额外开销/复杂性会给您带来什么呢?什么时候需要它?什么时候可以?

7
正则表达式实际上是如何工作的?
假设您有一份书面论文的文件。您想分析这篇文章,仅选择某些单词。凉。 使用正则表达式是否比逐行逐单词地查找匹配项更快?如果是这样,它如何运作?您如何比查看每个单词更快?

14
如何采访自然科学家的开发职位?[关闭]
原始问题 我已经为公司做过一些采访,主要是开发人员职位的计算机科学家,还有一些测试人员和项目经理。现在,我必须填补研发部门的研究小组的空缺(旁注:“研究”是指我们试图与大学,其他公司,研究中心一起使用研究项目中的软件来解决专业领域/市场领域的问题。和最终用户组织。这不是计算机科学研究;我们不会解决P = NP问题)。 现在,我们邀请了一个拥有化学硕士学位的人(他的简历中也有很多物理学方面的东西),他从未上过任何计算机科学课程。在当地一所大学的职业生涯中,我已经与他交谈了大约半小时,毫无疑问,这家伙很聪明。他的成绩也很出色,并且以优异的成绩毕业。为了获得理学学士学位,他需要在Mathematica中自学编程,并且可以相信地告诉我他非常喜欢编程。此外,他使用自己的软件(在Mathematica中实现)解决了理学硕士问题,可能解决了一些我可能不理解的物理化学问题。它包括一个GUI和8,000 LoC的显着大小。他似乎对我们在研究小组中所做的事情非常着迷,并且说实话,像我们这样的中小型企业很难找到好人。我对雇用他也很感兴趣,因为他可以协助我撰写项目建议书,报告,做演示等。他可能也适合我们的团队。 剩下的唯一问题是:我将如何检查他是否将获得在我们的项目中进行软件实现所需的编程技能,因为这将是工作的重要部分? 我当然会问他是什么,这让他着迷于编程。我还将询问他如何着手编写其自然科学软件以及其结构。我将询问他如何设法获得所需的软件开发技能和信息。但是我还有什么要问的吗?也许更具体些?我应该请他解释一下他的Mathematica解决方案吗? 需要明确的是:我不是在寻找特定语言或技术堆栈中的知识。我们是产品开发方面的.NET商店,但我想为我们的研究项目提供自由选择。因此,我对元能力能够学习实际需要的内容感兴趣。 我希望这个问题是可以回答的,而不是开放性的,因为我真的很想知道是否存在一种默认的方法来检查获得进一步的编程技能的能力。如果您不清楚某些地方,请给我一些评论,让我改善我的问题。 更新以反映在2011-12-01之前给出的答案 我接受什么答案,为什么 谢谢大家的回答,其中大多数都非常有帮助,所以我表示非常赞赏!尽管汤姆·斯奎尔斯(Tom Squires)的答案获得了最多的票,但我将接受古拉什亲王(Prince Goulash)给出的答案。当然,汤姆(Tom)客观上是正确的,但是Prince的回答对我来说更有用,我仔细检查了FAQ(常见问题),认为这是接受答案的标准。 面试中我要问他什么 我让他解释一些简单的任务,例如克里斯·伯特·布朗(Chris Burt-Brown)提到的《骆驼有两个驼峰》中 的示例 我将请他以图形方式解释一些更高级的控制流程。 我将使用一个数学示例来检查他对递归的理解。 我让他用自然语言解释他选择的算法。 我将让他解释他的Mathematica解决方案,特别是我将询问他的过程模型,工具的使用,总体上代码和软件的结构以及不同的抽象层。 为了检查他的动机,我将要求他对软件开发感兴趣。 我问他是否知道他需要了解有关企业软件开发的知识。特别是,我希望将讨论转变为团队合作,结对编程,TDD的方向,因为我希望他仅凭自己的MSc工作就不会对此有很多了解。 听起来这将是一个漫长的采访;) 面试后更新2011-12-09 再次感谢大家的良好回答。他通过面试通过了面试。我从未对申请人感到满意。他的Mathematica解决方案似乎结构良好。尽管他不知道这些被引用为高阶函数,但他能够解释在哪里使用了高阶函数。他回答了我基于数学的递归问题,以及《骆驼有两个驼峰》中的简单作业和控制流程问题。当他解释一些算法时,我学到了很多关于非线性拟合的知识;)另外,他老实说,他当然不能保证他将能够学习到到目前为止尚不了解的有关专业软件开发的知识。但他可以相信地说,他总是擅长学习新概念-即使是独自学习-并且对软件开发真的很感兴趣。他还要求提供该项目的技术堆栈,首先将他应用到家里进行研究。他也对结对编程和团队合作感到好奇。现在,我希望能订立雇用合同。
30 interview  hiring 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.