1.围绕项目,关于mq的内容
2.场景题设计:用redis设计延迟消息队列
3.手撕一道简单算法题,秒了
面试官特别好,会把他的理解都讲出来,场景题自己不专业,好多点没有考虑到。
关于2:将延迟任务加到Sorted Set,将延迟时间设为score;启动一个线程不断判断Sorted Set中第一个元素的score是否小于当前时间,如果小于,从Sorted Set中移除任务并添加到执行队列中;如果大于,进行短暂休眠后,重复上诉操作。
步骤(转):
-
在对于一个消息的创建进入Redis缓存之中,消息的元素的score设置为当前的时间戳或发布时间戳或过期时间。
-
开启执行轮询Redis的延时队列操作,获取队列的订单的标识,判断当前订单的score如果小于当前时间毫秒值,移除Redis队列中该消息。
-
一直重复上诉操作。