软件工程

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

2
需要有关互联网从头到尾的工作方式的采访问题的更多技术性答案。
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 在过去的两周中,我曾与5位独立人士进行了访谈,而这5位中的3位都问了我这个问题: 说明点击“ Google.com”和屏幕上出现的页面之间会发生什么。 基本上,互联网是如何工作的。我想过三遍,如果我再次遇到这个问题,我会更好的准备。 我知道一些事情,但是我不完全相信我的回答足够好。基本上,我提到DNS服务器将“ google.com”转换为IP地址。我对TCP / IP有所了解,然后讨论一下从字面上提供请求的页面的Web服务器,这些请求的页面被发送回浏览器,然后由浏览器解释并显示。 正如我之前所说,我不相信我的回答足够技术性。我遗漏的步骤是什么? 就其价值而言,这三次中有两次曾在同一家公司工作过,我被要求与他们进行第三次面试,所以我不能对它进行过猛烈的轰炸。

4
敏捷方法论中站起来的目的是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我曾经在瀑布方法中工作,现在我在一个遵循敏捷方法的团队中工作。看来他们做错了。例如,我们每天进行25分钟以上的站立训练,这确实很烦人。此外,我觉得自己比起其他任何事情都可以向管理层证明自己的薪水。 我有这种感觉吗?这通常是站立式的吗?


1
为什么命令式编程比函数式编程更受青睐?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 背景:我是函数式编程的支持者,他在VB.NET商店工作,那里的主流思维模型是命令式编程。作为我们系统的基础是WinForms,我可以理解我们不会完全摆脱命令式编程,但是我仍然尽可能尝试使用FP(主要是通过Linq),因为我相信它的优点。 针对FP的争论和反议 可能会注意到,流利的Linq效率不如命令式效率高,因为这种样式将一个序列处理为另一个序列并重复该序列。通常,与命令式方法相比,它需要花费更多的遍数,而命令式方法可以更好地进行优化以避免序列中的重复遍历。因此,主管无法理解为什么我会选择一种明显“效率较低”的功能方法。 反对意见:我认为尽管有时它在CPU周期方面效率较低,但我认为它更人性化且易于理解,因为每一行在序列中仅做一件事。在我看来,这就像一条装配线,每个人在他的工作岗位上只能做一份工作。我觉得效率的微不足道的折衷通过代码的关注点得到了很好的补偿。 我在商店里听到的另一个反对FP的论点是,调试起来更困难-是的。跳过Linq代码并不容易。而且我有时确实必须解开方法链,以便更好地关注和剖析我无法立即发现的问题。 _Counter-argument:尽管在大多数情况下我对此没有疑问,因为我认为函数样式在其读取方式以及函数链中引发错误时更具声明性,我通常可以立即发现问题。 我的问题 我一直在尝试在我们的商店中推广实用风格,但我觉得自己没有取得进展。我已经完成了两种编程风格,直到最近才涉足Haskell。尽管有多年的命令性经验,但是现在我在JavaScript中常规使用FP,但在我看来,它已经发展起来。当我将它与如果我坚持命令式风格时可能会做的事情进行比较时,它在我的核心中留下了正确的音符。我已经对功能思维,功能组成进行了重新训练。 我无法理解的是,要说服其他人相信FP的优点是多么困难。 例如,我店里的开发人员确实使用Linq,但是我认为他们通常在处理域数据的上下文中使用它。我在更一般的意义上使用它,并且在我处理序列/列表或持久性数据结构时更喜欢它。我无法说服我的队友扩大对Linq的使用。 我想了解的是导致开发人员不喜欢FP的原因。 我想从一个对FP有丰富经验但决定采用命令式风格的人那里得到一个答案。是什么驱使我们决定必须使用命令而不是使用功能? 这是另一个示例,重点介绍了命令式和函数式编程之间的区别。 我SelectedRows在Linq中这样写了网格的方法: Public Property SelectedRows() As DataRow() Implements IDataSourceControl.SelectedRows Get Return Me.ugrBase.Selected.Rows. OfType(Of Infragistics.Win.UltraWinGrid.UltraGridRow)(). Select(Function(ugr) ugr.ListObject). OfType(Of DataRowView)(). Select(Function(drv) drv.Row). ToArray End Get 但是,这种代码风格使我们的一些开发人员感到不舒服,因此我们的领导将其改写为更加熟悉的代码: Public Property SelectedRows() As DataRow() Implements IDataSourceControl.SelectedRows Get Dim plstRows As …

5
什么时候应该比从文本文件解析数据优先使用数据库?
我正在制作一个Python程序来测量codereview.SE的增长。我的方法是获取首页上显示的“网站统计信息”,并将其存储在我的硬盘上。我计划每天执行一次。到目前为止,我已经做了足够的工作来获取统计数据并将它们附加到文本文件中。可以在github上查看python脚本。我使用的格式如下 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 我只运行了两次脚本,以获取文件中要使用的格式。最初,这对我来说似乎很好,因为我可以自己存储它,而且格式是相同的,因此很容易解析,但是不确定。似乎在这里使用数据库应该更好,因为那样检索数据应该更容易。请注意,我从未使用过任何数据库,也不了解SQL,MySQL或RDBMS的任何其他变体。 因此,这使我想到了这个问题。什么时候应该首选数据库来存储数据而不是将数据存储在文本文件中?在决定是否需要数据库还是简单的文本文件时,是否可以找到一些指针? PS:如果可以添加更好的标签,请这样做。我对可以添加的标签有些怀疑。

6
信号是否使源代码更易于阅读?
在大多数编程语言中,变量没有像PHP中那样具有识别字符。在PHP中,必须在变量前面加上$字符。 例; var $foo = "something"; echo $foo; 我正在为业务应用程序开发一种新的脚本语言,而我的目标用户没有编程背景。这些字符是否使代码更易于阅读和使用? PHP使用的原因之一$是因为没有它,PHP无法分辨名称是函数引用还是变量引用。这是因为该语言允许奇怪地引用函数。因此,该$符号可帮助解析器分隔名称空间。 我的解析器中没有这个问题。因此,我的问题仅在于可读性和易用性。我已经用PHP编写了多年代码,以至于我$foo很容易将其识别为变量。我只是给该标识符一个偏见偏好吗?

5
Java堆分配比C ++更快
我已经在SO上发布了这个问题,它的确可以。不幸的是它关闭了(只需要一票就可以重新打开),但是有人建议我将它发布在这里,因为它更合适,因此以下内容实际上是该问题的粘贴内容 我正在阅读对此答案的评论,并且看到了这句话。 对象实例化和面向对象功能使用起来非常快(在许多情况下,它们比C ++更快),因为它们是从一开始就设计的。且收集速度很快。即使在大多数优化的C代码方面,标准Java在这一领域也优于标准C / C ++。 一位用户(我可能会添加非常高的代表)大胆地捍卫了这一主张,并指出 Java中的堆分配比C ++更好 并添加了该语句来捍卫Java中的集合 与Java集合相比,Java集合与C ++集合相比速度更快,这在很大程度上归因于内存子系统的不同。 所以我的问题是,这是否真的是真的,如果是的话,为什么Java的堆分配这么快?

2
为什么不像Haskell那样将Scala Option类型称为Maybe?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为什么不像Haskell那样将Scala Option类型称为Maybe? 也许对我来说更具“语义意义”,但也许Option具有我所不知道的不同行为。 有什么特殊的原因为什么不将Scala中的Option称为Maybe?

1
数据模型在所谓的“ NoSQL”数据库中对可伸缩性和性能有多大影响?
如果不带CAP定理(一致性,可用性,分区:选择两个),就永远无法谈论所谓的“ NoSQL”数据库。如果您不得不说,在MongoDB(分区,一致性)和CouchDB(可用性,分区)之间,首先需要考虑的是“我需要正确的数据还是需要一直访问?”。 这些新的数据库中取得进行分区。但是,如果我不这样做怎么办?如果我只是想拥有一个键/值,列,文档,任何数据库而不是一个关系数据库,并且只创建一个服务器实例而不进行分片,那该怎么办呢?在那种情况下,我既没有可用性又没有一致性吗?MongoDB不需要复制任何内容,因此可以使用。而且CouchDB将只有一个数据源,因此它将非常一致。 因此,那意味着在那种情况下,MongoDB和CouchDB在用例方面几乎没有区别?好吧,当然除了性能,API和其他功能外,但这更像是在PostgreSQL和MySQL之间进行选择,而不是拥有两个根本不同的要求。 我在这里吗?是否可以通过不创建多个实例将AP或CP数据库更改为AC数据库?还是我缺少什么? 我们反过来问这个问题。如果我使用一个关系数据库,比如说MySQL,并将其置于主/从配置中,该怎么办?我不使用ACID事务如果我要求立即将所有写入同步到从属服务器,那岂不是使其成为CP数据库吗?而且,如果我将其同步了一些预定义的时间间隔,并且客户端是否从从属设备读取过时的数据也没关系。那不是将它变成AP数据库吗?这是否意味着如果我放弃ACID合规性,仍然可以对部分数据库使用关系模型? 本质上:在CAP定理中,您准备放弃的可扩展性要比基础数据模型还重要吗?具有列,文档,键值等内容是否可以增强关系模型的可伸缩性?我们可以设计一个完全为分区容忍度设计的关系数据库吗?(也许它已经存在)。我们可以使NoSQL数据库ACID兼容吗? 抱歉,它有很多问题,但是最近我阅读了很多有关NoSQL数据库的信息,在我看来,使用它们的最大好处是,它们更适合数据的“形状”,而不仅仅是分区CAP并放弃了ACID合规性。毕竟,并不是每个人都有太多数据需要分区。在我甚至考虑对数据进行分区之前,不使用关系模型是否会对性能/可伸缩性有所帮助?

2
试图了解2N lnN与Quicksort的比较
我正在对Sedgewick的Algorithms一书中的quicksort进行分析。他为quicksort中的比较数创建了以下递归关系,同时对N个不同项目的数组进行了排序。 我很难理解这一点...我知道任何元素成为枢轴都需要1 / N的概率,并且如果k成为枢轴,那么左子数组将具有k-1个元素,而右子数组数组将包含Nk个元素。 1.分区成本如何变为N + 1?做分区需要N + 1比较吗? 2.Sedgewick说,对于k的每个值,如果将它们相加,则划分元素为k的概率+两个子数组的成本,您将得到上述方程式。 有人可以解释一下,以便那些数学知识(我)较少的人可以理解吗? 具体来说,您如何获得方程式中的第二项? 这个词到底代表什么?

6
找出可能要去买羊角面包的人,
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。 一个团队决定每天早上有人应给每个人带羊角面包。每次都不应该是同一个人,因此应该有一个系统来确定下一个轮到谁。这个问题的目的是确定一种算法,以确定明天将把羊角面包带给谁。 约束,假设和目标: 谁来带羊角面包将在前一天下午确定。 在任何一天,都会有人不在。该算法必须选择当天要出席的人。假设所有缺勤都是提前一天知道的,因此可以在前一个下午确定新月形面包的购买者。 总体而言,大多数人都在大多数时间都在场。 为了公平起见,每个人都应该购买羊角面包,其次数应与其他人一样多。(基本上,假设每个团队成员都有相同数量的钱用于羊角面包。) 为了减轻花名册的无聊感,最好具有一些随机性或至少感知到的随机性。这不是一个硬性约束:它更多是一种审美判断。但是,同一个人不应连续两次被选中。 带羊角面包的人应该事先知道。因此,如果人P在D日带上羊角面包,那么应该在人P出现的前一天确定这一事实。例如,如果总是在前一天确定了羊角面包的携带者,那么应该是前一天在场的人之一。 团队成员的数量足够少,以至于存储和计算资源实际上是无限的。例如,该算法可以依靠过去曾带谁羊角面包的完整历史记录。每天在快速PC上进行几分钟的计算就可以了。 这是一个现实问题的模型,因此,如果您认为这些假设可以更好地模拟场景,则可以自由挑战或完善这些假设。 起源1:找出谁要购买 Florian Margaine 的羊角面包。 起源2:找出谁打算购买 Gilles 的羊角面包。 这个问题与Gilles的版本相同,已作为实验重新发布在Programmers上,以查看不同社区如何应对编程挑战。

4
这些特定的表是否需要代理键?
背景 我有这张桌子 +-------------------------+ +------------------------+ |Airport | |Country | |-------------------------| |------------------------| |airport_code string (PK) | |country_code string (PK)| |address string | |name string | |name string | +------------------------+ +-------------------------+ +-------------------------+ |Currency | |-------------------------| |currency_code string (PK)| |name string | +-------------------------+ airport_code是IATA(国际航空运输协会)的 机场代码,乘飞机旅行时,您可以在行李标签中看到它们。 country_code是ISO 3166-1 A3标准国家/地区代码,您可以在奥运会上查看它们。 currency_code是IS0 417标准的3个字符的货币代码,您可以在国际货币兑换显示板上看到它们。 问题 这些自然PK是否足够好? 是否使用世界公认的标准,而整个行业都接受了PK的标准? 这张桌子是否需要代孕品?


8
我们应该坚持让一名员工在多年后仍在编写糟糕的代码吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我将这个问题提交给C ++程序员,因为:a)只有C ++程序员才能判断示例的技术优点;b)只有一个程序员才会有另一位这样编写代码的程序员的气质。 人力资源部和董事意识到存在问题仅仅是因为他们看到了现场的证据。我打电话给我们是否给问题程序员更多时间。许多错误都处于非常基本的水平上-我(对程序员)的问题是,是否应该根据自己当前代码的样本,对自称是高级C ++开发人员的人们是否会产生怀疑。非程序员-甚至是C ++编程以外的人-也无法对此做出任何判断。 作为背景知识,我被分配了为一家老牌公司管理开发人员的任务。他们只有一个开发人员,专门研究所有C ++编码(从此以后),但是工作质量却很糟糕。代码审查和测试发现了许多问题,最严重的问题之一是内存泄漏。开发人员从未测试过自己的代码是否泄漏,而且我发现应用程序在使用一分钟后可能会泄漏许多MB。用户正在报告巨大的速度下降,而他的看法是:“与我无关,如果他们退出并重新启动,那一切都很好。” 我给他提供了检测和跟踪泄漏的工具,并与他坐了许多小时,以演示如何使用这些工具,出现问题的位置以及如何解决这些问题。我们已经走了6个月了,我指定他编写一个新模块。在将其集成到更大的代码库中之前,我进行了审查,并且很沮丧地发现与以前相同的不良编码。我无法理解的部分是,某些编码比业余编码差。例如,他想要一个可以填充另一个类(Bar)的对象的类(Foo)。他决定Foo将保留对Bar的引用,例如: class Foo { public: Foo(Bar& bar) : m_bar(bar) {} private: Bar& m_bar; }; 但是(出于其他原因)他还需要Foo的默认构造函数,并且他没有质疑他的最初设计,而是写了这个gem: Foo::Foo() : m_bar(*(new Bar)) {} 因此,每次调用默认构造函数时,都会泄漏Bar。更糟的是,Foo从堆中为其他两个对象分配了内存,但他没有编写析构函数或复制构造函数。因此,每个Foo分配实际上都会泄漏3个不同的对象,您可以想象复制Foo时发生了什么。而且-只会变得更好-他在其他三个班级上重复了相同的模式,所以这不是一次过的失败。整个概念在很多层面上都是错误的。 如果这是一个新手,我会感到更多的理解。但是这个家伙已经这样做了很多年,并且在过去的几个月中一直非常专注于培训和建议。我知道他大部分时间在没有指导或同行评审的情况下工作,但我开始感到他无法改变。所以我的问题是,您会坚持与正在编写如此明显的不良代码的人吗?

2
当有人分叉我的同名开源项目时该怎么办?
我有这个GPL项目,卡住了大约一年,我真的很喜欢这个主意,然后有人将它分叉并更改了整个内容,但是使用了相同的名称,我不介意代码(毕竟是GPL)但我喜欢这个名字。这种情况的礼节是什么? 该项目将使我自己受益,我喜欢它,但是这个名字没有被出售。 编辑:我知道如果我与作者联系,他会理解并更改名称,但是我现在没有时间从事该项目,因此,我不想成为我的人们(小型社区)的“名称巨魔” ),那么这一次就可以了,我的问题更多是关于分叉的礼节。如果该项目显然被放弃,他们可以分叉使用相同的名称,还是必须获得一个新名称?

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.