软件工程

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

3
抽象基类和副本构造,经验法则
通常,最好有一个抽象基类来隔离对象的接口。 问题在于,默认情况下,C ++中的副本构造IMHO在很大程度上已被破坏,默认情况下会生成副本构造函数。 那么,当您有一个抽象基类和派生类中的原始指针时,会遇到什么陷阱? class IAbstract { ~IAbstract() = 0; } class Derived : public IAbstract { char *theProblem; ... } IAbstract *a1 = new Derived(); IAbstract a2 = *a1;//??? 现在,您是否彻底禁用了整个层次结构的副本构建?将副本构造声明为私有IAbstract? 抽象基类是否有三分法则?

9
确定语言/框架/技术是否“面向未来”
我是PHP开发人员,最近我开始使用CodeIgniter。看来,每当我搜索与CodeIgniter相关的内容时,博客文章以及通常不是'09或'10的内容,都让我开始思考,CodeIgniter是否仍然有意义,并且将来还会有用吗?是否有其他框架正在取代它? 其他语言和框架也是如此。您什么时候放弃学习某些语言或框架?有什么简单的方法可以找到正在出现的值得收集的东西?

6
线程使用虚拟内存还是实际内存?
我正在尝试优化我的Linux服务器,使其每个进程处理10,000个线程,而现在仅处理382个线程。按照本文的说明,以下公式用于查找可能的总线程: number of threads = total virtual memory / (stack size*1024*1024) 这意味着线程将所有数据存储在虚拟内存中。据我所知,虚拟内存是Linux机器中的交换空间,交换空间存储在硬盘上,而不是RAM或缓存。 所以我的问题是我们的线程是否使用硬盘存储来处理/存储其数据。 如果是,那么这不会影响性能吗?我们可以通过将它们放在RAM或缓存中来提高性能吗?怎么样? 如果否,线程到底如何工作? 更新: 根据无用的回答,虚拟内存是一个大致包括以下内容的系统: 物理内存(RAM) 您附加的所有交换文件 硬件支持,用于在物理内存中不存在虚拟地址时将虚拟地址转换为物理地址并发出页面错误 (内核)软件支持:通过按需从交换中拉入页面来管理该硬件使用的查找表来处理那些页面错误 因此,虚拟内存上的所有内容都集中在RAM(真实内存)和硬盘(交换文件)上。正如詹姆斯在回答中所解释的那样,内核使用诸如LRU之类的算法对Ram与HDD做出了决定。

8
假设您拥有无限线性二进制存储,一个很好的模式可以表示从0到无穷大的整数?
我想要一个表示以0开头的整数的模式,没有任何限制(假设访问无限线性存储)。 这是一个可以表示0到255之间的数字的模式: 使用存储器的第一个字节(地址0)存储整数。 现在,假设我要表示大于255的数字。当然,我可以使用多于1个字节来表示整数,但是只要它是一个固定数字,最终就会有一个太大的整数,无法用原始架构。 这是应该能够完成任务的另一个模式,但是可能效率不高。 只需使用某种唯一的“数字结尾”字节,然后使用所有前面的字节来表示数字。显然,此“数字结尾”字节不能在数字表示中的任何位置使用,但这可以通过使用base-255(而不是base-256)编号系统来实现。 但是,这很慢并且可能效率很低。我希望有一个更好的产品,它在低值的情况下表现更好并且可以很好地缩放。 本质上,它是一个UUID系统。我想看看是否有可能创建一个性能快速的UUID系统,该系统理论上可以扩展使用数年,数千年,数百万年,而无需重新设计。
10 storage  numbers  uuid 

4
制作跨平台库应使用哪种语言?[关闭]
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我想构建一个SyncML解析库(无UI),该库应该能够基于主机应用程序提供的信息(由库的方法提供)构建消息。同样,该库应该能够对宿主应用程序中的方法进行回调。 我希望能够对此进行编译,并使其在尽可能多的平台上可用:Windows,Windows Phone 7 OS,OSX,iOS,Linux,Android,BlackBerry。基本上是尽可能多的平台。 优先考虑的是使它在移动设备上可用。 问题: 我应该使用什么设置?(编程语言,编译器,IDE等) 如何为这些不同的平台编译该库,以及如何连接到该库? 还有其他信息吗?例如,涉及跨平台开发主题的文章? 我之前没有做过这样的跨平台项目,因此欢迎向我提供正确方向的任何可用信息。 我本人在C#/。NET和Objective-C方面都有背景。

1
拥有TFS后,为什么还要在PowerShell中创建部署脚本?
我正在尝试自动部署/持续集成,并与团队负责人进行了交谈。 我告诉他我正在研究如何在PowerShell中创建构建/部署脚本,他说使用GUI在TFS中设置自动部署非常容易,我应该进行研究。除了致力于从VS进行源代码控制外,我对TFS零经验。 在哪种情况下,TFS会失败?使用PowerShell进行自动部署会更好吗?选择PowerShell而不使用TFS还有哪些其他原因和优势? 还有另一件事:例如,我可以运行第三方工具来缩小TFS中的JS文件吗? 我可能想到的PowerShell的一些优点: PowerShell提供最大的灵活性 您可以轻松切换到另一个源代码管理系统,例如Mercurial 这些脚本比TFS生成的脚本更易于维护 PowerShell轻巧:您可以在任何PC上运行脚本

5
为什么有些语言建议使用空格而不是制表符?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 也许我一个人在里面,但是没有什么让我烦恼的,就像人们缩进而不是制表符。与打字SpaceSpaceSpaceSpace相比,打字更容易,更直观Tab吗?当然,制表符宽度是可变的,但它比空格更能表示缩进空间。退格是一样的。退格一到四次? 为什么像Python这样的语言建议在制表符上使用空格?

1
ORM POCO是否取代域实体?
这有点类似于这个问题,但是范围更广。 总的来说,有了像EF 4.1这样的POM支持的ORM,现在将您的域实体作为持久化到数据库的对象有意义吗? 借助EF 4或Linq-to-SQL等较旧的ORM,您的“数据库对象”是自动生成的,并与数据库紧密耦合,因此,对于非平凡的应用程序,先将它们映射到更健壮的智能域实体投入工作。 使用较新的ORM的想法是仅构建健壮的域实体,然后具有仅提供所述域实体与您的DBMS之间映射的数据层吗? 在写作中,我感觉到这一直是目标,但使用现有工具并不容易(轻松),至少在.NET世界中并非如此。

6
为什么要在变量使用位置附近声明变量?
我听说有人说变量应该声明得尽可能接近其用法。我不明白 例如,此政策建议我应该这样做: foreach (var item in veryLongList) { int whereShouldIBeDeclared = item.Id; //... } 但是可以肯定的是,这意味着int每次迭代都会产生创建新的开销。使用会不会更好: int whereShouldIBeDeclared; foreach (var item in veryLongList) { whereShouldIBeDeclared = item.Id; //... } 请有人能解释一下吗?
10 c#  .net  variables 

9
用户注册的合理且安全的密码要求是什么?
这是我刚从UPS获得的密码策略(仅用于包装状态检查): 您的密码必须介于8到26个字符之间。它必须至少包含以下三种字符类型:小写字母,大写字母,数字,特殊字符或空格。密码可能不包含您的用户ID,您的名称或您的电子邮件地址。(SSO_1007) 实际上,我一定要动脑筋才能生成此密码,但不仅如此,最重要的是,我确定三天后我会忘记该密码是什么。用户不会那么高兴。密码重置可能很频繁。我认为除非有必要,否则用户将尝试避免使用该网站。 设置网站时,什么是合理且安全的密码策略?我认为有些公司可能会担心某些黑客尝试使用密码的次数超过一百万次,因此他们添加了“特殊字符,小写字母,大写字母”的所有要求,但是关闭帐户或仅禁用密码设置是不合理的密码,如果用户尝试了30次或100次,是否需要重设密码?还是在用户尝试30次后每次添加5秒的延迟?如果是这样,那么将不需要那么多特殊字符。

3
您将如何寻找合作者?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 对于软件/应用/东西,我似乎源源不断地出现了或多或少的原始想法,或多或少的好主意,这些想法还没有被我想到。有时,我决定开始实施我的想法。几个小时后,我得到了我想要构建的一个体面的,或多或少的工作原型。然后,我的闹钟响了,我不得不回到现实世界,厌倦了地狱。在大多数情况下,我开始从事的工作永远都没有完成。有时候,没关系。有时候,老实说,我觉得这真是令人讨厌。 但是我意识到有像GitHub这样的网站,还有很多其他编码人员。是否有一个地方可以发布想法,提议,概念或边缘代码,以便找到对项目合作感兴趣的人? 编辑:我知道“通常的方式” –持续一段时间自行开发,开源代码,在开发博客,IRC或其他地方提及您的项目;最终吸引了其他人。 我正在寻找的是在项目早期与其他开发人员(例如,不同专业领域的人员)建立联系的地方。

1
如何使用样本数据正确记录算法?
我想知道算法文档应包含什么?找不到合适的指导方针可以遵循。我想包括 算法总结 算法说明 流程图 伪代码 样本输入数据集(多个) 输出数据 单元测试 实验 客户要求提供这样的文档,以便:对我们自己的号码保持信心,并向潜在客户描述我们的流程,以便他们知道我们正在采取步骤来检查和验证我们的计算。 这样的文档看起来如何?(示例PDF) 您将在本文档中进一步包括什么? 我列举的是那么好,还是应该以不同的方式记录下来? 您将如何在Google中搜索此类文档样本?

3
我如何才能有意识地实践设计模式和重构?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我正在阅读《重构为模式》一书,想知道如何获得机会练习这些技能,因为如果不认真尝试重构和使用模式的新方法,我的技能将无法提高。 但是办公室工作需要我尽快完成每项任务。大多数时候,项目的设计和体系结构不受我控制,我只能遵循与现有代码类似的样式。有时有一个设计不良的项目,但是还有另一个开发人员的设计技能比我强,他已经拥有重构该项目的整个计划,所以我只是遵循他的计划。我如何获得练习的机会?

5
存储与代码项目关联的文档的最佳方法是什么?
我们有很多与软件开发相关的文档。其中包括需求,设计文档,外部PDF,客户文件,测试说明等内容。目前,这些文档分散在各处(Wiki,“网络上的某个地方”,本地开发人员的硬盘(!),甚至更糟的地方)。 跟踪它们的最佳方法是什么?由于我们使用Visual Studio(2010)进行开发,并且该项目上实际上没有任何非开发人员,所以我认为将它们存储在VS“解决方案”中是一个好主意,这将使他们由源代码控制,并由所有开发人员普遍访问。 但是,VS似乎并不是专门为实现此目的而构建的。如果您编辑任何文档文件,即使使用构建属性“无”,“请勿复制”设置的文档文件,VS也必须先重建软件,然后才能再次运行。无法在解决方案中创建“文档项目”。(为此,我们使用一个空的C#项目)。Visual Studio和Word / Excel Flat不能很好地进行源代码控制。您无法查看签入的文件,然后决定进行更改,而无需先关闭文件,进入项目并在进行更改之前手动将其检出。充其量是缓慢而乏味的。 无论如何,这是我们团队能提供的最好的解决方案,但我真的希望我有一个更好的(免费)解决方案。


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.