昨天我参加了一家领先的IT服务公司的采访。技术面试很好,没有问题,然后我又转到另一套关于管理,设计和流程的问题。除了以下问题,我已回答了所有问题。
采访者提问:
假设你正在开发一个我将在我的课程中消费的课程 通过扩展它,你保留的关键点是什么 心神? Ex,Class A,它有一个名为“方法A”的方法返回一个Collection, 让我们说“清单”。您将采取哪些预防措施?
我的回答:我将考虑以下几点,例如:
但采访者并不相信我的观点。他期待我得到一个不同的答案,但我无法得到他的思考过程,他除外。
请提供您的建议。
答案 0 :(得分:10)
我希望你坚持设计Single Reaponsibility,Open / Close和Dependency Injection的原则。保持无状态,简单和可测试。确保无需更改即可扩展。
然而,我没有采访你。
答案 1 :(得分:6)
还有一些尚未提及的要点是:
public
,protected
,package private
和private
方法之间划一条明确的界线。确保不要暴露任何超出实际需要的数量。删除功能 hard 。如果精心设计的API中缺少某些内容,您可以稍后再添加。但是你暴露了一些无用的公共方法,你真的无法在不弃用方法的情况下升级你的API,因为你永远不知道还有谁在使用它。答案 2 :(得分:2)
如果你要归还一个集合,你应该考虑的第一件事就是我应该保护自己免受呼叫者改变我的内部状态,例如。
List list = myObject.getList();
list.retainAll(list2);
现在我拥有list1
和list2
之间的所有共同元素。问题是myObject可能不会指望你销毁它返回的列表的内容。
解决此问题的两种常见方法是采取防御性副本或使用Collections.unmodifiableXxxx()
来收集集合。对于额外的偏执,您可以同时执行这两种操作。
我更喜欢绕过这种方式是为了避免返回收藏品。您可以返回计数和方法来获取第n个值,或者返回Map返回键并提供getter,或者您可以允许访问者访问每个元素。这样您就不会暴露您的收藏品或需要副本。
答案 3 :(得分:0)
问题非常通用,但我想补充几点: