昨天,我参加了一家领先的IT服务公司的面试。技术面试很好,没有问题,然后我又转到了另一套关于管理、设计和流程的工作。除了下面的问题,我已经回答了所有的问题。
面试官问的问题:
假设您正在开发一个类,我将在我的类中通过扩展这个类来使用它,您记住的要点是什么?例如,A类,它有一个名为“方法A”的方法,它返回一个集合,比方说“列表”。你将采取什么预防措施?
我的答覆是:我会考虑以下几点:
但是面试官不相信我的观点。他期待着与我有不同的答案,但我无法理解他的思维过程,他的例外。
所以请提供你的建议。
发布于 2013-10-06 06:01:20
我希望您坚持单一可实现性、开放/关闭和依赖注入的设计原则。使其保持无状态、简单和可测试性。确保可以在不需要更改的情况下进行扩展。
但我不是在采访你。
发布于 2013-10-06 07:04:07
还有几点还没有提到:
public、protected、package private和private方法之间画一条明确的线。确保你不公开比你实际想要的更多。移除特征是很困难的。如果您的设计良好的API中缺少了一些内容,您可以稍后添加它。但是,如果您公开了大量无用的公共方法,您就不可能在没有推荐方法的情况下升级您的API,因为您永远不知道还有谁在使用它。发布于 2013-10-06 07:58:37
如果您要返回一个集合,首先要考虑的是,我是否应该保护自己不受调用者更改内部状态的影响。
List list = myObject.getList();
list.retainAll(list2);现在我有了list1和list2之间的所有元素,问题是myObject可能不会期望您销毁它返回的列表的内容。
解决这一问题的两种常见方法是采取防御性复制或将集合包装为Collections.unmodifiableXxxx(),以避免出现额外的偏执,您可以两者兼得。
我喜欢这样做的方式是完全避免返回集合。您可以返回一个计数和一个获取n值的方法,或者对Map返回键并提供一个getter,或者允许访问每个元素。这样,您就不会暴露您的集合或需要一个副本。
https://stackoverflow.com/questions/19205864
复制相似问题