sychronized 原理,锁升级优化
摘要:Java 对象头 以 32 位虚拟机为例 普通对象 所以以 Integer 和 int 为例子 Integer 8字节对象头 + 4字节 int 值,所以大小是 int 的 3 倍 int 4字节 int 值 数组对象 如 Student[] s = new Student[8],还包括数组长度 l
阅读全文
分布式锁
摘要:参考: java guide:分布式锁常见实现方案总结 小林 coding: 如何用 redis 实现分布式锁的? 在多线程环境中,如果多个线程同时访问共享资源(例如商品库存、外卖订单),会发生数据竞争,可能会导致出现脏数据或者系统问题,威胁到程序的正常运行。 分布式锁是用于分布式环境下并发控制的一
阅读全文
Redis —— 事务
摘要:参考: 小林:Redis面试篇 shuxiaohua:Jedis分析一-Pipeline is currently not supported for JedisClusterConnection. java guide: Redis常见面试题总结(下) javap: Redis客户端使用技巧,Re
阅读全文
MySql —— 死锁场景
摘要:参考: 小林coding: https://xiaolincoding.com/mysql/lock/deadlock.html 出世&入世:https://blog.csdn.net/weixin_54828627/article/details/129379140 死锁的四个必要条件: 互斥 占
阅读全文
RocketMQ 生产端与消费端
摘要:参考: en_oc:RocketMQ源码详解 | Consumer篇 · 其一:消息的 Pull 和 Push 田守枝:深入理解RocketMQ Rebalance机制 官方文档:Apache RocketMQ Kong Blog: RocketMQ——4. Consumer 消费消息 ksfzha
阅读全文
MySql —— Buffer Pool
摘要:有了缓冲池后: 当读取数据时,如果数据存在于 Buffer Pool 中,客户端就会直接读取 Buffer Pool 中的数据,否则再去磁盘中读取。 当修改数据时,首先是修改 Buffer Pool 中数据所在的页,然后将其页设置为脏页,最后由后台线程将脏页写入到磁盘。 Buffer Pool 有多
阅读全文
Zookeeper
摘要:参考: java guide : https://javaguide.cn/distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.html jsongj: http://www.jasongj.co
阅读全文
Gossip 协议
摘要:参考: 凤凰架构:https://icyfenix.cn/distribution/consensus/gossip.html java guide: https://javaguide.cn/distributed-system/protocol/gossip-protocl.html Paxos
阅读全文
Multi Paxos 、Raft 、ZAB 、Quorum 算法
摘要:一、将共识问题分解为三个问题 1.选主 图一 Paxos 算法的"活锁"问题 《https://www.cnblogs.com/suBlog/p/17554677.html》 Basic Paxos 的活锁问题,两个提案节点互不相让地争相提出自己的提案,抢占同一个值的修改权限,导致整个系统在持续性地
阅读全文
Basic Paxos 算法
摘要:参考: 凤凰架构:https://icyfenix.cn/distribution/consensus/paxos.html Paxos 算法将分布式系统中的节点分为三类: 提案节点:称为 Proposer,提出对某个值进行设置操作的节点,设置值这个行为就被称之为提案(Proposal),值一旦设置
阅读全文
MyBatis Q&A
摘要:参考: 开发百宝箱:https://pdai.tech/md/framework/orm-mybatis/mybatis-overview.html 每天都要进步一点点 :MyBatis源码阅读(八) Executor执行器 1、MyBatis 分页原理 (1)逻辑(内存)分页——MyBatis 使
阅读全文
二、共享模型之管程
摘要:共享带来的问题 两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? static int counter = 0; public static void main(String[] args) throws InterruptedException { T
阅读全文
CAP & BASE 理论
摘要:参考: java guide : https://javaguide.cn/distributed-system/protocol/cap-and-base-theorem.html 凤凰架构:https://icyfenix.cn/distribution/consensus/ CAP CAP 定
阅读全文
Redis 高可用 —— 集群
摘要:为什么需要 Cluster 当数据量过大时,redis 响应会特别慢。 主要是 Redis RDB 持久化机制导致的,Redis 会 Fork 子进程完成 RDB 持久化操作,fork 执行的耗时与 Redis 数据量成正相关(因为子进程会复制一份父进程的页表,数据量越多,页表越大)。 而 Fork
阅读全文
MySql —— 可重复读完全解决了幻读问题吗
摘要:参考: 小林coding: https://xiaolincoding.com/mysql/transaction/phantom.html#%E4%BB%80%E4%B9%88%E6%98%AF%E5%B9%BB%E8%AF%BB 当同一个查询在不同的时间产生不同的结果集时,事务中就会出现所谓的幻
阅读全文
LeetCode —— 子数组/子串/子序列
摘要:560. 和为 K 的子数组(前缀和计数map) 官方题解:https://leetcode.cn/problems/subarray-sum-equals-k/solution/he-wei-kde-zi-shu-zu-by-leetcode-solution/ 假设 left 到 right 下
阅读全文
LeetCode —— 哈希表
摘要:1. 两数之和 class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; Map<Integer, Integer> map = new HashMap(); for (int
阅读全文
ThreadLocal
摘要:参考: java guide : https://javaguide.cn/java/concurrent/java-concurrent-questions-03.html 阿里云开发者社区:https://developer.aliyun.com/article/1180633 Dongguab
阅读全文
LeetCode —— 买卖股票的最佳时机专题
摘要:121. 买卖股票的最佳时机 minPrice 维护到当天为止的最低价格 maxProfit 维护到当天我为止的最大利润 例如: [2,5,1,3], 第二天: minPrice=2 maxProfit=3; 第四天:minPrice=1 maxProfit=max(3, 3-1=2)=3; cla
阅读全文
LeetCode —— 贪心
摘要:55. 跳跃游戏 如果当前数字为3,代表在这一格可以跳1或2或3格 维护一个全局最远可到达的下标 maxReach 遍历 nums 数组,如果 maxReach 小于当前下标 i ,说明现在这里就不可以到达,更别说终点了,return false 接下来就是现在这个下标可以到达的情况 现在这个下标的
阅读全文
Redis 高可用 —— 哨兵
摘要:参考 码哥字节:https://xie.infoq.cn/article/1c714709d00b2b55e8416fb99 小林coding: https://xiaolincoding.com/redis/cluster/sentinel.html 锦鱼不忘旧时晨:https://blog.cs
阅读全文
LeetCode —— 图
摘要:200. 岛屿数量 695. 岛屿的最大面积 精品题解 https://leetcode.cn/problems/number-of-islands/solution/dao-yu-lei-wen-ti-de-tong-yong-jie-fa-dfs-bian-li-/ 注意深度优先遍历,对一格陆地
阅读全文
MySQL —— 为什么单表不要超过 2000w
摘要:InnoDB 采用 B+ 树存储,真正的数据行存在聚簇索引的叶子节点上 B+ 树的每个节点是一页,一页固定大小是 16k ,其中 1k 是页头,15k 是可以存放 索引/数据行 的空间 B+ 树的层数要尽可能小,以减少查找数据时磁盘 IO 的次数(磁盘 IO 很慢),实际中一般是 3 层 下面假设
阅读全文
MySQL —— 数据页与 B+ 树索引
摘要:数据页包括七个部分 在 File Header 中有两个指针,分别指向上一个数据页和下一个数据页,连接起来的页相当于一个双向的链表,如下图所示: 采用链表的结构是让数据页之间不需要是物理上的连续的,而是逻辑上的 连续。 数据页的组成: 将所有的记录 划分成几个组,这些记录包括最小记录和最大记录,但不
阅读全文
MySQL —— 索引
摘要:参考 小林 coding : https://xiaolincoding.com/mysql/index/index_interview.html#%E4%BB%80%E4%B9%88%E6%98%AF%E7%B4%A2%E5%BC%95 可以按照四个角度来分类索引。 按「数据结构」分类:B+tre
阅读全文