软件工程

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

5
许可证验证和回电
我正在开发一个应用程序,购买后可以使用许可证激活。 目前,我正在进行离线验证,这对我来说有点麻烦。我知道与破解(即修改后的二进制文件)无关,但是,我正在考虑尝试阻止许可证密钥盗版。这是我目前的计划: 当用户激活软件并且脱机验证成功后,它会尝试致电给家并验证许可证。如果home批准了许可证,或者home不可访问,或者用户脱机,则许可证获得批准。如果到达home并告知许可证无效,则验证失败。 许可的应用程序每次在启动过程中(在后台)都以相同的方式回叫。如果许可证被吊销(即盗版许可证或通过密钥生成),则许可证将被停用。 这应该有助于盗版许可证-无效的许可证将被禁用,并且可以撤销被盗版的有效许可证(及其合法所有者随新许可证一起提供)。盗版用户将被迫使用破解版本,该破解版本通常是特定于版本的,更难获得。 虽然这通常对我来说听起来不错,但我有一些担忧: 用户倾向于不喜欢家庭电话和在线验证。这种验证会打扰您吗?即使在离线/失败的情况下,应用程序仍保持许可状态? 显然,可以通过脱机/防火墙/等方式阻止整个方案。我认为执行其中一项操作的麻烦足以阻止随意共享许可证,但是我不确定。 通常,随着许可和DRM变体的出现,我不确定花在这种保护上的时间是否会花在改进产品上? 非常感谢您的投入和想法。 谢谢!
10 licensing 

3
为什么getMonth()以0开头
我正在编写一个函数以从javascript中的日期值中删除一天,而javascript的getMonth()从1月的0开始到12月的11开始让我感到有些惊讶。为什么javascript的getMonth()以0开头?
10 javascript 

4
STDOUT及其杂质
我已经阅读了很多有关函数式编程的书籍和文章,但仍然感到羞愧,因为无法确定地理解一些非常基本的概念。 函数式编程的主要思想之一是相同的输入始终应产生相同的输出。因此,按定义,查询数据库或写入文件无法以纯功能样式完成。例如,这就是我们需要monad的原因之一。 问题是-为什么我们认为STDOUT输出不纯?是的,任何文件处理程序都存在风险-我们永远无法确定总是会写入数据。但是STDOUT呢?为什么我们认为它不可靠?评估本身是否更加不可靠?我的意思是,我们总是可以拉动触发器,从而进行中断计算。

3
.NET中接口的“ I”前缀命名约定背后的原因是什么?
我知道自COM以来就存在“ I”约定,但是我从未理解为什么没有像.NET之前的所有其他命名约定一样重新考虑它。 从消费角度来看,将接口与例如抽象类分开的唯一一件事是它们可以被多重继承。但是Visual Studio 2003之后的所有内容都在工具提示中显示了类型签名,因此,它与所有其他已废弃的匈牙利符号一样没有用。 我还认为可能是这样,您可以使用相同的名称对接口进行基本实现,例如Message继承IMessage,但是大多数.NET库都去掉了在末尾添加“ Base”一词(例如System.Collections.ReadOnlyCollectionBase),这在语义上更具意义。 COM互操作似乎是另一个可能的原因-但它生成的包装器类并非完全是惯用的.NET,因此我怀疑这是一个美学考虑。 在我的一个较新项目中,我完全放弃了惯例,感觉还不错。有什么我想念的吗?
10 .net  naming 


3
Python如何运作?
这个问题似乎有点愚蠢,但是到底是什么。 我开始学习Python。我知道基本语法,等等。 当我使用HTML,PHP等时,我只需编写代码,将其放在.html或.php文件中,然后双击该文件。然后我的代码运行。我可以使用数据库和其他东西-这很简单。但是Python如何工作?我正在Eclipse或Python命令行中工作,可以运行此代码,但是如果要使用Python创建网站怎么办? 我不认为这是将.py文件放在服务器上,所以我需要做什么?我了解我需要通过一些服务器命令行在我的Web服务器上安装Python(我从未使用过,但是我会在需要时找到一些教程),但是接下来要做什么?如何将我的Python知识与HTML,CSS,PHP等结合? Python也可以用于创建桌面应用程序,那又如何呢?我可以使用Python代码导出.exe文件吗? 欢迎任何包含描述我所关注问题的内容的链接!

2
在设计应用程序各个部分之间的交互时需要建议
我正在尝试设计基于NetBeans Platform 7的Rich Desktop应用程序的“主要”类。该应用程序将使用HTTP服务,并通过TCP上的“推送系统”接收消息。 我们是3个开发人员,我们希望并行开发模块 应用程序将分层(数据,业务,演示) 我们将使用Presentation Model来分离职责 一些粒度数据(例如bean Person)将由多个屏幕共享(并且可能同时显示在多个屏幕上) ... 我们能够开发单个屏幕,但是我们不知道如何组织整个应用程序并定义每个模块的内容。 因此,您是否有任何建议(模式/最佳实践/书籍/示例应用程序)来协调/管理整个应用程序内部的交互? 关于如何定义模块内容的任何建议? 谢谢! 一个小例子来说明我要构建的内容:Foo用户管理应用程序 启动应用程序 在左侧的[explorer]中,我们有一个平台列表(列表存储在本地文件中) 在顶部,我们有一个添加新平台的按钮(也可以通过右键单击来使用) 通过在平台上双击,该应用程序将调用HTTP服务并检索用户的完整列表。此列表显示在[编辑器]中(在JTable中) 启动后台进程:通过TCP连接,我们收到消息 借助工具栏中的按钮,可以添加新用户 如果应用程序是在另一台PC上启动的,并且用户连接到同一平台,则其用户列表将动态更新(添加/删除/状态:{offline / online})(感谢消息) 将来会提供一个聊天模块。 我的问题是(换句话说):决定每个模块内容的任何建议/最佳实践?如果PM(演示模型)是分离视图/业务和数据并创建屏幕的好方法,那么基于PM链接多个屏幕的最佳方法是什么?假设我们开发了聊天模块,如何在右键单击用户列表的上下文菜单中添加条目“ Discuss with ...”?

3
如何删除重复的代码(通常)?
使用OO语言(例如但不限于Java),如何根据重复发生的范围来修复重复的代码?我将从(例如)开始 在同一个类(范围)中执行提取方法重构(修复) 在相同层次结构的类(范围)中执行提取方法和上拉(修复) ...

7
N皇后区,X由Y董事会决定问题面试问题
今天在一次采访中有人问我以下问题,从那以后我一直在思考。我无法回答,也无法在线找到解决方案。 给定一个棋盘尺寸为X乘以Y和N个皇后的棋盘,请确定是否有可能将这些皇后安排在棋盘上,以使它们不会互相攻击。 具有2个皇后的2 x 3电路板确实有解决方案,因此算法将返回true: Q . . . . Q 我正在寻找一种解决这个难题的编程方法,例如,不仅仅是纸上解决难题的方法。

3
C99是否会使K&R书籍过时?如果是这样,应该推荐什么呢?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 C99已经和我们在一起了一段时间。它介绍了许多K&Rs C编程语言所没有的功能。它们都不是特别激进的。但是,即使是很小的功能,例如能够混合声明和代码的代码,也会改变人们组织代码的方式。 尽管我仍然认为K&R本书是无价的参考书,并且像它的写作风格一样,是否有更好的书考虑到C99标准?我会心跳加速地购买第三版K&R,但我认为这不会发生。
10 books  c99 

7
违反DRY原则
我确信这个反模式在某处有个名字。但是,我对反模式文献还不了解。 请考虑以下情形: or0是类中的成员函数。不管好坏,它在很大程度上取决于类成员变量。程序员A随之出现,并且需要一些功能,例如or0而不是调用or0,程序员A复制并重命名整个类。我猜她不会打电话,or0因为正如我所说,它在很大程度上取决于成员变量的功能。或者,也许她是一个初级程序员,不知道如何从其他代码中调用它。因此,现在我们有了or0和c0(c为副本)。对于这种方法,我不能完全责怪程序员A -我们都在紧迫的期限内完成工作,并且我们乱砍代码以完成工作。 一些程序员or0对此进行了维护,使其成为当前版本orN。 c0现在是版本cN。不幸的是,维护类包含的大多数程序员or0似乎完全不知道-这c0是DRY原则的智慧中我能想到的最有力的论据之一。并且可能还已经独立维护了中的代码c。看来无论哪种方式,or0并c0维持相互独立的。而且,喜悦和幸福是错误的发生,cN而不会发生orN。 所以我有几个问题: 1.)此反模式有名称吗?我经常看到这种情况发生,我很难相信这不是一种命名的反模式。 2.)我可以看到一些替代方法: a。)修复orN一个参数,该参数指定了所需的所有成员变量的值。然后修改cN以调用orN所有传入的所需参数。 b。)尝试手动将修补程序从移植orN到cN。(请记住,我不想这样做,但这是现实的可能性。) c。)再一次复制orN到cN--yuck,但是出于完整性考虑,我列出了它。 d。)尝试找出cN损坏的地方,然后独立于对其进行维修orN。 从长远来看,替代a似乎是最好的解决方案,但我怀疑客户会允许我实施它。从来没有时间或金钱来解决问题,而是总是花费时间和金钱来解决同一问题40或50次,对吗? 有人可以建议我可能没有考虑过的其他方法吗?

3
原型方法有什么意义?
我正在阅读Javascript:The Good Parts,并努力使自己了解原型部分。 经过一番谷歌搜索后,我得出的结论是,在对象声明之后向对象添加属性。 使用从w3schools闪闪发光的此脚本时,我注意到删除添加原型属性的行无效。那有什么意义呢? //Prototyping function employee(name,jobtitle,born) { this.name=name; this.jobtitle=jobtitle; this.born=born; } var fred=new employee("Fred Flintstone","Caveman",1970); employee.prototype.salary=null; // <--- try removing this line fred.salary=20000; document.write(fred.salary);

2
如何选择Web应用程序软件工程师?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我应该如何选择Web应用程序软件工程师? (永久)位置是重写现有桌面客户端服务器应用程序的客户端。页面不会在服务器上动态生成,但是服务器将以所需的任何方式(例如JSON RPC调用)公开完整的API,并使静态文件可用。它将取代人们必须下载和安装的客户端,因此需要具有合理设置(例如启用JavaScript)的体面浏览器就可以了。几乎所有用例都用于台式机。搜索引擎将无法访问它(它是企业应用程序)。 我们可以将整个内容写到一个页面中,但是不必这样做。几乎所有内容都将由有问题的Web应用程序软件工程师编写。在合理范围内,确切使用的开源库还取决于工程师。 我特别希望在面试中寻求/验证哪些资格的建议,因为通常选择Web应用程序软件工程师只是一个广泛的话题。 编辑-该职位将完全是浏览器中的JavaScript编程(并负责HTML和CSS)-其他开发人员将开发服务器,但此职位可能要求使用API​​进行外观设计。没有Ruby,ASP,JSP等,因为Web服务器层非常薄,仅将调用转换为业务层API,并将它们返回为JSON(或其他形式,但JSON最简单)。

3
用户故事定义中的“ so that”子句的目的是什么?
用户故事可以用如下语句来定义: As a <type of user> I want <some goal> so that <some reason> 只是Google的“用户故事公式”和第一个链接都提出了此公式。 我的问题是,该条款的目的是什么?经理那里吗?是否在那里使项目经理和利益相关者可以更好地了解项目的优先级?为什么在那儿? 注意:我已经处理过as a <type of user> I want <some goal>公式,并且效果很好。通过采用这种更简短的格式,我在工作中没有发现任何问题。
10 user-story 

7
编写文档,了解Java中的equals等众所周知的方法
为equals,compareTo等广为人知的方法编写注释是否是一种好习惯? 考虑下面的代码。 /** * This method compares the equality of the current object with the object of same type */ @Override public boolean equals(Object obj) { //code for equals } 我的公司非常想输入上述注释。是否需要上述Javadoc注释?equals方法之类的方法(compare,compareTo)等不是很明显并且很好理解吗? 您有什么建议?
10 java  comments 

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.