自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(330)
  • 资源 (1)
  • 问答 (5)
  • 收藏
  • 关注

原创 超级详细,讲解分布式锁各种实现(附代码)(redis,zookeeper,mysql)

分布式理论1、分布式编程是解决您可以使用多台计算机在单台计算机上解决的同一问题的艺术- 通常,因为问题不再适合单台计算机2、分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。3、分布式系统的核心定理CAP,该定理指出了这三个性质:(1) 一致性:所有节点同时看到相同的数据。(2) 可用性:节点故障不会阻止幸存者继续操作。(3) 分区容错性:尽管由于网络和/或节点故障导致消息丢失, 系统仍继续运行4,CAP定理的运用只

2022-01-06 11:36:35 4138 5

原创 Oauth2权限认证系统使用文档

Oauth2权限认证系统需求分析Oauth2权限认证系统基于spring security和spring cloud oauth2实现的为各个业务系统提供认证,权限控制,包括按钮,菜单,接口级别的权限,以及用户,角色,权限资源的管理。业务系统只需求按照要求接入配置,就可以完成系统间授权,联合登陆,并且解决了开发api。详细设计技术分析Spring securitySpring Security为基于J2EE的企业软件应用程序提供全面的安全服务核心功能:认证-授权(访问控制)Oauth2

2021-09-17 14:51:15 963

原创 优雅的处理sping项目全局异常

定义一个全局异常处理类,通过@ControllerAdvice注解,其中定义了匹配异常类型的方法来处理异常,用注册@ExceptionHandler({Throwable.class})注解方法,Throwable.class为匹配的异常类型。/*** 全局异常./*** Throwable异常处理.} /*** BusinessException异常处理.} /*** MethodArgumentNotValidException异常处理.} }

2023-04-18 11:11:24 198 1

转载 分布式理论之CAP

引言CAP 理论,相信很多人都听过,它是指:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。为什么要理解 CAP 理论?我能说出很多理由来。如果是在职场上,也许最合适的理由是,当领导给出的任务不靠谱时,我们可以依据 CAP 去否决它。比如,有这么一个任务,给你定了三大目标:既要提升系统的可用性又要保证数据的实时可见还有提升系统的容错能力看到“既要、又要、还要”,是不是想到了阿

2023-02-24 15:05:53 194

转载 数据结构系列之跳表

什么是跳表跳表是一种数据结构。它允许快速查询一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(log n),优于普通队列的O(n)。引题线性表这种数据有两种具体实现, 数组和链表。具体的内容之前的文章里也有说过,可以翻翻看哇~。在这里两种数据结构中,数组的优点是查找速度快,而链表的优点是增删的效率高,这也是我们常说的。其实,非也。数组是一种内存连续的数据结构,其优点是可以通过首地址+N*(sizeOf(Node)) 来快速获取指定位置上的元素.假如我们不知道指定元素的位置呢?链

2023-02-16 11:49:40 663

原创 自从用了checkstyle,代码一天比一天规范

Checkstyle 可以检查源代码的许多方面。它可以发现类设计问题、方法设计问题。它还能够检查代码布局和格式问题。Checkstyle 配置指定要插入哪些模块并将其应用于 Java 源文件。模块以树的形式构建,其根是Checker模块配置 XML 文档中的module元素指定由元素的 name属性标识的模块。以下是典型配置文档的片段:编写checkstyle文件关于checkstyle文件的原理等不过多阐述,这里就给出一个大家一般都会用的一个checkstyle.xml文件,其中定义了很多我们需要去检

2022-11-30 14:24:34 231

原创 Mysql引擎innodb的脏读,不可重复读,幻读问题

不可重复读是指在一个事务内多次读取一个集合数据,这个事务还没有结束时,另外一个事务对这个集合数据做了DML操作,因此第一个事务中的两次读取数据之间,由于第二个事务的操作,造成了两次数据不一样,这种情况称为不可重复读。示例中,会话A开启一个事务读取数据,读到一条数据,此时会话B插入了一条数据,并且提交了,随后会话A又进行了一次读取数据,读到两条,造成会话A两次读取数据记录不一致。不可重复读和脏读的区别是:脏读是读取未提交的数据,不可重复读是读取到已提交的数据,但违反了数据库事务一致性的要求。

2022-10-26 11:45:36 465

原创 Mysql引擎innodb行锁的三种算法

Mysql中的锁基于锁的属性分类:共享锁、排他锁。基于锁的状态分类:意向共享锁、意向排它锁根据锁的粒度分类:全局锁、页锁、表级锁、行锁(记录锁、间隙锁、和临键锁),实际上的锁就这些,上面两种分类只是站在不同维度上看这些锁行锁的三种算法Record Lock(记录锁)(1)记录锁是一种行级锁, 仅仅锁住索引记录的一行,在单条索引记录上加锁。(2)record lock锁住的永远是索引,或者说主键,而非记录本身,即使该表上没有任何索引,那么innodb会在后台创建一个隐藏的聚集主键索引,那么锁住的

2022-10-25 15:14:06 551

原创 leetcode-3.无重复字符的最长子串

链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “abcabcbb”输入: s = “pwwkew”

2022-10-20 19:25:48 116

原创 JVM的内存结构

JVM,堆,方法区,直接内存,程序技术器

2022-10-20 15:01:41 263

原创 JVM调参,看这一篇就够了

JVM相关参数调试通过实战的 方式来进行参数调试,观察结果才能真正理解含义,下面将通过一段代码,来一个一个参数的进行测试。代码示例后面的代码都是通过对下面这段代码进行参数调试来验证相关参数的意义。public class JConsoleTest {    public byte[] bytes;    private final static&n

2022-08-23 15:47:30 673

转载 看看大神是怎么在spring中运用设计模式的

实现方式:Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。实现原理:bean容器的启动阶段:读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。...

2022-08-16 11:56:23 209

原创 值得收藏的几个postman特色功能帮你事半功倍!

postman的变量都在{{变量}}中。预发环境定义全局domain开发环境定义全局domainpostman提供了很多随机变量,通过{{符号可以自动引出。随机生成一个int值。

2022-08-05 11:57:49 1912

原创 SaaS多租户数据隔离的三种解决方案

多租户问题,简单来说,是一种架构设计方式,就是在一台或者一组服务器上运行的saas系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改。SaaS使得软件以互联网为载体的服务形式被客户使用,所以需要全面考虑到服务合约的签订、服务使用的计量、在线服务质量的保证、服务费用的收取等问题。zk分布式锁和redis分布式锁如何选择?...

2022-07-28 22:58:42 7712 3

原创 斐波那契数列的递归优化《备忘录递归》

根据递归树,可以看出,要计算f(20)就得计算出f(19)+f(18),以此类推。但是根据递归树可以看出,f(18)被计算了两次,诸如此类,有很多大量的重复的计算,消耗时间,低效,就是动态规划的第一个性质。带备忘录的递归算法就是把一颗巨大冗余的递归树通过剪裁,改造成了不冗余的递归图,减少子问题的解决。在斐波那契的暴力递归中,解决子问题的时间没有循环,故时间复杂度为O(1).次方减1(n为树的高度),指数级别,所以求子问题的时间复杂度为O(2。由于改造后不涉及冗余计算子问题的数量变成了线形的,为O(n)...

2022-07-27 22:38:18 742

原创 聊一聊什么是SaaS,以及遇到的问题......

SaaS是SoftwareasaService的缩写,意为软件即服务。SaaS是一种软件部署模式,第三方供应商在云基础设施上构建应用程序,并以订阅的形式,通过互联网向客户提供这些应用程序,不要求客户预先建设底层基础设施。这意味着软件可以在任何有互联网连接和网络浏览器的设备上访问,而不像传统软件那样只能在本地机器上安装。......

2022-07-27 15:31:33 970

原创 沟通中经常用到的几个库存术语

周转库存周转库存是商业企业为了完成商品流转计划,保证市场正常供应,根据商品销售任务、商品流通环节和速度应保持一定数量的周转需要的商品库存。商业企业的周转库存,是组织商品流通必不可少的物质基础。周转库存量的大小关系到流动资金占用额的多少,按照一定规模的商品流通,在有利于扩大销售和加强管理的前提下,减少中间环节,简化业务手续,健全经济责任制,加速商品流转,把周转库存量压缩到最低限度,从而节约地、有效地使用流动资金。对于合理摆布库存结构,提高企业经济效益,具有重要的促进作用。安全库存安全库存(又称保险库存

2022-07-26 11:06:01 1008

原创 leetcode-99.恢复二叉搜索树

给你二叉搜索树的根节点root,该树中的恰好两个节点的值被错误地交换。解释2不能在3的右子树中,因为21。第三,并且有且只有两个节点被交换了,因此找到两个被交换的节点即可。输入root=[3,1,4,null,null,2]输入root=[1,3,null,null,2]第二,二叉搜索树中的两个节点被交换了,树的结构没有变。输出[2,1,4,null,null,3]输出[3,1,null,null,2]...

2022-07-20 23:04:07 212

原创 完整的扣减库存方案

查询库存判断是否超出库存开始扣减然后 A 线程更新最终库存数 lastInventory = inventory - 1 = 9,B 线程更新库存数 lastInventory = inventory - 1 = 9。而实际最终的库存应是 8 才对,这样就出现库存超卖的情况,而发不出货。恶意买家下单恶意买家指短时间内大量下单,将库存用完的买家。如果扣减库存后,用户不下单,占用库存名额,但是也要避免某些用户真实需要大量订单。解决超卖现象update的锁可以参考:mysql update锁分析 这篇文章了解一

2022-07-13 20:55:44 2462

原创 leetcode-105.从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1:提示:来源:力扣(LeetCode)链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal...

2022-07-12 23:20:01 1600

原创 leetcode-124. 二叉树中的最大路径和

路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:提示:树中节点数目范围是 [1, 3 * 104]-1000 ...

2022-07-11 21:33:42 72

原创 整理了一周的Kafka规划和优化方案

部署规划系统选型因为kafka服务端代码是Scala语言开发的,因此属于JVM系的大数据框架,目前部署最多的3类操作系统主要由Linux ,OS X 和Windows,但是部署在Linux数量最多,为什么呢?因为I/O模型的使用和数据网络传输效率两点。第一:Kafka新版本的Clients在设计底层网络库时采用了Java的Select模型,而在Linux实现机制是epoll,模型在redis中也是这几种,明确一点就是:kafka跑在Linux上效率更高,因为epoll取消了轮询机制,换成了回调机制,

2022-07-08 15:24:46 1356

原创 kafka消费的完整解决方案

无论是kafka,还是RocketMQ,rabbitMQ等,与springboot的结合得益于spring的强大,使得变的非常easy,但依然知识简单的使用变的非常容易,如果要达到理想的结果,不仅需要他们对原理熟悉一点,还要对spring提供的sdk熟悉,下面就看一下kafka的使用,以及需要解决的一些问题。引入依赖            <!--kafka-->&nbs

2022-07-01 17:57:03 2412

原创 Windows下使用Kafka的常用命令

安装路径:D:\kafka\kafka_2.13-3.2.0\启动zookeeper启动kafka查看topic列表创建topic删除topic生产消息消费消息查看kafka指定TOPIC的详情查看消费组列表查看消费组详情查看指定消费组消费情况查看查看所有消费组消费情况...

2022-06-28 14:15:07 833 2

原创 docker-compose安装RocketMq教程

端口说明:docker-compose.yml文件内容docker-compose.yml中的配置的文件路径对应如下broker.conf路径:启动:在/opt/docker/compose/rocketmq 下执行命令:访问地址:ip:8180访问成功出现如下:

2022-06-20 16:21:08 1003

转载 真正的缓存之王Caffine Cache

真正的缓存之王

2022-06-20 11:54:34 229

原创 Docker部署springboot项目全过程

jar包自己通过maven打包在启动module中的pom添加执行package命令文件内容:文件路径Dockerfile和jar包的路径构建镜像在当前jar包文件路径下执行运行镜像完成!!!后续可以自己启动或者停止

2022-06-20 11:18:07 161

原创 Linux中部署springboot项目

通过idea和maven去打jar包在父pom中添加在启动module中的pom添加执行package命令自定义一个你的一个目录脚本可能要设置一下linux的停止脚本查看日志进入target的同级logs文件下查看start.out

2022-06-07 18:19:28 336 1

原创 Docker安装RocketMQ详细教程

1. rocketmq的部署架构RocketMQ 网络部署特点NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker

2022-05-24 23:01:51 6696 4

原创 RocketMQ基本概念

1 消息模型(Message Model)RocketMQ主要由** Producer、Broker、Consumer** 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。C

2022-05-20 15:51:29 76

原创 从头开始学《RabbitMQ》第一篇

RabbitMQ2007 年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。优点:由于 erlang 语言的高并发特性,性能较好;吞吐量到万级,MQ 功能比较完备,健壮、稳定、易 用、跨平台、支持多种语言 如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX 文档齐全;开源提供的管理界面非常棒,用起来很好用,社区活跃度高;更新频率相当高官网更新:https://

2022-05-10 19:54:25 81

原创 《雪花算法》的介绍以及实现

分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的SnowFlake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。原理Twitter的雪花算法SnowFlake,使用Java

2022-03-22 17:54:25 314

原创 Java必备

Java基础JVMGC集合源码多线程数据结构mysqlredo logkafka分区ISR架构设计(主备)重平衡rebalanceredisrdb和aof三大问题redis为什么快?zookeeper节点选举mybatiselasticsearch网络协议算法Linux设计模式spring系列微服务限流熔断sentinel分布式锁,事务(seata)分布式锁分布式架构设计项目...

2022-01-18 10:37:31 1699

原创 MySQL中 in 和 exists区别

MySQL中 in 和 exists区别MySQL中的in 语句是把外表和内表作hash 连接,而 exists语句是对外表作 loo循环,每次 loop 循环再对内表进行查询。一直大家都认为 exists 比 in 语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。1、 如果查询的两个表大小相当,那么用 in 和 exists 差别不大。2、 如果两个表中一个较小一个是大表,则子查询表大的用 exists,子查询表小的用 in。3、 not in 和 not exists:如果查询语

2022-01-14 15:41:24 699

原创 Mysql悲观锁和乐观锁的选择

mysql数据库锁数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制-- 核心 SQL,主要靠 for updateselect status from t_goods where id=1 fo

2022-01-14 14:49:04 403

原创 Redis持久化策略如何选择?

持久化方式对比RDB优点RDB文件紧凑,体积小,网络传输快,适合全量复制;恢复速度比AOF快很多。当然,与AOF相比,RDB最重要的优点之一是对性能的影响相对较小。缺点RDB文件的致命缺点在于其数据快照的持久化方式决定了必然做不到实时持久化,而在数据越来越重要的今天,数据的大量丢失很多时候是无法接受的,因此AOF 持久化成为主流。此外,RDB 文件需要满足特定格式,兼容性差(如老版本的 Redis 不兼容新版本的 RDB 文件)AOF优点与RDB 持久化相对应,

2022-01-14 14:31:56 353

转载 阿里TransmittableThreadLocal

初识TransmittableThreadLocal

2022-01-14 14:21:02 299

转载 Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

2022-01-11 11:57:13 163

原创 记录线上问题,事务和分布式锁之间发生的问题

1,背景我们消费其他系统过来的产品信息,然后插入我们数据库使用,但是对方不知道什么原因总是会重复的发送一些产品,因此做了产品判重。但发现没有作用。经过排查,发现对方会在几乎同时发送同样的产品信息过来。2,问题1:由于几乎同时执行,所以,当线程一进来进行插入,线程2也进来了,这时候线程1还没插入成功,线程2就判断是否存在,存在就不插入,不存在就插入,此时会插入成功。因为线程1还没插入成功。解决方案:在执行判断是否已经插入操作的方法上加锁,保证线程1插入成功后,线程2再进行判断:伪代码如下: @T

2021-12-30 19:37:06 781

原创 JVM运行时内存

Java堆从GC的角度可以细分为:新生代(Eden区,From Survivor区和To Survivor区)和老年代。新生代Eden区Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eedn区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。SurvivorFrom上一次GC的幸存者,座位这一次GC的被扫描者。SurvivorTo保留了一次MinorGC过程中的幸存者MinorGC的过程(复制->清空->互换)MinorGC采用

2021-12-29 19:38:26 142 2

Java高工面试手册汇总.pdf

Java高工面试手册汇总.pdf

2022-01-12

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除