软件工程

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


7
为什么此函数O(n ^ 2)最坏的情况?
我正在尝试教自己如何为任意函数计算BigO表示法。我在教科书中找到了此功能。该书断言该函数为O(n 2)。它解释了为什么这样做,但是我一直在努力遵循。我想知道是否有人能够向我展示为什么会这样。从根本上讲,我知道它小于O(n 3),但我无法独立降落在O(n 2)上 假设给定了三个数字序列,A,B和C。我们将假定没有单个序列包含重复值,但是在两个或三个序列中可能存在一些数字。三向不相交问题是确定三个序列的交点是否为空,即是否不存在元素x使得x∈A,x∈B和x∈C。 顺便说一句,这对我来说不是一个作业问题,因为这艘船几年前已经航行过:),只是我想变得更聪明。 def disjoint(A, B, C): """Return True if there is no element common to all three lists.""" for a in A: for b in B: if a == b: # only check C if we found match from A and B for c in C: …
44 python  big-o 

5
了解SVN和Git之间的分支差异
我是SVN的用户,现在我正在学习Git。 在SVN中,我通常在本地计算机上签出一个仓库,其中包括项目中的所有分支,并且我曾经为我感兴趣的分支选择文件夹并在其中工作。 我发现使用Git有所不同。 目前,我正在克隆一个仓库,并使用gitk克隆一个特定的分支。 项目文件夹仅包含该分支的内容,而我看不到SVN中的所有分支,这对我来说有点困惑。 我找不到使用Git查看本地存储库中所有分支的简便方法。 我想知道我描述的Git流程是否是“标准”的,是否有些正确,或者我缺少一些东西。 另外,我想知道如何处理需要同时在两个分支上工作的流程,以防万一,例如,我需要在master上进行修补,但还要保留另一个分支的内容。 建议使用什么名称约定来制作包含从Git中的仓库中克隆的分支的文件夹myproject-branchname?
44 git  github 

3
Bob叔叔的干净架构-每层都有一个实体/模型类?
背景 : 我试图在我的Android应用程序中使用Bob叔叔的干净架构。我研究了许多开源项目,这些项目试图展示正确的方法,并且发现了一个基于RxAndroid 的有趣实现。 我注意到的是: 在每一层(表示,域和数据)中,都有一个用于同一实体的模型类(正在谈论UML)。另外,每当数据越过边界(从层到另一层)时,都有一些映射器类负责对象的转换。 题 : 当我知道如果需要所有CRUD操作时,它们都将具有相同的属性,是否需要在每个层中都有模型类?还是使用干净的体系结构是规则还是最佳实践?

4
为什么C#开发人员用换行符括起来?[关闭]
在过去的几年中,我大部分时间主要用于C#和SQL。在那段时间里,与我合作的每个程序员都习惯将函数或控制流语句的左括号放在新的一行上。所以... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } 我一直对这是多么浪费空间感到震惊,尤其是在if / else语句中。而且我知道在C#的更高版本中存在替代方法,例如: if(myBoolean == true) //do something on one line of code 但是几乎没有人使用过它们。每个人都在做换行符。 缺席很久之后,我又重新开始使用JavaScript。在我的记忆中,JavaScript开发人员曾经做过完全相同的curl-brace-newline事情,但是对于所有花哨的新库和新东西,大多数开发人员都在声明后加上了大括号: function MyJavaScriptFunction() { //do something } 您可以从中看到这种感觉,因为自从使用闭包和函数指针在JavaScript中变得很流行以来,它就节省了大量空间并提高了可读性。所以我想知道为什么它在C#中没有被视为完成的事情。实际上,如果您在Visual Studio 2013中尝试上述构造,它实际上会为您重新格式化,将开括号放在新的一行上! 现在,我在Code Review SE上看到了这个问题:https : …
44 java  c#  javascript  syntax 

3
为什么实际参数称为“参数”?
“论据”一词(从编程的角度)从何而来? 即为什么实际参数称为“参数”? 这些含义似乎无关,而且我在任何地方都没有找到任何解释。 注意术语: “形式”参数(也简称为“参数”)是“占位符”名称(例如x),即函数的声明参数。 “实际”的参数(也称为“参数”)是实际值被传递给函数(比如5),因此我用这个术语上面以防止任何混淆。

2
您将如何实施Google搜索?[关闭]
假设在一次采访中被问到“您将如何实施Google搜索?” 您将如何回答这样的问题?可能有一些资源可以解释Google如何实现某些功能(BigTable,MapReduce,PageRank等),但这并不完全适合采访。 您将使用什么总体架构,以及如何在15-30分钟的时间内解释这一点? 我将首先说明如何构建一个可处理约10万个文档的搜索引擎,然后通过分片扩展到约5000万个文档,然后再扩展一次体系结构/技术。 这是20,000英尺的视图。我想要的是细节-您在面试中如何实际回答。您将使用哪种数据结构。您的架构由什么服务/机器组成。典型的查询延迟是多少?故障转移/大脑分裂问题怎么办?等等...

3
做复杂的RESTful搜索方法的正确方法是什么?
遵循REST原则,我想为我的API创建一个GET方法,该方法使用一些条件进行搜索并将结果返回给客户端。问题是标准最多可以包含14个参数,其中一个是复杂对象列表,因此... 我什至不知道是否可以将这些复杂的对象与url参数进行编码/解码。 我没有计算网址可以获得多长时间,但是我确定它会足够大,甚至可能达到网址长度限制? 同样,搜索应该以“实时”方式显示结果,我的意思是,每当用户从搜索表单中更改某些内容时,他应该能够看到新结果而无需按下任何“搜索”按钮。 您能否向我澄清这些要点,对于创建具有很多参数的静态搜索方法有何建议?
44 rest  api 


8
域驱动设计是一种反SQL模式吗?
我正在研究域驱动设计(DDD),尽管我对此进行了更深入的了解,但有些事情我还是没有。据我了解,主要要点是将域逻辑(业务逻辑)与基础结构(数据库,文件系统等)分开。 我想知道的是,当我遇到非常复杂的查询(例如材料资源计算查询)时会发生什么?在这种查询中,您需要使用繁重的集合操作,这是SQL设计的目的。在域层内部进行这些计算并使用其中的许多集合就像丢弃SQL技术一样。 在基础架构中也无法进行这些计算,因为DDD模式允许在基础架构中进行更改而无需更改域层,并且知道MongoDB不具有SQL Server等相同的功能,这是不可能发生的。 这是DDD模式的陷阱吗?

7
使用仅使用大小写与类型名称不同的参数名称是否被认为是C#中的不良做法?
对于与类的属性匹配的参数名称,我看到与此类似的问题,但是除了使用C#中的大小写外,对于使用与参数类型名称相同的参数名称,我找不到任何东西。我发现这似乎不是违规行为,但是否认为这是不正确的做法?例如,我有以下方法 public Range PadRange(Range range) {} 此方法采用一个范围,并返回已应用填充的新范围。因此,鉴于通用上下文,我无法想到该参数的更具描述性的名称。但是,我想起了我在阅读《代码完整》中有关“心理距离”的一些提示。它说 心理距离可以定义为区分两个项目的难易程度...调试时,请准备好应对类似变量名之间以及相似例程名之间的心理距离不足所引起的问题。在构造代码时,请选择差异较大的名称,以便可以避免此问题。 我的方法签名有很多“范围”,因此,就心理距离而言,这可能是一个问题。现在,我看到许多开发人员都在执行以下操作 public Range PadRange(Range myRange) {} 我个人对此公约非常反对。向变量名添加“ my”前缀不会提供任何其他上下文。 我也看到以下 public Range PadRange(Range rangeToPad) {} 我喜欢此前缀,而不是“ my”前缀,但总体上还是不在乎。它对我来说太冗长,将其作为变量名尴尬地读取。在我看来,由于方法名称,将填充范围。 因此,考虑到所有这些因素,我的直觉是带着第一个签名。对我来说,这很干净。不需要时不需要强制使用上下文。但是,我是否对自己或将来的开发人员不利于此约定?我违反最佳做法了吗?

7
在软件编程中,是否可以使CPU和GPU的负载均达到100%?
这是一个关于游戏玩家我感兴趣的主题的普遍问题:CPU / GPU瓶颈和编程。如果我没记错的话,我已经了解到CPU和GPU都可以计算内容,但是由于体系结构的差异,在某些计算中它要比另一种更好。例如,在GPU上破解哈希或进行加密货币挖掘似乎比在CPU上效率更高。 所以我想知道:难道在GPU负载为100%而CPU在50%的情况下运行GPU是不可避免的吗? 或更准确地说:如果第一个计算负载为100%,那么两者通常都达到100%的负载,那么通常由GPU完成的某些计算可以由CPU完成吗? 我已经搜索了一些关于该主题的内容,但是空手而归。我认为并希望它在本小节中有应有的地位,并欢迎您提供给我的任何文档或讲座!

7
Scrum与公开招标不兼容吗?
一个公共组织要求我举办一个有关敏捷开发101的非正式研讨会,解释Scrum,看板等的术语和概念。我已经在敏捷环境中工作了大约五年,但是我不认为我是Scrum的传播者。 研讨会结束后,他们喜欢这个主意。但是,他们解释说,这种方法可能不适用于他们,因为他们需要委托外部软件公司为他们开发软件(他们自己只有很少的开发人员)。这项活动需要在公开招标过程中完成,描述结果,价格和时间范围。这是为该组织(公共研究机构)申请预算的法律要求。 这些约束似乎与敏捷开发的基本原理矛盾,不是吗? 在这种环境下Scrum只是不兼容吗? 您对这个组织有什么建议?

10
单元测试如何促进设计?
我们的同事提倡编写单元测试,因为它实际上是在帮助我们改进设计和重构事物,但我不知道如何做。如果我正在加载CSV文件并进行解析,那么单元测试(验证字段中的值)将如何帮助我验证设计?他提到了耦合和模块化等问题,但是对我而言,这没有多大意义-但我的理论背景并不多。 这与您标记为重复的问题不同,我将对实际示例如何起到帮助作用感兴趣,而不仅仅是理论上说“有帮助”。我喜欢下面的答案和评论,但我想了解更多。


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.