软件工程

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

16
最常用的设计模式是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 您认为哪种设计模式最受欢迎?

28
您所工作的最佳经理人有哪些共同点?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我一直在听Scott Hanselman和Rob Conery的播客“ This Developer's Life”。 在最新一集中,他们讨论了人格特质: 1.0.4-刻薄。 人们在我们的行业中意味着什么?那好斗的呢?信心?有什么不同?您是否愿意为老板或禅宗大师配备钻探士官?我们与Cyra Richardson和Giles Bowkett交谈。 让我开始思考,您所服务的最佳经理人有哪些共同点? 编辑:为澄清起见,因为有几张近票,我对开发人员的管理者是否有共同的特质感兴趣,而这些特质不一定是其他职业的经理所需要的特质。 至于这是否与编程有关,那么我不想在与编程无关的网站上问这个问题,因为坦率地说,我对制作汤罐的人们并不感兴趣我对开发人员从他们的经理那里想要什么感兴趣
24 management 

2
多租户DB是否具有多个数据库或共享表?
是一个多租户数据库: 一个DB服务器对每个客户/租户有不同的(相同的)数据库/架构?要么 具有数据库/架构的DB服务器,客户/租户在其中共享同一表内的记录? 例如,在上面的选项1下,我可能在处有一个MySQL服务器mydb01.example.com,并且其中可能有一个customer1数据库。该customer1数据库可能有10个表,这些表可以为该特定客户(客户1)提供我的应用程序。它也可能有一个customer2数据库,其中有完全相同的10个表,但是只包含Customer#2的数据。它可能有一个customer3数据库,一个customer4数据库等等。 在上面的选项2中,将只有一个数据库/架构,例如myapp_db,又有10个表(与上面的表相同)。但是在这里,所有客户的数据都存在于这10个表中,因此他们“共享”了这些表。在应用程序层,逻辑和安全性控制着哪些客户可以访问这10个表中的哪些记录,并格外小心以确保客户#1永远不会登录到应用程序并看到客户#3的数据,等等。 这些范例中的哪一个构成了传统的“多租户” DB?如果两者都不是,那么有人可以提供一个多租户数据库示例吗(使用上述场景)?

6
在访问控制层之前先具有验证层是否可以
我正在创建一个API组合式Web应用程序,在此应用程序中,我们有不同的层,各自在工作。 第一层是验证用户输入的验证层,如果通过验证,则将其移至第二层(即访问控制层),否则返回错误消息 第二层是访问控制,它检查用户是否具有执行其想要执行的任务的权限,如果用户具有权限,则将请求移至下一层,否则返回错误消息 第三层是控制器层,我们具有应用逻辑 我的问题是在访问控制之前可以具有验证层吗?如果用户尝试执行用户没有权限的任务并且我们正在发回验证错误消息怎么办?用户将向端点发送请求并与验证层进行对话,并且仅在通过验证之后,他才会看到消息You can't access this! 我觉得很奇怪,所以这样还好吗?或者在基础设施方面我还有其他选择吗?

2
什么时候使用表达式身体强壮的成员?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 C#6引入了表达式主体成员,这些成员允许仅返回表达式结果的方法和属性中的简化代码: public override string ToString() { return string.Format("{0} {1}", _field1, _field2); } 变成: public override string ToString() => string.Format("{0} {1}", _field1, _field2); 由于我们现在有两种完全等效且有效的语法,因此必须使用一些经验法则来决定使用哪种语法。新的替代方法何时合适?
24 c# 

3
推荐的HTTP状态代码,用于“超出计划限制”响应
我正在为一个项目设计REST API,在该项目中,用户始终处于多个“计划”之一中-每个计划都定义了一些资源限制,例如帐户可能拥有的最大用户数或他们可以上传的最大数据数。一旦达到这些限制之一,用户就可以升级他们的计划(基本上是付费)以获得更多资源。 我想返回一个特殊的状态代码,该状态代码表示由于帐户资源限制而无法执行操作的情况,因此升级计划将解决此问题-例如,如果用户使用了其存储容量的100%,并尝试上传其他文件,他们将收到此回复。 候选人是恕我直言: 403 Forbidden -但是,我想区分这种情况和其他情况,即用户只是缺乏执行此操作的权限。 401 Unauthorized -不是一个好主意,我们正在使用它来解决与身份验证相关的问题。 402 Payment Required -有道理,但我担心使用非标准但保留的状态码 甚至不太标准的423 Locked东西,例如将来我们不太可能将其用于其他任何东西 另一种选择是使用一些非常标准的东西,例如,403但在响应主体中指出错误的细节。 我想知道您相信哪种方法(a)从长远来看效果最好,并且(b)将更好地坚持RESTful原则。
24 rest  api-design  http 

4
在两个不同数据库之间同步数据的最佳方法
我必须在结构完全不同的两个大型数据库之间实现数据同步。基本上,我需要获取有关第一个数据库中不同表中产品的一些数据,并将它们重新排列为第二个数据库中的其他表。 第一次创建我的产品并不是很复杂。但是我正在寻找一种方法来更新有关每种产品的某些特定数据,而不是所有数据。 显然,有一些问题使这个问题变得棘手。 除了选择查询,我不允许对源数据库执行任何操作。 在目标数据库上,我可以执行常规查询(选择,更新,插入,创建),但不能修改现有的结构/表。 目标数据库和源数据库的结构完全不同,表根本不一样,因此,实际上必须重新排列数据-比较表将无法工作。 目标数据库使用MySQL服务器-源可能是DB2。 任何地方都没有“更新时间”字段。 因此,整个过程需要在单个Python(理想情况下)脚本中完成。 我考虑根据要在目标数据库中更新的字段为每个产品创建一个哈希:md5(代码+描述+供应商+大约10个其他字段)。每天都会从源数据库中创建基于相同数据的新哈希。我将所有散列存储在一个表(项目代码,current_hash,old_hash)中,以提高性能。然后,如果新哈希与旧哈希不同,则比较并更新产品。 大约有50万种产品,所以我有点担心性能。 这是个好方法吗?

4
是什么阻止了锁上的竞争状况?
我了解什么是数据竞争,以及锁/互斥/信号灯如何防止它们的基础知识。但是,如果锁本身具有“竞赛条件”,会发生什么?例如,可能在同一应用程序中但在不同处理器上运行的两个不同线程尝试在完全相同的时间获取锁。 那会发生什么呢?为防止这种情况该怎么做?这是不可能的,还是完全不可能?还是等待发生的真实比赛条件?

5
为网站提供友好的URL与数据库ID的实际情况
我们有一个资源数据库,无论是产品,博客文章还是其他资源。我们需要为公共网站设计一个URL方案来解决它们。 这是绑定数据库ID的两个示例: https://www.youtube.com/watch?v=7FPS6llqhXw http://www.amazon.co.uk/gp/product/B000NHOMSQ 这是一个友好的示例: http://en.wikipedia.org/wiki/LED_circuit (瞥见我在那里的浏览生活) 我喜欢友好的URL,因为当您将鼠标悬停在电子邮件或文档中或在电子邮件或文档中看到URL时,您会知道URL末尾的含义。SEO更好,或者曾经是。 重命名文档或产品时会发生什么?是因为它已更改(Wiki可能不会更改,但我们的资源可能会更改)还是由于输入错误,对吗?我们的资源非常技术性,冗长且容易出错。 另外,我们有一个数据库ID,它是一个数字。让我们来看一个使用假装租赁商店的视频地址的想法: http://vidsyeah.com/video/sliding-doors/287171 该ID很明显,并用于数据库查找中。精细。 滑动门不是唯一的,只是从视频标题生成的,可以在GET上进行验证,因此,如果输入了滑动门,但与文档287171中的内容不匹配,则会响应404。 或者,也许它可以忽略不计,如果有人关心的话,它允许人类将他们喜欢的东西粘在里面。因此,该URL也将起作用: http://vidsyeah.com/video/anything-at_all/287171 如前所述,验证友好部分的问题是重命名或拼写错误的问题。如果名称更改,并且确实发生在我们的域中,我们不想破坏那里的URL,那么我们应该: 只是不验证友好部分。 验证,但在数据库记录中添加友好零件的“历史记录”,以便任何以前的友好ID仍然有效! 欢迎您的想法和想法。 路加

5
当所有开发都在分支机构上时,如何重构?
在我公司,我们所有的开发(错误修复和新功能)都在单独的分支机构进行。完成后,我们将其发送给质量检查人员(QA),由该人员在该分支机构对其进行测试,当他们给我们开绿灯时,我们会将其合并到我们的主分支机构中。这可能需要一天到一年的时间。 如果我们尝试压缩分支上的任何重构,我们将不知道它会“退出”多长时间,因此在合并回它时会引起许多冲突。 例如,假设我要重命名一个函数,因为我正在使用的功能正在大量使用此功能,而我发现它的名称确实不符合其用途(再次,这只是一个示例)。因此,我四处寻找该函数的每种用法,并将它们全部重命名为新名称,并且一切正常,因此将其发送给质量检查人员。 同时,正在进行新的开发,并且我的重命名函数在main分支的任何分支上都不存在。当我的问题重新合并后,它们都会崩溃。 有什么办法解决吗? 并不是说管理部门会批准仅重构的问题,因此必须将其与其他工作联系在一起。它不能直接在main上进行开发,因为所有更改都必须经过质量检查,而且没人愿意成为打破main的混蛋,以便他可以执行一些不必要的重构。

4
异步+等待==同步?
偶然发现了有关发出异步Web请求的帖子。 除了简单性之外,如果在现实世界中,您所要做的就是发出一个异步请求并在下一行等待它,这与首先发出一个同步调用不是一样吗?

4
类型系统:名义与结构,显式与隐式
我对标称系统和结构类型系统之间的差异感到困惑。有人可以解释他们的不同之处吗? 据我了解: 标称:类型兼容性基于类型名称。 结构:类型兼容性基于类型结构,例如,在C中,如果2个变量是具有不同名称但结构相同的结构类型,则它们的类型兼容。 现在讨论显式和隐式:为什么它不同于静态和动态类型?在静态类型中,类型是显式的,而在动态类型中,类型是隐式的。我对吗?


8
Unix和Linux在设计和其他方面有什么基本区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 我一直在读这句话: Linux是类Unix系统,但不是Unix。 我不知道两者之间的真正区别是什么。我知道Linux从Unix得到了很多想法,并且两者的许可证是不同的。除此之外,由于我都不是其中之一,因此我想知道它们在设计或其他重要方面是否存在基本差异。

6
如果可以在堆栈上更高效地完成所有工作,我们为什么需要堆?
这实际上与我昨天问的问题有关,为什么今天使用的应用程序同时需要堆栈和堆(以及为什么不能只使用堆而不同时使用堆,为了拥有简单的&唯一标准)。 但是,许多响应表明堆栈是不可替代的,这是因为与尝试分配/引用堆相比要快数百(或数千)倍。我知道,如果不使用Heap,动态存储分配就会出现问题,但是没有办法解决这一问题,或者没有办法在Stack上进行改进以使其能够处理动态内存分配吗?
24 stack  heap 

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.