其实系一个须刨
码龄8年
关注
提问 私信
  • 博客:203,337
    203,337
    总访问量
  • 414
    原创
  • 584,463
    排名
  • 57
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:澳大利亚
  • 加入CSDN时间: 2017-02-22
博客简介:

lianggx3的博客

查看详细资料
个人成就
  • 获得24次点赞
  • 内容获得36次评论
  • 获得117次收藏
  • 代码片获得190次分享
创作历程
  • 147篇
    2021年
  • 177篇
    2020年
  • 103篇
    2019年
成就勋章
TA的专栏
  • 工作流
    7篇
  • kafka-2.4.1
    55篇
  • java基础
    56篇
  • 一致性协议
    5篇
  • zookeeper
    1篇
  • 设计模式
    24篇
  • spring
    6篇
  • redis
    15篇
  • mysql
    30篇
  • Java多线程
    9篇
  • LEETCODE
    144篇
  • Kafka-0.10
    73篇
创作活动更多

超级创作者激励计划

万元现金补贴,高额收益分成,专属VIP内容创作者流量扶持,等你加入!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

@Transactional注解的失效场景

1. @Transactional 应用在非 public 修饰的方法上2. @Transactional 注解属性 propagation 设置错误这种失效是由于配置错误,若是错误的配置以下三种 propagation,事务将不会发生回滚。TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。TransactionDefinition.PROPAGATION_NOT_SUPPORTE
原创
发布博客 2021.07.11 ·
540 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ConcurrentHashMap原理

ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组。static class Segment<K,V> extends ReentrantLock implements Serializablefinal Segment<K,V>[] segments;  Segment继承了ReentrantLock,所以它就是一种可重入锁(ReentrantLock)。在Concurren...
原创
发布博客 2021.07.10 ·
347 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

hashmap原理

loadFactor:数据的增长因子,默认为0.75。在进行扩容操作会使用到。 threshold:允许的最大的存储的元素数量,通过length数组长度*loadFactor增长因子得出 modCount:记录内部结构发生变化的次数,put操作(覆盖值不计算)以及其他... size:实际存储的元素数量put方法final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boole...
原创
发布博客 2021.07.10 ·
252 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

简单实现一个lock

import java.lang.reflect.Field;import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.locks.LockSupport;import sun.misc.Unsafe;public class MyLock { private static Unsafe unsafe; /** * 当前加锁状态,记录加锁的次数 */ .
原创
发布博客 2021.07.09 ·
261 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

CopyOnWriteArrayList

CopyOnWriteArrayList是ArrayList的线程安全版本,CopyOnWriteArrayList是在有写操作的时候会copy一份数据,然后写完再设置成新的数据。CopyOnWriteArrayList适用于读多写少的并发场景,CopyOnWriteArraySet是线程安全版本的Set实现,它的内部通过一个CopyOnWriteArrayList来代理读写等操作,使得CopyOnWriteArraySet表现出了和CopyOnWriteArrayList一致的并发行为,他...
原创
发布博客 2021.07.08 ·
498 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ZAB协议

Paxos 虽然解决了分布式系统中,多个节点就某个值达成一致性的通信协议。但是还是引入了其他的问题。由于其每个节点,都可以提议提案,也可以批准提案。当有三个及以上的 proposer 在发送 prepare 请求后,很难有一个 proposer 收到半数以上的回复而不断地执行第一阶段的协议,在这种竞争下,会导致选举速度变慢。所以 zookeeper 在 paxos 的基础上,提出了 ZAB 协议,本质上是,只有一台机器能提议提案(Proposer),而这台机器的名称称之为...
原创
发布博客 2021.07.07 ·
160 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Raft协议

基本名词节点状态 Leader(主节点):接受 client 更新请求,写入本地后,然后同步到其他副本中 Follower(从节点):从 Leader 中接受更新请求,然后写入本地日志文件。对客户端提供读请求 Candidate(候选节点):如果 follower 在一段时间内未收到 leader 心跳。则判断 leader 可能故障,发起选主提议。节点状态从 Follower 变为 Candidate 状态,直到选主结束 termId:任期号,时间被划分成一个个任期,每次选举后都会产生
原创
发布博客 2021.07.07 ·
212 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Paxos协议

像 2PC 和 3PC 都需要引入一个协调者的角色,当协调者 down 掉之后,整个事务都无法提交,参与者的资源都出于锁定的状态,对于系统的影响是灾难性的,而且出现网络分区的情况,很有可能会出现数据不一致的情况。需要一种不用协调者角色,每个参与者来协调事务的机制。Paxos 协议是一个解决分布式系统中,多个节点之间就某个值(提案)达成一致(决议)的通信协议。它能够处理在少数节点离线的情况下,剩余的多数节点仍然能够达成一致。即每个节点,既是参与者,也是决策者...
原创
发布博客 2021.07.07 ·
282 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

3PC三阶段提交

阶段一:CanCommit事务询问。协调者向所有参与者发送包含事务内容的canCommit的请求,询问是否可以执行事务提交,并等待应答; 各参与者反馈事务询问。正常情况下,如果参与者认为可以顺利执行事务,则返回Yes,否则返回No。阶段二:PreCommit在本阶段,协调者会根据上一阶段的反馈情况来决定是否可以执行事务的PreCommit操作。有以下两种可能:执行事务预提交发送预提交请求。协调者向所有节点发出PreCommit请求,并进入prepared阶段; 事务...
原创
发布博客 2021.07.07 ·
293 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

2PC二阶段提交

2PC即Two-Phase Commit,二阶段提交。广泛应用在绝大部分关系型数据库,为了使得基于分布式架构的所有节点可以在进行事务处理时能够保持原子性和一致性。阶段一:提交事务请求事务询问。协调者向所有参与者发送事务内容,询问是否可以执行提交操作,并开始等待各参与者进行响应; 执行事务。各参与者节点,执行事务操作,并将Undo和Redo操作计入本机事务日志; 各参与者向协调者反馈事务问询的响应。成功执行返回Yes,否则返回No。阶段二:执行事务提交协调者在...
原创
发布博客 2021.07.07 ·
341 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

三次握手过程中有哪些不安全性

SYN洪泛攻击服务器处于SYN_Wait的状态: 1)伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送。当大量的攻击者请求建立连接时,服务器就会存在大量未完成三次握手的连接,服务器主机backlog被耗尽而不能响应其它连接。即SYN泛洪攻击(属于DOS的一种,发送大量的半连接请求,耗费CPU和内存资源,引起网络堵塞甚至系统瘫痪)    当你在服务器上看到大量的...
原创
发布博客 2021.07.06 ·
693 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

解决TIME_WAIT过多造成的问题

​​​​​​​​​​​​​​​​​​​​​​​​​​​​看到TIME_WAIT状态是在tcp断开链接时产生的,因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。先发FIN包的一方执行的是主动关闭;后发FIN包的一方执行的是被动关闭。主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL时长。 MSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL时间,还没有被接收,那么会被丢弃。关于MSL的大小,RFC 7...
原创
发布博客 2021.07.05 ·
5668 阅读 ·
0 点赞 ·
1 评论 ·
13 收藏

a=a+b与a+=b有什么区别

+=操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换。如:byte a = 127;byte b = 127;b = a + b; // error : cannot convert from int to byteb += a; // ok(其实无论 a+b 的值为多少,编译器都会报错,因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错)...
原创
发布博客 2021.07.02 ·
270 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

面向对象五大基本原则

单一职责原则SRP(Single Responsibility Principle) 类的功能要单一,不能包罗万象,跟杂货铺似的。 开放封闭原则OCP(Open-Close Principle) 一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。 里式替换原则LSP(the Liskov Substitution Principle LSP) 子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你姥姥家干活。哈哈~~ ..
原创
发布博客 2021.07.02 ·
120 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring 常⽤用的注⼊入⽅方式有哪些

1.构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。2.Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化匕ean之后,调用该bean的Setter方法,即实现了基于Setter的依赖注入。3.基于注解的注入:最好的解决方案是用构造器参数实现强制依赖,Setter方法实现可选依赖。...
原创
发布博客 2021.06.29 ·
475 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

redis缓存问题

什么是缓存穿透?怎么解决?缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。解决办法:1、缓存空对象:如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。 缓存空对象带来的问题: 1.空值做了缓存,意昧着缓存中存了更多的键,需要更多的内存空间,比较有效...
原创
发布博客 2021.06.29 ·
199 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis 为什什么这么快

1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速;2.数据结构简单,对数据操作也简单;3.采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CpU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;4.使用多路I/0复用模型,非阻塞旧。...
原创
发布博客 2021.06.29 ·
114 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TCP三次握手/四次挥手

三次握手第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack ...
原创
发布博客 2021.06.29 ·
119 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mybatis缓存

Mybatis中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存是指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存1024条SQL。二级缓存是指可以跨SqlSession的缓存。是mapper级别的缓存,对于mapper级别的缓存不同的sqlsession是可以共享的。Mybatis的一级缓存第一次发出一个查询sql,sql...
原创
发布博客 2021.06.29 ·
121 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

什么是 AQS(抽象的队列同步器)

AbstractQueuedSynchronizer类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch。它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里volatile是核心关键词。state的访问方式有三种: getState() setSta...
原创
发布博客 2021.06.28 ·
319 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多