【每日早报】-2025-01-21 - 星期二
每日早报 if (typeof lightGallery !== 'undefined') { var options = { selector: '.gallery-item' }; lightGallery(document.getElementsByClassName('.article-gallery')[0], options); }
面向八股文面试专场
面向八股文面试专场先广度,再深度,专精一个点,能够硬控面试官的 广度:MySQL、Redis、MQ、JUC、JVM,常见的框架、中间件基础基础八股文 深度: 寻找一个点,常考点深入学习,越深越好,当成杀手锏,只要提到这个点就可以****聊的很深,硬控面试官(很深入很透彻) 🤨思考其他的八股文怎么****涉及到这个点,将面试官引导到这个点来,发挥你的优势 案例:并发和锁🔒分布锁的各种实现原理: setx 看门狗机制 可重入锁实现方式 hsetx 实现可重入 一致性hash 配合 RPC服务实现可重入 锁阻塞可重试的几种实现方式 主从架构锁丢失问题 联锁机制 缺陷 红锁机制 缺陷 为什么不推荐红锁 常用的面试考点小厂准备: Java 基础: HashMap 原理 ArrayList 原理 String...
规则引擎 Drools 8+ 快速入门
规则引擎 Drools 8+快速入门 官网:https://drools.org/参考教程:https://docs.drools.org/8.44.0.Final/drools-docs/drools/introduction/index.html项目源码:https://github.com/kiegroup/drools最新版本:8.44.0.Final版本参考:Drools 8.41.0.Final、JDK 17 、Maven 3.6.3、SpringBoot...
数据库系列(二) | Mybatis Plus 3.0+快速入门
Mybatis Plus 3.0+快速入门 官网:https://baomidou.com/ 参考教程:快速开始 最新版本:3.5.7 对应版本参考:JDK 8+ 、Maven or Gradle 1、简介MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 2、创建并初始化数据库2.1、创建数据库mybatis_plus 2.2、创建 User...
分布式系列(二) | Redisson分布式锁
分布式锁1、概述 Redisson 是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。 Redisson 的宗旨是:促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。 2、四个条件为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 第一个:互斥性,在任何时刻,只有一个客户端能持有锁。 第二个:不会发生死锁,即使有一个客户端在获取锁操作时候崩溃了,也能保证其他客户端能获取到锁。 第三个:解铃还须系铃人,解锁加锁必须同一个客户端操作。 第四个:加锁和解锁必须具备原子性 3、引入依赖<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> </dependency> 4、配置类别创建RedissonConfig...
分布式系列(一) | Redis分布式锁
Redis实现分布式锁 乐尚代驾学习笔记-Redis司机抢单分布式锁 1、setnx+过期时间实现 @Override public void testLock() { //从redis里面获取数据 //1 获取当前锁 setnx Boolean ifAbsent = redisTemplate.opsForValue().setIfAbsent("lock", "lock"); //2 如果获取到锁,从redis获取数据 数据+1 放回redis里面 if(ifAbsent) { //获取锁成功,执行业务代码 //1.先从redis中通过key num获取值 key提前手动设置 num 初始值:0 String value = redisTemplate.opsForValue().get("num"); //2.如果值为空则非法直接返回即可 if (StringUtils.isBlank(value)) { ...
数据库系列(一) | MongoDB 7.0+ 快速入门&整合SpringBoot
MongoDB7.0+ 快速入门1、MongoDB1.1、MongoDB 概念1.1.1、什么是MongoDBMongoDB 是在2007年由DoubleClick公司的几位核心成员开发出的一款分布式文档数据库,由C++语言编写。 目的是为了解决数据大量增长的时候系统的可扩展性和敏捷性。MongoDB要比传统的关系型数据库简单很多。 在MongoDB中数据主要的组织结构就是数据库、集合和文档,文档存储在集合当中,集合存储在数据库中。 MongoDB中每一条数据记录就是一个文档,数据结构由键值(key=>value)对组成。 文档类似于 JSON 对象,它的数据结构被叫做BSON(Binary...
MQ系列(七)| RocketMQ 为什么性能不如Kafka?
RocketMQ 为什么性能不如 Kafka? RocketMQ 使用的是 mmap 零拷贝技术,而 kafka 使用的是 sendfile (硬件设备技术 SG-DMA,不影响(不占用)CPU工作) mmap 内核缓冲区->映射用户缓冲区->内核缓冲区->网卡sendfile 内核缓冲区-> SG-DMA -> 网卡 在上篇文章《rocketmq 是什么》中,我们了解到 RocketMQ 的架构其实参考了 kafka 的设计思想,同时又在 kafka 的基础上做了一些调整。看起来,RocketMQ 好像各方面都比 kafka 更能打。 但 kafka 却一直没被淘汰,说明 RocketMQ 必然是有着不如 kafka 的地方。是啥呢?性能,严格来说是吞吐量。阿里中间件团队对它们做过压测,同样条件下,kafka 比 RocketMQ 快 **50%**左右。但即使这样,RocketMQ 依然能每秒处理 10w 量级的数据,依旧非常能打。你不能说 RocketMQ 弱,只能说 Kafka 性能太强了。 不过这就很奇怪了,为什么...
MQ系列(六)| RocketMQ 快速入门
RocketMQ 快速入门 本参考链接:RocketMQ 是什么?原作者:小白debug 前言 作为一个程序员,假设你有 A、B 两个服务,A 服务发出消息后,不想让 B 服务立马处理到。而是要过半小时才让 B 服务处理到,该怎么实现? 这类延迟处理消息的场景非常常见,举个例子,比如我每天早上到公司后都会点个外卖,我希望外卖能在中午送过来,而不是立马送过来,这就需要将外卖消息经过延时后,再投递到商家侧。 延时消息场景那么问题就来了,有没有优雅的解决方案?当然有,没有什么是加一层中间层不能解决的,如果有,那就再加一层。这次我们要加的中间层是消息队列 **RocketMQ**。 RocketMQ 是什么?RocketMQ 是阿里自研的国产消息队列,目前已经是 Apache 的顶级项目。和其他消息队列一样,它接受来自生产者的消息,将消息分类,每一类是一个 topic,消费者根据需要订阅 topic,获取里面的消息。 是不是很像我们上篇文章里提到的消息队 Kafka,那么问题很自然就来了,既然都是消息队列,那它们之间有什么区别呢? RocketMQ 和 Kafka...