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