diff --git a/public/api/i/2025/09/13/n8ryrj-1.webp b/public/api/i/2025/09/13/n8ryrj-1.webp new file mode 100644 index 0000000..11b854d Binary files /dev/null and b/public/api/i/2025/09/13/n8ryrj-1.webp differ diff --git a/public/api/i/2025/09/13/n99aoy-1.webp b/public/api/i/2025/09/13/n99aoy-1.webp new file mode 100644 index 0000000..9619150 Binary files /dev/null and b/public/api/i/2025/09/13/n99aoy-1.webp differ diff --git a/public/api/i/2025/09/13/n9u3ge-1.webp b/public/api/i/2025/09/13/n9u3ge-1.webp new file mode 100644 index 0000000..c7cfb18 Binary files /dev/null and b/public/api/i/2025/09/13/n9u3ge-1.webp differ diff --git a/public/api/i/2025/09/13/nmff34-1.webp b/public/api/i/2025/09/13/nmff34-1.webp new file mode 100644 index 0000000..87a0d9d Binary files /dev/null and b/public/api/i/2025/09/13/nmff34-1.webp differ diff --git a/public/api/i/2025/09/13/p26o8x-1.webp b/public/api/i/2025/09/13/p26o8x-1.webp new file mode 100644 index 0000000..42ff734 Binary files /dev/null and b/public/api/i/2025/09/13/p26o8x-1.webp differ diff --git a/src/content/posts/Java/Java内存模型.md b/src/content/posts/Java/Java内存模型.md new file mode 100644 index 0000000..18c95a6 --- /dev/null +++ b/src/content/posts/Java/Java内存模型.md @@ -0,0 +1,24 @@ +--- +title: Java内存模型 +published: 2025-09-13 +description: ' Java内存模型 ' +image: '' +tags: ['JMM','Java内存模型'] +category: 'Java > 面试题' +draft: false +lang: '' +--- + + +Java内存模型,是Java虚拟机定义的一种规范,用来描述多线程程序中的变量如何在内存中读取数据,何时会把数据写回主内存。 + +JMM的核心目标是确保多线程环境下的**可见性,有序性和原子性**,从而避免由于硬件和编译器优化带来的不一致问题。 +- 可见性:确保一个线程对共享变量的修改,其他线程能够及时看到。关键字 `volatile`是用来保证可见性的,它强制线程每次读写的时候都从主内存中获取最新值。 +- 有序性:确保程序执行的顺序符合代码的书写顺序。JMM允许某些指令重排序,来提高性能,但会保证线程内的操作顺序不会被破坏,通过happens-before关系保证跨线程的有序性。 +- 原子性:确保操作的不可分割性,要么全部成功,要么全部失败。 例如synchronized关键字能确保方法或者代码块的原子性。 + + +## 参考 +JMM 会把内存分为本地内存和主存,每个线程都有它自己的私有化的本地内存,还有个存储共享数据的主存。 + +![](https://blog.meowrain.cn/api/i/2025/09/13/p26o8x-1.webp) diff --git a/src/content/posts/中间件/MySQL/分库分表场景.md b/src/content/posts/中间件/MySQL/分库分表场景.md new file mode 100644 index 0000000..aa63f69 --- /dev/null +++ b/src/content/posts/中间件/MySQL/分库分表场景.md @@ -0,0 +1,62 @@ +--- +title: 分库分表场景 +published: 2025-09-13 +description: '' +image: '' +tags: ['中间件','MySQL','分库分表'] +category: '中间件 > MySQL' +draft: false +lang: '' +--- + + +# 分库分表 + +## 什么场景分库 +- 当单个数据库支持的连接数不足以满足客户端需求 +- 数据量超过了单个数据库实例的处理能力 + +## 什么场景分表 +- 单表数据量太大 +- 单表存在较高的写入场景 +- 当表中存在大量的TEXT,LONGTEXT 或者BLOB字段 + +## 什么场景分库分表 +- 高并发写入场景: 当应用面临高并发的写入请求的时候,单库单表无法满足需求,需要进行分库分表。 +- 海量数据场景: 当数据量非常大的时候,单库单表无法满足需求,需要进行分库分表。 + +## 分库分表的优缺点 +### 优点 +- 提高系统的性能和可扩展性 +- 提高系统的可用性和可靠性 +- 提高系统的可维护性 + +### 缺点 +- 增加系统的复杂性 +- 增加系统的成本 +- 增加系统的维护成本 + + +## 分库分表如何设计 + +我们分库分表,是有分片键的,这个分片键怎么用的呢? +分片键是用来决定一条数据应该存储在哪个库或者表中的字段,它直接影响数据的分布,查询效率和系统扩展性。 + +举个例子: +1. Hash分片 +原理: 对分片键的值进行哈希运算,然后对库或者表取模 +适用场景: 数据访问随机性强,读写均衡 +![](https://blog.meowrain.cn/api/i/2025/09/13/n8ryrj-1.webp) + +2. Range分片(范围分片) +原理: 根据分片键的值范围划分数据 +使用场景: 时间序列数据,范围查询频繁 +![](https://blog.meowrain.cn/api/i/2025/09/13/n99aoy-1.webp) + +3. Lookup映射分片 +原理: 维护一个映射表,指定某个分片键值属于哪个分片 +使用场景: 分片键是枚举值,比如国家,地区等 +![](https://blog.meowrain.cn/api/i/2025/09/13/n9u3ge-1.webp) + + +![](https://blog.meowrain.cn/api/i/2025/09/13/nmff34-1.webp) \ No newline at end of file