Questions tagged «language-agnostic»

该标签用于非特定于编程语言或环境的问题。

2
如何使集群仅运行一次任务?
如果您有一项任务只想在服务器群集上仅运行一次,那么定期执行此操作的最佳方法是什么?在这种情况下,群集的定义是2台或更多台具有负载均衡器后面的分布式会话的相同服务器。 用例:您有一项运行成本很高的任务,该任务每X小时只能运行一次。例如,此作业可以遍历一堆记录并更新其状态。 最糟糕的情况是,两次运行作业会使您的数据无效。 最好的情况是该作业利用了所有服务器上的资源。 要求摘要: 即使节点之一关闭,该作业仍必须运行。 每个计划只能运行一次作业。 如果在同一时间或重叠时间安排了多个作业,则正在运行的作业数将在服务器之间平均分配。 机器必须具有相同的代码库,并且必须通过NTP进行同步。 根据环境变量,节点之间的配置可能有所不同。 作业必须按时开始或在指定时间的给定间隔内开始。(例如说5分钟) 可能的解决方案 将一个节点设置为主节点,这违反了上面的1,因此无效。 要求负载均衡器平衡以启动该作业。不幸的是,这具有副作用,如果您同时运行多个作业,则它们可能都由同一台机器运行。 这必须在Java的servlet容器中运行。但是,它不是我正在寻找的工作的编码。 当然,这是已知最佳解决方案可以解决的问题。 相关问题。 /programming/5949038/schedule-job-executes-twice-on-cluster 这不是重复的,因为根据上述5个要求,解决方案还不够。最高支持的解决方案存在种族问题,第二种解决方案违反了要求3

7
设计:回调到父类
在使用子对象对对象进行建模时,通常通过合成将子对象包括在内,作为父类的成员。但是有时候孩子需要告诉父母一些事情,他们需要调用父母的函数。使用C ++如何做到这一点?一些选项是: 使父类成为全局类,因此子对象将能够调用父对象的成员函数。 将父对象作为指针或引用注入到每个子对象中。然后,当子项需要告诉父对象某些内容时,它总是可以这样做,因为它具有可以使用的成员变量。 还有什么其他方法可以做到这一点?这种事情是否有通用的设计模式或名称? 请注意,我对C ++中的想法和解决方案感兴趣,因为在其他面向对象的语言中,细节将有所不同。例如,上面的第2点提到了“指针或引用”,并且两者都只能在C ++中使用。C ++具有其他语言没有的语言功能,因此解决该问题的方法的实现可能会合并这些语言功能,从而使该解决方案与某人使用另一种语言可能提出的解决方案有所不同。

3
处理库中可见性的常用方法是什么?
这个问题何时使用私人和当类使用受保护的让我去思考。(由于与之相关,我还将这个问题扩展到最终的类和方法。我使用Java编程,但是我认为这与每种OOP语言都相关) 接受的答案是: 一个好的经验法则是:使所有内容尽可能私密。 还有一个: 除非您需要立即对它们进行子类化,否则将所有类定为最终类。 使所有方法最终化,除非您需要立即子类化并覆盖它们。 除非需要在方法主体中进行更改,否则将所有方法参数都设置为最终值,这在大多数情况下还是很尴尬的。 这非常简单明了,但是如果我主要是编写库(GitHub上的开源)而不是应用程序怎么办? 我可以说很多图书馆和情况, 库以开发人员从未想过的方式扩展 由于可见性限制,必须使用“类加载器魔术”和其他技巧来完成此操作 库的使用方式不是为它们而建,而是以所需的功能“入侵” 由于存在小问题(错误,功能缺失,“错误”行为),无法使用库,原因是可见度降低,无法更改 无法解决的问题导致了巨大的,丑陋的和错误的解决方法,在这些解决方法中,覆盖简单的功能(私有或最终的)可能会有所帮助 实际上,我开始命名它们,直到问题过长,然后我决定将其删除。 我喜欢这样的想法,即没有多余的代码,比可见性更多的可见性,比需求更多的抽象性。当为最终用户编写应用程序时,这可能会起作用,因为最终代码仅由编写该应用程序的人员使用。但是,如果代码打算供其他开发人员使用,而原始开发人员则不可能事先考虑到每种可能的用例,并且很难/不可能进行更改/重构,那么这将如何保持呢? 既然大型开源库不是什么新鲜事物,那么在使用面向对象语言的此类项目中处理可见性的最常用方法是什么?

4
是否有适用于所有货币(甚至包括不同于美元,欧元和英镑的货币)的单一数据表示形式?
我可以找到许多有关用于以某种货币表示金额的库的问题。关于为什么不应该将货币存储为IEEE 754浮点数的古老问题。但我似乎找不到更多。当然,在现实世界中,有关货币的知识还有很多。我对您需要了解以物理方式表示它的内容特别感兴趣(例如,对于美元,您永远不会低于0.01美元的精度,允许以整数美分表示)。 但是,当您知道的唯一的货币是西方流行的货币(例如美元,欧元和英镑)时,就很难对程序的通用性做出假设。从纯粹的程序设计角度来看,还有哪些相关知识?我不关心转换主题。 特别是,我们需要知道什么才能能够以某种货币存储值并打印出来?


5
通过可能无用的异常处理来增强代码
以防万一代码的另一部分没有正确编码,是实现无用异常处理的好习惯吗? 基本例子 一个简单的,所以我不会让每个人都放松:)。 假设我正在编写一个应用程序,它将显示一个人的信息(姓名,地址等),数据是从数据库中提取的。假设我是UI部分的编码人员,而其他人正在编写DB查询代码。 现在,假设您的应用程序规范说明如果该人员的信息不完整(例如,数据库中缺少该名称),则对查询进行编码的人员应通过为缺失字段返回“ NA”来处理此问题。 如果查询的编码不正确怎么办?如果编写查询的人为您处理了不完整的结果,并且当您尝试显示信息时一切都崩溃了,因为您的代码不准备显示空的东西怎么办? 这个例子很基础。我相信你们大多数人会说“这不是您的问题,您不应对这次崩溃负责”。但是,仍然是崩溃的一部分。 另一个例子 假设现在我是编写查询的人。规范与上面的说法不同,但是在向数据库中添加人员时,编写“插入”查询的人应确保所有字段均完整,以避免插入不完整的信息。我应该保护我的“选择”查询以确保为UI家伙提供完整的信息吗? 问题 如果规范中没有明确指出“此人是负责处理这种情况的人”,该怎么办?如果第三方实现了另一个查询(类似于第一个查询,但在另一个DB上)并使用您的UI代码显示该查询,但在他的代码中不处理这种情况怎么办? 即使我不是应该处理这种情况的人,我也应该采取必要的措施来防止可能的崩溃吗? 我不是要寻找“他是崩溃的负责人”之类的答案,因为我不想在这里解决冲突,我想知道,如果我保护我的代码免受情况影响,这不是我的责任处理?在这里,一个简单的“如果空着做某事”就足够了。 通常,此问题解决了冗余异常处理。我之所以这样问,是因为当我一个人在一个项目上工作时,我可能会在连续的函数中编写2-3次类似异常处理的代码,以防万一我做错了什么,让一个糟糕的情况解决了。


8
什么时候为小型重复代码段创建函数/方法,这是什么好代码实践?
在编写大型程序的过程中,我曾多次问过将代码放入一个函数或方法中有意义多少次复制和粘贴,什么是良好的经验法则?我一直在使用四行或更多行的经验法则,出现两次以上,然后创建包含该代码的简单函数/方法。您能想到更好的做法还是提供任何指示?这更多的是一般设计模式问题,而不是语言特定的问题。

7
为什么学校不提供调试器?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 关于SO的另一个作业问题。似乎绝大多数学生都不知道调试器是什么或如何使用调试器。我觉得知道如何使用调试器与编程的其他基础几乎一样重要。 问题是不应该进行调试吗?如何在编程基础知识的基础上教授现代调试工具的使用方法?如果不是,为什么不呢。

5
函数式编程只是有所不同,还是真的更难?
函数式编程只是有所不同,还是真的更难? 假设某人以前从未学习过编程,而是接受过函数编程的培训。VS从未接触过编程的人,并且接受过命令式编程的教育。他会发现哪个更强硬?还是一样? 我的问题:说现在的问题是骆驼式输入 这样qwe_asd_zxc_rty_fgh_vbn变成qweAsdZxcRtyFghVbn 程序方式是: 沿 _ 遍历数组,跳过第一项 对于每个条目,我们将首字母大写 将结果结合在一起 功能方式是: 如果找不到_回报input 切掉input第一个_(这样我们就可以得到qwe和asd_zxc_rty_gfh_cvb) 大写的第一个字母head并与f(tail) 好吧,如果您有功能背景并且在过程编程方面有丰富的经验,我想问:确定过程方式是否需要花费更长的时间,或者确定函数方式需要更长的时间? 如果您有程序背景,但是有多年的函数式编程经验,我想问一个相同的问题:确定程序的方式会花费您更长的时间,还是找到功能的过程会花费更长的时间办法?

7
在面向对象的语言中,对象应何时对自己进行操作,何时应对对象进行操作?
假设有一个Page类,它表示对页面渲染器的一组指令。假设有一个Renderer知道如何在屏幕上呈现页面的类。可以通过两种不同的方式来构造代码: /* * 1) Page Uses Renderer internally, * or receives it explicitly */ $page->renderMe(); $page->renderMe($renderer); /* * 2) Page is passed to Renderer */ $renderer->renderPage($page); 每种方法的优缺点是什么?什么时候会更好?什么时候会更好? 背景 为了增加一些背景知识-我发现自己在同一代码中同时使用了这两种方法。我正在使用名为的第三方PDF库TCPDF。在我的代码中的某些地方,必须具备以下条件才能使PDF呈现工作: $pdf = new TCPDF(); $html = "some text"; $pdf->writeHTML($html); 假设我希望创建页面的表示形式。我可以创建一个模板,其中包含用于呈现PDF页面摘要的说明,如下所示: /* * A representation of the PDF page snippet: * a …

3
是否可以在不使用%运算符的情况下实现分布良好的哈希表?
我希望在C#中实现一个快速,分布均匀的哈希表。我在选择需要任意哈希码并“约束”它的哈希约束函数时遇到麻烦,因此可以将其用于索引存储桶。到目前为止,有两种选择: 一方面,您可以确保存储桶中始终有素数个元素,而要限制哈希,您只需对存储桶数进行模运算即可。实际上,这就是.NET词典所做的。这种方法的问题在于,与其他操作相比,使用%的速度非常慢。如果您查看Agner Fog指令表,idiv(这是为%生成的汇编代码)对于较新的Intel处理器,其指令等待时间约为25个周期。与此相比,大约3 mul或1逐位OPS像and,or或xor。 另一方面,您可以使存储桶的数量始终为2的幂。您仍将必须计算哈希的模数,因此您不必尝试在数组外部进行索引,但这一次的开销较小。由于对于2的幂% N是& (N - 1),约束被减少到仅需要1-2个周期的屏蔽操作。这是由Google的sparsehashash完成的。缺点是我们指望用户提供良好的哈希值;屏蔽哈希基本上会切断一部分哈希,因此我们不再考虑哈希的所有位。如果用户的哈希值分布不均匀,例如仅填充了较高的位或较低的位始终相同,则此方法的冲突率就会高得多。 我正在寻找一种我可以使用的兼具两全其美的算法:它考虑了哈希的所有位,并且比使用%还要快。它不一定必须是模数,而是一定要保证在一定范围内0..N-1(其中N是铲斗的长度)并且在所有插槽中具有均匀的分布。是否存在这样的算法? 感谢您的帮助。

3
为什么语言相对于块的显式标记为什么要缩进?
我正在学习Haskell,并且正在寻找一种自动缩进工具。我看上去并不多,并且了解到在Haskell中(与Python中一样),缩进表示一个块。结果,我猜想不可能创建一个像C系列其他语言一样强大的自动格式化工具,该工具使用显式标记,例如{}(大括号)或begin end关键字。 我不介意为了缩进而强制执行缩进的语言,但是我无法理解强制缩进和具有一些显式标记所带来的好处,以便自动化工具可以理解哪个块属于哪个块。 如果缩进标记的优先选择是使代码看起来更好,那么我仍然不了解其优势。假定制表符和空格在不同的编辑器和不同的字体(例如,单空格字体看起来更整齐)中以不同的方式表示,那么期望程序员像样地呈现代码是不可行的。可以考虑当前文本编辑器的工具将更适合于正确设置代码格式。 语言设计师为什么会选择缩进而不是显式的块标记?

3
如何在两个节点之间的相互连接期间避免分布式死锁?
假设我们有两个对等节点:第一个节点可以向第二个节点发送连接请求,但是第二个节点可以向第一个节点发送连接请求。如何避免两个节点之间的双重连接?要解决此问题,顺序执行为创建入站或出站TCP连接而执行的操作就足够了。 这意味着每个节点都应按顺序处理每个新的连接创建操作,包括传入连接和传出连接。这样,在从节点接受新的传入连接之前或在向节点发送连接请求之前,维护已连接节点的列表,只需检查该节点是否已存在于列表中就足够了。 为了使创建连接的操作顺序进行,对连接的节点列表执行锁定就足够了:实际上,对于每个新连接,新连接的节点的标识符都添加到该列表中。但是,我想知道这种方法是否会导致分布式死锁: 第一节点可以向第二节点发送连接请求; 第二节点可以向第一节点发送连接请求; 假设两个连接请求不是异步的,则两个节点都锁定所有传入的连接请求。 我该如何解决这个问题? 更新:但是,每次创建新的(传入或传出的)连接时,我仍然必须锁定列表,因为其他线程可能会访问该列表,因此仍然存在死锁问题。 更新2:根据您的建议,我编写了一种算法,以防止相互接受登录请求。由于每个节点都是对等节点,因此它可以具有一个客户端例程来发送新的连接请求,以及一个服务器例程来接受传入的连接。 ClientSideLoginRoutine() { for each (address in cache) { lock (neighbors_table) { if (neighbors_table.contains(address)) { // there is already a neighbor with the same address continue; } neighbors_table.add(address, status: CONNECTING); } // end lock // ... // The node tries to establish …

7
对于仅具有不可变引用或标签的语言,对于名称变量有什么好的替代方案?
例如,在函数式语言中,变量是单个赋值,并且一旦赋值它们的值就不可变。因此,它们有两个状态unbound和bound,一旦绑定,就无法更改。 是否有最适合诸如事物之类的数学术语或其他计算机科学术语?一些语义并不意味着方差或可变性。 如果不存在诸如term之类的词,并且如果您正在设计一种具有这种结构的语言,那么您除了使用word 变量之外还会使用什么呢? 我不是真的希望调查的想法,我试图找出是否已经有一个公认的行业(任何行业)项这样的事情。

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.