Questions tagged «language-agnostic»

将此标签用于独立于任何特定编程语言的编程问题。

30
在不可变集合上使用不变异的“添加”方法的最佳名称是什么?
对不起,标题太小了-如果我能拿出一个简洁的标题,则不必提这个问题。 假设我有一个不变的列表类型。它具有一个操作Foo(x),该操作返回一个新的不可变列表,该列表以指定的参数作为结尾的额外元素。因此,要构建具有值“ Hello”,“ immutable”,“ world”的字符串列表,您可以编写: var empty = new ImmutableList<string>(); var list1 = empty.Foo("Hello"); var list2 = list1.Foo("immutable"); var list3 = list2.Foo("word"); (这是C#代码,如果您觉得语言很重要,那么我对C#建议最感兴趣。从根本上讲,这不是语言问题,但语言的成语可能很重要。) 重要的是现有列表不会被更改Foo-因此empty.Count仍将返回0。 达到最终结果的另一种(更惯用的)方法是: var list = new ImmutableList<string>().Foo("Hello") .Foo("immutable") .Foo("word"); 我的问题是:Foo的最佳名字是什么? 编辑3:正如我稍后会透露的那样,类型的名称实际上可能不是ImmutableList<T>,这使位置很明确。而是想象TestSuite它是不可变的,因为它所包含的整个框架都是不可变的... (编辑结束3) 到目前为止,我已经提出的选项: Add:.NET中常见,但表示原始列表已更改 Cons:我相信这是功能语言中的正常名称,但对没有使用这些语言经验的人来说毫无意义 Plus:到目前为止,我最喜欢的这并不意味着对我有所改变。显然,这在Haskell中也使用过,但期望值稍有不同(Haskell程序员可能希望它将两个列表加在一起,而不是将一个值添加到另一个列表中)。 With:与其他一些不可变的约定一致,但与IMO的“附加性”并不完全相同。 And:不是很描述。 +的运算符重载:我真的不是很喜欢。我通常认为运算符应仅应用于较低级别的类型。我愿意被说服! 我要选择的标准是: 给出方法调用结果的正确印象(即它是带有额外元素的原始列表) 尽可能清楚地表明它不会对现有列表进行变异 如上面的第二个示例中所述,当链接在一起时听起来很合理 如果我不够清晰,请询问更多详细信息... 编辑1:这是我倾向于Plus的原因Add。考虑以下两行代码: list.Add(foo); list.Plus(foo); …

30
多少个参数太多?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 4年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 例程可以有参数,这不是新闻。您可以根据需要定义任意数量的参数,但是参数太多会使您的例程难以理解和维护。 当然,您可以使用结构化变量作为解决方法:将所有这些变量放在单个结构中,然后将其传递给例程。实际上,使用结构简化参数列表是Steve McConnell在Code Complete中描述的技术之一。但正如他所说: 谨慎的程序员避免捆绑数据超出逻辑上的必要性。 因此,如果您的例程中有太多参数,或者您使用结构来掩盖大参数列表,则可能是您做错了什么。也就是说,您不会使耦合松动。 我的问题是,何时可以考虑参数列表太大?我认为超过5个参数太多了。你怎么看?

5
文档名称?路径名?基本名称?路径片段的命名标准
当我处理路径和文件名时,我总是陷入困境,因为我没有通用的命名系统。 我需要提出一个命名标准并坚持下去,并且我想与他人保持清楚和一致,因此我愿意学习规范的答案。 考虑这个玩具问题:(以Windows为例,但希望答案应该与平台无关) 您将获得一个文件夹的全名:C:\ users \ OddThinking \ Documents \ My Source。您想将文件夹移到下面,然后将所有.src编译为.obj。 在某些时候,您正在查看以下字符串。 C:\users\OddThinking\Documents\My Source\Widget\foo.src 那么,您将使用哪些标识符名称作为零件? A) foo B) foo.src C) src D) .src E) C:\users\OddThinking\Documents\My Source\ - i.e. the top of the tree. F) Widget\foo.src - i.e. the path from the top of the tree to the leaf. G) …

30
递归还是迭代?
如果我们在算法可以使用相同目的的情况下使用循环而不是递归,反之亦然吗?例如:检查给定的字符串是否是回文。我已经看到许多程序员使用递归来证明简单的迭代算法何时可以胜任。编译器在决定使用什么时起重要作用吗?


20
什么时候应该使用Debug.Assert()?
我已经获得CS学位,现在已经是专业软件工程师大约一年了。我已经在C ++和C中了解断言了一段时间了,但是直到最近才完全不知道它们存在于C#和.NET中。 我们的生产代码不包含任何断言,我的问题是…… 我应该在生产代码中开始使用Asserts吗?如果是这样,什么时候最合适使用它?这样做更有意义吗 Debug.Assert(val != null); 要么 if ( val == null ) throw new exception();




30
炸弹掉落算法
我有一个n x m由非负整数组成的矩阵。例如: 2 3 4 7 1 1 5 2 6 2 4 3 4 2 1 2 1 2 4 1 3 1 3 4 1 2 1 4 3 2 6 9 1 6 4 “投下炸弹”将目标单元及其所有八个邻居的数量减少一,最小为零。 x x x x X x x x x 有什么算法可以确定将所有像元减少到零所需的最小炸弹数量? B选项(由于我不是认真的读者) …

11
当内存不足以引发OutOfMemoryError时会发生什么?
我知道每个对象都需要堆内存,而堆栈上的每个基本/引用都需要堆栈内存。 当我尝试在堆上创建对象并且没有足够的内存来执行此操作时,JVM 在堆上创建一个java.lang.OutOfMemoryError并将其扔给我。 因此,隐式地,这意味着JVM在启动时会保留一些内存。 当此保留的内存用完(肯定会用完,请阅读下面的讨论)并且JVM堆上没有足够的内存来创建java.lang.OutOfMemoryError实例时,会发生什么? 它只是挂了吗?还是null因为newOOM实例没有存储空间而将其扔给我? try { Object o = new Object(); // and operations which require memory (well.. that's like everything) } catch (java.lang.OutOfMemoryError e) { // JVM had insufficient memory to create an instance of java.lang.OutOfMemoryError to throw to us // what next? hangs here, stuck forever? …

30
每个开发人员应该对数据库了解什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 无论我们是否喜欢,我们中的大多数(如果不是大多数)开发人员要么定期使用数据库,要么可能有一天需要使用数据库。考虑到野外滥用和滥用的数量以及每天与数据库相关的问题的数量,可以公平地说,开发人员应该知道某些概念,即使他们没有设计或使用它们今天的数据库。所以: 对于数据库,开发人员和其他软件专业人员应了解哪些重要概念? 回应准则: 保持简短。 每个答案一个概念是最好的。 要具体。 “数据建模”可能是一项重要技能,但这究竟意味着什么? 解释你的理由。 为什么您的概念很重要?不要只说“使用索引”。不要陷入“最佳实践”中。说服您的听众去学习更多。 支持您同意的答案。 首先阅读别人的答案。一个高等级的答案比两个低等级的答案更有效。如果还有更多要添加的内容,请添加评论或引用原始内容。 不要仅仅因为它不适用于您而拒绝投票。 我们都在不同的领域工作。此处的目的是为数据库新手提供指导,以使他们对数据库设计和数据库驱动的开发有充分的基础和全面的了解,而不是争夺最重要的头衔。


9
什么是自以为是的软件?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我经常看到有人说某些软件“很自以为是”,或者Microsoft倾向于编写“不受质疑”的框架。这到底是什么意思?

14
就地基数排序
这是一个很长的文字。请多多包涵。归根结底,问题是:是否存在可行的就地基数排序算法? 初步 我有很多小的固定长度字符串,它们只使用我要排序的字母“ A”,“ C”,“ G”和“ T”(是的,您猜对了:DNA)。 目前,我在STL的所有常见实现中都std::sort使用了introsort。这很好。但是,我相信,基数排序适合我的问题集完美,应该工作多在实践中更好。 细节 我已经用一个非常幼稚的实现测试了这个假设,对于相对较小的输入(大约10,000个),这是正确的(至少要快两倍以上)。但是,当问题规模变大(N > 5,000,000)时,运行时间将大大降低。 原因很明显:基数排序需要复制整个数据(实际上,在我的幼稚实现中不止一次)。这意味着我已经在主内存中放入了大约4 GiB,这显然会降低性能。即使没有,我也负担不起这么大的内存,因为问题的大小实际上变得更大了。 用例 理想情况下,该算法应适用于2到100之间的任何字符串长度,适用于DNA以及DNA5(允许附加通配符“ N”),甚至适用于带有IUPAC 模糊代码的 DNA (导致16个不同的值)。但是,我意识到所有这些情况都无法解决,因此我对速度的提高感到满意。该代码可以动态决定要调度到哪个算法。 研究 不幸的是,维基百科上关于基数排序的文章是没有用的。关于就地变体的部分是完整的垃圾。在上基数NIST-DADS部分排序旁边不存在的。有一篇听起来很有希望的论文,叫做“ 高效自适应就地基数排序”,它描述了算法“ MSL”。不幸的是,这篇论文也令人失望。 特别是,有以下几点。 首先,该算法包含一些错误,并且有很多无法解释的地方。特别是,它没有详细介绍递归调用(我只是假设它增加或减少了一些指针来计算当前的shift和mask值)。同样,它使用这些函数dest_group并且dest_address没有给出定义。我看不到如何有效地实现这些功能(也就是说,在O(1)中;至少dest_address是不平凡的)。 最后但并非最不重要的一点是,该算法通过将数组索引与输入数组内的元素交换来实现就位。显然,这仅适用于数值数组。我需要在字符串上使用它。当然,我可以拧紧强类型,并假设内存可以容忍我存储不属于它的索引。但这仅在我可以将字符串压缩到32位内存(假设32位整数)的情况下有效。那只是16个字符(在16> log(5,000,000)的那一刻,让我们忽略它)。 一位作者的另一篇论文没有给出任何准确的描述,但它给出了MSL的运行时间为亚线性的情况,这是完全错误的。 回顾一下:是否有希望找到一个可行的参考实现,或者至少一个对DNA字符串起作用的就地基数排序的良好伪代码/描述?

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.