软件工程

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

5
最终价格昂贵
对于在退出函数之前必须进行资源清理的代码,这两种执行方法之间在性能上存在重大差异。 在每个return语句之前清理资源 void func() { login(); bool ret = dosomething(); if(ret == false) { logout(); return; } ret = dosomethingelse(); if(ret == false) { logout(); return; } dootherstuff(); logout(); } 最终清除资源 void func() { login(); try { bool ret = dosomething(); if(ret == false) return; ret = dosomethingelse(); if(ret == …

4
用于将各种源类型和各种目标类型导入数据的设计模式
我必须设计和构建可以处理以下内容的导入脚本(在C#中): 从各种来源(XML,XSLX,CSV)读取数据 验证数据 将数据写入各种对象类型(客户,地址) 数据将来自多个来源,但一个来源将始终具有一种导入格式(csv,xml,xslx)。导入格式因来源而异。将来可能会添加新的导入格式。目标对象类型始终相同(客户,地址和其他)。 我一直在考虑使用泛型,并且阅读了一些有关工厂模式的信息,但是我在这个领域非常菜鸟,所以任何建议都值得欢迎。 解决该问题的合适设计模式是什么?

5
编写良好的文档是否足以作为学习编程语言的充分理由?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我目前正在学习Python,这不是我的大学课程的一部分。在一次采访中有人问我为什么选择Python,我回答说它很容易学习并且文档写得很好。面试官没有回答这是否足够充分的理由。他看上去很有说服力,但我不确定。 编写良好的文档以及易于学习是否是选择脚本语言的足够充分的理由?还是我应该详细说明Python库的可用性和更大的Python用户群? 请注意。不需要Python。该公司致力于Ruby-on-rails。我的简历中有Python,我认为面试官只是想知道我在选择编程语言时重新考虑的考虑事项。

1
在REST模型中嵌套资源的正确方法是什么?
我正在设计服务的REST API,并陷入了嵌套资源的正确方法。 资源:合作伙伴,票证,设置 资源之间的联系: 伙伴有很多票, 合作伙伴有一组设置, 业务逻辑: 您可以将所有合作伙伴列为匿名用户, 您可以将新票证添加为指定合作伙伴的匿名用户, 只有伙伴可以列出他的门票, 只有合作伙伴可以修改票证, 只有合作伙伴可以列出设置, 只有合作伙伴可以修改设置, 到目前为止,我所做的是: 合作伙伴资源 GET / partners-列出所有合作伙伴 GET / partners /:id-显示由:id参数指定的合作伙伴的详细信息 GET / partners /:partner_id / tickets-合作伙伴的票据列表 GET / partners /:partner_id / tickets /:id-详细信息指定伙伴的工单的 POST / partners /:partner_id / tickets-保存新工单 PUT / partners /:partner_id / tickets /:id-更新由:id参数指定的工单 GET / …
14 api  rest  api-design 

1
作者已在带有GNU公共许可证声明的代码中插入了版权-含义?
我在Github上找到了一个我感兴趣的项目,该项目声称是开源的,并且其中包含GPL许可证。 但是原始作者已向每个源文件添加了版权通知。我不知道为什么,但我对为一个总是要有别人名字的项目做贡献感到不对。这确实破坏了社区创造的感觉,并使我对作者接下来可能会选择如何处理该项目感到不安。 如此对开源GPL代码进行版权保护有什么含义?这对原始作者有何影响? # Copyright (C) 2012, 2013 __AUTHORNAME__ # This file is part of __PROJECTNAME__. # # __PROJECTNAME__ is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 …

7
在Java中,为什么使受保护成员可以访问同一包的类?
从官方文件 ... 修饰符类包子类世界 公开YYYY 受保护的YYYN 没有修饰符YYNN 私人YNNN 问题是,我不记得有一个用例,在该用例中,我需要从同一包中的类访问受保护的成员。 执行此操作的原因是什么? 编辑:为澄清起见,我正在寻找一个特定的用例,其中同一包中的子类和类都需要访问受保护的字段或方法。 package some.package; public class A { protected void protectedMethod(){ // do something } } package another.package; public class B extends A{ public void someMethod(){ // accessible because B is a subclass of A protectedMethod(); } } package some.package; public class …

7
代理密钥是否应该向用户公开?
通常,在没有自然键的表中,对于用户来说,拥有唯一生成的标识符仍然很有用。如果表具有代理主键(在这种情况下,您一定会希望它具有),该键应该向用户公开还是应将另一个字段用于该目的? 不公开代理键的原因之一是,现在您不能执行保留记录之间关系的操作,而只能更改键值,例如某些类型的删除/重新插入,将数据从一个数据库复制到数据库的许多方法。另一个等等 公开代理键的主要优点是使用您拥有的字段非常简单。 在什么情况下最好直接向用户公开代理密钥?


1
NodeJS如何实现“非阻塞”?
我正在学习NodeJS,只是想澄清一些东西。到目前为止,在几本入门教程和书籍中,它们很早就描述了Node的“非阻塞”体系结构-或者说有可能(并建议整个观点)以非阻塞方式进行编码。 因此,例如,在我正在阅读以异步方式从数据库获取数据的书中给出了此示例。 http.createServer(function (req, res) { database.getInformation(function (data) { res.writeHead(200); res.end(data); }); }); 据我所知,发生的事情是Node调用了数据库,然后继续处理调用堆栈中下一步可能发生的任何事情。数据库请求完成后,将填充匿名回调函数中的数据变量,并将该函数添加到调用堆栈中(并在Node到达该堆栈时执行)。 我的问题是,究竟在处理数据库请求是什么?当然,Node必须同时阻止吗?负责数据库请求的是什么?或者,如果Node在等待对外部资源的异步HTTP GET请求,那么该请求又在做什么呢?

2
如何对个人密码进行版权保护
我正在使用VBA编写程序,因为它随时可用,即使我用密码保护它也可以将代码提供给Cracks。选择VBA时我就知道这一点,因为可移植性比保护更重要。我的问题与版权有关,我在代码和电子表格中输入了版权和我的名字,以表明它是我的程序,但是当人们开始复制代码时,这就足够了吗?您是否有可以在代码中使用的强大法律版本?
14 copyright 

3
使用PKI证书进行Web身份验证
我从概念的角度(即私钥/公钥)背后的数学,使用哈希和加密来签署证书,使用交易或文档进行数字签名等,对PKI相当了解。 C库与用于安全通信和身份验证的证书一起使用。我也非常熟悉openssl命令行工具。 但是,我对基于Web的启用PKI的项目几乎没有经验,因此我试图设计和编写个人项目以更好地理解这一点。 要求 这是一家银行的网站。允许所有网上银行用户使用由一些已知CA(verisign,Thawte,entrust等)颁发的任何证书。银行不负责为用户购买证书。这些证书将用于银行网站的身份验证。平台/操作系统等仍未修复。 设计 我想知道什么是进行身份验证的最佳方法。 我看到Apache有一种启用2种方式的SSL的方法-在这种情况下,我认为导航到该网站会自动向用户请求证书。但是我不确定这是否足够,因为似乎它所验证的只是证书是否由受信任的CA签名,还可能是证书是否位于证书主题行的白名单中,等等。但这还不够银行案例,因为您需要能够将bankuserid与证书相关联。 IIS似乎有一种方法可以让我为Active Directory中的每个用户存储证书。通过阅读几篇MSDN文章,我了解了这一点。您在IIS中打开2种方式的SSL,然后,当用户尝试导航到网站时,IIS将向浏览器发送带有已批准CA列表的请求,浏览器将允许用户从其证书库中选择适当的证书并将其发送到后端。我假设IIS将做2件事 确保用户具有与证书相对应的私钥(通过掩盖协商) IIS根据AD用户证书映射,将用户名报告给应用程序。 通过调用加密函数显式地进行身份验证,而不是依赖于依赖于Web服务器的身份。 显示一个用户屏幕,在该屏幕上他上传证书,并且应用程序确保用户具有与证书相对应的私钥(通过要求前端使用证书对某些字符串进行签名)。 该应用程序具有数据库,其中存储了一些数据,该数据允许每个用户映射到其用户ID。这可能是 与每个用户标识相对应的整个证书 与每个用户ID对应的CA和证书序列号。 我想知道哪种是常用的方法?最佳做法是什么?如果我应该选择#3,那么最好的方法是什么? 可以轻松与智能手机应用程序一起使用的功能将是额外的好处。 更新资料 让我澄清一下我的声明“自己编写身份验证部分”,因为某些答案似乎表明它已经被误解了-我的缺点是不清楚。 这并不意味着我自己写加密货币。这只是意味着我实际上将显式调用加密例程,而不是依赖IIS或任何其他Web服务器隐式地执行加密例程。

3
接口隔离原理的两个矛盾定义–哪个正确?
在阅读有关ISP的文章时,似乎对ISP有两个相互矛盾的定义: 根据第一定义(见1,2,3),ISP指出,实现该接口的类不应该被迫实施的功能,他们并不需要。因此,胖界面IFat interface IFat { void A(); void B(); void C(); void D(); } class MyClass: IFat { ... } 应该分成较小的接口,ISmall_1并且ISmall_2 interface ISmall_1 { void A(); void B(); } interface ISmall_2 { void C(); void D(); } class MyClass:ISmall_2 { ... } 因为这样我MyClass能够实现只需要(方法D()和C()),而无需被迫还提供了虚拟实现A(),B()并且C(): 但根据第二个定义(见1, 2,通过纳扎尔Merza答案),ISP指出MyClient调用方法MyService不应该知道的有关方法MyService,它不需要。换句话说,如果MyClient只需要的功能C()和D(),然后代替 class MyService { public void …

3
“您将如何构建此网站/应用程序”面试问题的一般思考过程[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我收集了许多面试问题,例如“描述如何设计相册应用程序”,“描述如何设计此特定网站的特定功能”(例如在Facebook上喜欢,在亚马逊上推荐,购物车,游戏黑色杰克)。那么,如果有成千上万的东西呢?你会改变什么? 看起来这是在期待数据库架构还是一堆类定义(或两者都在?)。我在学校里已经学习过数据库,但是我以前从未真正设计过一个应用程序,并且很难知道从哪里开始,我提出的设计是否“好”以及我可以进行哪些更改以使其可扩展。 设计这些系统时是否有一般的方法或思考过程?我应该设法避免的一般问题/设计中出现的很多问题?有人可以指导我讲解其中的一个(或最好是全部,同时比较每个人的需求)并解释一下: 1)您如何提出需要哪些实体?2)您如何决定一切将拥有什么关系?3)您如何将性能优化纳入设计?4)我使用类或数据库吗?会有所不同吗(例如,我是否有一个不能真正转换为数据库表的类?) 我问的主要原因是因为我正在经历“破解编码面试”,我的答案与作者的答案完全不同-我对重要的类有不同的看法。 我的尝试: 使用照片共享应用程序,我将获得以下课程/表格:可以肯定的是照片和用户。 然后,我认为如果我们尝试创建模式,那么如果我们假设照片中的每个人都链接到照片,那么将存在一个链接照片和用户的表格(此表格是否必要?如果不是,是否仍然是惯例?是否有用于多对多关系的单独表格?)。 但是,如果我们尝试采用一种面向对象的方法,也许我们会拥有一个名为Album的类,它可以完成所有工作并具有来自其他两个表/类的所有信息。这是我在书中注意到的一件事-有一堆类,然后一个类基本上具有所有信息并连接了其他类-这是常见的吗?例如,在我上面的示例中,这似乎适用吗? 我只是希望遵循一些通用规则/准则,因为现在我还不知道如何判断大型系统的良好架构是什么样的。

3
如何对返回集合的测试方法进行单元化,同时避免测试中的逻辑
我正在测试一种生成数据对象集合的方法。我想验证是否正确设置了对象的属性。一些属性将被设置为相同的东西;其他的将被设置为一个值,该值取决于它们在集合中的位置。做到这一点的自然方法似乎是循环。但是,Roy Osherove强烈建议不要在单元测试中使用逻辑(Art of Unit Testing,178)。他说: 包含逻辑的测试通常一次只能测试多个对象,因此不建议这样做,因为该测试的可读性和脆弱性更高。但是测试逻辑也会增加复杂性,其中可能包含隐藏的错误。 通常,测试应该是一系列没有控制流的方法调用,甚至没有try-catch,并且带有断言调用。 但是,我看不出我的设计有什么问题(您还如何生成数据对象列表,其中某些值取决于它们在序列中的位置?无法完全分别生成和测试它们)。我的设计中是否存在非测试友好的问题?还是过于刻板地致力于Osherove的教学?还是有一些我不知道的秘密单元测试魔术可以解决这个问题?(我正在用C#/ VS2010 / NUnit编写,但是如果可能的话,寻找与语言无关的答案。)

5
当他们的团队多年来缺乏产品创新,不使用项目mgmt方法并保持不良的软件开发实践时,如何做为开发人员?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我有兴趣知道如何处理当前的软件开发流程,该流程多年未变,最终会导致产品和团队失败。是的,解决这个问题的更简单方法可能是换工作,但是有了这种经济,说起来容易做起来难。但是,如果您有特定的示例,并且在相同的情况下曾经或多次出现,并且认为解决这些问题的最佳解决方案是离开公司,那么请支持您的回答。关键是,这个问题确实有答案,特别是如果该主题的多个专家最终指出最好的路线是:路线A。 我知道成千上万的开发人员曾经或正在经历类似的情况。这是公司从在市场上排名第一变为最后甚至退出市场的主要原因之一。希望本文中的答案能够帮助其他面临类似障碍的开发人员。在小型或大型开发团队中,通常会发生以下情况: 一些开发人员似乎并不在乎并决定顺其自然,而宁愿让代码充满很多代码味道,保持开发流程不变, 其他人厌倦了不变,辞职并搬到另一家公司, 其他人似乎害怕说话,宁愿保持沉默, 有时,很少有开发人员或只有一个开发人员试图说出要改进产品的情况,并告诉团队遵循最佳编码实践的重要性和对客户,用户和团队的益处。这些类型的开发人员通常由于诸如公司提供的收益,软件公司提供的收益很少,产品具有很大的潜力等原因而决定留在团队中。 我们团队中的产品仅是公司从中获得收入的一小部分,因为它拥有大量产品(该公司不是软件/硬件公司;因此,至少在目前,没有持续的专利诉讼可创造工作机会)不稳定)。这些年来,我从其他开发人员的经验中学到的东西是,要真正认识一个开发团队,需要花费时间,而不是几天或几周,而是几个月。在面试过程中,团队是否要雇用您或需要您;它们使一切听起来很棒,并且它们可能会告诉您您想听的内容。但是,当您开始在该团队中工作并开始深入研究代码并迈向完整的SDLC流程时,现实就不同了。这是作为开发人员时,您开始看到自己从事的工作的现实。这种现实使得很难从一家公司转移到另一家公司,因为很难知道您所迁移的公司是好是坏。是的,您可以阅读Glassdoor的评论等。但是,这些在线评论中有多少是真实的,而不是来自HR? 考虑到经理从一开始就一直拒绝更改,而以前的开发人员已经这样做了多年,那么解决以下概述的问题的最佳方法是什么? 多年来缺乏产品创新:产品具有巨大的潜力,并为公司带来了可观的收入,但产品看起来像20年前制造的。一些用户抱怨该产品不友好,不直观,而另一些用户则提到该产品已用于Gmail等应用程序,并且由于不具有类似功能而在使用该产品时感到沮丧。这里的主要问题是,当您作为开发人员尝试对产品进行更改并开始将产品的主要元素移开几个像素(以使其更加用户友好或直观)时,经理会慌张并告诉您把它放回原处。如果您尝试添加对用户有利的功能,经理会要求您删除它,因为“用户习惯于按原样进行处理等。” 我认为您理解了变革,改进和创新的阻力(即使您作为开发人员提供了强有力的利益主张,经理也不愿意改变)。公司在该领域有一些竞争对手(其中的几个产品更具竞争力),但是公司以某种方式保持了现有客户多年。 缺乏项目管理协调:因此,一些项目交付较晚,存在错误,有些客户抱怨(客户也报告错误),或者在交付项目之前预算太快等。我已经提供了它们一些项目协调技巧,并且现在定期使用这些想法来跟踪项目和要完成的任务的进度。 不良的软件开发实践:在大多数(如果不是全部)文件上看到代码异味,没有文档,代码冗余,在同一文件上混合了前端层和后端,过时的开发工具,没有真实的测试环境或测试工具(只需复制和粘贴)文件从开发环境到生产环境,然后手动进行测试,看情况是否良好并发布)。我用于开发和测试的大多数开发工具都是团队不知道的,因为团队仅使用2个IDE进行代码开发,而源代码控制仅适用于开发环境。其他开发人员试图使用最新的框架来改善当前问题,但是经理不喜欢它,因为“如果离开,那么谁来维护该代码?让我们保持现状”,其中一些开发人员已经离开并搬到另一家公司。 综上所述,我确定其他公司的许多开发人员也会遇到类似的情况,但是由于情况不同,开发人员可能更愿意留在团队中而不是去其他公司,原因是(工作便利,工作灵活性,公司收益或只是因为还没有一个更好的机会)。我没有一家完美的公司,但是作为开发人员,您将如何处理和解决所有这些问题,以保持积极的态度,并最终促进变革,以改进产品并改善软件开发流程(无论您是否有很多)多年的开发经验还是仅几个)?我知道这是一篇很长的文章,但是我希望提供更多细节,以增加获得更多有用反馈的机会。 非常感谢您的反馈和时间

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.