软件工程

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

4
JavaScript中确切未定义的含义是什么?为什么在那里?它有什么用途?它怎么可能有用?
在JavaScript中,我们有一个叫做undefined的东西。我说了些什么,是因为我真的不知道它是基类,内置变量,关键字还是其他。我只知道它在那里。 要查看其实际效果,您只需编写以下代码: undefined; typeof undefined; 谁能向我解释为什么将这个东西插入JavaScript?我们null在这种语言中具有价值,因此不应该像null。在其他语言中,当我们不知道属性或变量的值时,只需将其设置为null。在这里,我们可以做同样的事情。 我们如何在JavaScript中使用这个东西?

8
定义遗传算法的停止点是否违反了算法的目的?
Wikipedia为此定义了GA的终止点: 通常,当生成了最大数量的世代或达到总体的满意适应性水平时,算法就会终止。如果算法由于最大数目的代数而终止,则可能会或可能不会达到令人满意的解决方案。 现在,如果它在达到满意的适应水平时终止,而您又是定义该适应水平的人,那么为什么您不能够一开始就自己创建“完美的”基因组,因为您已经知道了特征这个完美的基因组? 我想我在这里有点困惑。我认为GA的目的是不断发展,并向我们展示可能比我们想象的更好的解决方案,而我们的适应度功能只是在整个过程中对其有所帮助,而不是我们将其作为终止的基础”完美”状态。那不是破坏重点吗?



10
“数学”函数应该遵循数学符号吗?
我想这个问题将立即被标记为主观的,但是您认为哪个更好: double volume(double pressure, double n_moles, double temperature) { return n_moles * BOLTZMANN_CONSTANT * temperature / pressure; } 要么 double volume(double P, double n, double T) { return n*R*T/P; } 换句话说,实现某些方程式的函数应该遵循该方程式的符号,还是应该使用更多详细的名称?

3
在哪里可以阅读Microsoft的原始C#简介论文?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 当Microsoft在2002年提出.NET Framework和C#语言时,第一篇介绍C#的文章是什么? 我正在寻找在MSDN或Microsoft网站上发布的一些论文,这些论文将解释对另一种语言的需求,讨论一些背景知识,也许还有一些代码示例。 另外,我对原始的C#简介感兴趣,而不对通用的.NET Framework文档感兴趣。 我记得早期的.NET文章相当模糊,尽管重新阅读它们确实很有趣,但我的目标是以语言为中心的文档。
11 c#  microsoft  history  msdn 

1
除了IDE,库和语言外,iOS和Android开发之间的主要区别是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我来自iOS方面。我对了解这些方面在Android方面是否存在类似的障碍特别感兴趣: 开发人员费用-您是否需要每年支付99美元才能构建android系统? 置备设备-您是否需要通过复杂的置备/数字证书/设备ID例程才能在设备上进行测试以获取正在开发的应用程序? 市场分布-您是否需要经过批准流程才能将应用发布给用户? 付款-您的应用很容易获得付款吗?亚马逊的减价幅度是多少? 谢谢。我知道我可能会在网上找到这些答案,但这肯定会节省我一些时间,以仅听取经验丰富的Android开发人员的意见。

5
如何处理“这只是一个小应用”?是的,对吗?
好的,我已经遇到过很多次了,但是在这种情况下,情况有些过分夸大了。 客户说: “嘿,您能给我们这个小模块来完成这个小任务吗?” 我: “没问题”。 因此,基于预算和约束等因素,我跳过了一些架构设计工作,并一头扎进去,不费吹灰之力。 然后,他们要求另一个模块。还有一个。和一些增强。多年来,这一切都非常缓慢地提醒您。在不知不觉中,您就拥有了这个可怕的架构可怕的应用程序。 当您被要求做一些小事情时,您会怎么做?您不知道它是否会继续增长...客户是否会继续要求添加(它们也不这样做)。 您不能对它进行过度的架构,因为它毕竟只是一个小应用程序,如果您说(因为我知道所有声音),它们就会移到其他地方“以防万一,让我们将此事物设计为顶层在线安全性和关注点分离。实际上,让我们使用一个依赖项注入工具,它将使这件事真是太棒了……等等。” 他们会说“是的”,然后去找别人。 预算,时间和感知与架构应用程序本身一样重要。 应该如何处理? 我猜这个问题真的可以归结为:“如果您没有所有看起来像是小型应用程序的最终结果的所有信息,那么如何避免(或减轻)早期的架构和设计决策将是完全可以的?以后没用?

3
电梯算法及其实现
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 我想知道(真实的)电梯如何工作。但是到目前为止,我找不到关于它们使用的算法的太多材料,也找不到用于仿真的软件(如果有)。有人可以给我参考吗?

2
分析与设计有何不同?
我相信大家都听过经理说“我们需要分析仪”或“我们需要设计师”。当我是.NET开发人员时,我几乎无法将分析器与设计人员(而非Web设计人员或UI设计人员)区分开。 谁是分析仪?谁是设计师?它们重叠吗?

2
语言开发框架应该多么容易使用?
这是一系列问题的一部分,这些问题集中于一个称为抽象项目的项目,该项目旨在以框架的形式抽象语言设计中使用的概念。 可以在此处查看与它相关的与结构化类型相关的另一个页面。可以在此处找到与有关框架和适当发布位置的查询相关的元主题。 使用语言开发框架应该有多容易? 我编写了大规模的代码生成框架,其中还包括将结果发送到特定语言的编译器的功能。易用性主题来自这样一个框架示例:CodeDOM或代码文档对象模型。 它是由Microsoft编写的框架,描述了常见的代码结构,但通常忽略了很多(表达强制),并且在表示某些结构时趋于抽象,完全根据您的工作发出错误的代码:当使用的类型是通用接口时,CodeDOM不能很好地处理PrivateImplementationTypeon CodeMemberMethod。CodeDOM是我编写第一个代码生成器的最初原因。 为了简化框架,我正在尝试做的一件事是减少要做某件事所需的工作量,并着重于动作与构成这些动作的特定类型。 这是我正在编写的框架的并行比较: //Truncated... /* * * From a project that generates a lexer, this is the * state->state transition character range selection logic. * */ var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference())); //... char start = rangeElement.B.Value.Start; char end = rangeElement.B.Value.End; /* * * 'start' …

8
开发大型项目时最大的瓶颈是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 假设我的公司正在开发MS Word的副本(仅作为示例)。假设一个人拥有无限的可用现金并且拥有像Microsoft这样的组织,那么开发过程的瓶颈将是什么?换句话说,快速开发此类软件的最常见障碍是什么?假设所有规格均已就绪并且组织运行良好,那么我们只专注于软件开发,直到产品准备好发货为止。一些替代方法可能是:-编写代码-编写测试-手动测试最终产品-首先由于设计不良而重写代码-设计代码-由经验丰富的开发人员进行代码审查-设计GUI-基于alpha重新设计GUI / beta用户反馈-处理来自用户的反馈-等待alpha / beta用户反馈 请在您的答案中使用参考或陈述您对该主题的经验。

3
通用编程,在工业中使用的频率
目前,我在学术环境中进行编程,因此我可以使用任何我想使用的东西。我在使用Boost图形库做一些事情,并且想知道是否值得花更多的精力来更深入地了解GP。 我很好奇-通用编程(GP)在行业中使用率很高吗?我的猜测是,大多数程序员更喜欢OOP或使用不强调或不支持GP的语言,因此,除了在C ++中调用STL数据结构/函数外,我的印象是GP并不是经常使用在实践中。但是,由于目前不在行业内,因此很高兴听到从业者的来信。 (在撰写本文时,我看到通用编程甚至不是有效的标签!)

2
设计REST API的身份验证
我正在为将要生产和使用的REST服务设计API。我花了几天的时间试图弄清楚如何很好地处理身份验证,并认为我终于想出了一些办法。 我基于有关应用程序堆栈的以下事实提出此建议: 客户端和服务器位于.NET4中(客户端配置文件中的客户端部分) 服务器使用WCF REST公开 我真的不想在应用程序的内存中保留用户名和密码 从3开始,我想使用一种令牌身份验证的方式,以便在服务器验证了凭据之后,客户端将获得令牌以供整个应用程序的其余部分使用(这将使我能够做其他事情,例如使用户超时,并能够在网络版本和桌面版本之间无缝移动用户等)。在弄清楚如何使呼叫重播和防篡改之后,我提出了以下建议: 在客户端尝试进行身份验证之前,它会使用ECDiffieHellmanCng该类生成Diffie-Hellman密钥对。 它通过电线发送密钥对的公共部分以及用户名和密码(当然是通过HTTPS)。 服务器验证用户名/密码组合,如果成功,则执行以下操作: 创建一个唯一的会话令牌 生成自己的DH密钥对,并根据客户端提供的公共密钥计算共享密钥 记录其数据库中的会话令牌,共享机密,用户和“最后操作”时间(用于滚动到期窗口) 返回会话令牌,其公共DH密钥和身份验证成功消息 客户端从响应中获取DH密钥,计算共享密钥,并将令牌和密钥存储在内存中。 从那时起,会话令牌/秘密组合的工作方式与大多数其他REST API一样,对请求进行了指纹识别和时间戳记,然后生成了某种HMAC。每当客户端对服务器执行操作时,客户端都会检查令牌/秘密对,并允许该操作有效且未过期,并更新会话中的最后一个操作记录。 我看不到任何明显的缺陷,并且为此可能过度设计了,但是我需要在某个时候学习如何做到这一点。HMAC可以防止重放攻击,DH协商可以防止MITM攻击(我想不到在HMAC / DH之间可以进行有效的攻击)。 任何人都可以在此戳戳?

6
Java中如何返回多个值?
有时您想从一个函数返回多个值。 这通常在Java中如何完成? 一种选择是使用数组,例如返回列表或元组的Python代码段: value, success = read_unreliably() if success: print value 另一个选择是返回哈希/字典,如下面的JavaScript示例: var result = readUnreliably() if (result.success) { alert(value); } 还有一种方法就是为此目的创建一个自定义对象,例如以下Java示例: ReadUnreliablyResult result = readUnreliably() if (result.getSuccess()) { System.out.println(result.getValue()); } 当然,您也可以只使用一些全局变量来存储所需的内容,而不用传递东西,但是我们只能说这不是一种选择。

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.