Tag: 设计

关于在词典中查找所有有效词的算法问题

给定一个字典(只是一个字符串列表)。 您收到来自外部来源的未知数量的信件的Feed。 给定一串字母,您将如何列出您可以从这些字母的任何组合中制作的所有有效单词(来自diciontary)。 所以如果你收到:abpplead 你应该找到苹果,坏,垫,铅等。 我知道没有最好的答案。 但是有哪些合理有效的方法,使用什么数据结构等等。 此外,假设您可以预处理输入,因此您可以选择将输入字母存储在您想要的任何数据结构中。

泽西岛的身份validation

我想为我的基于Jersey0的服务器/客户端REST实现身份validation,但我不确定如何布置代码。 基本上对于每个操作我有2个方法 – 从服务器端1个,从客户端1个。 我缩小了算法范围 – 我将使用亚马逊策略和HMAC。 问题是如何在代码中列出这个 – 我应该将身份validation(加密/解密代码)添加到每个方法 – 服务器/客户端还是我应该在两端都有一个“dispatch”方法来执行加密/解密,然后将执行控制转移到一个更专业的版本,这将我有一个中心位置,在客户端或服务器进行身份validation? 我愿意听听你对此的评论吗?

一长串if / else / execute代码分支的最佳设计模式/方法

我有一个“遗留”代码,我想重构。 代码基本上是对服务器进行远程调用并获得回复。 然后根据回复执行相应的。 代码骨架示例: public Object processResponse(String responseType, Object response) { if(responseType.equals(CLIENT_REGISTERED)) { //code //code … } else if (responseType.equals(CLIENT_ABORTED)) { //code //code…. } else if (responseType.equals(DATA_SPLIT)) { //code //code… } etc 问题是有很多if / else分支,并且每个内部的代码都不是微不足道的。 因此很难维护。 我想知道这个最好的模式是什么? 我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用reflection调用与responseType同名的方法。 这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为reflection会导致性能问题。 是否有一个很好的设计方法/模式来清理它?

将现有凌乱的webapp迁移到优雅的MVC的最佳方法是什么?

我大约一个月前加入了一家新公司。 该公司规模相当小,并且具有非常强大的“初创”感觉。 我是一个由另外3人组成的团队的Java开发人员。 该公司主要为企业/商业类型的人销售服务,以便彼此进行通信。 我一直在努力的主要事情之一就是公司的主要网站 – 从中​​出售服务,现有用户登录查看服务并支付账单,新用户可以报名参加试用目前,这是一个部署在Tomcat上的JSP应用程序,可以通过公司自己编写的持久层访问数据库。 我在这里反复且越来越沮丧(我对整体工作非常满意,所以这不是“哦,不,我不喜欢我的工作” – 类型的post)是缺少任何更大的设计或此Web应用程序的体系结构。 该应用程序由几十个JSP页面组成,Servlet或Bean中几乎没有逻辑或任何其他类型的框架。 许多JSP页面都是数千行代码,它们jsp:include其他JSP页面,业务逻辑与HTML混合,经常使用的代码片段(如获取Web服务连接)被剪切和粘贴而不是重用换句话说,应用程序是一团糟。 公司内部有一些声音,试图重新设计这个网站,以便更好地适应MVC; 我认为开发人员和高层人员开始意识到,目前的意大利面条代码模式不可持续或非常容易扩展,无法为用户添加更多function。 高层和开发人员对完全重写事物持谨慎态度(有充分理由,因为这意味着需要几周或几个月的时间重写现有function),但我们已经讨论过(慢慢地)将网站的某些区域写入新框架。 有哪些最佳策略可以将应用程序和代码库转移到这个方向? 作为一名开发人员,我怎样才能真正帮助实现这一目标,并且很快就能看到像工作中的那个混蛋新人并且告诉每个人他们写的东西是废话? 当您遇到这种事情时,您在自己的工作经历中使用过任何经过validation的策略或经验吗?

Void值作为返回参数

我有这个界面: public interface Command { T execute(String… args); } 它适用于大多数用途。 但是当我尝试模拟一个只有副作用的命令(例如没有返回值)时,我很想写: public class SideEffectCommand implements Command { @Override public Void execute(String… args) { return null; // null is fine? } } 这是个常见的问题吗? 是否有使用和不使用返回值来建模Commands最佳实践? 我试过这个适配器,但我认为这不是最佳的,原因如下: public abstract class VoidCommand implements Command { @Override public Void execute(String… args) { execute2(args); return null; } public abstract void execute2(String… […]

为什么没有ArrayList(T t)构造函数?

以这种方式通过对象数组初始化列表是很常见的: Foo[] objs = …; ArrayList list = new ArrayList(Arrays.asList(objs)); 我想知道,有没有理由为什么ArrayList的desiner没有包含带数组作为参数的构造函数,所以它可以像这样初始化: ArrayList list = new ArrayList(objs); 可能违反了一些原则,线程安全或其他什么?

根据类型创建不同的对象

我有一个包含名为type的列的数据库表。 对于我的数据库列中的每一行,我必须根据类型创建一个对象。 目前我使用if else语句: if (type.equals(“object1”)){ Object1 object1 = new Object1(); } else if (type.equals(“object2”)){ Object2 object2 = new Object2(); } 使用枚举会更好一些,因为类型的数量有限但是有可能让对象的创建依赖于String的值吗? 我愿意接受可能以另一种方式解决我的问题的建议,而不是我想要的。

枚举中的可配置值

我经常在我的代码中使用这个设计来维护可配置的值。 考虑以下代码: public enum Options { REGEX_STRING(“Some Regex”), REGEX_PATTERN(Pattern.compile(REGEX_STRING.getString()), false), THREAD_COUNT(2), OPTIONS_PATH(“options.config”, false), DEBUG(true), ALWAYS_SAVE_OPTIONS(true), THREAD_WAIT_MILLIS(1000); Object value; boolean saveValue = true; private Options(Object value) { this.value = value; } private Options(Object value, boolean saveValue) { this.value = value; this.saveValue = saveValue; } public void setValue(Object value) { this.value = value; } public Object getValue() […]

困惑:抽象和封装是一样的吗?

可能重复: 抽象VS信息隐藏VS封装 “抽象”和“封装”的定义看起来与我非常相似。 我总是混淆这些条款。 请通过展示示例来澄清差异。

在Java中实现一种键值对(实际上不是HashMap)

在Java中实现以下场景的最佳方法是什么: 一种键值对机制,但它看起来像这样: param1 + param2 + param3 -> output1 param1 + * + !param3 -> output2 param1 + text containing value param2 + * -> output3 ‘*’ => any parameter !param => any value other than this parameter text containing value ‘param’ => any data which contains the value ‘param’. ex: aaaaa,bbb,param,ccc or aaaparambbb 在我看来,HashMap使得实现这种类型的映射变得困难。 […]