软件工程

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

4
允许库分离的多态行为设计模式
假设我有一个Item类的层次结构:Rectangle, Circle, Triangle。我希望能够绘制它们,所以我的第一种可能是Draw()向每个虚拟方法添加一个虚拟方法: class Item { public: virtual ~Item(); virtual void Draw() =0; }; 但是,我想将绘图功能拆分到单独的Draw库中,而Core库仅包含基本表示形式。我可以想到几种可能性: 1-A DrawManager接受Items 的列表,必须使用它dynamic_cast<>来确定要做什么: class DrawManager { void draw(ItemList& items) { FOREACH(Item* item, items) { if (dynamic_cast<Rectangle*>(item)) { drawRectangle(); } else if (dynamic_cast<Circle*>(item)) { drawCircle(); } .... } } }; 这不是理想的选择,因为它依赖于RTTI并迫使一个类了解层次结构中的所有项。 2-另一种方法是将绘图责任推迟到一个ItemDrawer层次结构(RectangleDrawer,等): class Item { virtual …

4
Word表示文件和文件夹的超集[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我正在尝试为可以代表文件和文件夹的类命名。有人知道这个词吗?
10 naming 


3
泛型和类型擦除
Java中的泛型使用类型擦除来实现。JLS 说,灵感来自向后兼容。另一方面,C#泛型是可验证的。 从理论上讲,使用泛型为“擦除”或“可验证”的优缺点是什么? Java是否缺少某些东西?

1
Node.js还是servlet?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我听到了很多,并阅读了有关Javascript服务器端语言(即Node.js)的信息,并看到了许多支持Node的比较。 我不了解是什么使它变得更好或更快速,或者它甚至与Java Servlet一样成熟。 但是,Servlet是基于多线程编程语言而不是Node.js构建的。那node.js怎么能更快呢? 如果假设有1000K用户查询数据库记录,那么Node.js不应比Servlet慢。 另外,与Node.js相比,servlet是否没有更好的安全性?

3
程序员一天可以专注多长时间?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有一个问题(现已关闭,因为它不是建设性的),询问了每天的平均生产率。 我的问题是,是否有关于程序员生产力的科学研究?我不禁感到,从星期一到星期五,要连续进行8个小时的高质量编程工作非常困难。如果是的话,有没有文献对此进行调查?

3
我应该如何封装数据库访问权限?
有哪些用于管理数据库访问的良好类结构的示例?我是类封装的迷,并且希望容器(例如car)不执行数据库任务。 我还希望将来能够轻松放入数据库缓存之类的功能。 我经常采用容器类的模式,并结合使用getter和setter来进行验证和由单个singleton类执行的数据库访问。话虽这么说,这常常在两者之间混在一起并且变得非常混乱。 对不起,如果我的问题很难理解;我对数据库的术语不是绝对确定。如果需要,请随时要求澄清。
10 c++  database 


2
我应该缓存数据还是访问数据库?
我没有使用任何缓存机制,并且想知道在以下情况下我在.net世界中的选择是什么。 我们基本上有一个REST服务,其中用户传递类别的ID(思考文件夹),并且此类别可能有很多子类别,每个子类别可以具有1000个媒体容器(思想文件引用对象),其中包含有关以下内容的信息可能位于NAS或SAN服务器上的文件(在这种情况下,文件是视频)。这些类别之间的关系与一些权限规则和有关子类别的元数据一起存储在数据库中。 因此,从UI角度来看,我们有一个惰性加载的树控件,该控件由用户通过单击每个子文件夹来驱动(以Windows资源管理器为例)。他们进入视频文件的URL后,便可以观看视频。 随着系统的发展,用户数量可能会增长到1000,而子类别和视频的数量可能会在10000。 问题是我们应该在每个请求访问数据库的地方继续当前的工作方式,还是应该考虑缓存数据? 我们正在使用IIS 6/7和Asp.net。

2
键值存储中的项目过期算法是什么?
我在考虑当前的键值存储如何实现项目的“到期日期”。目前,我有2种变体供您选择: 他们什么也不做(保留过期的数据),并且只在您执行操作时检查,例如,通过某些键进行GET。这里的问题是,如果您的内存有限,则过期的项目将不会被删除。 它们保留了其他数据结构,以便能够“最早过期”。我看到可以通过以下方式完成: storage_data = dict(key -> [value, expire_timestamp]) expire_tree = SomeBinaryLikeTree(expire_timestamp -> [keys])

8
为什么大多数职位提供给<language here>开发人员,而不是一般的开发人员?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 在理想的世界中: 帕特里克·麦肯齐(Patrick McKenzie)在一篇出色的文章《别称自己为程序员》和《其他职业建议》中解释说,语言无关紧要: 开发人员通常是解决问题的人。开发人员不是以特定语言编写代码的人。 企业不关心您所知道的语言。如果他们需要聘请使用特定语言编写的项目的开发人员,并且他们的候选人经验丰富,但从未用这种语言编写过代码,则仍会聘用他。 根据我作为开发人员和必须雇用其他开发人员的经验,观察到的结果非常相似: N年的Java经验或N年的C#经验无关紧要。重要的是,候选人知道如何解决问题,知道意大利面条式代码和具有深思熟虑的体系结构的干净代码之间的区别,等等。 我不在乎您以前使用的语言。对于一个C#项目,我宁愿雇用一个专业的开发人员,而不是只懂C#并且非常不懂C#的新手花一生来编写Java,Python和Ruby on Rails代码。 您使用一种语言获得的知识和经验几乎可以在任何其他语言中重用。 一位经验丰富的开发人员使用Ruby on Rails进行Web开发,并在余下的职业生涯中使用Oracle编写Java桌面应用程序,非常适合使用Microsoft SQL Server的ASP.NET MVC项目。因为这个人已经知道她完成这项工作所需的一切,除了一些特定的东西和语法上的差异。 另一方面,只做过几个ASP.NET MVC小型网站的人根本不适合,因为她可能不完全了解MVC架构,可能不知道什么是SQL性能分析,并且可能缺少其他一些基本知识。知识。 不要告诉我我无法解决使用CodeIgniter的PHP网站的一个小问题,因为我以前从未使用过CodeIgniter。 在实践中: 在实践中,当我寻找自由职业者时,当我看到一般的工作机会时,它们是非常特定于语言的。 有些人会寻找在Magento有两年经验的PHP开发人员。其他人将寻找具有至少三年VB.NET经验的人,如果您给他们发送简历,提到您已经进行了C#开发六年,却没有提及VB.NET,则他们不会打扰回答。如果他们要求有Firebird经验的人,他们将不会听到您十年的Oracle经验。 为什么理论和我所描述的帕特里克·麦肯齐(Patrick McKenzie)是常识与工作机会的真实世界之间存在这种差异?

5
OOP:在哪些情况下,基于类的设计比基于接口的设计更好?
我正在阅读 JDOM的网站。 为什么用具体的类而不是接口来定义JDOM API? Jason Hunter总结了针对JDOM的基于接口的API的论点: 使用接口,所有东西都变成了工厂,必须将元素“导入”到新文档中,而不是仅仅添加元素,不能保证诸如长期序列化之类的功能,因此清单还在继续。 我们实际上是从接口开始的。在对某些同伴的发行前审查中,我们收到了反馈,应该尝试具体的课程。我们做到了,并且设计对此要好得多。 我是初学者。到目前为止,我所听到的所有建议都建议不要将设计与具体类一起使用。 可能在某些地方使用具体的类是适当的。是否存在在设计中使用具体类的常见类问题?

3
Java语言的开发是否超出了其最初的设计意图?
我一直在和一个朋友谈论Javascript的目的,何时以及如何使用Java等。他引用了以下内容: JavaScript旨在向HTML页面添加交互性 [...] JavaScript为HTML设计人员提供了一种编程工具 HTML作者通常不是程序员,但是JavaScript是一种脚本语言,语法非常简单!几乎任何人都可以在其HTML页面中放入小的“代码段”代码JavaScript可以对事件做出反应 可以将JavaScript设置为在发生某些情况时执行,例如页面加载完成或用户单击HTML元素时,JavaScript可以读写HTML元素 JavaScript可以读取和更改HTML元素的内容JavaScript可用于验证数据 在将表单数据提交到服务器之前,可以使用JavaScript对其进行验证。这样可以节省服务器的额外处理 JavaScript可用于检测访问者的浏览器-JavaScript可用于检测访问者的浏览器,并(取决于浏览器)加载专门为该浏览器设计的另一个页面。 JavaScript可用于创建cookie-JavaScript可用于在访问者的计算机上存储和检索信息。 但是,似乎Java的用途已经比这些天大得多。我的朋友还主张不要使用Javascript的OOP功能,并声称“您不应该处理数据,而只是进行验证”。JavaScript是否真的仅限于验证数据和在网页上制作精美的图形? 他继续声称“您不应该尝试通过javascript访问数据库”,并且还说:“通常,您不想使用JavaScript进行繁重的工作”。我不能说我同意他的观点,但我想对此提供更多意见。 所以,我的问题是:Javascript是否已从上面的定义演变为更强大的功能,我们的使用方式有所变化,还是我完全错误?尽管我意识到这是一个主观的问题,但我找不到关于它的更多信息,因此,如果没有其他任何联系,那么可以使用几个链接。我不是在寻找辩论,只是在寻找答案。
10 javascript 

6
如果我使用锁,我的算法还能保持无锁状态吗?
无锁的一个常见定义是至少有一个进程可以取得进展。1个 如果我有一个简单的数据结构(例如队列),并受锁保护,那么一个进程始终可以取得进展,因为一个进程可以获取锁,执行所需操作并释放它。 那么它符合无锁的定义吗? 1参见例如M. Herlihy,V。Luchangco和M. Moir。无障碍同步:以双端队列为例。在《分布式计算》,2003年。“如果仅确保某些线程始终在进步,那么它将是无锁的”。


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.