软件工程

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

6
设计与数据库相关的方法,最好返回:true / false或受影响的行?
我有一些方法可以在数据库中执行某些数据更改(插入,更新和删除)。在ORM我使用这些类型的方法返回行INT影响值。我应该为“我的方法”返回什么,以指示操作的成功/失败状态? 考虑返回一个代码int: A.1 public int myLowerLevelMethod(int id) { ... int affectedRows = myOrm.deleteById(id) ... return affectedRows; } 然后用法: A2 public void myOtherMethod() { ... int affectedRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Success } else { // Fail } } 与使用boolean相比: B.1 public boolean myLowerLevelMethod(int id) { ... int …

5
打印2 ^ i * 5 ^ j中的下一个最小值,其中i,j> = 0
最近在一次技术电话筛选中有人问我这个问题,但做得不好。问题包括在下面的逐字记录中。 生成{2^i * 5^j | i,j >= 0}排序的集合。连续打印下一个最小值。 例: { 1, 2, 4, 5, 8, 10...} “下一个最小的”使我认为涉及到最小的堆,但是我真的不知道从那里去哪里,面试官也没有提供任何帮助。 有人对如何解决此类问题有建议吗?
10 algorithms 

5
是否存在技术限制或语言功能阻止我的Python脚本像等效的C ++程序一样快?
我是Python的长期用户。几年前,我开始学习C ++,以了解它在速度方面可以提供什么。在这段时间里,我将继续使用Python作为原型制作工具。看来,这是一个很好的系统:使用Python进行敏捷开发,在C ++中快速执行。 最近,我越来越多地使用Python,并学习如何避免早年使用该语言时很快使用的所有陷阱和反模式。据我了解,使用某些功能(列表理解,枚举等)可以提高性能。 但是,是否存在技术限制或语言功能使我的Python脚本无法与同等C ++程序一样快?

5
当主要目标是依赖核心语言的框架时,学习超越核心语言的基础是否有益?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 请记住,这不是另一个“ 在移至[ 此处插入框架 ] 之前我应该​​知道多少[ 这里插入编程语言 ]?”?我想知道的是,当您的意图是在大多数时候严重依赖其框架时,学习编程语言的那些高级概念有什么好处。因此,例如,我开始使用jQuery,首先花时间真正掌握Javascript的核心概念。另外,我在书架上还有一些不仅仅涉及基础知识的书籍(例如,《 Java忍者》的秘密),而且还深入研究了该语言。当我浏览页面时,我发现其中相当一部分并没有延续到jQuery,因为我的主要目的是进行DOM操作。 Ruby和RoR也可以这样说。这些书会使我整体上成为更好的程序员吗?大概。这些主题可以帮助我更好地利用其框架吗?这就是我很难理解的地方。

2
使用包(宝石,鸡蛋等)创建解耦的架构
主要问题 眼看着良好的支持最先进的编程平台有包管理(想想gem,npm,pip,等),它是有意义的设计应用程序或系统由内部开发的软件包,从而促进并创建一个松散耦合的架构? 例 这样的一个示例是创建用于数据库访问以及用于身份验证和系统其他组件的软件包。当然,这些也使用外部程序包。然后,您的系统导入并使用这些软件包-而不是将其代码包含在自己的代码库中。 注意事项 对我来说,这似乎可以促进代码去耦并提高可维护性,几乎是一种基于Web的桌面应用程序方式(更新几乎是自动应用的,单一功能的单一代码库,等等)。 这看起来像是一个合理而理智的设计概念吗?如今,这实际上已用作构建应用程序的标准方法吗?

5
重复的四叉树
我正在实现一个四叉树。对于那些不知道此数据结构的人,我包括以下简短描述: 四叉树是一种数据结构,在欧几里得平面中就像3维空间中的八叉树一样。四叉树的常见用途是空间索引。 总结一下它们是如何工作的,四叉树是一个集合(假设这里是矩形),具有最大容量和一个初始边界框。当尝试将元素插入达到最大容量的四叉树中时,该四叉树被细分为4个四叉树(其几何表示将比插入前的树小四倍)。每个元素根据其位置重新分配在子树中。使用矩形时的左上边界。 因此,四叉树要么是叶子,其元素数量少于其容量,要么是一棵有4个四叉树作为孩子的树(通常是西北,东北,西南,东南)。 我担心的是,如果您尝试添加重复项,可能是同一元素多次或具有相同位置的多个不同元素,则四叉树在处理边缘时存在一个基本问题。 例如,如果您使用容量为1的四叉树并将单位矩形作为边框: [(0,0),(0,1),(1,1),(1,0)] 然后您尝试插入两次以其左上边界为原点的矩形:(或类似地,如果尝试在容量为N> 1的四叉树中将其插入N + 1次) quadtree->insert(0.0, 0.0, 0.1, 0.1) quadtree->insert(0.0, 0.0, 0.1, 0.1) 第一次插入不会有问题: 但是然后第一个插入将触发细分(因为容量为1): 因此,两个矩形都放在同一子树中。 然后,这两个元素将到达相同的四叉树并触发细分… 依此类推,依此类推,细分方法将无限期地运行,因为(0,0)始终位于所创建的四个子树中的同一子树中,这意味着将发生无限递归问题。 有可能有重复的四叉树吗?(如果没有,则可以将其实现为Set) 我们如何解决这个问题而又不完全破坏四叉树的体系结构?

5
响应应用功能请求,我将不实施。
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我是一名新的应用程序开发人员,在下载了20次(免费和无广告)的应用程序后,我已经收到了两个功能请求,而且我也不会实施。 我应该响应这些功能请求吗?我宁愿完全不回应,因为我宁愿花时间在我的应用程序上工作,但是作为一个新开发人员,应用程序商店中几个差的评分可能会伤害我的应用程序。
10 mobile  appstore 

2
Scala中的无参数和Empty-Paren方法
目前,我正在通过Odersky的Programming Scala(第二名)来学习Scala。我到了第10章,他开始介绍无参数和空变量方法。我只是无法理解。 到目前为止,我所了解的是,如果一种方法具有副作用,则应该使用空括号,否则应使用无参数方法。 我不知道此约定的优点是什么。我在Stack Exchange上阅读了这些帖子,但是老实说,当这些帖子开始深入讨论该主题时,我迷失了。 我正在寻找有关此语言功能的典型用例以及可以帮助我更好地理解它的优点的简单解释。
10 scala 

5
编译器作者实际上是否需要“理解”机器代码?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 可能是一个奇怪的问题。 一个编写C ++编译器(或任何非VM语言)的人:是否需要能够读写原始机器语言?这是如何运作的? 编辑:我专门指的是编译为机器代码的编译器,而不是其他某种编程语言。

4
故意提出使用catch的例外
对于if...else带有异常处理的典型包装,是否建议使用以下示例来避免代码重复? try { if (GetDataFromServer()) { return ProcessData(); } else { throw new Exception(); } catch(Exception ex) { return null; } 代替... try { if (GetDataFromServer()) { return ProcessData(); } else { return null; } } catch(Exception ex) { return null; } 我知道会有轻微的性能下降,但是我想知道这是否可以接受。我目前使用第二种方法-特别是在需要以不同方式处理特定异常的情况下-但我想知道第一种方法是否适合简单情况。

3
继承:是将代码从超类实际上“复制”到子类,还是“由子类”引用?
类Sub是class的子类Sup。这实际上意味着什么?换句话说,“继承”的实际含义是什么? 选项1:将Sup中的代码虚拟复制到Sub。(如在“复制-粘贴”,但没有复制的代码视觉上在子类中看到的)。 示例:methodA()最初是Sup中的一种方法。Sub扩展了Sup,因此methodA()(实际上)被复制粘贴到Sub。现在Sub具有一个名为的方法methodA()。它methodA()在每一行代码中均与Sup相同,但完全属于Sub,并且不依赖于Sup或以任何方式与Sup相关。 选项2: Sup中的代码实际上没有复制到Sub。它仍然只在超类中。但是该代码可以通过子类访问,并且可以由子类使用。 示例:methodA()是Sup中的一种方法。Sub扩展了Sup,因此现在methodA()可以通过Sub进行访问,如下所示:subInstance.methodA()。但这实际上将methodA()在超类中调用。这意味着methodA()将在超类的上下文中运行,即使它是由子类调用的。 问题:这两个选项中的哪一个实际上是如何工作的?如果它们都不是,那么请描述这些事情实际上是如何工作的。

1
什么是基于“火车”的发展?
我在开发方法学中遇到了另一个新名词,但我一直找不到它的定义。具体来说,它称为“基于火车的开发”。 这是我看到这个词的一些例子。 本周早些时候,我请我们的工程主管和发布经理将Windows Metro版本的Firefox下线。(约翰娜·南丁格尔) https://blog.mozilla.org/futurereleases/2014/03/14/metro/ 从Mozilla的职业网站上: 具有使用敏捷开发方法论和基于培训的开发/ QA团队的经验。 我听说过“火车”,而不仅仅是Mozilla。但是我还没有在网上找到关于它的任何好的信息。 当我搜索“基于火车的软件开发”时,我在搜索结果中发现的信息很少。我能挖掘出的最能使火车与货车分开的地方是,“火车”是根据时间表定期释放。但是似乎“培训”是一种具体的质量检查设置。 那么,什么是“基于培训的开发”?

12
为什么没有更多的语言能够将一个值与另一个值进行比较?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 考虑以下: if(a == b or c) 在大多数语言中,这需要写成: if(a == b or a == c) 这有点麻烦并且会重复信息。 我知道我上面的示例语法有点笨拙,但是我确信有更好的方法来传达这个想法。 为什么没有更多的语言提供它?是否存在性能或语法问题?

5
Scrum团队应该多久履行一次Sprint承诺?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 承诺是一种承诺,我们都被教导您需要遵守承诺。但是,保持对每个Sprint的承诺是否现实?有时人们会生病,有时技术方法被证明是错误的,并且您必须重新考虑一切,有时在与产品所有者或用户进行进一步讨论时,您了解该功能应该与最初的想法大不相同。 我知道官方的Scrum指南现在使用“预测”一词而不是承诺,可能是为了解决这些问题。 因此,我的问题是组织中的团队多久履行一次承诺,以及您是否喜欢这种方法还是要更改它。 谢谢。
10 scrum 

4
在创建松耦合设计上应该投入多少精力?
我目前正在学习设计模式。 我认为大多数人都同意这些模式是很好的工具,但应谨慎使用,而不是所有问题的答案。过多使用它们会使应用程序过于复杂,几乎没有好处。模式应仅在可能是最佳解决方案或有助于创建好的解决方案的地方使用(您同意吗?)。 考虑到这一点: 我正在阅读的书(Head First设计模式)经常强调松散耦合的重要性。这种松散耦合是通过遵循以下原则来实现的,例如“对接口编程,而不是实现”和“封装变化的内容”。 基本上,到目前为止,我学到的大多数模式都主要用于使设计能够松散耦合,从而更加灵活。 我了解松耦合的重要性和好处。 但是我的问题是,一个人应该实际投入多少精力来创建松耦合,灵活的设计? 那些反对设计模式的人说,使用这些模式的成本通常会超过收益。您需要花费大量时间来使用某种模式来创建松耦合的设计,而实际上-松耦合,“编程到接口而不是实现”以及所有这些原理实际上可能并不那么重要。 我想知道的是,我实际上应该在创建附加级别的抽象和设计上付出多少努力,才允许我的应用程序遵循OO原则,例如松散耦合,接口编程等,这真的值得吗?它?我应该为此付出多少努力?

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.