软件工程

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

2
数据结构和算法之间是什么关系?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我一直在寻找有关数据结构的好的在线课程,但发现Google还会返回算法课程的结果,其中包含以下内容: 在本课程中,您将学习算法设计的一些基本原理:分而治之方法,图形算法, 实用的数据结构(堆,哈希表,搜索树),随机算法等等。[资源] 和 在本课程结束时,您将了解为图形和其他重要数据结构设计新算法 并评估这些算法的效率所需的关键概念。[资源] 和 本课程介绍了计算问题的数学建模。它涵盖了用于解决这些问题的通用算法,算法范例和数据结构。[资源] 我的问题是:算法和数据结构是否紧密相连,这意味着它们必须被一起理解,或者一个主题比另一个主题更基础? 编辑:对于那些投票赞成关闭这个问题的人,您能告诉我为什么以及也许如何改善这个问题吗?学习提出正确的问题是教育过程的一部分。

6
调用函数时不知道函数的参数名称
这是我想听听您的想法的编程/语言问题。 我们已经制定了约定(大多数程序员应该遵循),这些约定不是语言语法的一部分,但是可以使代码更具可读性。当然,这些总是一个辩论的问题,但是至少有一些核心概念是大多数程序员认为可以接受的。适当地命名变量,一般来说命名,使行的长度不会过长,避免使用长函数,封装等那些东西。 但是,有一个问题我尚未找到任何人对此发表评论,而这可能是其中最大的问题。这是调用函数时参数匿名的问题。 函数源于数学,其中f(x)具有明确的含义,因为函数具有比编程中通常更为严格的定义。数学中的纯函数比编程中的函数执行的功能要少得多,并且它们是一种更精致的工具,它们通常只接受一个参数(通常是一个数字),并且总是返回一个值(通常是一个数字)。如果一个函数接受多个参数,则它们几乎总是只是该函数域的额外维度。换句话说,一个论据并不比其他论据更重要。当然,它们是明确排序的,但是除此之外,它们没有语义排序。 但是,在编程中,我们拥有更多的自由定义函数,在这种情况下,我认为这不是一件好事。常见的情况是,您定义了这样的函数 func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {} 查看定义,如果函数编写正确,则完全清楚是什么。在调用该函数时,您甚至可能在您的IDE /编辑器中出现了一些智能/代码完成魔术,这些魔术将告诉您下一个参数应该是什么。可是等等。如果我在实际编写呼叫时需要此功能,这里是否不缺少某些内容?读代码的人没有IDE的好处,除非他们跳转到定义,否则他们不知道作为参数传递的两个矩形中的哪个用于什么。 问题不仅仅如此。如果我们的参数来自某个局部变量,那么在某些情况下,我们甚至不知道第二个参数是什么,因为我们只能看到变量名称。以这行代码为例 DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2]) 使用不同的语言可以在不同程度上缓解这种情况,但是即使使用严格类型的语言,即使您明智地命名变量,在将变量传递给函数时,您甚至都不会提到变量的类型。 与编程通常一样,此问题有很多潜在的解决方案。许多已经以流行语言实现。例如,C#中的命名参数。但是,我所知道的全部都有明显的缺点。命名每个函数调用中的每个参数都不可能导致可读代码。几乎感觉像是我们正在超越纯文本编程为我们提供的可能性。我们几乎在每个领域都从仅文本迁移而来,但是我们仍然编写相同的代码。需要在代码中显示更多信息吗?添加更多文本。无论如何,这有点切线,所以我在这里停止。 我对第二个代码段的回答是,您可能首先将数组解压缩为一些命名变量,然后使用它们,但是变量的名称可能意味着很多事情,并且其调用方式并不一定会告诉您应该使用的方式在调用函数的上下文中进行解释。在本地范围内,您可能有两个名为leftRectangle和rightRectangle的矩形,因为这是它们在语义上表示的,但是在扩展给函数时并不需要扩展到它们表示的内容。 实际上,如果变量是在被调用函数的上下文中命名的,则所引入的信息要少于该函数调用可能带来的信息,并且在某种程度上会导致代码变差。如果您有一个过程产生一个矩形,该过程存储在rectForClipping中,然后另一个过程提供了rectForDrawing,则对DrawRectangleClipped的实际调用只是一种仪式。这行没有什么新意,只是在那里,因此即使您已经用命名解释了它,计算机也知道您到底想要什么。这不是一件好事。 我真的很想听听对此的新见解。我确定我不是第一个将其视为问题的人,那么如何解决呢?

8
为什么我们必须使用div?
今天早晨,当我写一些html和haml时,我发现使用div的方法很荒谬。为什么不隐含div?试想一下,如果: <div class="hero-img"> <img src="http://whatever.com/this.jpg"> </div> 是这样的: <hero-img> <img src="http://whatever.com/this.jpg"> </hero-img> 如果假定元素的“ div class”部分,则HTML会更加语义化,并且使用匹配的结束标记将具有无限的可读性! 这类似于HAML,其中我们具有: .content Hello, World! 变成: <div class='content'>Hello, World!</div> 在我看来,要在浏览器中运行此功能,唯一要做的就是浏览器可以开始解释每个元素,而没有现有的html元素定义暗示<div class="<element name>">。 这可能是完全向后兼容的;对于CSS和jQuery选择器等,“ div.hero-img”仍然可以使用,并且是选择元素所需的语法。 我知道新的Web组件规范,但是比这里建议的要复杂得多。您能想象看到一个网站的源代码并看到类似HTML的代码会多么令人愉快吗? 那么,为什么我们必须使用div? 如果您查看Mozilla的html5元素列表,则每个元素都有语义,然后我们进入<div>并显示: “表示没有特殊含义的通用容器。” ..然后,他们列出要添加到html5中的任意元素,例如<details>。 当然,如果将隐含divs的概念添加到html规范中,则将需要十年时间成为标准,这是Web时间中的一百万年。 因此,我认为一定有一个很好的理由尚未发生。请给我解释一下!
13 html  html5 

9
在实际工作中如何使用典型面试问题中使用的技能?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 对于SQL和C#应用程序开发工作,面试官通常使用纯C和指针询问有关树,图形和链表遍历的问题。在工作的三年中,我从未真正需要 找到给定节点右侧第一个节点的路径,该路径是给定节点的倍数 例如 我看到这些技能可能用于需要编写编译器,驱动程序并在OS内核上工作的工作中。除此之外,还使用这些技能吗?
13 interview 

3
在垃圾回收中使用哈希表是否可以解决标记和清除问题?
在mark-sweep-compact垃圾回收算法中,重新定位对象时必须停止工作,因为引用图变得不一致,并且必须替换指向该对象的所有引用的值。 但是,如果您有一个哈希表,其中对象ID为键,指针为值,并且引用将指向该ID而不是对象地址...那么固定引用将仅需要更改一个值,并且仅当对象时才需要暂停试图在复制期间写入... 我的思路有误吗?

2
我应该将“计算”值公开为属性还是方法?
我有一个C#类,它表示Web内容管理系统中的内容类型。 我们有一个字段,允许Web内容编辑器输入HTML模板以显示对象的显示方式。它基本上使用把手语法将对象属性值替换为HTML字符串: <h1>{{Title}}</h1><p>{{Message}}</p> 从类设计的角度来看,我应该将格式化的HTML字符串(带有替换)作为属性或方法公开吗? 作为属性的示例: public class Example { private string _template; public string Title { get; set; } public string Message { get; set; } public string Html { get { return this.ToHtml(); } protected set { } } public Example(Content content) { this.Title = content.GetValue("title") as string; this.Message …

5
根据有用性进行单元测试的类型
从价值的角度来看,我在实践中看到两组单元测试: 测试一些非平凡逻辑的测试。(在实现之前或之后)编写它们会发现一些问题/潜在错误,并有助于您确定将来逻辑发生变化时的情况。 测试一些非常琐碎的逻辑的测试。这些测试比测试代码更像文档代码(通常带有模拟)。这些测试的维护工作流不是“某些逻辑改变了,测试变成了红色-感谢上帝,我编写了这个测试”,而是“一些琐碎的代码改变了,测试变成了假否定-我必须维护(重写)该测试而没有获得任何收益” 。在大多数情况下,这些测试不值得维护(出于宗教原因除外)。根据我在许多系统中的经验,这些测试占所有测试的80%。 我正在尝试找出其他人对单元测试按值分离以及如何与我的分离相对应的想法。但是我最常看到的是全职TDD宣传或测试都是无用的,只是编写代码宣传。我对中间的东西感兴趣。欢迎您发表自己的想法或参考文章/论文/书籍。
13 unit-testing  tdd 

8
UX设计师提前完成一个Sprint
我们的用户体验设计师通常在Sprint X中有一个故事,开发人员将在Sprint X + 1中实现(用户体验设计师和开发人员/测试人员在一个团队中)。我认为这是有道理的,因为如果您没有屏幕模型和清晰的规格,则无法在Sprint计划期间真正估算工作。 但是,在Scrum中,您只能拥有能够为用户带来价值的用户故事。在我们的案例中,UX设计故事没有提供这样的价值(它们更像是积压的整理活动)。同样,Scrum教练通常不建议在Sprint开始之前具有完整的规格,这是我很难理解的建议。 那么您认为我们的方法有什么缺点吗?它似乎对我们有用,但是有点违背Scrum原则。

5
如何解决JSON和Entity的循环引用问题
我一直在尝试创建一个网站,该网站将MVC和JSON用于我的表示层,以及用于数据模型/数据库的Entity框架。我的问题与将模型对象序列化为JSON有关。 我正在使用代码优先方法创建数据库。在执行代码优先方法时,一对多关系(父/子)要求子对父有引用。(示例代码是我的错字,但您会看到图片) class parent { public List<child> Children{get;set;} public int Id{get;set;} } class child { public int ParentId{get;set;} [ForeignKey("ParentId")] public parent MyParent{get;set;} public string name{get;set;} } 通过JsonResult返回“父”对象时,由于“子”具有父类的属性,因此引发循环引用错误。 我已经尝试了ScriptIgnore属性,但是无法查看子对象。在某些时候,我将需要在父子视图中显示信息。 我试图为没有循环引用的父级和子级创建基类。不幸的是,当我尝试发送baseParent和baseChild时,它们被JSON分析器读取为它们的派生类(我很确定此概念正在使我逃避)。 Base.baseParent basep = (Base.baseParent)parent; return Json(basep, JsonRequestBehavior.AllowGet); 我想出的一个解决方案是创建“查看”模型。我创建数据库模型的简单版本,其中不包含对父类的引用。这些视图模型每个都有返回数据库版本的方法和一个将数据库模型作为参数的构造函数(viewmodel.name = databasemodel.name)。尽管此方法有效,但似乎是强制的。 注意:我在这里发布是因为我认为这值得讨论。我可以利用其他设计模式来解决此问题,也可以像在模型上使用其他属性一样简单。在搜索中,我没有找到克服此问题的好方法。 我的最终目标是拥有一个很好的MVC应用程序,该应用程序充分利用JSON与服务器进行通信并显示数据。同时跨层维护一致的模型(或尽我所能)。

2
带有额外列的单个表与具有重复模式的多个表
我正在一个项目上,在某个时候,我需要决定是否要在数据库中的单个表中包含不是每个记录都使用的多列,或者是多个表具有重复的模式。 我正在创建一个体育信息应用程序,它可以处理多种体育运动。例如,我们可以处理NBA,NHL,MLB,NFL。每种运动都有非常相似的概念-球队,日程表,伤害,球员信息。 当然,我们的数据源并不能为我们提供同一模式中的每条数据。每个运动都有一个不同的架构,我们从供应商那里接收数据。 因为没有足够的时间(客户需求)对数据源进行前期分析以确定共同点,所以我对冲了自己的赌注并进行了“安全下注”,为每种运动制作了单独的表格,而不是一组单独的表格体育使用。 结果是在多个表中复制了架构,因此也复制了数据库的接口(例如存储的proc)。我有一些类似NBA_Game,NFL_Game,NBA_Team,NFL_Team等的东西。每个表可能有一些其他人没有的属性,并且有几个是共享的。在4项或5项运动中,连续进行5-10桌。我仍然不确定这是否完全是一件坏事-另一种选择是,拥有一组表,表上具有并非所有运动项目都会使用的属性,它本身也可能很笨拙。 有谁做过这种设计的陷阱,可以在这里分享他们的经验吗?也许可以帮助我现在知道的事情,而不是刻苦学习的东西?您是否以另一种方式完成了工作,即拥有一个大表/一组表,并且使用了并非每条记录都会使用的列?您遇到了什么陷阱? 过去是否使用过一些替代方法,例如表继承,效果更好? 谢谢

6
在Scrum中,谁验证“完成”?
我是组织中的质量检查/测试经理,直到今天,我仍然验证软件的质量(编写和执行的测试以及已修复的错误)。谁将在Scrum中对此进行验证?我怎么知道团队编写并执行了所有正确的测试?另一方面,我担心如果我继续进行验证,团队将感觉不到足够的权力。但是我需要一些验证过程来确定“完成”确实是“完成”。你有什么建议?
13 scrum 

4
公司未加密密码时该怎么办
背景 我被合同帮助一家公司维护他们的服务器。我从事一些较小的PHP项目,但也研究性能问题,最近还扫描了黑客日志。 这些家伙已经运行了一段时间的服务器,并且在最后一刻拥有所谓的遗留应用程序。它使用魔术引号,全局变量(允许$id被覆盖$_GET['id']),使用.htaccess作为它们在某些情况下的唯一安全性,您可以为其命名。安全和编程的噩梦。 过去,我们一直被黑客入侵,大多数情况下是通过SQL注入进行攻击的,这种注入会运行SLEEP(99999999)命令并充当DOS攻击。幸运的是,他们没有运行“小鲍比表”, XKCD:http://xkcd.com/327/ 因此,我将他们易受攻击的SQL语句mysql_query()(不是mysqli)重新编写为PDO事务。我也分析查询为SLEEP和UNION,我们不使用,但注射有。到目前为止,一切都很好。 最新一期 最近,我们被告知,用户数据库中的记录正在发生变化,例如用户的电子邮件地址更改为垃圾邮件发送者的电子邮件地址。 我注意到他们的专栏没有last_modified专栏,所以我们甚至都不知道何时更改了它们,更不用说是谁了。我添加了该专栏,但这仅是第一步。 当我查看此表时,我发现密码没有被添加盐分甚至是散列,只是保存为纯文本。 客户沟通 作为承包商,我如何才能在整个情况中与他们接洽,而又不会像疯子一样挥舞手臂?有什么建议吗?我当时在想一种冷静的方法, 问题#1 概要 为什么这是一个问题 如果不固定怎么办 建议的修复 问题#2 概要 为什么这是一个问题 如果不固定怎么办 建议的修复
13 php  apache  security  mysql 

2
为什么用Handle()分隔类CommandHandler而不是Command本身的处理方法
我有一部分使用S#arp Architecture实施的CQRS模式,如下所示: public class MyCommand { public CustomerId { get; set; } // some other fields } public class MyCommandHandler<MyCommand> : ICommandHandler<MyCommand, CommandResult> { Handle(MyCommand command) { // some code for saving Customer entity return CommandResult.Success; } } 我想知道为什么不只Command包含数据和处理方法的类?这是一种可测试性的好处,您需要与命令属性分开测试命令处理逻辑吗?还是某些频繁的业务需求,您需要由不同的实现来处理一个命令ICommandHandler<MyCommand, CommandResult>?

5
如何模拟REST API?
我正在研究一个新项目,该项目将从第三方REST API查询数据。这是用于实时体育数据供稿,因此,供稿仅在实际进行比赛时才起作用。 尽管第三方提供了很好的文档(XSD等),但是他们无法模拟游戏的进行,因此要测试我针对该API编写的代码,我必须等待实际的游戏进行。 我唯一的办法就是自己编写代码来模拟游戏,但这似乎需要大量工作。您将如何处理?
13 api  rest 

2
Haskell中是否删除了类型?
Haskell的“泛型函数”概念与常见的lisp有一些明显的相似之处-既没有Haskell的经验,也没有常见的lisp,在这里我可能是非常近似的。这意味着可以定义一种通用to_string工具来定义所有类型的字符串表示形式。当然,必须在特殊情况下定义to_string功能,但是有一个函数的签名为α → string。 是否像在OCaml中一样在Haskell中删除了类型?如果是,那么Haskell中“泛型函数”的实现与普通lisp的实现有何不同,后者在普通类型中是动态的,因此不会被擦除? 我了解实现细节是特定于编译器的,但是可能有许多或所有实现共有的规定。

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.