JJava 知识库
JAVA INTERVIEW

高频面试题

Java集合基础约 2 分钟

要实现任务排队、最近访问记录和按优先级调度,你会分别选择什么队列结构?

参考回答约 2 分钟 · 口语表达
我的判断

任务排队、最近访问和优先级调度的约束不同,我会分别选有界阻塞队列、ArrayDeque 和带明确并发控制的优先队列。

后台任务排队首先要解决背压,我会用有界 ArrayBlockingQueue 或有容量的 LinkedBlockingQueue,队列满时明确阻塞、降级还是拒绝,绝不会用无界队列把流量尖峰变成 OOM。

最近访问记录需要两端加入和淘汰,单线程或加锁环境下用 ArrayDeque;如果还要按 key 去重,通常是 HashMap + 双向链表,直接采用成熟的 LRU 缓存实现更稳妥。

PriorityQueue 适合按优先级取最小/最大元素,但它不是线程安全的,也不保证同优先级稳定顺序。我会把提交序号作为第二排序键;并发场景用 PriorityBlockingQueue,同时增加老化或配额,避免低优先级任务永远饿死。定时任务则优先 DelayQueue 或调度线程池,不拿普通优先队列轮询时间。