用 Go 实现支持 Put(val, delay) 与阻塞 Get() 的并发延时队列。
Sorry o(╥﹏╥)o,暂无参考答案。带这道题,问问AI吧~
问 AI
本题目录
相关面经
1 篇超参数
后端开发二面
如果让你在 Go 里面实现一个延时队列(包含 Put(val, delay) 和阻塞的 Get() 方法),整体的设计思路是怎样的?
Put 方法底层会选用什么数据结构来组织数据?内部按照什么维度去排序?
传入的 delay 是相对时长,排序时应该用相对时间还是绝对到期时间戳?
Get 方法如何高效实现阻塞与按时唤醒?如果不用低效的死循环轮询,可以用什么机制?
在高并发场景下(多生产者并发 Put,单个消费者 Get),可能会遇到什么问题?
锁应该加在哪里?对哪个对象加锁?
如果消费者正在等待堆顶元素休眠(比如还剩 5 秒),此时有新的协程 Put 进一个过期时间更短的元素(比如 1 秒后到期,即插队现象),如何正确打断并重置等待时间?
