CSDN博主:【java_wxid】
CSDN博主:点击【Java廖志伟】
CSDN社区:点击【幕后大佬】
码云:点击【互联网Java工程师知识扫盲】
  2021年4月7日
摘要: Zookeeper脑裂问题? 当一个集群的不同部分在同一时间都认为自己是活动的时候,我们就可以将这个现象称为脑裂症状。通俗的说,就是比如当你的 cluster 里面有两个结点,它们都知道在这个 cluster 里需要选举出一个 master。那么当它们两之间的通信完全没有问题的时候,就会达成共识,选 阅读全文
posted @ 2021-04-07 17:10 我是廖志伟 阅读(23) 评论(0) 推荐(0)
摘要: Zookeeper分布式锁? 客户端A要获取分布式锁的时候首先到locker下创建一个临时顺序节点(node_n),然后立即获取locker下的所有(一级)子节点。此时因为会有多个客户端同一时间争取锁,因此locker下的子节点数量就会大于1。对于顺序节点,特点是节点名称后面自动有一个数字编号,先创 阅读全文
posted @ 2021-04-07 16:55 我是廖志伟 阅读(22) 评论(0) 推荐(0)
摘要: Zookeeper假死问题? 假死:心跳出现超时可能是master挂了,但是也可能是master,zookeeper之间网络出现了问题,也同样可能导致。这种情况就是假死,master并未死掉,但是与ZooKeeper之间的网络出现问题导致Zookeeper认为其挂掉了然后通知其他节点进行切换,这样s 阅读全文
posted @ 2021-04-07 16:54 我是廖志伟 阅读(29) 评论(0) 推荐(0)
摘要: 选举机制 领导者选举的过程实际上就是比较哪台服务器比较强,比较规则是:1. 谁的数据比较新谁当领导(zxid),2.数据都一样则看谁的服务器Id(myid)比较大,谁就是领导;这个过程是通过各个服务器之间相互投票来进行的,每台服务器会接收其他服务器的投票,在投票信息里就会包含上面说的两个信息zxid 阅读全文
posted @ 2021-04-07 16:53 我是廖志伟 阅读(9) 评论(0) 推荐(0)
摘要: Zookeeper底层原理? zookeeper:Zookeeper会维护一个类似于标准的文件系统的具有层次关系的数据结构。这个文件系统中每个子目录项都被称为znode节点,这个znode节点也可以有子节点,每个节点都可以存储数据,客户端也可以对这些node节点进行getChildren,getDa 阅读全文
posted @ 2021-04-07 16:53 我是廖志伟 阅读(23) 评论(0) 推荐(0)
摘要: 索引数据结构 B+树中间节点没有存储数据,叶节点存放数据,其余节点用来索引,所以同样大小的磁盘页可以容纳更多的节点元素,而B树是每个索引节点都会有Data域,所以B+树IO的次数更少。 B+树的数据保存,只有在叶子节点中才会有,而根节点只保存了索引,比如说根节点大小是16kb,一个索引大小是4b,如 阅读全文
posted @ 2021-04-07 16:34 我是廖志伟 阅读(15) 评论(0) 推荐(0)
摘要: 悲观锁、乐观锁、排它锁、共享锁、表级锁、行级锁,死锁? 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。适用于写为居多的场景下。比如行锁,表锁等,读锁,写锁,syncronized实现的锁等。sql中实现悲观锁,使用for 阅读全文
posted @ 2021-04-07 15:29 我是廖志伟 阅读(10) 评论(0) 推荐(0)
摘要: 四大属性底层实现原理? A(原子性): 要么全部完成,要么完全不起作用。底层实现原理:undo log(当这个事务对数据库进行修改的时候,innodb 生成对应 undo log,他会记录这个 SQL 执行的相关信息,如果 SQL 执行失败发生这个回滚,innodb 根据这个 undo log 内容 阅读全文
posted @ 2021-04-07 13:55 我是廖志伟 阅读(27) 评论(0) 推荐(0)
摘要: 数据库事务隔离级别? 脏读: 一个事务a修改或添加了一条数据,在a事务提交之前,另一个事务b读到了这条数据,并进行了操作。a如果回滚的话,脏读可能会导致b操作不存在的数据。 不可重复读: 在一次事务中的两次相同条件的查询不一致,比如a事务执行select count(*) from user whe 阅读全文
posted @ 2021-04-07 13:49 我是廖志伟 阅读(13) 评论(0) 推荐(0)
摘要: 可靠消息最终一致性方案 基于 MQ 来实现事务。比如阿里的 RocketMQ 就支持消息事务。 大概的意思就是: A 系统先发送一个 prepared 消息到 mq,如果这个 prepared 消息发送失败那么就直接取消操作别执行了; 如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉 阅读全文
posted @ 2021-04-07 11:21 我是廖志伟 阅读(13) 评论(0) 推荐(0)
摘要: 最大努力通知? 最大努力通知 其实我觉得本地消息表也可以算最大努力,事务消息也可以算最大努力。 就本地消息表来说会有后台任务定时去查看未完成的消息,然后去调用对应的服务,当一个消息多次调用都失败的时候可以记录下然后引入人工,或者直接舍弃。这其实算是最大努力了。 事务消息也是一样,当半消息被commi 阅读全文
posted @ 2021-04-07 11:09 我是廖志伟 阅读(13) 评论(0) 推荐(0)
摘要: MQ 事务消息? MQ 事务消息 有一些第三方的MQ是支持事务消息的,比如RocketMQ,他们支持事务消息的方式也是类似于采用的二阶段提交,但是市面上一些主流的MQ都是不支持事务消息的,比如 RabbitMQ 和 Kafka 都不支持。 第一阶段Prepared消息,会拿到消息的地址。第二阶段执行 阅读全文
posted @ 2021-04-07 11:05 我是廖志伟 阅读(15) 评论(0) 推荐(0)
摘要: 补偿事务(TCC)? 补偿事务(TCC) 针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。它分为三个阶段: Try 阶段主要是对业务系统做检测及资源预留 Confirm 阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行 Confirm阶段时,默认 Confirm阶段是不会出错 阅读全文
posted @ 2021-04-07 11:01 我是廖志伟 阅读(57) 评论(0) 推荐(0)
摘要: 三阶段提交(3PC)? 3PC 相比于 2PC 它在参与者中也引入了超时机制,并且新增了一个阶段使得参与者可以利用这一个阶段统一各自的状态,3PC 包含了三个阶段,分别是准备阶段、预提交阶段和提交阶段 准备阶段的变更成不会直接执行事务,而是会先去询问此时的参与者是否有条件接这个事务,因此不会一来就干 阅读全文
posted @ 2021-04-07 10:58 我是廖志伟 阅读(42) 评论(0) 推荐(0)
摘要: 两阶段提交(2PC)? 两阶段提交(2PC) 第一阶段:协调者询问参与者事务是否执行成功,参与者发回事务执行结果。这一阶段的协调者有超时机制,假设因为网络原因没有收到某参与者的响应或某参与者挂了,那么超时后就会判断事务失败,向所有参与者发送回滚命令。 第二阶段:如果事务在每个参与者上都执行成功,事务 阅读全文
posted @ 2021-04-07 10:56 我是廖志伟 阅读(23) 评论(0) 推荐(0)
摘要: CAP理论? 分布式环境下(数据分布)要任何时刻保证数据一致性是不可能的,只能采取妥协的方案来保证数据最终一致性。这个也就是著名的CAP定理。 C一致性:对于指定的客户端来说,读操作保证能够返回最新的写操作结果。 A可用性:非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。 P分区容 阅读全文
posted @ 2021-04-07 10:53 我是廖志伟 阅读(25) 评论(0) 推荐(0)
摘要: BASE理论? BASE 理论是对 CAP 理论的延伸,核心思想是即使无法做到强一致性,但应用可以采用适合的方式达到最终一致性。 基本可用: 基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供 阅读全文
posted @ 2021-04-07 10:52 我是廖志伟 阅读(27) 评论(0) 推荐(0)
摘要: 秒杀场景设计 流量过滤: 本质上,参与秒杀的用户很多,但是商品的数量是有限的,真正能抢到的用户并不多,那么第一步就是要过滤掉大部分无效的流量。 活动开始前前端页面的Button置灰,防止活动未开始无效的点击产生流量。 前端添加验证码或者答题,防止瞬间产生超高的流量,可以很好的起到错峰的效果,现在的验 阅读全文
posted @ 2021-04-07 10:40 我是廖志伟 阅读(21) 评论(0) 推荐(0)
摘要: 库存超卖问题 针对秒杀建议选择下单扣库存的方式:首先查询redis缓存库存是否充足先扣库存再落订单数据,可以防止订单生成了没有库存的超卖问题扣库存的时候先扣数据库库存,再扣减redis库存,保证在同一个事务里,无论两者哪一个发生了异常都会回滚。有一个问题是可能redis扣成功了由于网络问题返回失败, 阅读全文
posted @ 2021-04-07 10:39 我是廖志伟 阅读(32) 评论(0) 推荐(0)
摘要: 金额篡改问题 案例:下订单时,拿到别人的URL,篡改数据(金额)发送给系统 方法一:对插入的操作进行校验:一个请求的URL传入进来,根据参数找到对应的用户关联表,查询到用户的userid和用户登录后保存到redis中的userid进行对比。例如:传入参数为(订单id)和(优惠券id),拿(订单id) 阅读全文
posted @ 2021-04-07 10:31 我是廖志伟 阅读(24) 评论(0) 推荐(0)
摘要: 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数 sso认证中心发现用户未登录,将用户引导至登录页面 用户输入用户名密码提交登录申请 sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌 sso认证中心带着令牌跳 阅读全文
posted @ 2021-04-07 10:29 我是廖志伟 阅读(12) 评论(0) 推荐(0)
摘要: 幂等性实现 乐观锁:数据库:通过version或者时间戳防止其他操作并发更新,更新失败要有一定的重试机制。CAS比较与交换也是乐观锁。 去重表:在插入数据的时候,插入去重表,利用数据库的唯一索引特性,保证唯一的逻辑。这种方法适用于在业务中有唯一标的插入场景中,比如在以上的支付场景中,如果一个订单只会 阅读全文
posted @ 2021-04-07 10:27 我是廖志伟 阅读(31) 评论(0) 推荐(0)
摘要: 线程的生命周期,什么时候会出现孤儿进程,僵尸进程?它们之间的危害是什么?如何处理僵尸进程? 线程的生命周期 新建(new Thread):当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。例如:Thread t1=new Thread(); 就绪(runnable):调用Th 阅读全文
posted @ 2021-04-07 10:23 我是廖志伟 阅读(44) 评论(0) 推荐(0)
摘要: ThreadLocal 是什么?ThreadLocal 工作原理是什么?ThreadLocal 如何解决 Hash 冲突?ThreadLocal 的内存泄露是怎么回事?为什么 ThreadLocalMap 的 key 是弱引用?ThreadLocal 的应用场景有哪些? ThreadLocal 是什 阅读全文
posted @ 2021-04-07 10:07 我是廖志伟 阅读(34) 评论(0) 推荐(0)

南北踏尘