Questions tagged «language-agnostic»

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

1
机器学习如何纳入搜索引擎设计中?
我目前正在建立一个基于Apache Lucene的小型内部搜索引擎。它的目的很简单-根据一些关键字,它将建议一些在公司内部撰写的文章。我使用相当标准的TF-IDF评分作为基本指标,并在此基础上建立了自己的评分机制。所有这些似乎都工作得很好,除了一些极端情况下,排名似乎一团糟。 因此,我打算做的是在搜索结果页面上添加一个小的“相关/不相关”链接,以便用户可以根据对结果是否应该首先包含在内的感知,单击其中的一个。 我的点子 将这些相关/不相关视为标签并创建训练数据。 使用此数据来训练分类器(例如SVM) 将此模型整合到搜索引擎中,即,每个新结果都将通过分类器,并为其分配是否相关的标签。 对我来说,这种方法似乎很直观,但是不确定它是否会在实践中起作用。我有两个具体问题: 我应该提取什么所有功能? 有没有更好的方法将机器学习组件集成到搜索引擎中?我的最终目标是基于业务逻辑和用户反馈来“学习”排名功能。

2
没有作为过程实现的延续的例子是什么?
关于SO上的回调和延续之间的区别的有趣讨论引发了这个问题。根据定义,延续是完成计算所需逻辑的抽象表示。在大多数语言中,这表现为一个自变量过程,您可以将需要继续处理的任何值传递给该过程。 用纯函数式语言(其中所有函数都是纯函数并且是头等公民),我认为延续可以完全建模为函数。毕竟,这就是我以前对到目前为止的理解。但是,世界充满了状态(叹息),因此一般定义不需要连续捕获程序状态-它只需要包含意图。 为了帮助我理解,是否可以用功能语言提供一个示例,其中以比功能更抽象的方式表示延续?我知道Scheme可以让您以一流的方式(call / cc)来获取当前的延续,但是即使如此,似乎传递给call / cc的一个参数过程只是以另一种形式给出了当前的延续调用/ cc函数可以将其结果应用到的自变量过程。

10
下一级别的抽象是什么?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 由于编程语言最初只使用顺序执行的代码行,后来演变为包含了第一批抽象级别之一的功能,然后创建了类和对象以进一步抽象它。下一级别的抽象是什么? 还有什么比类还抽象的呢?


16
您将字符串反转用于什么用途?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 在PHP中是strrev(),在Rails中是.reverse,但是大多数语言没有任何字符串反向功能。有些具有可用于字符的数组反转功能。我以为这一定是一个重大的疏忽,但是后来发生在我身上,您实际将反向字符串用作什么? 我唯一能想到的是在演示和课程中启用“ Hello World!”。变成“!dlroW olleH”。 我的问题是;反转字符串有用途还是完全没有意义? 。 附录 我已经预料到会有更多答案,但并非所有答案都完全是学术性的。我本来会花钱的,没有人能提出一个合理的例子。我也认为我不会学到任何新东西,但Mark Canlas的正则表达式建议非常出色,我期待着有机会证明自己。谢谢大家。

4
实现安全关闭是否需要垃圾收集?
我最近参加了有关编程语言的在线课程,其中介绍了闭包。我写下了两个受本课程启发的示例,以便在提出问题之前提供一些背景信息。 第一个示例是一个SML函数,该函数生成从1到x的数字列表,其中x是该函数的参数: fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end 在SML REPL中: val countup_from1 = fn : int -> int list - countup_from1 5; val it = [1,2,3,4,5] …


5
为什么我看到这么多的for(;;)构造?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 按照我的想法,for循环用于迭代已知或可确定的范围。 String[] names = //something; for ( int i = 0; i < names.length; i++ ) { //do stuff } 这等效于(除i之外): String[] names = //something; int i = 0; while (i < names.length ) { // do stuff i++; } 换句话说,for对于常用的while构建体,循环只是一种(非常有用的)语法糖。 但是,我在网络上看到很多for(;;)在功能上等同于while(true) 这是什么原因呢?为什么无限for循环比无限while循环更受青睐? //我什至看到一本完全没有使用while循环的java教科书!导致如下可怕的构造: String input = getInput(); …

12
类型和作用域前缀是否值得命名约定?
最近开始担任软件开发人员的第一份工作时,有人被告知我不必在代码中遵循任何命名约定。由从事其他较大项目的小组编写的代码遵循命名约定,但是由于我被邀请编写一个新的独立应用程序,因此感觉并不重要。这是我最后的担心,所以我只是采用了现有的惯例并予以遵守。 int nTickCount bool bConnected object[] m_aItems fSum += fWeight * fValue class cManager enum etSystemStates etSystemStates eState cManager.cs 但这真的值得吗?我发现很难判断遵循这种命名约定对理解和检测错误的最终效果,但是,从视觉上看,它看起来很丑陋。另外,在项目中拥有名为cSomething的每个类和文件似乎很精明。 与具有明显不同的事物(例如您所采用的算法和体系结构)相比,我并不觉得这有什么大不了的。但是任何影响我编写的每一行代码的约定似乎都应该正确。 如果完全需要使用一种命名惯例,您会发现什么是最优雅,最有效的命名惯例?它表示类型和/或范围吗?

2
休眠线程如何工作?
当您休眠线程时,实际上是什么情况? 我看到休眠线程“在给定的时间段内暂停了当前线程”。但是,它是如何工作的呢? 根据Thread.sleep()在内部如何工作以及Thread.sleep如何真正工作?: 睡眠时间将取决于某些系统特定的粒度 睡眠受阻 线程离开CPU并停止执行 线程在睡眠时不占用CPU时间 我只是不太了解这一切意味着什么的内部和基本机制。 我知道有一个称为调度程序的东西负责线程之间的切换。 消息来源似乎表明这随操作系统(或硬件?)而变化,并且大多数线程被赋予1ms-60ms左右的时间,以便在CPU切换到另一个线程之前执行某些操作。 但是,当线程休眠时(例如,数秒),它如何恢复?我猜想其中涉及一个计时器,它是主板的时钟吗?它与CPU时钟速率有关吗? 即使涉及计时器,CPU如何知道何时该再次关注该线程?是否不必经常检查线程以查看其是否准备就绪?这不是有效的轮询,因此会浪费CPU时间吗? 是在休眠特定于线程语言的线程,还是由操作系统负责,还是CPU特定的事物? 有人可以通过诸如调度程序之类的基本解释以及CPU在所有这些过程中的作用向我解释一下吗?

4
您如何才能对只能修复的bug进行TDD测试?
这是一个示例:我的Web应用程序包含可拖动元素。拖动元素时,浏览器会生成“重影”。我想在拖动时删除“重影”,并为此测试编写了一个测试。 我的问题是,我最初不知道如何解决此错误,而编写测试的唯一方法是在修复它之后。 在诸如之类的简单函数中let sum = (a, b) => a - b,您可以在编写任何代码之前编写一个关于为什么sum(1, 2)不相等的测试3。 在我描述的情况下,我无法测试,因为我不知道验证是什么(我不知道断言应该是什么)。 所描述问题的解决方案是: let dataTransfer = e.dataTransfer let canvas = document.createElement('canvas'); canvas.style.opacity = '0'; canvas.style.position = 'absolute'; canvas.style.top = '-1000px'; dataTransfer.effectAllowed = 'none'; document.body.appendChild(canvas); dataTransfer.setDragImage(canvas, 0, 0); 我不知道这是解决方案。在网上找到解决方案后,我什至无法编写测试,因为我唯一可以知道它是否真正有效的方法就是将这段代码添加到我的代码库中,并通过浏览器进行验证是否达到预期的效果。测试必须在代码之后编写,这与TDD背道而驰。 TDD如何解决此问题?在代码之前编写测试是强制性还是可选的?

7
是否有一种模式可以更自然地向收藏夹添加项目?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我认为向集合中添加某些内容的最常见方法是使用Add集合提供的某种方法: class Item {} var items = new List<Item>(); items.Add(new Item()); 实际上,这没有什么不寻常的。 我不知道为什么我们不这样做: var item = new Item(); item.AddTo(items); 它似乎比第一种方法更自然。当Item类具有类似Parent以下属性时,将具有andvantange : class Item { public object Parent { get; private set; } } 您可以将二传手设为私人。在这种情况下,您当然不能使用扩展方法。 但是也许我错了,我以前从未见过这种模式,因为它是如此罕见?你知道有没有这种模式? 在C#扩展方法中将对此有用 public static T AddTo(this T item, IList<T> list) { list.Add(item); return …

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

9
用C ++重写IBM汇编器+ COBOL
我是一家汽车租赁公司的出租代理/经理,该公司在1972年编写的出租系统上运行。我决定也许是时候进行更新了。作为一点背景,下面是我们每天必须从此程序中处理的疯狂的简短示例: 租赁代理商必须记住,在一个屏幕上进行打印时,在ACT字段中使用“ MXC”(所有内容均基于短代码),这令人困惑地表示“在合同上显示最大数量”,而在另一个屏幕上则需要PR(对于PRint)。 ACTION字段,但有几个屏幕在PT(对于PrinT)字段中使用Y,而另一个屏幕在PRT(对于PRinT)字段中使用Y,而另一个屏幕要求用户点击Enter(但不点击字母,因为这是换行符,必须是数字键盘上的回车键),然后是F8,一个不同但相关的屏幕仅需F8,某些屏幕上有一个标有PRT的字段,该字段应用于PRinT,但实际上该字段什么也不做,经过几次提示后,打印会自动完成,还有更多屏幕带有标有PRINT Y / N的字段,对于其他地点已经交付文书工作的操作,默认为Y;对于其他经销商将需要文书工作的操作,默认为N。 我决定可以做得更好,因此我决定与公司中的负责该更新的人联系。我最终与负责该计划的IT副总裁取得了联系。我从他那里得到了一些信息,并且得知我的汽车租赁公司的租赁程序是用IBM大型机组装程序编写的,其中混入了一些COBOL。他说,目前没有职位空缺,但是我应该无论如何,请给他发送我的简历给他(以防万一)。 这使我想到了我的问题。 首先是技术。考虑到将来改善可维护性的想法,我的想法是用比汇编语言更高级的语言来重写它。我的经验领域是C ++,因此这对我来说是显而易见的选择。该公司迫切需要一种更简便的方法来更新程序,正如我最近读到一篇文章时所引用的,当时与我交谈的那个人说,该团队工作很努力,他们很自豪地宣布该程序现在支持5位数字的位置代码(而不是4)和8位的车号(而不是7)。我的更新哲学,即使在这种可怕的情况下,也符合乔尔的观点:http : //www.joelonsoftware.com/articles/fog0000000069.html简而言之,重写应该是渐进式的,而不是扔掉以前的一切然后重新开始。 有没有一种简便的方法可以将IBM Assembly与C ++集成在一起,如果可以,该怎么办?我隐约知道了asm关键字,但是我不知道最好使用它还是做其他事情。这样的计划不明智吗?我在使用g ++和GNU make的Linux上完成大部分工作,因此欢迎您回答特定的答案,但绝对不需要(因为我不知道它们没有哪种构建系统,但我怀疑几乎没有)。 第二个问题更具政治性。我应该如何说服该公司他们需要进行转换?理论上的成本节省是巨大的(根据我的估计,该公司每年在浪费额外的百万美元左右,仅是增加了学习如何与该程序交互的培训成本),但是我建议的更改可能会将所有当前的程序员失业,应该将他们制定出来,因此存在很大的结构性变革阻力。 编辑:我应该解释为什么我修改公司已经拥有的东西对我来说似乎是最好的解决方案。我仍然愿意接受其他建议,因为这是程序的庞然大物。我以前从未从事过编程工作,因此请对我可能给出的任何错误分析进行更正。 首先,有现成的解决方案。 从我与几位中层管理人员的讨论中,切换到新系统的主要问题之一是,许多忠诚的员工已经在公司工作了数十年,并且对系统很满意。 。如果我有能力修改已有的内容,则可以将当前接口保持为某种“兼容模式”。用户已经必须登录才能使用当前系统,因此我可以添加在用户首次登录(在我进行此更改之后)时激活设置的功能,在此用户可以选择使用“经典”界面或“新”界面。我无法找到一种现成的解决方案来实现这一目标, 我公司还拥有我们使用的软件;我们不许可。这意味着我正在与之交谈的管理层实际上是可以授权我进行更改的同一个人。使用第三方解决方案,除了获得开发我们所使用产品的公司的必要权利外,我还必须获得公司的批准,这增加了另外的障碍。这还需要说服公司放弃“他们的”产品并购买其他产品,这似乎比尝试更新我们现有的产品更大的障碍,但是在这个问题上我很可能是错误的。 最后,展望未来,我不仅要改善用户界面并修复一些错误。在更新了这些“紧急”问题之后,我希望更新与技术相关的公司运营的基本方式。在这类问题上花了1-2年的时间后,我的计划是回到管理层并提出更重大的变化。公司目前有很多方法可以通过根本不使用的技术从根本上加以改善。例如,每个区域几乎都以相同的方式运行。当地的主要机场是分发汽车的中央枢纽。它们主要按需要发送。但是,机场被用作所有行动的基地。他们会用一辆车派两个人到我的位置,从我们这里接我们不需要的车,然后带着他们进来的汽车返回机场,再加上他们要收回的东西(我们距机场32英里)。然后,他们将乘坐两辆车到达距离我们5英里的位置,将其中一辆降下,然后将另一辆车返回机场。即使我们退还的汽车与他们在我们附近所需的汽车相同,他们也会这样做。我已经在该公司工作了大约两年,而我似乎只在最极端的汽车短缺紧急情况下才偏离了这一点(大约有过三次)。我将用一个自动调度系统代替在每个地区工作的4个人,该系统可以确定要去哪辆汽车,并尝试找到所需的时间最少的里程+里程+驾驶员来将所有汽车交付到需要的位置。我希望有一天可以添加更高级别的修复示例。 但是,在我提出所有建议之前,我认为通过执行较小的任务(例如更新接口)来了解公司和代码库将很有帮助。诸如外包或其他方式的解决方案将消除这种可能性。

5
TDD,新测试,旧测试尚未实施
我正在试验测试驱动的开发,发现经常遇到以下情况: 我为某些功能X编写测试。这些测试失败。 在尝试实现X时,我看到我需要在代码的下层实现某些功能Y。所以... 我为Y编写测试。现在针对X和Y的测试均失败。 一旦我同时处理了不同代码层中的4个功能,我就失去了对实际工作的关注(太多的测试同时失败)。 我认为即使在开始编写测试之前,也可以通过更加努力地计划任务来解决此问题。但是在某些情况下,我不知道需要更深入地研究,因为例如,我不太了解底层API。 在这种情况下我该怎么办?TDD有什么建议吗?

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.