【发布时间】:2013-01-31 05:17:38
【问题描述】:
我最近必须完成其中一项工作面试编码练习。基本上它需要实现一个消息队列类:
- 根据传入消息中的优先级字段维护项目。
- 消息可以是通过 message.priorityField 值范围控制的高、中、低三个优先级类别之一。
- 具有 getSize 和 isEmpty 方法。
- 有一个地方(消息)方法。
- 有一个删除方法。
- 有 getFront() 方法(返回最高优先级的消息)
我最终没有做太多细节的事情是实现一个 MessageQueue 类,该类在内部使用 ConcurrentSkipListMap(并发且有序的映射)来保存消息。
我还实现了一个基本的 JUnit 测试用例,用于测试基本的业务需求。
现在,由于它是一个消息队列,因此消息可以同时进入,当然我需要测试实现的发生方面。
我现在越来越接近问题的核心了。
我的想法是,当单个线程与实现交互时,基本的 JUnit 测试用例应该验证代码是否正常工作。
然后我实现了一个并发测试用例,它应该验证实现的发生方面。
现在问题来了: 我应该测试哪些并发方面?
我唯一能想到的就是拥有多个在队列中注入方法的生产者线程和多个删除消息的消费者线程(通过 getFront())。 这里要验证的是,队列中的任何消息最终都会出来。
但这足够了吗?在这里可以测试哪些其他并发方面?
另外值得注意的是,我已经提交了解决方案,所以无论您提出什么建议都不会影响我申请这份工作的机会。
【问题讨论】:
标签: java testing concurrency queue