软件工程

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

6
为什么大多数网站都需要激活电子邮件?
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 当今最流行的应用程序要求通过电子邮件激活帐户。我从未使用自己开发的应用程序来做到这一点,所以我是否缺少一些关键的安全功能? 通过电子邮件激活,我的意思是当您注册到站点时,他们会向您发送一封电子邮件,其中包含您必须在激活帐户之前单击的链接。
13 security  email 

4
将多GB SVN存储库移至Git
当前,我的公司在SVN存储库中具有Visual Studio隔离,其组织如下: SolutionFolder (~3.5 GB) |-> SolutionName.sln |-> .. Some source code folders... (~250 MB) |-> ThirdParty (~3 GB) |-> Tools | -> Tool1 | -> Tool2 Tool1和Tool2是独立构建的(具有自己的解决方案),但是会生成在主要构建中使用的可执行文件。ThirdParty文件夹包含项目的所有依赖项,包括一些预编译的100+ MB .lib文件和大型库(如boost)。 将所有功能都包含在一个SVN存储库中非常方便,这样(1)开发人员只需执行一次签出操作,(2)我们就无需跟踪每个版本的构建所需的依赖项版本。另一方面,要花些时间检查此仓库。 将这个项目结构转移到git的最佳方法是什么?大概最好是从主存储库中排除ThirdParty以及可能的工具,但是我们希望一步就可以轻松下载ThirdParty,并且我们希望对其进行版本控制(并且主存储库和ThirdParty / Tools之间的版本不匹配会很糟糕)。 在这一点上,我对保存历史不感兴趣,只是对如何组织这样的项目不感兴趣。

2
撤消将文件从回购中删除的Git合并的最佳方法是什么?
因此,假设发生以下情况(并且我们都在使用SourceTree): 我们都在努力起源/发展。 我去度假一个星期。 我的同事在过去的几天里一直在本地工作,而没有将起源/开发重新合并到他的本地开发分支中。 他尝试进行推动,并被告知必须先合并,然后再进行牵引。 他遇到了冲突,阻止了自动合并后继续进行。 假设Git类似于SVN,我的同事将“新”文件丢弃在他的工作副本中,然后提交合并-从起源/开发部门清除这些“新”文件。 在该修订版的基础上,还需要进行为期数周的开发工作。 我从假期回来,发现我缺了几天的工作。 我们对Git都是非常陌生的(这是我们使用它的第一个项目),但是我所做的修复工作是: 将“ develop”重命名为“ develop_old”。 将develop_old合并到新的分支“ develop_new”。 将dev_new分支重置为错误合并之前的最后一次提交。 从那时起,Cherry逐一挑选每个提交,以手工解决冲突。 将develop_old和develop_new推到起点。 在这一点上,我希望develop_new是我们所有更改的“好”副本,并重新应用了随后的数周工作。我也假设说,“反向承诺”会做一个合并奇怪的事情,尤其是接下来的几个星期的工作价值是基于它-因为该合并包含了很多的事情,我们也有东西,我们不要想一起t。 我希望这种情况再也不会发生,但是如果再次发生,我想知道一种更轻松/更好的解决方法。当基于该合并的回购中进行了大量工作时,是否有更好的方法来撤消“不良”合并?
13 git 

2
比较TCP / IP应用程序与HTTP应用程序[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我对开发使用Java编写的面向用户的大型网站感兴趣。 至于设计,我正在考虑开发独立的模块化服务,这些服务可以作为我的主要Web应用程序的数据提供者。 至于编写这些模块化服务(数据提供程序),我可以利用现有的框架(如Spring)并按照RESTful设计模式开发这些服务,并通过HTTP和消息格式(如JSON)公开资源...或者我可以利用现有的网络像Netty这样的框架(http://netty.io/)和像Protobufs这样的序列化格式(https://developers.google.com/protocol-buffers/docs/overview),并开发一个TCP服务器来来回发送序列化的protobuf有效载荷。 您何时应选择一个?使用Protobufs之类的序列化格式并通过网络发送字节流会有任何好处吗?仅使用JSON会产生开销吗?使用TCP / IP和使用HTTP之间有多少开销?什么时候应该使用Spring over Netty来建立这样的服务,反之亦然?
13 java  rest  http  serialization  tcp 

2
如何实现错误处理
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 即使我已经在专业水平上编程了几年,但我仍然不完全理解错误处理。尽管我的应用程序运行良好,但错误处理并未在专业级别上实现,而是多种技术的结合与匹配。 我的错误处理没有任何结构。我想学习和理解它是如何在专业水平上实现的。这是我缺乏知识的领域。 什么时候应该使用异常,什么时候应该返回成功状态,以在逻辑流程中进行检查?可以混合异常并返回状态吗? 我主要使用C#编写代码。

1
API身份验证,一次性令牌与动态令牌
我们正在开发一个新项目,我们是两个主要开发人员,并且在如何使用令牌保护服务器与客户端之间的通信方面处于十字路口。 第一个建议:(一次性令牌AKA静态令牌) 客户端通过向api发送用户名和密码以及current_time(此变量也将保存在服务器的数据库和客户端中)来请求主令牌,服务器解释输入并呈现哈希令牌(例如: 58f52c075aca5d3e07869598c4d66648)将其保存在数据库中,并将其返回给客户端。 客户端现在保存主令牌,并使用主令牌+身份验证请求中发送的current_time变量创建新的哈希令牌(让我们将此新令牌称为main_token),服务器也将执行相同操作,并使用相同的算法创建相同的令牌。 客户端每次查询服务器API时,都会将main_token发送到服务器,现在服务器会将其中生成的令牌与客户端发送的main_token进行比较,如果匹配,则表示用户是真实的 第二个建议:(动态令牌) 客户端生成两个随机键($ key1 = rand(10000,90000); $ key2 = rand(10000,90000);)在API上的每个请求上,客户端都会使用查询类型创建一个哈希,而两个键分别为一个复杂的算法,然后将这两个密钥+哈希发送到服务器 服务器使用与客户端相同的算法,创建一个哈希,然后将其与客户端发送的哈希进行比较,如果匹配,则服务器继续处理查询 现在的问题是,哪一种是用于保护API请求的最合理,最安全的方法?
13 security  api 

6
C中变量和函数的命名约定
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 在CI中编写大型项目时遇到了问题。如果我继续编写更多的代码,那么有时候我将很难组织代码。我的意思是,程序不同部分的函数和变量的命名似乎混淆了。 因此,我在考虑是否存在可以用于C变量和函数的有用的命名约定? 大多数语言都建议使用命名约定。但是到目前为止,对于C来说,我唯一读到的是名称应具有描述性,以提高代码的可读性。 编辑: 建议的命名约定的一些示例的示例: Python的PEP 8 Java教程 我在某处阅读了一些其他的Java命名约定,但不记得在哪里。
13 c  naming 

3
网络会议是“不良设计”吗?为什么?
前几天,我在与一位同事讨论时,他出来说在Web应用程序中使用用户会话是错误的。我回答说,这可能是错误的,具体取决于您存储的信息,否则,为什么Microsoft甚至还要提供Web会话服务(我们正在谈论ASP.NET)。 他再次回答我,即使在MS中,他们也可以轻易地回答我这是糟糕的设计。并且他可以给我看一些白皮书来证明这一点。 不幸的是,我再也没有机会联系这个人了,但是我真的很想了解他的观点。有人在此有任何信息/观点吗?

4
C项目避免命名冲突
我正在努力寻找有关中型C库项目的函数命名约定的实用建议。我的库项目分为几个模块和带有各自标题的子模块,并且松散地遵循OO风格(所有函数均以某个结构作为第一个参数,而没有全局变量等)。它奠定了我们这样的东西: MyLib - Foo - foo.h - foo_internal.h - some_foo_action.c - another_foo_action.c - Baz - baz.h - some_baz_action.c - Bar - bar.h - bar_internal.h - some_bar_action.c 一般来说,功能远远太大,(例如)棒some_foo_action,并another_foo_action在一个foo.c实现文件,使大多数功能静态的,收工。 在构建库时,我可以处理去除内部(“模块私有”)符号的问题,以避免用户与其客户端程序发生冲突,但是问题是如何在库中命名符号?到目前为止,我一直在做: struct MyLibFoo; void MyLibFooSomeAction(MyLibFoo *foo, ...); struct MyLibBar; void MyLibBarAnAction(MyLibBar *bar, ...); // Submodule struct MyLibFooBaz; void MyLibFooBazAnotherAction(MyLibFooBaz *baz, ...); 但是,我最终得到了疯狂的长符号名(比示例长得多)。如果我没有在名称前添加“假名称空间”,则模块的内部符号名称会发生​​冲突。 注意:我不在乎骆驼案/帕斯卡案等,只是名字本身。

5
域实体是否违反单一责任原则?
实体的单一责任(改变的原因)应该是唯一地标识自己,换句话说,是可以发现其责任的。 埃里克·埃文(Eric Evan)的DDD书,第16页。93: 实体的最基本责任是建立连续性,使行为清晰可预测。如果他们备用,他们会做到最好。与其着重于属性甚至行为,不如将实体对象的定义简化为最固有的特征,尤其是那些识别该特征或通常用于查找或匹配该特征的特征。仅添加对于该行为所需的概念和属性必不可少的行为。 除此之外,还希望将行为和属性删除到与核心Entity相关联的其他对象中。除了身份问题外,实体还倾向于通过协调其拥有的对象的操作来履行其职责。 1。 ...将ENTITY对象的定义简化为最固有的特征,尤其是那些识别它或通常用于查找或匹配它的特征。仅添加对该概念必不可少的行为... 为实体分配一个唯一的ID后,它的身份就会建立,因此我认为这样的实体不需要任何行为就能维持其身份或帮助其识别自己。因此,我不明白作者用“ 对于概念必不可少的行为 ” 指的是什么行为(除了find和match 操作之外)? 2。 ...将ENTITY对象的定义简化为最固有的特征,尤其是那些识别它或通常用于查找或匹配它的特征。...除此之外,还希望将行为和属性删除到与核心ENTITY相关的其他对象中。 因此,任何无助于识别实体的行为,但我们仍将其表征为该实体的固有特征(即吠叫是狗固有的,飞行是飞机固有的,产卵是鸟类固有的.. ),应该放入与该实体关联的其他对象中(例如:我们应该将吠叫行为放入与dog实体关联的对象中)? 3。 除此之外,还希望将行为和属性删除到与核心ENTITY相关联的其他对象中。 一)MyEntity代表的职责A_resp和B_resp对象a,并b分别。 即使大多数的A_resp和B_resp工作是由做a和b的情况下,客户端仍担任A_resp并B_resp通过MyEntity,这意味着,从客户的角度来看,这两个职责属于MyEntity。这样,难道这不是意味着MyEntity也有A_resp和B_resp责任,因此违反了SRP? b)即使我们假设A_resp并且B_resp不属于MyEntity,MyEntity仍然有责任AB_resp协调对象a和的操作b。因此,不MyEntity违反SRP,因为它至少具有两项职责 –唯一标识自己,以及AB_resp? class MyEntity { private A a = ... private B b = ... public A GetA() { ... } public B GetB() { ... } /* coordinates operations …

2
在python中,定义具有函数的模块或具有包含函数的类的模块是否更好?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 在我的代码中,以上两个选项中的任何一个都可以很好地工作,但是我有兴趣了解这两种方法的优缺点。
13 python 

5
控制器应了解视图和模型吗?或相反亦然?
我在概念上试图了解我是否应该这样做: item = Model() screen = View() brain = Controller(item, screen) 或这个.. brain = Controller() item = Model(brain) screen = View(brain) 或这个.. class Controller(): def __init__(self): item = Model(self) screen = View(self) 还是完全其他的东西?
13 mvc 

2
我应该考虑哪种k-best最短路径算法?
我正在解决图搜索优化问题。我需要通过有向加权图找到k个最佳非循环最短路径。 我知道有很多精确的和近似的k最佳算法,但是最近的大多数研究似乎都针对非常大,非常稀疏的关系图(例如道路路线和方向),而我的图都不是。 区分我的问题的方面: 该图包含大约160个顶点。 该图几乎完全连接(双向,所以〜160 ^ 2〜= 25k边) k会很小(可能小于10) 最大路径长度可能会有限制,并且也非常小(例如3-5条边) 我在上面说了“非循环”,但只是重申一下,解决方案不得包含循环。这不是1最佳最短路径的问题,但对于k最佳路径却成为问题-例如,考虑一条道路路线-从A到B的第二最短路径可能与1最佳路径相同,在某个地方的街区附近快速旅行。从数学上讲,这可能是最佳选择,但不是非常有用的解决方案。;-) 对于每个计算,我们可能需要即时重新加权边缘。边缘成本由几个因素的加权总和组成,最终要求(无论何时获得)都可以使用户指定自己对这些加权因子的优先级,从而改变边缘权重。这是一个相对较小的图(我们应该能够以几百KB表示它),因此将图克隆到内存中,应用重新加权,然后对克隆的图执行搜索可能是合理的。但是,如果有一种更有效的搜索方法,可以即时计算权重,那么我很感兴趣。 我正在研究Santos(K最短路径算法),Eppstein 1997(查找k最短路径)等中描述的算法。日元的算法很受关注,这主要是因为现有的Java 实现。我不害怕阅读研究论文,但是我认为值得抛开我的问题的细节,并要求提供指针以节省一些阅读时间。 而且,如果您有指向Java实现的指针,那就更好了。
13 java  algorithms 

1
是时候弃用同步,等待并通知了吗?
是否有一个场景(除了与古代JVM的兼容性以外),使用场景比synchronized使用Lock?谁能证明使用wait或使用notify较新的系统? 是否有任何算法必须在实现中使用其中之一? 我看到先前的问题涉及到此问题,但我想更进一步,实际上是deprecate这些问题。新设施已经消除了太多的陷阱,陷阱和警告。我只是觉得可能快要把它们标记为过时了。


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.