软件工程

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

2
纯语言中的垃圾回收有何不同?
在像Haskell这样的纯语言中,所有数据都是不可变的,并且无法以任何方式更改现有的数据结构。另外,许多关于不变数据的算法和功能性编程模式本质上会产生大量垃圾(map例如,创建中间列表的链)。 面对纯净性,垃圾收集器会采用哪些策略和技术?在不纯语言的GC中(不是在纯上下文中),什么功能很好?纯语言为GC创建了哪些其他新问题?


3
python业务逻辑应放在Django的确切位置
我刚刚开始学习Django / Python / Web开发。这个问题已经困扰我一段时间了。 我正在Django中创建带有多个模板的应用程序。我有一个views.py,它基本上只是呈现对相应模板的响应,并且我有一个我在其中构造数据库的model.py。在我的一个模板中,我需要上传一个图像(我能做到),并且我需要运行一个基于上传图像特性的逻辑(尚未完成)。这种逻辑涉及许多繁重的计算。执行计算后,逻辑应将一些已处理的信息(坐标)返回到模板。 我已经能够在一个独立的python桌面应用程序中成功地完成所有这些操作,一个又一个地调用python文件。但是,由于我现在想使它成为Web应用程序,所以我开始使用Django框架。 我已经做了很多搜索,但仍然无法弄清楚应将包含所有逻辑的Python文件放在哪里。我是否应该有另一个基于类的文件(logic.py),并从中调用它view.py?我在Google上搜索后发现,许多开发人员将其业务逻辑放在Django的models.py中。但是,我认为从直觉上来说是不正确的,因为模型应该专门与后端进行通信。任何帮助将不胜感激。

6
我什么时候应该停止致力于掌握新项目?
每当一个新项目开始时,通常首先要直接向master提交,直到获得“稳定”的东西,然后再开始在分支中工作才有意义。 至少,这是我通常的做法。有没有办法立即从第二次提交开始分支?以这种方式这样做有意义吗?显然,“ Initial Commit”将始终处于主状态,但是在那之后,我何时才知道是为新功能创建分支的合适时间?

4
为什么C ++和Java都使用“引用”概念,但含义却不同?
在C ++中,对函数的引用参数允许函数使引用引用其他内容: int replacement = 23; void changeNumberReference(int& reference) { reference = replacement; } int main() { int i = 1; std::cout << "i=" << i << "\n"; // i = 1; changeNumberReference(i); std::cout << "i=" << i << "\n"; // i = 23; } 类似地,如果我们尝试更改引用,则对函数的常量引用自变量将引发编译时错误: void changeNumberReference(const int& reference) …
26 java  c++  pointers  reference 

6
Java为什么将软件包访问设置为默认访问?
我之所以问这个问题,是因为我相信他们这样做是有充分的理由的,而且根据我到目前为止的行业经验,大多数人都没有正确使用它。但是,如果我的理论是正确的,那么我不确定为什么它们包含私有访问修饰符...? 我相信,如果正确使用默认访问权限,则可以在保持封装的同时增强可测试性。并且这也使私有访问修饰符变得多余。 通过将唯一的包用于需要隐藏在世界其他地方的方法,可以使用默认访问修饰符来提供相同的效果,并且在不影响可测试性的情况下做到这一点,因为测试文件夹中的包具有相同的功能。能够访问源文件夹中声明的所有默认方法。 我相信这就是Java将包访问权限用作“默认”的原因。但我不确定为什么它们还包括私有访问权,我确定有一个有效的用例...

5
如何将OO程序重构为功能性程序?
我很难找到有关如何以功能样式编写程序的资源。我可以在网上找到讨论的最高级的话题是使用结构化类型来减少类层次结构。大多数只处理如何使用map / fold / reduce / etc替换命令式循环。 我真正想找到的是深入讨论非平凡程序的OOP实现,其局限性以及如何以功能样式重构它。不仅是算法或数据结构,还有一些具有不同角色和方面的东西-也许是电子游戏。顺便说一句,我确实读过Tomas Petricek撰写的《现实世界的函数编程》,但是我还想要更多。

4
您如何处理多个用户在Webapp中编辑同一条数据?
我正在处理的一个项目正在寻找一个Web应用程序,该应用程序将管理多个用户之间的任务列表。这是一个主任务列表,其任务项由授权用户分发。每个用户都有自己的帐户来登录和查看分配给他们的任务;多个用户可能有一个共同的任务。 我试图将项目的详细信息排除在外,因为我将更多地与如何处理以下情况的整体概念作斗争,但是如果有帮助,我将使用Java,EclipseLink和GWT,并实现RequestFactory。该数据库是PostgreSQL。 因此,我尝试解决的概念性问题如下: 如果多个用户共有的单个任务以任何方式更改(例如任务完成,删除等),则具有此任务的所有用户的任务列表都将更新。有哪些设计模式可帮助实现此功能? 我查看过的某些模式是“观察员”和“调解员”-在这些模式上是否应该考虑其他模式? 假设有两个用户同时更改同一任务。 首先,我应该允许这种情况发生还是在某个人完成更改之前将其锁定? 其次,如果不加锁,我该如何调和接受谁的更改?这涉及1中的情况,因为用户1可以提交数据,并且在用户2接收更新的数据之前,他/她可能已经前进并提交了他/她的更改。 我真的在寻找您可以提供的有关如何在此Web应用程序的多个实例之间正确同步数据的任何指导点,建议或技巧。我将不胜感激!

4
如何在我的代码中避免“经理”
该问题是从Code Review Stack Exchange 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 6年前。 我目前正在为C ++ 重新设计我的实体系统,并且我有很多经理。在我的设计中,我有这些类,以便将我的库联系在一起。关于“经理”类,我听说过很多坏事,也许我没有适当地命名我的类。但是,我不知道还有什么名字。 在我的图书馆中,大多数经理都是由以下类组成的(尽管确实有所不同): 容器-管理器中对象的容器 属性-管理器中对象的属性 在我的图书馆新设计中,我有这些特定的类,以便将我的图书馆联系在一起。 ComponentManager-管理实体系统中的组件 组件容器 ComponentAttributes 场景*-对场景的引用(请参见下文) SystemManager-管理实体系统中的系统 系统容器 场景*-对场景的引用(请参见下文) EntityManager-管理实体系统中的实体 EntityPool-实体池 EntityAttributes-实体的属性(只能由ComponentContainer和System类访问) 场景*-对场景的引用(请参见下文) 场景-将所有经理联系在一起 组件管理器 系统管理员 实体管理器 我当时只是想将所有容器/池放入Scene类本身。 即 代替这个: Scene scene; // create a Scene // NOTE: // I technically could wrap this line …

9
是否有遵循最小化开发方法的编程语言?
我发现,当语言被认为与商业软件相同时,总是不断需要添加新功能来证明新版本的合理性。 最终版本1.0是否存在或存在某些语言?当然,错误修复不受此约束,但是功能集始终保持不变吗? 这样,该语言中的每个功能都可以很好地组合在一起,并且由于向后兼容性,在过时的功能仍然存在的情况下,似乎并没有将它们固定在一起。 我假设有些学术语言是这样的吗?但是,是否有遵循该想法的商业上成功的语言?随附的库也可以免费获得新功能,但是语言始终保持不变。 我可以举一个例子,我最喜欢的一种C#语言,我经常使用它,每个发行版中都添加了越来越多的功能。要利用这些优势,我必须放弃实际的任务,花大量的时间学习这些任务,而不是掌握一些琐碎的概念并将它们自己组合起来,以轻松地解决更复杂的问题。 因此,我想我正在寻找一种最小化的方法,该方法应使所有内容保持一致,合理并尽可能正交。


5
为什么Lisp社区更喜欢在函数末尾累积所有括号?
为什么Lisp社区更喜欢在函数末尾累积所有括号: (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive))) 为什么不采用C或Java这样的约定? 好吧,Lisp比这些语言要古老得多,但是我说的是当代的Lispers。 (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive) ) ) 注意:代码段摘自《 Clojure的喜悦》一书。


8
良好的面试编程项目
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我正在寻找一些小型编程项目,这些项目可以给潜在的员工评估他们的编程能力。这些将是刚毕业的程序员。我正在寻找需要花几个小时才能完成的项目,他们会在面试后通过电子邮件将答案发送回去。 一个示例是采用这段文本并返回按字母顺序排列的唯一单词列表。在每个单词之后,请告诉我该单词出现了多少次,以及该单词在什么样的情感中出现了。 有人有什么好的建议吗?
26 interview 

15
程序员有时会故意过分复杂化代码吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 在stackoverflow上似乎出现了很多次,人们(尤其是程序员)倾向于使问题的解决方案变得过于复杂,以至于解决方案比原始问题复杂得多?我无论如何都不是专家,但是很多时候我尝试使用最可行的最简单的解决方案(很显然这并非在任何地方都可行),但是我在建议人们认为工作上的简单解决方案方面取得了很大的成功忽略更复杂的解决方案? 对于程序员来说,这是正常的事情吗?....或者我只是在考虑正确的角度而已。

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.