软件工程

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

3
从功能分支合并到母版之前进行代码审查的策略
我和我的团队使用功能分支(带有git)。我想知道哪种是合并到母版之前进行代码审查的最佳策略。 我从master结帐了一个新分支,我们称它为fb_#1 我提交了几次,而不是想将其合并回母版 在合并之前,应该有人进行代码审查 现在有两种可能性: 第一 我将master合并到fb_#1(不是将fb_#1合并到master)以使其尽可能最新 队友查看了主管和fb_#1主管之间的变化 如果fb_#1可以,我们将fb_#1合并到主服务器 优点:审查中没有过时的代码 缺点:如果其他人将“ 1”之间的内容合并。和“ 2”。他的更改将出现在评论中,尽管它们属于另一个评论。 第二名 队友查看结帐点(git merge-base master fb_#1)和fb_#1 head之间的更改 优点:我们可以清楚地看到在功能分支上所做的更改 缺点:评论中可能会出现一些过时的代码。 您认为哪种方法更好?为什么?也许还有另一种更合适的方法?

3
我应该使用列表还是数组?
我正在Windows窗体上计算项目编号的UPC。 我成功创建了一个可一次处理一个物料编号/ UPC的物料,现在我想扩展并针对多个物料编号/ UPC进行处理。 我已经开始尝试使用列表,但是我一直陷于困境。我创建了一个帮助器类: public class Codes { private string incrementedNumber; private string checkDigit; private string wholeNumber; private string wholeCodeNumber; private string itemNumber; public Codes(string itemNumber, string incrementedNumber, string checkDigit, string wholeNumber, string wholeCodeNumber) { this.incrementedNumber = incrementedNumber; this.checkDigit = checkDigit; this.wholeNumber = wholeNumber; this.wholeCodeNumber = wholeCodeNumber; this.itemNumber = …
22 c#  array  winforms  list 

4
解释产品待办事项与任务之间的区别
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 6年前。 我已经遇到过几次挑战,希望有人可以提供一些参考,培训或建议,以帮助您解释产品待办事项与TFS中的任务之间的区别。 我了解并已经说明,产品待办事项是“什么”,任务是“如何”。我还解释了PBI是要求,而Task是如何满足要求。 当我解释这一点时,我反复遇到空白的凝视和头部抓挠。看来我所解释的软件工程师无法区分。对他们来说都是一样的。 我相信我的另一个挑战是,我无法有效地说明为什么区分这一点很重要。

2
SQL是声明性的吗?
我之所以问,是因为我在SQL中看到的许多问题总计为:“这很慢。如何加快速度”?还是教程说明“以这种方式而不是以这种方式这样做,因为它更快”。 在我看来,SQL的很大一部分是知道如何执行表达式,并从中选择性能更好的表达式样式。这与声明性编程的一个方面不符-只是让系统决定要如何最好地执行计算,而只需指定计算应产生的内容。 SQL引擎不应该不在乎您是否使用过它in,exists或者join它是否确实是声明性的,是否应该仅在合理的时间内通过三种方法中的任何一种为您提供正确的答案?最近的帖子提示了最后一个示例,该帖子是我在开始段落中提到的类型。 指标 我想我可以使用的最简单的示例涉及为表创建索引。w3schools.com上的 “ gumph” 甚至试图将其解释为用户出于性能原因看不到的某种东西。它们的描述似乎将SQL索引置于非声明式阵营中,并且出于纯性能的原因,通常将它们手工添加。 是不是他们的某个地方是理想的SQL DB,它比其余所有声明性都强得多,但是因为那是一个好人却没有听说的SQL DB?

1
设计可伸缩的消息队列体系结构
我最近开始学习可伸缩和企业计算机体系结构的细微差别,其中的核心组件之一是消息传递队列。为了从任何编程范例中学到最多的知识,我试图实现自己的消息传递队列服务版本。 到目前为止,我的最初设计是在线程套接字侦听器上运行的,但是为了防止同一消息被两个单独的处理节点下载两次,消息队列索引寄存器在启动读取时被锁定,并在该寄存器被锁定后解锁。更新。这样,就不需要对其进行线程化,并且意味着基于正在运行消息传递队列服务的服务器的处理速度,可伸缩系统的大小存在上限。 解决此问题的方法是在多个服务器上运行消息队列服务,但这将增加两次下载同一条消息的可能性。防止发生此类问题的唯一方法是包括一个撤消回调(该撤消回调(在服务器甚至单个服务器上的线程已同步其信息并检测到此类重新发布之后)将命令处理节点停止其运行。当前作业,然后重新查询消息队列以获取下一条消息,但是同样,还会有一个上限,在该上限中,大多数正在发送的流量将是同步和吊销回调,从而导致瓶颈并减慢了信息处理的速度,因此许多处理节点将执行空操作并浪费时间。 我能想到的解决此问题的最后一种方法是,使每个消息队列服务器(以及每个服务器上的每个线程)在队列中查找的位置具有特定的偏移量,但这可能会基于类型的应用程序,特别是如果要求以特定顺序进行处理时。 因此,话虽这么说,是否有任何消息队列体系结构设计可以向我展示现有的企业级消息队列服务如何避免这些问题?

6
我怎么说编程语言可以编译成其他语言?
我怎么用英语说可以将编程语言编译成其他编程语言? 示例可以是Haxe。在网站上,该语言被称为“ Multiplatform”: 多平台:Haxe可以通过其快速编译器编译为所有流行的编程平台-JavaScript,Flash,NekoVM,PHP,C ++,C#和Java(很快) 但是多平台可能被误解为硬件或软件平台(win,mac,linux)。 那么最能描述这个能力的词是什么?

10
工程过度是警告标志吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 因此,我们向具有明确定义要求的新候选人提出了直接的编码练习。有时,我们收到的解决方案并不能真正解决眼前的问题,而是过度设计以解决感知到的问题-通常不在练习范围之内。 现在我的问题是,这是一个警告信号吗? 编辑:相当多的讨论是基于有缺陷的测试-这是一个公平的观点。正如我在评论中所述,测试的基本前提是展示如何以一种明智的方式从文件中读取数据(并且您会惊讶于我们看到的各种方法),以及如何匹配计算更新之间的延迟之前的项目。现在,要使此方法起作用,必须对数据做出某些假设,我们将寻找这些假设,并且还明确声明我们希望在两小时内看到您采用的方法(包括OO方法等)。大体时间。 恕我直言,当我面试时,这是我遇到的最完整的练习。 我正在考虑的一种特殊情况是,候选人而不是从文件中读取多线程应用程序中的“网络”输入,这显然不在范围之内。

5
是否有用于远程编码采访的工具?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 首先,我不确定这个问题是否更适合在这里或在工作场所使用。所以请原谅我在错误的地方。 我们正在面试一些发展职位的候选人,目前他们不在我们的城市。 我们希望为他们提供简单的编码测试,以查看它们在日常工作中如何处理典型问题。 是否有针对此的特定工具?目前,我们正在使用Skype,我认为这会降低许多开发人员的性能,因为他们往往很害羞,并且当有人直接盯着他们时,它们通常无法工作。 通过电子邮件向他们发送测试问题的问题如下: 不可能知道他们的思维过程是什么,因为我们只能看到最终结果。没有讨论,也没有澄清问题,这是重要的一步。 不能保证问题是由候选人自己解决的。他们可以将其发送给更聪明的朋友,而我们将无法得知。 这些问题通常如何解决?

1
为什么Haskell不具有类型级别的lambda抽象?
是否有一些理论上的原因(例如类型检查或类型推断变得不确定)或实际原因(太难于正确实现)? 目前,我们可以换东西到newtype像 newtype Pair a = Pair (a, a) 然后有 Pair :: * -> * 但是我们不能做这样的事情λ(a:*). (a,a)。 (有一些语言可以使用它们,例如Scala可以。)

9
OOP原则和方法名称
class Boxer: def punch(self, punching_bag, strength): punching_bag.punch(strength) class PunchingBag: def punch(self, strength): print "Punching bag punched with strength", strength boxer = Boxer() punching_bag = PunchingBag() boxer.punch(punching_bag, 2) 毫无疑问,punch对于拳击手来说,这是一个很好的方法名称。但是名字punch对出气筒的方法也好吗?在两种情况下,我的意思是打孔作为命令(即打孔)。

4
BDD是否可扩展到大中型项目?
在您阅读的有关BDD(行为驱动开发)的每个网站中,您都可以找到一个非常简单的好例子,向您展示定义需求的显而易见和容易。但是,尝试在大型产品(而不是计算器示例)中实施此过程,向我展示了事情可能变得(或将变得)非常复杂且难以理解。特别是在稍后更改请求意味着为此需要进行大量的工作来更正集成测试。 所以我想知道,BDD真的值得吗?它是否解决了其他技术无法解决的问题!

8
哪种非理论,实用的编程语言没有保留关键字?
我一直在寻找一种没有保留关键字的实用编程语言,但没有运气。 我正在为自己的娱乐和娱乐而设计一种编程语言,现在还不需要添加任何关键字,这就是导致我进行搜索和提出问题的原因: 我认为对于语言的最终用户而言,给编译器编写者带来便利并不重要。如今,计算机已经足够强大,可以从上下文中推断出含义。作家在写小说时只需要标记名词,动词等,为什么程序员必须用function x() {}or set x = 1或var x = 1etc 标记函数和变量?我何时可以从语句的上下文中推断出它是函数声明或调用,还是标签是对值的赋值或对该标签值的引用? 这是我当前的解析器正在做的事情的一个具体示例,不需要保留的关键字来支持通常会产生一些杂音的常见事物,例如funcor functionor decor not。 功能声明 sum3(a,b,c) -> a + b + c. 功能调用 x = sum3(1,2,3). 名为x的匿名函数 x = (a,b,c) -> a + b + c. y = x(1,2,3). 我想知道为什么关键字对成功的编程语言如此重要?
22 theory  languages 

5
Windows服务为什么没有GUI?
我在Windows早期版本(例如XP和NT)中使用了此功能。我能够从Windows服务运行GUI。但是在更高版本中是不可能的。 删除此功能的原因是什么?Windows服务为什么没有GUI?
22 .net  windows 


3
我想构建一个虚拟机,有什么好的参考资料吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我希望将虚拟机构建为平台独立的方式来运行一些游戏代码(基本上是脚本)。 我在游戏中意识到的虚拟机已经很老了:Infocom的Z-Machine,LucasArts的SCUMM,id Software的Quake 3。作为.net开发人员,我熟悉CLR,并研究了CIL指令以概述您在VM级别(与语言级别)上实际实现的内容。去年,我还涉猎了6502 Assembler。 问题是,既然我想要¹实施它,我就需要更深入地研究。我知道有基于堆栈和基于注册的虚拟机,但我真的不知道哪种虚拟机在什么方面更好,以及是否有更多或混合的方法。我需要处理内存管理,确定哪些低级类型是VM的一部分,并且需要了解ldstr之类的东西为何以这种方式工作。 我唯一的参考书(除了Z-Machine之外)是CLI注释标准,但是我想知道是否有针对VM的更好,更通用/更基础的讲座?基本上像《龙书》,但适用于虚拟机?我知道Donald Knuth的计算机编程艺术,它使用基于寄存器的VM,但是我不确定该系列的适用性如何,尤其是因为它尚未完成? 澄清:目标是构建专用的VM。例如,Infocom的Z机包含用于设置背景颜色或播放声音的操作码。因此,我需要确定进入VM的OpCodes数量与使用脚本(语言TBD)并从中生成字节码的编译器的数量有关,但是为此,我需要了解自己的实际工作。 ¹我知道,现代技术将使我能够即时解释高级脚本语言。但是那有什么乐趣呢?:)谷歌搜索也有点困难,因为如今虚拟机通常与VMWare型OS虚拟化相关联...

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.