软件工程

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

5
为什么mergesort O(log n)?
Mergesort是分治法,是O(log n),因为输入被反复减半。但是它不应该是O(n),因为即使每个循环的输入减半,每个输入项也需要迭代以在每个减半的数组中进行交换?在我看来,这本质上是渐近O(n)。如果可能,请提供示例并说明如何正确计算操作!我还没有编码任何东西,但是我一直在网上寻找算法。我还附上了Wikipedia用来直观地显示mergesort如何工作的gif图像。
27 algorithms  big-o 

3
纸牌游戏AI的最佳技术
我正在尝试为纸牌游戏开发AI,但对于应该使用的技术/算法有些困惑。以下是有关游戏的一些假设: 在将纸牌分发给玩家之后,就没有随机性了。我的意思是,每个玩家都可以选择自己玩的纸牌,但不会像在游戏开始时分发纸牌那样进行随机处理。 已经播放过的纸牌有一定的限制。 赢得花样的玩家先玩。例如,玩家1玩纸牌,玩家2玩纸牌赢。然后玩家2玩纸牌,然后玩家1玩。 我知道很多提示/规则(例如,如果我知道玩家拥有A,B,C卡,那么我应该玩D),这有助于我赢得比赛。因此,我首先想使用贝叶斯网络描述这些规则。问题是我不知道分配任何概率,但是我可以使用玩过的游戏(针对人类)的历史来计算启发式算法。第二个问题是,我很可能不了解所有规则,并且AI需要一些隐式规则才能找到最佳游戏。 我不确定这是否是为此类纸牌游戏开发AI的好方法? 我也想知道是否还有其他最适合该问题的技术。例如,我查看了minimax(也许使用了修剪算法),但是对于这个问题将是一个很好的选择吗?我不确定,因为最重要的比赛是在游戏开始时,未知参数最高(大多数纸牌尚未玩过)。

1
JOIN vs.INNER JOIN和FULL OUTER JOIN
我知道INNER JOIN和之间有区别FULL OUTER JOIN,我可以看到,但是以下两个区别是什么:JOIN ... ON...和INNER JOIN...ON...和仍然JOIN...ON...vsFULL OUTER JOIN...ON... 原因是我认为也许只是在使用,JOIN正在搞乱我正在处理的查询,该查询已张贴在SO上,链接到此处的问题。 那么,实际设置操作本身之间的语法差异到底是什么? 谢谢,
27 sql  sql-server 

4
是什么决定哪些Javascript函数正在阻塞与非阻塞?
几年来,我一直在做基于Web的Javascript(香草JS,jQuery,Backbone等),最近我正在与Node.js做一些工作。我花了一段时间才能摆脱“非阻塞”编程的束缚,但是我现在已经习惯于将回调用于IO操作等等。 我了解Javascript本质上是单线程的。我了解节点“事件队列”的概念。我不明白是什么决定了单个javascript操作是“阻止”还是“非阻止”。我如何知道我可以依靠哪些操作来同步生成输出供我在以后的代码中使用,以及我需要将哪些回调传递给我以便在初始操作完成后处理输出?在某个地方是否存在异步/非阻塞的Javascript函数列表,以及同步/阻塞的Javascript函数列表?是什么阻止我的Javascript应用成为一种激烈的竞争状况? 我知道需要很长时间的操作,例如Node中的IO操作和Web上的AJAX操作,要求它们是异步的并因此使用回调-但是谁在确定什么才是“长时间”?这些操作中是否有某种触发器可以将其从正常的“事件队列”中删除?如果不是,那么它们与简单的操作(如为变量赋值或遍历数组)之类的简单操作有何不同?似乎我们可以依靠它们以同步方式完成操作? 也许我什至没有正确地考虑这一点-希望有人可以让我直率。谢谢!


2
圈复杂度范围[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 圈复杂度的类别是什么?例如: 1-5:易于维护 6-10:困难 11-15:非常困难 20+:接近不可能 多年以来,我一直认为10是极限。除此之外的任何事情都是不好的。我正在分析解决方案,并且正在尝试确定代码的质量。当然,圈复杂度不是唯一的衡量标准,但可以提供帮助。有些方法的圈复杂度为200+。我知道这很糟糕,但是我很想知道下限范围,就像上面的例子一样。 我发现了: 卡内基梅隆大学的上述参考值定义了圈复杂度值的四个粗略范围: 1至10之间的方法被认为简单易懂 10到20之间的值表示更复杂的代码,可能仍然可以理解;但是由于代码可能会占用更多的分支,因此测试变得更加困难 20或更高的值是具有大量潜在执行路径的典型代码,只有非常困难和努力才能完全掌握和测试 方法甚至更高,例如> 50,肯定是无法维护的 在为解决方案运行代码指标时,结果在25以下的所有项目均显示为绿色。我不同意这一点,但我希望得到其他输入。 是否有普遍接受的范围复杂性的范围列表?

3
x64寄存器名称中的“ R”代表什么?
我知道32位寄存器的名称就像16位寄存器一样,带有“ E”前缀以表示扩展。我一直认为这意味着从16位扩展到32位,尽管我从未见过明确声明。 我试图找出“ R”的含义,但是我的Google技术使我失败了。有人知道吗
27 architecture  x86 

6
您花费多少时间进行单元测试?
在我曾经工作过的一家公司中,高管们坚持认为单元测试的代码覆盖率必须达到99%或更高。这导致编写的测试多于代码。从字面上看,我们花了3天时间为一个类编写测试,该测试花了一天的时间才能实现。 结果,我学到了很多有关TDD,测试工具,实践等方面的知识。 在我后来工作的公司中,单元测试是个未知数。这是以前有人听说过的东西。我努力地向他们介绍了单元测试的概念,但是没有效果。 现在,作为一名个体经营者,我想知道- 真正需要花多少时间进行单元测试?主要是iPhone / Android开发人员,测试中应覆盖哪些部分代码?

7
什么是CRC的更快替代方案?
我正在从dsPIC到PC进行一些数据传输,并且正在对512字节的每个块进行8位CRC校验,以确保没有错误。启用CRC代码后,我的速度约为33KB / s,没有它,则为67KB / s。 有什么替代的错误检测算法可以检查出更快的速度?

9
您对代码注释中的句点/句号有何看法?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我在SO Tavern中看到了这个问题,所以我在这里发布问题。我认为这是一个有趣的问题。(当然,它不属于SO,但是我认为在这里还可以。) 您是否在代码注释中添加了句点(或者,正如OP所写,“句号”)? 为了保持相关性,为什么?

2
为什么惯例说数据库表名应该是单数而RESTful资源应该是复数?
至少在SQL中,数据库表名称应为单数,这是一个非常明确的约定。SELECT * FROM user;请参阅此问题和讨论。 RESTful API资源名称应为复数形式,这也是一个相当明确的约定。GET /users/123并POST /users看到这个。 在最简单的数据库支持的API中,URL中的资源名称将是表,URL中的数据元素和请求/响应主体将直接映射到DB中的列。从概念上讲,我认为通过此理论API对数据进行操作与直接通过SQL对数据进行操作之间没有区别。因此,user和之间的命名约定差异users对我来说没有意义。 从概念上来说,当REST API和SQL做相同的事情时,如何证明多元化的合理性?


1
调用函数,永远不要在C#中等待它
我的mvc4 Web应用程序中有一个控制器,其中有一个需要调用另一个函数的动作。该函数会发生什么,即返回值对我的操作并不重要。我如何才能调用该函数而从不等待其执行? 我认为可以通过异步完成此操作,但我的意思是不使用资源,只需调用函数就不要等待发生的任何事情。 请给我一些建议。
26 c#  .net  asp.net  asp.net-mvc 


7
将返回值的计算和return语句拆分为单行方法?
我曾与一位同事讨论过如何中断一条return语句以及该语句在两行中计算返回值。 例如 private string GetFormattedValue() { var formattedString = format != null ? string.Format(format, value) : value.ToString(); return formattedString; } 代替 private string GetFormattedValue() { return format != null ? string.Format(format, value) : value.ToString(); } 在代码方面,我在第一个变量中看不到任何值。对我来说,后者更清晰,尤其是对于较短的方法。他的论点是,前一种变体更易于调试-这是一个很小的优点,因为当由于断点而停止执行时,VisualStudio允许我们对语句进行非常详细的检查。 我的问题是,是否仍然需要编写不太清晰的代码,只是为了使调试一目了然?拆分计算和语句后,该变体还有其他参数return吗?

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.