我的一天:
早上8:40起的床,刷了20分钟牛客,花了3个小时搜集一些面试资源项目。
中午花了一个小时半吃饭和刷视频。
下午写项目写到6:30,花了一个小时吃饭和洗澡。
晚上8:00开始写算法,中间小休息了一下,写到11点。
算法:
★24. 两两交换链表中的节点
★25. K 个一组翻转链表
138. 随机链表的复制
70. 爬楼梯
今天算法就写了四道,效率太低了www
八股: 暂无
项目开发:
更加深刻地理解了Redission的延迟队列的使用和原理:用key初始化一个BlockingDeque,然后根据BlockingDeque获取一个DelayedQueue;调用DelayedQueue的offer方法进行一个延时,到点之后将DelayedQueue里面的数据放到BlockingDeque里面。
RBlockingDeque<Object> blockingDeque = redissonClient.getBlockingDeque("xxxxxx-xxxx-xxxx");
RDelayedQueue<Object> delayedQueue = redissonClient.getDelayedQueue(blockingDeque);
delayedQueue.offer(delayJsonObject, 20, TimeUnit.SECONDS);
Redisson 延迟队列的底层原理是通过 Redis 的有序集合(ZSet)来保存延时任务数据。其中,ZSet 的 key 为我们预先设计的业务唯一标识,score 存储的是任务的到期时间戳。Redisson 通过轮询对比 ZSet 中的最小 score 和当前时间,如果发现任务已到期(score 小于当前时间),就将该任务从 ZSet 踢出并放入 阻塞队列(BlockingQueue)。消费者只需通过阻塞队列的 take() 方法获取任务,因为该方法天然阻塞,能够避免轮询空转的性能消耗,实现更加高效的消息消费。