软件工程

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

7
可怕的C#编程面试-有什么建议吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我有一份可能的C#开发人员职位,但在进行面试之前,我需要通过职业介绍所的测试。 现在,即使我是一位资深开发人员,拥有超过10年的编程经验,并且其中有超过3年的c#经验,我真的不希望进行此测试,而且我认为我很有可能会失败。 以我的经验,这些测试是无法预测的,要求您在日常工作中很少使用的东西。 对于需要修改的内容,我需要您的最佳建议-例如一本好书或网站。我的准备时间不到1周,因此必须通过。 提前致谢。 编辑:为进一步证明我对编写此类测试的关注,请考虑以下问题: 12)一个事件是: a) The result of a users action - correct answer b) The esult of a party c) code to force users action 根据测试,正确的答案是A,但是由于我一直在进行SOA开发(通常情况下事件可以基于系统事件(而不是用户操作),所以我100%确信事件不必由用户操作。这也是一个C#问题(不是ASP.net问题)。根据我的理解,我无法真正找到正确的答案,但B似乎是最好的(如果party的定义是:any可以触发事件的实体,这类问题使我感到恐惧。
21 c#  interview 

5
Tennent的函授原理有什么好的解释?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我发现自己在努力了解该原理是什么,为什么对语言设计如此重要。 基本上,它指出,对于expr语言中的每个表达式,都应与此结构完全相同: (function () { return expr; })() 另外,我听说Ruby遵循了这一原则,而Python则没有。我不明白为什么这是真的,或者根本不是真的。

9
是否将业务逻辑放入存储过程中?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 关于“-是否将业务逻辑放入存储过程?”这一主题一直存在争议。如果我们决定不使用ORM工具并且不将业务逻辑放入存储过程中,那么我们将业务逻辑放在哪里? 在以前的应用程序中,我始终倾向于仅将所有业务逻辑放入存储过程中。然后从.NET代码中,我使用数据访问应用程序块调用这些存储过程。SQLHelper等。但这并非一直都是这种情况。所以我做了一些谷歌搜索,但最终陷入了混乱。 有什么建议...吗?
21 c#  .net  sql 

3
Node.js与其他服务器端框架有何不同?
我注意到Node.js变得非常流行,并且我看到有人在其中进行小型项目的一些实例。 我还查看了利弊列表,以了解Node.js可以做什么,但是我仍然不清楚它与其他更成熟的服务器端技术(如PHP,Perl或Ruby)的区别滑轨。 具体来说,是什么将Node.js与当前替代方案区分开来,为什么?

6
在工作量和帮助新员工之间取得平衡
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我已经在第一份工作中工作了大约2个月,而且我开始注意到工作量和帮助新员工之间存在微妙的平衡。由于管理层在解决错误和解决尽可能多的客户问题方面承受着巨大的压力,因此团队中的每个人似乎都非常专注于他们的积压工作,而不是帮助新员工加快工作速度。新员工可以提出问题,有时我们会邀请开发人员坐下来为我们提供帮助,但通常我们会得到一个晦涩的答案,只有产品的资深人士才能理解,因为他们太忙于他们的任务。 我了解新员工还必须保持平衡。有时候,新手需要花3天的时间来调查和修复老兵本可以在20分钟内完成的工作。新员工需要努力学习产品和代码库。 在不仅仅减少退伍军人的工作量的情况下,如何在帮助新员工和继续以合理的速度处理积压之间取得平衡?

9
有什么好的技术可以保持您在代码中的位置?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我了解使用书签来记住代码中的单个点。但是,如何跟踪他们正在研究的代码流?例如:多个书签及其制作顺序。 例: 错误报告:“碰撞不在墙角上起作用” 错误的再现将其归结为某些不会碰撞的多边形。 冲突代码是由不可用的开发人员编写的。因此调查如下: 在调查期间,尤其是在审查诸如Google之类的非代码项目时,可能会合理地期望人们放弃它们在代码中的位置(我是否已经查看过此代码路径?或者我正在调查哪个代码路径?到此功能等)。不可避免的中断也是如此(老板:我现在需要[Lengthy Pointless Report]等) 拥有一种技术或工具资源来提供一种跟踪代码中位置的方法将非常有用。 编辑:上面的示例仅供参考,而不是需要回答的实际问题。 表达这个问题的另一种方法是: 在学习新系统时,如何跟踪学习代码的方向?这不是要了解代码为什么要执行其工作(即应使用注释),而是要了解其如何执行(仅通过阅读代码而不是注释来学习)。

4
有没有人有使用举重模式的特定示例?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我一直在研究设计模式,并遇到了飞行重量模式。我一直在尝试寻找在我的应用程序中使用该模式的机会,但是我在查看如何使用它方面遇到了麻烦。另外,当我阅读其他人的代码时,有哪些迹象表明正在使用飞行重量模式? 根据定义,它说: 使用共享可以有效地支持大量细粒度的对象。 如果我没看错,Dictionary和Hashtables可能是飞行重量的实例,这是正确的吗? 提前致谢。

6
使用DI / IoC是否应该删除所有出现的“ new”关键字?
使用依赖注入和控制反转容器是否应该从代码中删除所有出现的“ new”关键字? 换句话说,是否应该将每个对象/依赖项(无论多么简单或短暂)都“注册”到IoC容器中,并注入到需要使用它们的方法/类中? 如果不是,您如何在new关键字IoC容器中注册依赖项/对象与通过关键字“内联”创建的具体引用之间划清界限?

11
1960年代从事人工智能研究的科学家和工程师最初有过自信的原因吗?
我刚刚开始了AI和数据挖掘课程,并开始了这本书。AI应用程序编程从对AI历史的概述开始。第一章介绍了1940年代至今的AI历史。我有一个特别的说法: [在60年代]人工智能工程师承诺过高而交付不足... 过度自信的原因是什么?是因为数学预测模型显示了突破即将来临,还是由于不断增强的硬件利用能力?

7
当成为团队的新成员时,您如何处理现有集成和单元测试的质量?
我在职业生涯中遇到的一个反复出现的主题是成为新的开发人员加入团队,并很快对现有的单元和集成测试套件产生内在的不信任。 在面试过程中,管理层告诉您,他们“大力支持单元测试”,并公开鼓励他们进行测试。他们可以,但是关于测试本身的一切都是错误的。就像他们声称拥有100%集成测试覆盖率但少于10%可重复单元测试覆盖率时声称100%覆盖率这一事实。我发现了一些其他问题: 在什么是单元测试和什么是集成测试之间没有明确的指示。单元测试和集成测试在同一个类别中混合在一起。 尚未声明对特定环境的数据库中非常特定的动态数据有明确依赖关系的集成测试。 非事务集成测试,基本上是可能会或可能不会麻烦自行清理的测试,有时需要手动数据库“清理”以使测试可重复。 绝不进行任何模拟,而应用程序代码则需要进行大修,以使模拟成为可能。换句话说,设计时不要考虑测试。 没有明确的命名约定可以快速查看测试名称并大致确定要进行的测试。 这并不是说所有测试都是无用的或不好的,很多测试都相当好并且值得保留,但是有时候感觉就像淘金。我故意避免运行测试,只是因为我担心为黑箱测试用例搞砸数据库。 从本质上讲,这使我对单元和集成测试产生了固有的不信任感,而我个人没有以某种方式编写或审查这些测试。在某种程度上,如果您对测试套件的质量不抱有信心,那么它实际上对团队或项目毫无价值。 当您发现自己处于这种情况时该怎么办?您认为最佳的攻击计划是应对此类问题? 是否应该在跨发行版的巨大努力下重构所有测试?您是否应该放弃这个旧项目可能会有一天可靠的单元测试范围的想法?

10
在每个演示之后,经理都会不断更改需求规范。
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我的工作环境背景 我的经理对计算机或软件没有任何背景或了解。他很可能一生中都没有看过任何形式的代码(甚至从10英尺或更短的物理距离来看)。 有没有人谁懂什么,我要求执行的复杂性。到这一点,如果我半硬编码,没人会知道。 在Joel的测试中,我们得到了令人难以置信的0分。 问题所在 经理和其他“高级”经理有时会不断更改需求规范。如果进行了良好的工程设计而不是修补性的“修复”,则需要进行基础设计的更改。 有绝对没有人谁看代码(也许是因为没有人知道如何,或者即使它应该做的),这意味着没有人会能够: 欣赏问题的复杂性或解决方案的精妙之处。 建议改进方法。 赞赏代码的质量。 指出可以改进代码的地方。 使用了很多行话,这在语法上是有意义的,但是在任何其他方式上都没有任何意义。 不像软件公司那样感觉,表现或工作。 问题 应该做什么?特别是关于没有人指出我的代码有所改进。 更新资料 要回答HLGEM(以及可能的其他问题)有关我为修复该问题所做的工作。我提议成立Redmine并向所有人介绍源代码控制。我说过我会推荐分布式(git或mercurial),但也会讨论集中式的,让团队决定。回应是事情正在做,将在几周内完成。还没有看到,我也不知道公司的其他部门是否在使用它。

2
为什么要教Big O而不是Big Theta?
大O表示法为函数提供了上限,而大Theta提供了严格的约束。但是,我发现Big O符号在真正意义上是Big Theta时通常被(非正式地)教授和使用。 例如,“ Quicksort是O(N ^ 2)”可以变成更强大的陈述“ Quicksort是Θ(N ^ 2)” 尽管从技术上讲Big O的使用是正确的,但是更普遍地使用Big Theta不会更具表达性,并且可以减少混乱吗?有什么历史原因可导致这种大O的使用更为普遍? 维基百科注释: 非正式地,尤其是在计算机科学中,通常允许在某些情况下使用Big O表示法来描述渐近紧边界,在这种情况下,使用Big ThetaΘ表示法实际上可能更合适。

4
鉴于已批准C ++ '11,这会改变C ++初学者学习语言的方式吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我想学习一段时间的C ++,并在高中学习了AP Computer Programming(当时是C ++而不是Java)。我喜欢C语言,却没有时间学习C ++,否则我会回到C#那里,我的工作效率更高。 我的问题是:鉴于C ++ '11已获得批准(尽管我知道尚未完全实现),这是否会改变我学习C ++的方式?我拥有1998年的C ++:Herb Schildt的《完全参考》。新批准的标准是否使从此类书籍中学习比某些包含该标准内容的较新教程/书没有那么重要?从旧书中学习有什么好处吗?
21 learning  c++ 

5
是否有任何可直接归因于开源软件的商业灾难案例?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 在“企业”环境中,我注意到对专有软件的强烈偏见。即使在使用Java的大型企业中,也很难找到MySQL或PostgreSQL,并且WebSphere和WebLogic绝对比JBoss或Tomcat更受青睐。 这是可以理解的。尽管许多开发人员更喜欢Tomcat或Postgres而不是WebSphere或Oracle DB,但他们并不是最终决定这些事情的人。谁决定在生产中使用哪个数据库和应用程序服务器,谁就会发现,与选择导致真正,确实,糟糕的事情发生的自由软件相比,许可证费用似乎很小。 我不是在问Postgres是否和Oracle一样好。那不是重点。在仔细考虑功能和基准之后,Oracle不会被Postgres选中。Postgres不会进入对话,因为某些地方不信任自由软件。 我很好奇这种不信任是否是由于对任何特定事件的反应而引起的。所以我的问题是:是否有任何证明是由于开源软件缺陷导致的业务灾难(故障,收入严重损失,公司数据严重损失等)的记录在案? 说明:如果您有完全支持OSS的企业级公司的经验,这些公司必须对此事存有偏见,但要根据特定情况的需要进行选择,那么对您有好处!您的经验并不会改变其他企业公司的态度完全不同的事实,即使这些公司占少数,我的问题也是有效的。

6
如何组织一个人的项目?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我偶尔(每天读一遍)想出一个新主意,在我最喜欢的编辑器/ IDE中开始一个新项目,开始编码,第二天我删除它并开始新的东西。我已经编程了大约六年了,在那六年中,我仅真正完成了一个非常小的项目(Pastebin.com的Dashboard小部件)。尽管这对于学习编码可能很棒,但我确实想完成一些工作。 在实际编码之前,期间和之后,我应该做些什么?有什么好的资源可以教我如何组织这样的单人项目? 如果有关系,我想进行Web或Mac开发。

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.