Tag: 语言无关的

平衡设计原则:unit testing

我正在写一个Bananagrams的模拟。 目前,我有一个GameMaster类,可以维护常见的碎片集合。 deal(Player)方法向该玩家交易一定数量的棋子。 我想为此编写unit testing。 但是,此时,我没有getter,因此无法检查对象的状态。 为什么不添加吸气剂? 我不想仅为测试添加代码到公共接口。 目前,没有其他理由公开这些function。 我该怎么办? 无论如何添加getter,混乱公共API(或希望将来需要它们)? 放弃unit testing? (听起来不错。) 或者,这是否表明我的公共界面存在缺陷?

客户端 – 服务器代码应该写在一个“项目”还是两个?

我一直在开始客户端 – 服务器应用程序。 起初我自然地在Eclipse中创建了两个项目,两个源代码控制存储库等等。但我很快就发现两者之间有一些共享代码可能会从共享中受益(在同一个项目中或在共享库中)而不是复制。 另外,我一直在学习和尝试测试驱动开发,在我看来,基于真实的客户端组件进行测试会更容易,而不是只需要设置大量的代码来模拟某些东西,代码可能主要在客户端。 在这种情况下,似乎在一个项目中将客户端和服务器放在一起,由根包(org.myapp.client。*和org.myapp.server。 ,也许是org.myapp.shared。 )进行了细分 。 然而,我在合并客户端和服务器时最关心的是安全性; 如何确保代码的服务器部分不会到达用户的计算机? 当Eclipse捆绑一个JAR时,我必须选择特定于服务器的位,希望我不会错过任何一个,对吧? 因此,特别是如果您自己编写客户端 – 服务器应用程序(尤其是在Java中,尽管如果您想在其他语言中分享您的经验,这可能会变成与语言无关的问题),您保持什么样的分离?您的客户端和服务器代码之间? 它们只是在不同的包/命名空间中,还是使用共享库完全不同的二进制文件,还是完全不同的东西? 你如何一起测试代码然后单独发货?

空字符串的目的是什么?

对我来说,作为开发人员和用户,我发现空字符串(“”)无用且引起很多混乱,就像说string == char [] 也许计算机需要空字符串,所以我想了解原因。 也可以看看: 默认字符串初始化:NULL还是Empty? 最佳实践:函数应该返回null还是空对象?

使用混合POJOS处理集合,每个POJO使用不同的处理程序

我正在尝试为以下问题找到一个优雅的OOP解决方案。 假设我们有POJOS的集合,在这种情况下事件,其中每个POJO可能是不同的类。 我们需要为每个POJO类(或类型)使用不同的规则来处理此集合。 一个基本的假设是我们不能用适当的处理程序来装饰POJO,因为我们不控制它们的生成,并按原样接收集合。 因此,任何机制都属于同一个陷阱。 但是,第3项目仍处理这种可能性。 有一些可能的解决方案,一些非常难看,一些更优雅但复杂: 显而易见的解决方案,也是最丑陋的,使用instanceOf运算符将POJO传递给处理程序。 稍微好一点的修改是对链接调度程序使用一个责任链,以便新类型只需要一个新的调度程序。 但是,每个调度程序仍然需要instanceOf。 创建增强对象,而不是POJOS,其中每个对象都包含对其处理程序的引用。 这在POJO和我们的处理器之间创建了耦合。 创建(我知道如何在Java中正确执行此操作)一个调度程序服务,它将处理程序注册到特定的事件类,并使用generics(Typesafe容器,如在有效的java中)将事件分派给处理程序。 4是最优雅的,但我想知道是否有更好的想法。

ED A0 80 ED B0 80是一个有效的UTF-8字节序列吗?

java.nio.charset.Charset.forName(“utf8”)。decode解码一个字节序列 ED A0 80 ED B0 80 进入Unicode代码点: U+10000 java.nio.charset.Charset.forName(“utf8”)。decode也解码一个字节序列 F0 90 80 80 进入Unicode代码点: U+10000 这由以下代码validation。 现在这似乎告诉我UTF-8编码方案将ED A0 80 ED B0 80和F0 90 80 80解码为相同的unicode代码点。 但是,如果我访问https://www.google.com/search?query=%ED%A0%80%ED%B0%80 , 我可以看到它明显不同于页面https://www.google.com/search?query=%F0%90%80%80 由于谷歌搜索使用的是UTF-8编码方案(如果我错了,请纠正我), 这表明UTF-8不能将ED A0 80 ED B0 80和F0 90 80 80解码为相同的unicode码点。 所以基本上我想知道,按官方标准,UTF-8应该将ED A0 80 ED B0 80字节序列解码为Unicode代码点U + 10000吗? 代码 : public class Test { public static […]

这种颜色混合技巧如何工作?

我看到这个Java代码可以非常有效地在两种RGB888颜色之间进行完美的50%混合: public static int blendRGB(int a, int b) { return (a + b – ((a ^ b) & 0x00010101)) >> 1; } 这显然相当于单独提取和平均通道。 像这样的东西: public static int blendRGB_(int a, int b) { int aR = a >> 16; int bR = b >> 16; int aG = (a >> 8) & 0xFF; int bG = […]

Hobbs的Coref Resolution算法

我已经实现了霍布斯的回指解析算法以及Lappin&Leass的替代排名。 让我感到困惑的是,算法的描述是完全非正式的,并且由于我的实现没有正确解决句子,我不确定限制是在我的实现还是在实际算法上。 这是我在Jurafsky&Martin找到的版本: 从名词短语(NP)节点开始,立即支配代词。 上树到遇到的第一个NP或句子(S)节点。 调用此节点X,并调用用于访问它的路径p。 以从左到右,广度优先的方式遍历节点X下面的所有分支到路径p的左侧。 建议遇到任何在其与X之间具有NP或S节点的NP节点作为先行词。 如果节点X是句子中最高的S节点,则按照新近度的顺序遍历文本中先前句子的表面解析树,最近的第一个; 每个树以从左到右,广度优先的方式遍历,并且当遇到NP节点时,建议将其作为先行词。 如果X不是句子中的最高S节点,请继续执行步骤5。 从节点X开始,将树向上移动到遇到的第一个NP或S节点。 调用此新节点X,并调用遍历的路径到达它p。 如果X是NP节点,并且如果路径p到X没有通过X立即占主导地位的标称节点,则建议X作为前提。 以从左到右,广度优先的方式遍历节点X下方的所有分支到路径p的左侧。 提出任何遇到的NP节点作为前提。 如果X是S节点,则以从左到右,广度优先的方式遍历节点X的所有分支到路径p的右侧,但不要低于遇到的任何NP或S节点。 提出任何遇到的NP节点作为前提。 转到步骤4 看第3步:“路径p的左边”。 我解释它的方式是从左到右迭代子树,直到我找到包含代词的分支(因此从代词到X的路径的一部分)。 在Java中: for (Tree relative : X.children()) { for (Tree candidate : relative) { if (candidate.contains(pronoun)) break; // I am looking to all the nodes to the LEFT (ie coming before) the path leading to […]

比例数<= 255?

我有一些单元格,其数值可以是介于0和Integer.MAX_VALUE之间的任何值。 我想相应地对这些单元格进行颜色编码。 如果值= 0,那么r = 0.如果值是Integer.MAX_VALUE ,则r = 255.但是它们之间的值怎么样? 我想我需要一个函数,其限制为x => Integer.MAX_VALUE为255.这个函数是什么? 或者有更好的方法吗? 我可以这样做(value / (Integer.MAX_VALUE / 255))但这将导致许多低值为零。 所以也许我应该用日志function来做。 我的大多数值都在[0,10,000]范围内。 所以我想强调那里的差异。

在OO模型中添加双向关系的最佳实践

我正在努力想出一个在OO模型中添加双向关系的好方法。 假设有一个客户可以发出许多订单,也就是说客户和订单类之间存在一对多关联,需要在两个方向上遍历:对于特定客户,应该可以告诉所有订单他们已下订单,对于订单,应该可以告诉客户。 这是一段Java代码,虽然这个问题主要与语言无关: class Customer { private Set orders = new HashSet (); public void placeOrder (Order o) { orders.add(o); o.setCustomer(this); } } class Order { private Customer customer; public void setCustomer (Customer c) { customer = c; } } 让我感到困惑的是,鉴于模特有人可以轻易打电话: o.setCustomer(c); 而不是正确的 c.placeOrder(o); 形成单向链路而不是双向链路。 仍在学习OOP,任何人都可以请求帮助解决这个问题的惯用和实用方法,而不诉诸“反思”或花哨的框架(无论如何都依赖于反思)。 PS有一个类似的问题: 在我的java模型中管理双向关联 ,但我觉得它不能回答我的请求。 PSS任何链接到在db4o之上实现业务模型的现实项目的源代码都非常感谢!

来自RCC(8)规范或类似的维恩图生成软件

请注意:虽然赏金不再可用,但我仍然热衷于回答这个问题的任何人做出贡献; 我还在看着它,我在等着看是否有更好的答案。 谢谢,请继续阅读…… 我正在寻找一种方法来将描述约束网络的任意RCC类空间关系(或类似)转换为类似维恩图的图像。 例如,RCC8中表示的约束网络: W {EC} Y , X {TPP} Y , Z {NTPP} Y , Z {PO} X ..可以用下图用圆形或方形区域表示: ..alternatively: 是否有人知道软件至少可以通过编程方式(通过API)从类似RCC的约束规范生成这样的图表? 我知道这样的约束网络可能是不明确的,排除了与任何单个这样的图表的匹配(可能存在许多解决方案)。 理想情况下,我想通过能够生成可能的替代方案来解决这个问题,但现在可以求助于(并提出错误)。 需要明确的是,在这个问题中,我特别要求软件能够以声明的方式基于类似RCC的约束来计算图表布局 。 我不关心将RCC的DSL转换成其他语法的工具,也不关心特定的图像序列化格式或方法。 我希望找到一个算法来处理最多六个唯一集的任意数量的约束。 注意: Graphviz (如下面提到的@vickirk)是一个图表布局软件包的例子,它类似于我所追求的。 不幸的是,似乎Graphviz本身无法解决这个问题(但我很高兴被certificate是错误的!)。 这似乎是一个非常难的问题。