1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

[docs update]更改部分文章的文末内容

This commit is contained in:
Guide 2023-08-07 18:56:33 +08:00
parent 2004f24c8e
commit 20255f0f05
217 changed files with 431 additions and 8 deletions

View File

@ -737,3 +737,5 @@ public static int[] radixSort(int[] arr) {
- <https://www.cnblogs.com/guoyaohua/p/8600214.html> - <https://www.cnblogs.com/guoyaohua/p/8600214.html>
- <https://en.wikipedia.org/wiki/Sorting_algorithm> - <https://en.wikipedia.org/wiki/Sorting_algorithm>
- <https://sort.hust.cc/> - <https://sort.hust.cc/>
<!-- @include: @article-footer.snippet.md -->

View File

@ -383,3 +383,5 @@ public class Solution {
} }
} }
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -459,3 +459,5 @@ public class Main {
} }
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -680,3 +680,5 @@ public class Solution {
} }
} }
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -306,3 +306,5 @@ root@21396d02c252:/data# redis-cli
127.0.0.1:6379> BF.EXISTS myFilter github 127.0.0.1:6379> BF.EXISTS myFilter github
(integer) 0 (integer) 0
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -156,3 +156,5 @@ tag:
**第 6 步:** **第 6 步:**
![深度优先搜索6](https://oss.javaguide.cn/github/javaguide/cs-basics/data-structure/depth-first-search6.png) ![深度优先搜索6](https://oss.javaguide.cn/github/javaguide/cs-basics/data-structure/depth-first-search6.png)
<!-- @include: @article-footer.snippet.md -->

View File

@ -198,3 +198,5 @@ tag:
![堆排序6](./pictures/堆/堆排序6.png) ![堆排序6](./pictures/堆/堆排序6.png)
堆排序完成! 堆排序完成!
<!-- @include: @article-footer.snippet.md -->

View File

@ -327,3 +327,5 @@ myStack.pop();//报错java.lang.IllegalArgumentException: Stack is empty.
- 现实生活中的派对,播放器上的播放列表; - 现实生活中的派对,播放器上的播放列表;
- 消息队列 - 消息队列
- 等等...... - 等等......
<!-- @include: @article-footer.snippet.md -->

View File

@ -19,3 +19,5 @@ tag:
**为什么要用红黑树?** 简单来说红黑树就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。详细了解可以查看 [漫画:什么是红黑树?](https://juejin.im/post/5a27c6946fb9a04509096248#comment)(也介绍到了二叉查找树,非常推荐) **为什么要用红黑树?** 简单来说红黑树就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。详细了解可以查看 [漫画:什么是红黑树?](https://juejin.im/post/5a27c6946fb9a04509096248#comment)(也介绍到了二叉查找树,非常推荐)
**相关阅读**[《红黑树深入剖析及 Java 实现》](https://zhuanlan.zhihu.com/p/24367771)(美团点评技术团队) **相关阅读**[《红黑树深入剖析及 Java 实现》](https://zhuanlan.zhihu.com/p/24367771)(美团点评技术团队)
<!-- @include: @article-footer.snippet.md -->

View File

@ -181,3 +181,5 @@ public void postOrder(TreeNode root){
system.out.println(root.data); system.out.println(root.data);
} }
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -111,3 +111,5 @@ DNSDomain Name System域名管理系统基于 UDP 协议,用于解决
- 《计算机网络自顶向下方法》(第七版) - 《计算机网络自顶向下方法》(第七版)
- RTP 协议介绍:https://mthli.xyz/rtp-introduction/ - RTP 协议介绍:https://mthli.xyz/rtp-introduction/
<!-- @include: @article-footer.snippet.md -->

View File

@ -101,3 +101,5 @@ ARP 的工作原理将分两种场景讨论:
7. 路由器接口将对 IP 数据报重新封装成链路层帧,目标 MAC 地址为主机 B 的 MAC 地址,单播发送,直到目的地。 7. 路由器接口将对 IP 数据报重新封装成链路层帧,目标 MAC 地址为主机 B 的 MAC 地址,单播发送,直到目的地。
![](./images/arp/arp_different_lan.png) ![](./images/arp/arp_different_lan.png)
<!-- @include: @article-footer.snippet.md -->

View File

@ -317,3 +317,5 @@ HTTP 协议的本质就是一种浏览器与服务器之间约定好的通信格
2. 域名系统-从域名解析出 IP 地址 2. 域名系统-从域名解析出 IP 地址
3. 访问一个网站大致的过程 3. 访问一个网站大致的过程
4. 系统调用和应用编程接口概念 4. 系统调用和应用编程接口概念
<!-- @include: @article-footer.snippet.md -->

View File

@ -100,3 +100,5 @@ foo.example.com. A 192.0.2.23
- DNS 服务器类型https://www.cloudflare.com/zh-cn/learning/dns/dns-server-types/ - DNS 服务器类型https://www.cloudflare.com/zh-cn/learning/dns/dns-server-types/
- DNS Message Resource Record Field Formatshttp://www.tcpipguide.com/free/t_DNSMessageResourceRecordFieldFormats-2.htm - DNS Message Resource Record Field Formatshttp://www.tcpipguide.com/free/t_DNSMessageResourceRecordFieldFormats-2.htm
- Understanding Different Types of Record in DNS Serverhttps://www.mustbegeek.com/understanding-different-types-of-record-in-dns-server/ - Understanding Different Types of Record in DNS Serverhttps://www.mustbegeek.com/understanding-different-types-of-record-in-dns-server/
<!-- @include: @article-footer.snippet.md -->

View File

@ -68,3 +68,5 @@ HTTP 状态码用于描述 HTTP 请求的结果,比如 2xx 就代表请求被
- https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status - https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
- https://en.wikipedia.org/wiki/List_of_HTTP_status_codes - https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
- https://segmentfault.com/a/1190000018264501 - https://segmentfault.com/a/1190000018264501
<!-- @include: @article-footer.snippet.md -->

View File

@ -138,3 +138,5 @@ SSL/TLS 介绍到这里,了解信息安全的朋友又会想到一个安全隐
- **端口号**HTTP 默认是 80HTTPS 默认是 443。 - **端口号**HTTP 默认是 80HTTPS 默认是 443。
- **URL 前缀**HTTP 的 URL 前缀是 `http://`HTTPS 的 URL 前缀是 `https://` - **URL 前缀**HTTP 的 URL 前缀是 `http://`HTTPS 的 URL 前缀是 `https://`
- **安全性和资源消耗**HTTP 协议运行在 TCP 之上所有传输的内容都是明文客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密加密采用对称加密但对称加密的密钥用服务器方的证书进行了非对称加密。所以说HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。 - **安全性和资源消耗**HTTP 协议运行在 TCP 之上所有传输的内容都是明文客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密加密采用对称加密但对称加密的密钥用服务器方的证书进行了非对称加密。所以说HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。
<!-- @include: @article-footer.snippet.md -->

View File

@ -103,3 +103,5 @@ HTTP/1.0 包含了`Content-Encoding`头部对消息进行端到端编码。HT
## 参考资料 ## 参考资料
[Key differences between HTTP/1.0 and HTTP/1.1](http://www.ra.ethz.ch/cdstore/www8/data/2136/pdf/pd1.pdf) [Key differences between HTTP/1.0 and HTTP/1.1](http://www.ra.ethz.ch/cdstore/www8/data/2136/pdf/pd1.pdf)
<!-- @include: @article-footer.snippet.md -->

View File

@ -56,3 +56,5 @@ SOHO 子网的“代理人”,也就是和外界的窗口,通常由路由器
4. LAN 主机对 WAN 不可见,不可直接寻址,可以保证一定程度的安全性。 4. LAN 主机对 WAN 不可见,不可直接寻址,可以保证一定程度的安全性。
然而NAT 协议由于其独特性,存在着一些争议。比如,可能你已经注意到了,**NAT 协议在 LAN 以外,标识一个内部主机时,使用的是端口号,因为 IP 地址都是相同的。**这种将端口号作为主机寻址的行为,可能会引发一些误会。此外,路由器作为网络层的设备,修改了传输层的分组内容(修改了源 IP 地址和端口号同样是不规范的行为。但是尽管如此NAT 协议作为 IPv4 时代的产物,极大地方便了一些本来棘手的问题,一直被沿用至今。 然而NAT 协议由于其独特性,存在着一些争议。比如,可能你已经注意到了,**NAT 协议在 LAN 以外,标识一个内部主机时,使用的是端口号,因为 IP 地址都是相同的。**这种将端口号作为主机寻址的行为,可能会引发一些误会。此外,路由器作为网络层的设备,修改了传输层的分组内容(修改了源 IP 地址和端口号同样是不规范的行为。但是尽管如此NAT 协议作为 IPv4 时代的产物,极大地方便了一些本来棘手的问题,一直被沿用至今。
<!-- @include: @article-footer.snippet.md -->

View File

@ -466,3 +466,5 @@ CDN 加速,我们可以这么理解:为了减少流氓骚扰,我干脆将
- SYN 洪水攻击https://www.cloudflare.com/zh-cn/learning/ddos/syn-flood-ddos-attack/ - SYN 洪水攻击https://www.cloudflare.com/zh-cn/learning/ddos/syn-flood-ddos-attack/
- 什么是 IP 欺骗https://www.cloudflare.com/zh-cn/learning/ddos/glossary/ip-spoofing/ - 什么是 IP 欺骗https://www.cloudflare.com/zh-cn/learning/ddos/glossary/ip-spoofing/
- 什么是 DNS 洪水?| DNS 洪水 DDoS 攻击https://www.cloudflare.com/zh-cn/learning/ddos/dns-flood-ddos-attack/ - 什么是 DNS 洪水?| DNS 洪水 DDoS 攻击https://www.cloudflare.com/zh-cn/learning/ddos/dns-flood-ddos-attack/
<!-- @include: @article-footer.snippet.md -->

View File

@ -191,3 +191,5 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
- TCP/IP model vs OSI modelhttps://fiberbit.com.tw/tcpip-model-vs-osi-model/ - TCP/IP model vs OSI modelhttps://fiberbit.com.tw/tcpip-model-vs-osi-model/
- Data Encapsulation and the TCP/IP Protocol Stackhttps://docs.oracle.com/cd/E19683-01/806-4075/ipov-32/index.html - Data Encapsulation and the TCP/IP Protocol Stackhttps://docs.oracle.com/cd/E19683-01/806-4075/ipov-32/index.html
<!-- @include: @article-footer.snippet.md -->

View File

@ -311,3 +311,5 @@ DNS 服务器自底向上可以依次分为以下几个层级(所有 DNS 服务
- HTTP 请求头字段大全| HTTP Request Headers<https://www.flysnow.org/tools/table/http-request-headers/> - HTTP 请求头字段大全| HTTP Request Headers<https://www.flysnow.org/tools/table/http-request-headers/>
- HTTP1、HTTP2、HTTP3<https://juejin.cn/post/6855470356657307662> - HTTP1、HTTP2、HTTP3<https://juejin.cn/post/6855470356657307662>
- 如何看待 HTTP/3 - 车小胖的回答 - 知乎: <https://www.zhihu.com/question/302412059/answer/533223530> - 如何看待 HTTP/3 - 车小胖的回答 - 知乎: <https://www.zhihu.com/question/302412059/answer/533223530>
<!-- @include: @article-footer.snippet.md -->

View File

@ -186,3 +186,5 @@ ARP 协议,全称 **地址解析协议Address Resolution Protocol**
- 《计算机网络自顶向下方法》(第七版) - 《计算机网络自顶向下方法》(第七版)
- 什么是 Internet 协议IP<https://www.cloudflare.com/zh-cn/learning/network-layer/internet-protocol/> - 什么是 Internet 协议IP<https://www.cloudflare.com/zh-cn/learning/network-layer/internet-protocol/>
- What Is NAT and What Are the Benefits of NAT Firewalls?<https://community.fs.com/blog/what-is-nat-and-what-are-the-benefits-of-nat-firewalls.html> - What Is NAT and What Are the Benefits of NAT Firewalls?<https://community.fs.com/blog/what-is-nat-and-what-are-the-benefits-of-nat-firewalls.html>
<!-- @include: @article-footer.snippet.md -->

View File

@ -82,3 +82,5 @@ TCP 是全双工通信,可以双向传输数据。任何一方都可以在数
- 《图解 HTTP》 - 《图解 HTTP》
- TCP and UDP Tutorialhttps://www.9tut.com/tcp-and-udp-tutorial - TCP and UDP Tutorialhttps://www.9tut.com/tcp-and-udp-tutorial
<!-- @include: @article-footer.snippet.md -->

View File

@ -114,3 +114,5 @@ ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议。
5. TCP Flow Control—[https://www.brianstorti.com/tcp-flow-control/](https://www.brianstorti.com/tcp-flow-control/) 5. TCP Flow Control—[https://www.brianstorti.com/tcp-flow-control/](https://www.brianstorti.com/tcp-flow-control/)
6. TCP 流量控制(Flow Control)https://notfalse.net/24/tcp-flow-control 6. TCP 流量控制(Flow Control)https://notfalse.net/24/tcp-flow-control
7. TCP 之滑动窗口原理 : https://cloud.tencent.com/developer/article/1857363 7. TCP 之滑动窗口原理 : https://cloud.tencent.com/developer/article/1857363
<!-- @include: @article-footer.snippet.md -->

View File

@ -427,3 +427,5 @@ vim ~/.bash_profile
```bash ```bash
source /etc/profile source /etc/profile
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -457,3 +457,5 @@ Thread[线程 2,5,main]waiting get resource1
- 操作系统为什么要分用户态和内核态https://blog.csdn.net/chen134225/article/details/81783980 - 操作系统为什么要分用户态和内核态https://blog.csdn.net/chen134225/article/details/81783980
- 从根上理解用户态与内核态https://juejin.cn/post/6923863670132850701 - 从根上理解用户态与内核态https://juejin.cn/post/6923863670132850701
- 什么是僵尸进程与孤儿进程https://blog.csdn.net/a745233700/article/details/120715371 - 什么是僵尸进程与孤儿进程https://blog.csdn.net/a745233700/article/details/120715371
<!-- @include: @article-footer.snippet.md -->

View File

@ -409,3 +409,5 @@ LRU 算法是实际使用中应用的比较多,也被认为是最接近 OPT
- 为什么 Linux 需要虚拟内存https://draveness.me/whys-the-design-os-virtual-memory/ - 为什么 Linux 需要虚拟内存https://draveness.me/whys-the-design-os-virtual-memory/
- 程序员的自我修养内存缺页错误https://liam.page/2017/09/01/page-fault/ - 程序员的自我修养内存缺页错误https://liam.page/2017/09/01/page-fault/
- 虚拟内存的那点事儿https://juejin.cn/post/6844903507594575886 - 虚拟内存的那点事儿https://juejin.cn/post/6844903507594575886
<!-- @include: @article-footer.snippet.md -->

View File

@ -532,3 +532,5 @@ funWithParam 1 2 3 4 5 6 7 8 9 34 73
参数总数有 11 个! 参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 ! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -154,3 +154,5 @@ Tips你应该更多地关注在使用场景上而不是执行效率。
- <https://blog.csdn.net/rl529014/article/details/48391465> - <https://blog.csdn.net/rl529014/article/details/48391465>
- <https://www.zhihu.com/question/24696366/answer/29189700> - <https://www.zhihu.com/question/24696366/answer/29189700>
- <https://blog.csdn.net/bieleyang/article/details/77149954> - <https://blog.csdn.net/bieleyang/article/details/77149954>
<!-- @include: @article-footer.snippet.md -->

View File

@ -323,3 +323,5 @@ Incorrect string value: '\xF0\x9F\x98\x98\xF0\x9F...' for column 'name' at row 1
- MySQL8 文档:<https://dev.mysql.com/doc/refman/8.0/en/charset.html> - MySQL8 文档:<https://dev.mysql.com/doc/refman/8.0/en/charset.html>
- MySQL5.7 文档:<https://dev.mysql.com/doc/refman/5.7/en/charset.html> - MySQL5.7 文档:<https://dev.mysql.com/doc/refman/5.7/en/charset.html>
- MySQL Connector/J 文档:<https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-charsets.html> - MySQL Connector/J 文档:<https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-charsets.html>
<!-- @include: @article-footer.snippet.md -->

View File

@ -11,3 +11,5 @@ tag:
![](https://oss.javaguide.cn/javamianshizhibei/elasticsearch-questions.png) ![](https://oss.javaguide.cn/javamianshizhibei/elasticsearch-questions.png)
<!-- @include: @planet.snippet.md --> <!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -282,3 +282,5 @@ WiredTiger 日志也会被压缩,默认使用的也是 Snappy 压缩算法。
- Transactions - MongoDB 官方文档:<https://www.mongodb.com/docs/manual/core/transactions/> - Transactions - MongoDB 官方文档:<https://www.mongodb.com/docs/manual/core/transactions/>
- WiredTiger Storage Engine - MongoDB 官方文档:<https://www.mongodb.com/docs/manual/core/wiredtiger/> - WiredTiger Storage Engine - MongoDB 官方文档:<https://www.mongodb.com/docs/manual/core/wiredtiger/>
- WiredTiger 存储引擎之一:基础数据结构分析:<https://mongoing.com/topic/archives-35143> - WiredTiger 存储引擎之一:基础数据结构分析:<https://mongoing.com/topic/archives-35143>
<!-- @include: @article-footer.snippet.md -->

View File

@ -271,3 +271,5 @@ Rebalance 操作是比较耗费系统资源的,我们可以通过在业务低
- Sharding - MongoDB 官方文档:<https://www.mongodb.com/docs/manual/sharding/> - Sharding - MongoDB 官方文档:<https://www.mongodb.com/docs/manual/sharding/>
- MongoDB 分片集群介绍 - 阿里云文档:<https://help.aliyun.com/document_detail/64561.html> - MongoDB 分片集群介绍 - 阿里云文档:<https://help.aliyun.com/document_detail/64561.html>
- 分片集群使用注意事项 - - 腾讯云文档:<https://cloud.tencent.com/document/product/240/44611> - 分片集群使用注意事项 - - 腾讯云文档:<https://cloud.tencent.com/document/product/240/44611>
<!-- @include: @article-footer.snippet.md -->

View File

@ -953,3 +953,5 @@ OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
6. SQL对大小写不敏感 6. SQL对大小写不敏感
7. 清除已有语句:\c 7. 清除已有语句:\c
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -138,3 +138,5 @@ update tb_student A set A.age='19' where A.name=' 张三 ';
- 《MySQL 实战 45 讲》 - 《MySQL 实战 45 讲》
- MySQL 5.6 参考手册:<https://dev.MySQL.com/doc/refman/5.6/en/> - MySQL 5.6 参考手册:<https://dev.MySQL.com/doc/refman/5.6/en/>
<!-- @include: @article-footer.snippet.md -->

View File

@ -158,3 +158,5 @@ INSERT INTO `test1` (`id`, `num1`, `num2`, `type1`, `type2`, `str1`, `str2`) VAL
4. 字符串转换为数值类型时,非数字开头的字符串会转化为`0`,以数字开头的字符串会截取从第一个字符到第一个非数字内容为止的值为转化结果。 4. 字符串转换为数值类型时,非数字开头的字符串会转化为`0`,以数字开头的字符串会截取从第一个字符到第一个非数字内容为止的值为转化结果。
所以,我们在写 SQL 时一定要养成良好的习惯,查询的字段是什么类型,等号右边的条件就写成对应的类型。特别当查询的字段是字符串时,等号右边的条件一定要用引号引起来标明这是一个字符串,否则会造成索引失效触发全表扫描。 所以,我们在写 SQL 时一定要养成良好的习惯,查询的字段是什么类型,等号右边的条件就写成对应的类型。特别当查询的字段是字符串时,等号右边的条件一定要用引号引起来标明这是一个字符串,否则会造成索引失效触发全表扫描。
<!-- @include: @article-footer.snippet.md -->

View File

@ -255,3 +255,5 @@ private:
- [Innodb 中的事务隔离级别和锁的关系](https://tech.meituan.com/2014/08/20/innodb-lock.html) - [Innodb 中的事务隔离级别和锁的关系](https://tech.meituan.com/2014/08/20/innodb-lock.html)
- [MySQL 事务与 MVCC 如何实现的隔离级别](https://blog.csdn.net/qq_35190492/article/details/109044141) - [MySQL 事务与 MVCC 如何实现的隔离级别](https://blog.csdn.net/qq_35190492/article/details/109044141)
- [InnoDB 事务分析-MVCC](https://leviathan.vip/2019/03/20/InnoDB%E7%9A%84%E4%BA%8B%E5%8A%A1%E5%88%86%E6%9E%90-MVCC/) - [InnoDB 事务分析-MVCC](https://leviathan.vip/2019/03/20/InnoDB%E7%9A%84%E4%BA%8B%E5%8A%A1%E5%88%86%E6%9E%90-MVCC/)
<!-- @include: @article-footer.snippet.md -->

View File

@ -217,3 +217,5 @@ tag:
2. 唯一键冲突 2. 唯一键冲突
3. 事务回滚 3. 事务回滚
4. 批量插入(如 `insert...select` 语句) 4. 批量插入(如 `insert...select` 语句)
<!-- @include: @article-footer.snippet.md -->

View File

@ -377,3 +377,5 @@ pt-online-schema-change 它会首先建立一个与原表结构相同的新表
- 程序使用数据库账号只能在一个 DB 下使用,不准跨库 - 程序使用数据库账号只能在一个 DB 下使用,不准跨库
- 程序使用的账号原则上不准有 drop 权限 - 程序使用的账号原则上不准有 drop 权限
<!-- @include: @article-footer.snippet.md -->

View File

@ -445,3 +445,5 @@ mysql> EXPLAIN SELECT `score`,`name` FROM `cus_order` ORDER BY `score` DESC;
| Extra | 附加信息 | | Extra | 附加信息 |
篇幅问题,我这里只是简单介绍了一下 MySQL 执行计划,详细介绍请看:[MySQL 执行计划分析](./mysql-query-execution-plan.md)这篇文章。 篇幅问题,我这里只是简单介绍了一下 MySQL 执行计划,详细介绍请看:[MySQL 执行计划分析](./mysql-query-execution-plan.md)这篇文章。
<!-- @include: @article-footer.snippet.md -->

View File

@ -328,3 +328,5 @@ MySQL InnoDB 引擎使用 **redo log(重做日志)** 保证事务的**持久性*
- [CURD 这么多年,你有了解过 MySQL 的架构设计吗?](https://mp.weixin.qq.com/s/R-1km7r0z3oWfwYQV8iiqA) - [CURD 这么多年,你有了解过 MySQL 的架构设计吗?](https://mp.weixin.qq.com/s/R-1km7r0z3oWfwYQV8iiqA)
- [浅谈 MySQL InnoDB 的内存组件](https://mp.weixin.qq.com/s/7Kab4IQsNcU_bZdbv_MuOg) - [浅谈 MySQL InnoDB 的内存组件](https://mp.weixin.qq.com/s/7Kab4IQsNcU_bZdbv_MuOg)
<!-- @include: @article-footer.snippet.md -->

View File

@ -204,3 +204,5 @@ MySQL 中的查询缓存虽然能够提升数据库的查询性能,但是查
- MySQL 缓存机制:<https://zhuanlan.zhihu.com/p/55947158> - MySQL 缓存机制:<https://zhuanlan.zhihu.com/p/55947158>
- RDS MySQL 查询缓存Query Cache的设置和使用 - 阿里元云数据库 RDS 文档:<https://help.aliyun.com/document_detail/41717.html> - RDS MySQL 查询缓存Query Cache的设置和使用 - 阿里元云数据库 RDS 文档:<https://help.aliyun.com/document_detail/41717.html>
- 8.10.3 The MySQL Query Cache - MySQL 官方文档:<https://dev.mysql.com/doc/refman/5.7/en/query-cache.html> - 8.10.3 The MySQL Query Cache - MySQL 官方文档:<https://dev.mysql.com/doc/refman/5.7/en/query-cache.html>
<!-- @include: @article-footer.snippet.md -->

View File

@ -139,3 +139,5 @@ rows 列表示根据表统计信息及选用情况,大致估算出找到所需
- https://dev.mysql.com/doc/refman/5.7/en/explain-output.html - https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
- https://juejin.cn/post/6953444668973514789 - https://juejin.cn/post/6953444668973514789
<!-- @include: @article-footer.snippet.md -->

View File

@ -826,3 +826,5 @@ mysql> EXPLAIN SELECT `score`,`name` FROM `cus_order` ORDER BY `score` DESC;
- 详解 MySQL InnoDB 中意向锁的作用:<https://juejin.cn/post/6844903666332368909> - 详解 MySQL InnoDB 中意向锁的作用:<https://juejin.cn/post/6844903666332368909>
- 深入剖析 MySQL 自增锁:<https://juejin.cn/post/6968420054287253540> - 深入剖析 MySQL 自增锁:<https://juejin.cn/post/6968420054287253540>
- 在数据库中不可重复读和幻读到底应该怎么分?:<https://www.zhihu.com/question/392569386> - 在数据库中不可重复读和幻读到底应该怎么分?:<https://www.zhihu.com/question/392569386>
<!-- @include: @article-footer.snippet.md -->

View File

@ -167,3 +167,5 @@ MySQL 中时间到底怎么存储才好Datetime?Timestamp?还是数值时间
| TIMESTAMP | 4~7字节 | YYYY-MM-DD hh:mm:ss[.fraction] | 1970-01-01 00:00:01[.000000] 2038-01-19 03:14:07[.999999] | 是 | | TIMESTAMP | 4~7字节 | YYYY-MM-DD hh:mm:ss[.fraction] | 1970-01-01 00:00:01[.000000] 2038-01-19 03:14:07[.999999] | 是 |
| 数值型时间戳 | 4字节 | 全数字如1578707612 | 1970-01-01 00:00:01之后的时间 | 否 | | 数值型时间戳 | 4字节 | 全数字如1578707612 | 1970-01-01 00:00:01之后的时间 | 否 |
<!-- @include: @article-footer.snippet.md -->

View File

@ -111,3 +111,5 @@ SQL 脚本 1 在第一次查询工资为 500 的记录时只有一条SQL 脚
- <https://dev.MySQL.com/doc/refman/5.7/en/> - <https://dev.MySQL.com/doc/refman/5.7/en/>
- [Mysql 锁:灵魂七拷问](https://tech.youzan.com/seven-questions-about-the-lock-of-MySQL/) - [Mysql 锁:灵魂七拷问](https://tech.youzan.com/seven-questions-about-the-lock-of-MySQL/)
- [Innodb 中的事务隔离级别和锁的关系](https://tech.meituan.com/2014/08/20/innodb-lock.html) - [Innodb 中的事务隔离级别和锁的关系](https://tech.meituan.com/2014/08/20/innodb-lock.html)
<!-- @include: @article-footer.snippet.md -->

View File

@ -57,3 +57,5 @@ NoSQL 数据库主要可以分为下面四种类型:
- NoSQL 是什么?- MongoDB 官方文档:<https://www.mongodb.com/zh-cn/nosql-explained> - NoSQL 是什么?- MongoDB 官方文档:<https://www.mongodb.com/zh-cn/nosql-explained>
- 什么是 NoSQL? - AWS<https://aws.amazon.com/cn/nosql/> - 什么是 NoSQL? - AWS<https://aws.amazon.com/cn/nosql/>
- NoSQL vs. SQL Databases - MongoDB 官方文档:<https://www.mongodb.com/zh-cn/nosql-explained/nosql-vs-sql> - NoSQL vs. SQL Databases - MongoDB 官方文档:<https://www.mongodb.com/zh-cn/nosql-explained/nosql-vs-sql>
<!-- @include: @article-footer.snippet.md -->

View File

@ -114,3 +114,5 @@ Write Behind Pattern 和 Read/Write Through Pattern 很相似,两者都是由
这种策略在我们平时开发过程中也非常非常少见但是不代表它的应用场景少比如消息队列中消息的异步写入磁盘、MySQL 的 Innodb Buffer Pool 机制都用到了这种策略。 这种策略在我们平时开发过程中也非常非常少见但是不代表它的应用场景少比如消息队列中消息的异步写入磁盘、MySQL 的 Innodb Buffer Pool 机制都用到了这种策略。
Write Behind Pattern 下 db 的写性能非常高,非常适合一些数据经常变化又对数据一致性要求没那么高的场景,比如浏览量、点赞量。 Write Behind Pattern 下 db 的写性能非常高,非常适合一些数据经常变化又对数据一致性要求没那么高的场景,比如浏览量、点赞量。
<!-- @include: @article-footer.snippet.md -->

View File

@ -10,3 +10,5 @@ tag:
![](https://oss.javaguide.cn/javamianshizhibei/database-questions.png) ![](https://oss.javaguide.cn/javamianshizhibei/database-questions.png)
<!-- @include: @planet.snippet.md --> <!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -10,3 +10,5 @@ tag:
![](https://oss.javaguide.cn/github/javaguide/database/redis/redis-cluster-javamianshizhibei.png) ![](https://oss.javaguide.cn/github/javaguide/database/redis/redis-cluster-javamianshizhibei.png)
<!-- @include: @planet.snippet.md --> <!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -171,3 +171,5 @@ Redis 是典型的 CPU 密集型应用,不建议和其他多核 CPU 密集型
- Redis 阻塞的 6 大类场景分析与总结https://mp.weixin.qq.com/s/eaZCEtTjTuEmXfUubVHjew - Redis 阻塞的 6 大类场景分析与总结https://mp.weixin.qq.com/s/eaZCEtTjTuEmXfUubVHjew
- Redis 开发与运维笔记-Redis 的噩梦-阻塞https://mp.weixin.qq.com/s/TDbpz9oLH6ifVv6ewqgSgA - Redis 开发与运维笔记-Redis 的噩梦-阻塞https://mp.weixin.qq.com/s/TDbpz9oLH6ifVv6ewqgSgA
<!-- @include: @article-footer.snippet.md -->

View File

@ -499,3 +499,5 @@ value1
- Redis Commands<https://redis.io/commands/> - Redis Commands<https://redis.io/commands/>
- Redis Data types tutorial<https://redis.io/docs/manual/data-types/data-types-tutorial/> - Redis Data types tutorial<https://redis.io/docs/manual/data-types/data-types-tutorial/>
- Redis 存储对象信息是用 Hash 还是 String : <https://segmentfault.com/a/1190000040032006> - Redis 存储对象信息是用 Hash 还是 String : <https://segmentfault.com/a/1190000040032006>
<!-- @include: @article-footer.snippet.md -->

View File

@ -214,3 +214,5 @@ user2
- Redis Data Structureshttps://redis.com/redis-enterprise/data-structures/ 。 - Redis Data Structureshttps://redis.com/redis-enterprise/data-structures/ 。
- 《Redis 深度历险核心原理与应用实践》1.6 四两拨千斤——HyperLogLog - 《Redis 深度历险核心原理与应用实践》1.6 四两拨千斤——HyperLogLog
- 布隆过滤器,位图,HyperLogLoghttps://hogwartsrico.github.io/2020/06/08/BloomFilter-HyperLogLog-BitMap/index.html - 布隆过滤器,位图,HyperLogLoghttps://hogwartsrico.github.io/2020/06/08/BloomFilter-HyperLogLog-BitMap/index.html
<!-- @include: @article-footer.snippet.md -->

View File

@ -120,3 +120,5 @@ config set active-defrag-cycle-max 50
- Redis 官方文档https://redis.io/topics/memory-optimization - Redis 官方文档https://redis.io/topics/memory-optimization
- Redis 核心技术与实战 - 极客时间 - 删除数据后为什么内存占用率还是很高https://time.geekbang.org/column/article/289140 - Redis 核心技术与实战 - 极客时间 - 删除数据后为什么内存占用率还是很高https://time.geekbang.org/column/article/289140
- Redis 源码解析——内存分配:<https://shinerio.cc/2020/05/17/redis/Redis源码解析内存管理> - Redis 源码解析——内存分配:<https://shinerio.cc/2020/05/17/redis/Redis源码解析内存管理>
<!-- @include: @article-footer.snippet.md -->

View File

@ -195,3 +195,5 @@ AOF 校验机制是 Redis 在启动时对 AOF 文件进行检查,以判断文
- The difference between AOF and RDB persistencehttps://www.sobyte.net/post/2022-04/redis-rdb-and-aof/ - The difference between AOF and RDB persistencehttps://www.sobyte.net/post/2022-04/redis-rdb-and-aof/
- Redis AOF 持久化详解 - 程序员历小冰http://remcarpediem.net/article/376c55d8/ - Redis AOF 持久化详解 - 程序员历小冰http://remcarpediem.net/article/376c55d8/
- Redis RDB 与 AOF 持久化 · Analyzehttps://wingsxdu.com/posts/database/redis/rdb-and-aof/ - Redis RDB 与 AOF 持久化 · Analyzehttps://wingsxdu.com/posts/database/redis/rdb-and-aof/
<!-- @include: @article-footer.snippet.md -->

View File

@ -599,3 +599,5 @@ Redis 提供 6 种数据淘汰策略:
- 《Redis 设计与实现》 - 《Redis 设计与实现》
- Redis 命令手册https://www.redis.com.cn/commands.html - Redis 命令手册https://www.redis.com.cn/commands.html
- WHY Redis choose single thread (vs multi threads): [https://medium.com/@jychen7/sharing-redis-single-thread-vs-multi-threads-5870bd44d153](https://medium.com/@jychen7/sharing-redis-single-thread-vs-multi-threads-5870bd44d153) - WHY Redis choose single thread (vs multi threads): [https://medium.com/@jychen7/sharing-redis-single-thread-vs-multi-threads-5870bd44d153](https://medium.com/@jychen7/sharing-redis-single-thread-vs-multi-threads-5870bd44d153)
<!-- @include: @article-footer.snippet.md -->

View File

@ -754,3 +754,5 @@ Cache Aside Pattern 中遇到写请求是这样的:更新 DB然后直接删
- What is Redis Pipeline<https://buildatscale.tech/what-is-redis-pipeline/> - What is Redis Pipeline<https://buildatscale.tech/what-is-redis-pipeline/>
- 一文详解 Redis 中 BigKey、HotKey 的发现与处理:<https://mp.weixin.qq.com/s/FPYE1B839_8Yk1-YSiW-1Q> - 一文详解 Redis 中 BigKey、HotKey 的发现与处理:<https://mp.weixin.qq.com/s/FPYE1B839_8Yk1-YSiW-1Q>
- Redis延迟问题全面排障指南https://mp.weixin.qq.com/s/mIc6a9mfEGdaNDD3MmfFsg - Redis延迟问题全面排障指南https://mp.weixin.qq.com/s/mIc6a9mfEGdaNDD3MmfFsg
<!-- @include: @article-footer.snippet.md -->

View File

@ -1821,3 +1821,5 @@ FROM Customers
WHERE cust_state = 'MI' or cust_state = 'IL' WHERE cust_state = 'MI' or cust_state = 'IL'
ORDER BY cust_name; ORDER BY cust_name;
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -446,3 +446,5 @@ ALTER TABLE employees DROP INDEX idx_email;
DROP INDEX uniq_idx_exam_id ON examination_info; DROP INDEX uniq_idx_exam_id ON examination_info;
DROP INDEX full_idx_tag ON examination_info; DROP INDEX full_idx_tag ON examination_info;
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -1297,3 +1297,5 @@ GROUP BY user_info.uid
ORDER BY act_month_total DESC, ORDER BY act_month_total DESC,
act_days_2021 DESC act_days_2021 DESC
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -829,3 +829,5 @@ ORDER BY
start_month start_month
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -1009,3 +1009,5 @@ INNER JOIN a AS b ON UPPER(a.tag)= b.tag #a小写 b大写
AND a.tag != b.tag AND a.tag != b.tag
WHERE a.answer_cnt < 3; WHERE a.answer_cnt < 3;
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -1208,3 +1208,5 @@ DROP TRIGGER IF EXISTS trigger_insert_user;
- [后端程序员必备SQL 高性能优化指南35+条优化建议立马 GET!](https://mp.weixin.qq.com/s/I-ZT3zGTNBZ6egS7T09jyQ) - [后端程序员必备SQL 高性能优化指南35+条优化建议立马 GET!](https://mp.weixin.qq.com/s/I-ZT3zGTNBZ6egS7T09jyQ)
- [后端程序员必备:书写高质量 SQL 的 30 条建议](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486461&idx=1&sn=60a22279196d084cc398936fe3b37772&chksm=cea24436f9d5cd20a4fa0e907590f3e700d7378b3f608d7b33bb52cfb96f503b7ccb65a1deed&token=1987003517&lang=zh_CN#rd) - [后端程序员必备:书写高质量 SQL 的 30 条建议](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486461&idx=1&sn=60a22279196d084cc398936fe3b37772&chksm=cea24436f9d5cd20a4fa0e907590f3e700d7378b3f608d7b33bb52cfb96f503b7ccb65a1deed&token=1987003517&lang=zh_CN#rd)
<!-- @include: @article-footer.snippet.md -->

View File

@ -169,3 +169,5 @@ Shenyu 通过插件扩展功能,插件是 ShenYu 的灵魂,并且插件也
- Kong 插件开发教程[通俗易懂]<https://cloud.tencent.com/developer/article/2104299> - Kong 插件开发教程[通俗易懂]<https://cloud.tencent.com/developer/article/2104299>
- API 网关 Kong 实战:<https://xie.infoq.cn/article/10e4dab2de0bdb6f2c3c93da6> - API 网关 Kong 实战:<https://xie.infoq.cn/article/10e4dab2de0bdb6f2c3c93da6>
- Spring Cloud Gateway 原理介绍和应用:<https://blog.fintopia.tech/60e27b0e2078082a378ec5ed/> - Spring Cloud Gateway 原理介绍和应用:<https://blog.fintopia.tech/60e27b0e2078082a378ec5ed/>
<!-- @include: @article-footer.snippet.md -->

View File

@ -8,3 +8,5 @@ category: 分布式
![](https://oss.javaguide.cn/javamianshizhibei/distributed-system.png) ![](https://oss.javaguide.cn/javamianshizhibei/distributed-system.png)
<!-- @include: @planet.snippet.md --> <!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -171,3 +171,5 @@ span 是层的意思,比如在第一个实例算是第一层, 请求代理
- 客户的长网址:<https://wenku.baidu.com/ndbusiness/browse/wenkuvipcashier?cashier_code=PCoperatebanner> - 客户的长网址:<https://wenku.baidu.com/ndbusiness/browse/wenkuvipcashier?cashier_code=PCoperatebanner>
- ID 映射的短网址:<https://dwz.cn/2047601319t66> (演示使用,可能无法正确打开) - ID 映射的短网址:<https://dwz.cn/2047601319t66> (演示使用,可能无法正确打开)
- 转进制后的短网址:<https://dwz.cn/2ezwDJ0> (演示使用,可能无法正确打开) - 转进制后的短网址:<https://dwz.cn/2ezwDJ0> (演示使用,可能无法正确打开)
<!-- @include: @article-footer.snippet.md -->

View File

@ -354,3 +354,5 @@ Tinyid 的优缺点这里就不分析了,结合数据库号段模式的优缺
除了上面介绍的方式之外,像 ZooKeeper 这类中间件也可以帮助我们生成唯一 ID。**没有银弹,一定要结合实际项目来选择最适合自己的方案。** 除了上面介绍的方式之外,像 ZooKeeper 这类中间件也可以帮助我们生成唯一 ID。**没有银弹,一定要结合实际项目来选择最适合自己的方案。**
不过,本文主要介绍的是分布式 ID 的理论知识。在实际的面试中,面试官可能会结合具体的业务场景来考察你对分布式 ID 的设计,你可以参考这篇文章:[分布式 ID 设计指南](./distributed-id-design)(对于实际工作中分布式 ID 的设计也非常有帮助)。 不过,本文主要介绍的是分布式 ID 的理论知识。在实际的面试中,面试官可能会结合具体的业务场景来考察你对分布式 ID 的设计,你可以参考这篇文章:[分布式 ID 设计指南](./distributed-id-design)(对于实际工作中分布式 ID 的设计也非常有帮助)。
<!-- @include: @article-footer.snippet.md -->

View File

@ -366,3 +366,5 @@ private static class LockData
## 总结 ## 总结
这篇文章我们介绍了实现分布式锁的两种常见方式。至于具体选择 Redis 还是 ZooKeeper 来实现分布式锁,还是要看业务的具体需求。如果对性能要求比较高的话,建议使用 Redis 实现分布式锁。如果对可靠性要求比较高的话,建议使用 ZooKeeper 实现分布式锁。 这篇文章我们介绍了实现分布式锁的两种常见方式。至于具体选择 Redis 还是 ZooKeeper 来实现分布式锁,还是要看业务的具体需求。如果对性能要求比较高的话,建议使用 Redis 实现分布式锁。如果对可靠性要求比较高的话,建议使用 ZooKeeper 实现分布式锁。
<!-- @include: @article-footer.snippet.md -->

View File

@ -80,3 +80,5 @@ category: 分布式
- 分布式锁的用途:分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。 - 分布式锁的用途:分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。
- 分布式锁的应该具备的条件:互斥、高可用、可重入、高性能、非阻塞。 - 分布式锁的应该具备的条件:互斥、高可用、可重入、高性能、非阻塞。
- 分布式锁的常见实现方式:关系型数据库比如 MySQL、分布式协调服务 ZooKeeper、分布式键值存储系统比如 Redis 、Etcd 。 - 分布式锁的常见实现方式:关系型数据库比如 MySQL、分布式协调服务 ZooKeeper、分布式键值存储系统比如 Redis 、Etcd 。
<!-- @include: @article-footer.snippet.md -->

View File

@ -293,3 +293,5 @@ zkClient.setData().forPath("/node1/00001","c++".getBytes());//更新节点数据
```java ```java
List<String> childrenPaths = zkClient.getChildren().forPath("/node1"); List<String> childrenPaths = zkClient.getChildren().forPath("/node1");
``` ```
<!-- @include: @article-footer.snippet.md -->

View File

@ -279,3 +279,5 @@ ZAB 协议包括两种基本的模式,分别是
## 参考 ## 参考
- 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》 - 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》
<!-- @include: @article-footer.snippet.md -->

View File

@ -364,3 +364,5 @@ tag:
- `zookeeper` 的典型应用场景,比如选主,注册中心等等。 - `zookeeper` 的典型应用场景,比如选主,注册中心等等。
如果忘了可以回去看看再次理解一下,如果有疑问和建议欢迎提出 🤝🤝🤝。 如果忘了可以回去看看再次理解一下,如果有疑问和建议欢迎提出 🤝🤝🤝。
<!-- @include: @article-footer.snippet.md -->

View File

@ -8,3 +8,5 @@ category: 分布式
![](https://oss.javaguide.cn/javamianshizhibei/distributed-system.png) ![](https://oss.javaguide.cn/javamianshizhibei/distributed-system.png)
<!-- @include: @planet.snippet.md --> <!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -159,3 +159,5 @@ CAP 理论这节我们也说过了:
### 总结 ### 总结
**ACID 是数据库事务完整性的理论CAP 是分布式系统设计理论BASE 是 CAP 理论中 AP 方案的延伸。** **ACID 是数据库事务完整性的理论CAP 是分布式系统设计理论BASE 是 CAP 理论中 AP 方案的延伸。**
<!-- @include: @article-footer.snippet.md -->

View File

@ -141,3 +141,5 @@ Gossip 设计了两种可能的消息传播模式:**反熵Anti-Entropy**
- 一万字详解 Redis Cluster Gossip 协议https://segmentfault.com/a/1190000038373546 - 一万字详解 Redis Cluster Gossip 协议https://segmentfault.com/a/1190000038373546
- 《分布式协议与算法实战》 - 《分布式协议与算法实战》
- 《Redis 设计与实现》 - 《Redis 设计与实现》
<!-- @include: @article-footer.snippet.md -->

View File

@ -79,3 +79,5 @@ Basic Paxos 算法的仅能就单个值达成共识,为了能够对一系列
- https://zh.wikipedia.org/wiki/Paxos - https://zh.wikipedia.org/wiki/Paxos
- 分布式系统中的一致性与共识算法http://www.xuyasong.com/?p=1970 - 分布式系统中的一致性与共识算法http://www.xuyasong.com/?p=1970
<!-- @include: @article-footer.snippet.md -->

View File

@ -167,3 +167,5 @@ raft 的要求之一就是安全性不依赖于时间:系统不能仅仅因为
- https://github.com/OneSizeFitsQuorum/raft-thesis-zh_cn/blob/master/raft-thesis-zh_cn.md - https://github.com/OneSizeFitsQuorum/raft-thesis-zh_cn/blob/master/raft-thesis-zh_cn.md
- https://github.com/ongardie/dissertation/blob/master/stanford.pdf - https://github.com/ongardie/dissertation/blob/master/stanford.pdf
- https://knowledge-sharing.gitbooks.io/raft/content/chapter5.html - https://knowledge-sharing.gitbooks.io/raft/content/chapter5.html
<!-- @include: @article-footer.snippet.md -->

View File

@ -457,3 +457,5 @@ Kryo 和 FST 这两种序列化方式是 Dubbo 后来才引入的,性能非常
Dubbo 官方文档中还有一个关于这些[序列化协议的性能对比图](https://dubbo.apache.org/zh/docs/v2.7/user/serialization/#m-zhdocsv27userserialization)可供参考。 Dubbo 官方文档中还有一个关于这些[序列化协议的性能对比图](https://dubbo.apache.org/zh/docs/v2.7/user/serialization/#m-zhdocsv27userserialization)可供参考。
![序列化协议的性能对比](https://oss.javaguide.cn/github/javaguide/distributed-system/rpc/dubbo-serialization-protocol-performance-comparison.png) ![序列化协议的性能对比](https://oss.javaguide.cn/github/javaguide/distributed-system/rpc/dubbo-serialization-protocol-performance-comparison.png)
<!-- @include: @article-footer.snippet.md -->

View File

@ -192,3 +192,5 @@ res = remoteFunc(req)
- 从发展历史来说,**HTTP 主要用于 B/S 架构,而 RPC 更多用于 C/S 架构。但现在其实已经没分那么清了B/S 和 C/S 在慢慢融合。** 很多软件同时支持多端,所以对外一般用 HTTP 协议,而内部集群的微服务之间则采用 RPC 协议进行通讯。 - 从发展历史来说,**HTTP 主要用于 B/S 架构,而 RPC 更多用于 C/S 架构。但现在其实已经没分那么清了B/S 和 C/S 在慢慢融合。** 很多软件同时支持多端,所以对外一般用 HTTP 协议,而内部集群的微服务之间则采用 RPC 协议进行通讯。
- RPC 其实比 HTTP 出现的要早,且比目前主流的 HTTP1.1 性能要更好,所以大部分公司内部都还在使用 RPC。 - RPC 其实比 HTTP 出现的要早,且比目前主流的 HTTP1.1 性能要更好,所以大部分公司内部都还在使用 RPC。
- **HTTP2.0****HTTP1.1** 的基础上做了优化,性能可能比很多 RPC 协议都要好,但由于是这几年才出来的,所以也不太可能取代掉 RPC。 - **HTTP2.0****HTTP1.1** 的基础上做了优化,性能可能比很多 RPC 协议都要好,但由于是这几年才出来的,所以也不太可能取代掉 RPC。
<!-- @include: @article-footer.snippet.md -->

View File

@ -137,3 +137,5 @@ Dubbo 也是 Spring Cloud Alibaba 里面的一个组件。
## 既然有了 HTTP 协议,为什么还要有 RPC ## 既然有了 HTTP 协议,为什么还要有 RPC
关于这个问题的详细答案,请看这篇文章:[有了 HTTP 协议,为什么还要有 RPC ](http&rpc.md) 。 关于这个问题的详细答案,请看这篇文章:[有了 HTTP 协议,为什么还要有 RPC ](http&rpc.md) 。
<!-- @include: @article-footer.snippet.md -->

View File

@ -153,3 +153,5 @@ public class GlobalErrorWebExceptionHandler implements ErrorWebExceptionHandler
- Spring Cloud Gateway 官方文档:<https://cloud.spring.io/spring-cloud-gateway/reference/html/> - Spring Cloud Gateway 官方文档:<https://cloud.spring.io/spring-cloud-gateway/reference/html/>
- Creating a custom Spring Cloud Gateway Filter<https://spring.io/blog/2022/08/26/creating-a-custom-spring-cloud-gateway-filter> - Creating a custom Spring Cloud Gateway Filter<https://spring.io/blog/2022/08/26/creating-a-custom-spring-cloud-gateway-filter>
- 全局异常处理: <https://zhuanlan.zhihu.com/p/347028665> - 全局异常处理: <https://zhuanlan.zhihu.com/p/347028665>
<!-- @include: @article-footer.snippet.md -->

View File

@ -6,3 +6,5 @@ category: 高可用
**降级&熔断** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)中。 **降级&熔断** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)中。
<!-- @include: @planet.snippet.md --> <!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -66,3 +66,5 @@ category: 高可用
- **灰度发布:** 将服务器集群分成若干部分,每天只发布一部分机器,观察运行稳定没有故障,第二天继续发布一部分机器,持续几天才把整个集群全部发布完毕,期间如果发现问题,只需要回滚已发布的一部分服务器即可 - **灰度发布:** 将服务器集群分成若干部分,每天只发布一部分机器,观察运行稳定没有故障,第二天继续发布一部分机器,持续几天才把整个集群全部发布完毕,期间如果发现问题,只需要回滚已发布的一部分服务器即可
- **定期检查/更换硬件:** 如果不是购买的云服务的话,定期还是需要对硬件进行一波检查的,对于一些需要更换或者升级的硬件,要及时更换或者升级。 - **定期检查/更换硬件:** 如果不是购买的云服务的话,定期还是需要对硬件进行一波检查的,对于一些需要更换或者升级的硬件,要及时更换或者升级。
- ..... - .....
<!-- @include: @article-footer.snippet.md -->

View File

@ -209,3 +209,5 @@ Resilience4j 不仅提供限流,还提供了熔断、负载保护、自动重
- 服务治理之轻量级熔断框架 Resilience4j<https://xie.infoq.cn/article/14786e571c1a4143ad1ef8f19> - 服务治理之轻量级熔断框架 Resilience4j<https://xie.infoq.cn/article/14786e571c1a4143ad1ef8f19>
- 超详细的 Guava RateLimiter 限流原理解析:<https://cloud.tencent.com/developer/article/1408819> - 超详细的 Guava RateLimiter 限流原理解析:<https://cloud.tencent.com/developer/article/1408819>
- 实战 Spring Cloud Gateway 之限流篇 👍:<https://www.aneasystone.com/archives/2020/08/spring-cloud-gateway-current-limiting.html> - 实战 Spring Cloud Gateway 之限流篇 👍:<https://www.aneasystone.com/archives/2020/08/spring-cloud-gateway-current-limiting.html>
<!-- @include: @article-footer.snippet.md -->

View File

@ -147,3 +147,5 @@ category: 高可用
4. 系统是否存在内存泄漏Java 的自动回收内存虽然很方便,但是,有时候代码写的不好真的会造成内存泄漏) 4. 系统是否存在内存泄漏Java 的自动回收内存虽然很方便,但是,有时候代码写的不好真的会造成内存泄漏)
5. 数据库索引使用是否合理? 5. 数据库索引使用是否合理?
6. ...... 6. ......
<!-- @include: @article-footer.snippet.md -->

View File

@ -42,3 +42,5 @@ category: 高可用
- [《从零开始学架构》— 28 | 业务高可用的保障:异地多活架构](http://gk.link/a/10pKZ) - [《从零开始学架构》— 28 | 业务高可用的保障:异地多活架构](http://gk.link/a/10pKZ)
不过,这些文章大多也都是在介绍概念知识。目前,网上还缺少真正介绍具体要如何去实践落地异地多活架构的资料。 不过,这些文章大多也都是在介绍概念知识。目前,网上还缺少真正介绍具体要如何去实践落地异地多活架构的资料。
<!-- @include: @article-footer.snippet.md -->

View File

@ -68,3 +68,5 @@ category: 高可用
- 微服务之间调用超时的设置治理:<https://www.infoq.cn/article/eyrslar53l6hjm5yjgyx> - 微服务之间调用超时的设置治理:<https://www.infoq.cn/article/eyrslar53l6hjm5yjgyx>
- 超时、重试和抖动回退:<https://aws.amazon.com/cn/builders-library/timeouts-retries-and-backoff-with-jitter/> - 超时、重试和抖动回退:<https://aws.amazon.com/cn/builders-library/timeouts-retries-and-backoff-with-jitter/>
<!-- @include: @article-footer.snippet.md -->

View File

@ -131,3 +131,5 @@ http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTim
- 时间戳防盗链 - 七牛云 CDN<https://developer.qiniu.com/fusion/kb/1670/timestamp-hotlinking-prevention> - 时间戳防盗链 - 七牛云 CDN<https://developer.qiniu.com/fusion/kb/1670/timestamp-hotlinking-prevention>
- CDN 是个啥玩意?一文说个明白:<https://mp.weixin.qq.com/s/Pp0C8ALUXsmYCUkM5QnkQw> - CDN 是个啥玩意?一文说个明白:<https://mp.weixin.qq.com/s/Pp0C8ALUXsmYCUkM5QnkQw>
- 《透视 HTTP 协议》- 37 | CDN加速我们的网络服务<http://gk.link/a/11yOG> - 《透视 HTTP 协议》- 37 | CDN加速我们的网络服务<http://gk.link/a/11yOG>
<!-- @include: @article-footer.snippet.md -->

View File

@ -233,3 +233,5 @@ Spring Cloud 2020.0.0 版本移除了 Netflix 除 Eureka 外的所有组件。Sp
- 干货 | eBay 的 4 层软件负载均衡实现:<https://mp.weixin.qq.com/s/bZMxLTECOK3mjdgiLbHj-g> - 干货 | eBay 的 4 层软件负载均衡实现:<https://mp.weixin.qq.com/s/bZMxLTECOK3mjdgiLbHj-g>
- HTTP Load BalancingNginx 官方文档):<https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/> - HTTP Load BalancingNginx 官方文档):<https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/>
- 深入浅出负载均衡 - vivo 互联网技术:<https://www.cnblogs.com/vivotech/p/14859041.html> - 深入浅出负载均衡 - vivo 互联网技术:<https://www.cnblogs.com/vivotech/p/14859041.html>
<!-- @include: @article-footer.snippet.md -->

View File

@ -136,3 +136,5 @@ CPU 缓存是通过将最近使用的数据存储在高速缓存中来实现更
- Disruptor 高性能之道-等待策略:<http://wuwenliang.net/2022/02/28/Disruptor高性能之道-等待策略/> - Disruptor 高性能之道-等待策略:<http://wuwenliang.net/2022/02/28/Disruptor高性能之道-等待策略/>
- 《Java 并发编程实战》- 40 | 案例分析(三):高性能队列 Disruptor<https://time.geekbang.org/column/article/98134> - 《Java 并发编程实战》- 40 | 案例分析(三):高性能队列 Disruptor<https://time.geekbang.org/column/article/98134>
<!-- @include: @article-footer.snippet.md -->

View File

@ -222,3 +222,5 @@ acks 的默认值即为 1代表我们的消息被 leader 副本接收之后
- Kafka 官方文档https://kafka.apache.org/documentation/ - Kafka 官方文档https://kafka.apache.org/documentation/
- 极客时间—《Kafka 核心技术与实战》第 11 节:无消息丢失配置怎么实现? - 极客时间—《Kafka 核心技术与实战》第 11 节:无消息丢失配置怎么实现?
<!-- @include: @article-footer.snippet.md -->

View File

@ -286,3 +286,5 @@ Pulsar 更新记录可以直观看到项目是否还在维护https://gi
- 《大型网站技术架构 》 - 《大型网站技术架构 》
- KRaft: Apache Kafka Without ZooKeeperhttps://developer.confluent.io/learn/kraft/ - KRaft: Apache Kafka Without ZooKeeperhttps://developer.confluent.io/learn/kraft/
- 消息队列的使用场景是什么样的https://mp.weixin.qq.com/s/4V1jI6RylJr7Jr9JsQe73A - 消息队列的使用场景是什么样的https://mp.weixin.qq.com/s/4V1jI6RylJr7Jr9JsQe73A
<!-- @include: @article-footer.snippet.md -->

View File

@ -243,3 +243,5 @@ Demo 级别的,一般就是你本地启动了玩玩儿的?,没人生产用
## 如何解决消息队列的延时以及过期失效问题? ## 如何解决消息队列的延时以及过期失效问题?
RabbtiMQ 是可以设置过期时间的,也就是 TTL。如果消息在 queue 中积压超过一定的时间就会被 RabbitMQ 给清理掉,这个数据就没了。那这就是第二个坑了。这就不是说数据会大量积压在 mq 里,而是大量的数据会直接搞丢。我们可以采取一个方案,就是批量重导,这个我们之前线上也有类似的场景干过。就是大量积压的时候,我们当时就直接丢弃数据了,然后等过了高峰期以后,比如大家一起喝咖啡熬夜到晚上 12 点以后,用户都睡觉了。这个时候我们就开始写程序,将丢失的那批数据,写个临时程序,一点一点的查出来,然后重新灌入 mq 里面去,把白天丢的数据给他补回来。也只能是这样了。假设 1 万个订单积压在 mq 里面,没有处理,其中 1000 个订单都丢了,你只能手动写程序把那 1000 个订单给查出来,手动发到 mq 里去再补一次。 RabbtiMQ 是可以设置过期时间的,也就是 TTL。如果消息在 queue 中积压超过一定的时间就会被 RabbitMQ 给清理掉,这个数据就没了。那这就是第二个坑了。这就不是说数据会大量积压在 mq 里,而是大量的数据会直接搞丢。我们可以采取一个方案,就是批量重导,这个我们之前线上也有类似的场景干过。就是大量积压的时候,我们当时就直接丢弃数据了,然后等过了高峰期以后,比如大家一起喝咖啡熬夜到晚上 12 点以后,用户都睡觉了。这个时候我们就开始写程序,将丢失的那批数据,写个临时程序,一点一点的查出来,然后重新灌入 mq 里面去,把白天丢的数据给他补回来。也只能是这样了。假设 1 万个订单积压在 mq 里面,没有处理,其中 1000 个订单都丢了,你只能手动写程序把那 1000 个订单给查出来,手动发到 mq 里去再补一次。
<!-- @include: @article-footer.snippet.md -->

View File

@ -456,3 +456,5 @@ emmm是不是有一点复杂 🤣,看英文图片和英文文档的时候
7. 介绍了 `RocketMQ` 的存储机制和刷盘策略。 7. 介绍了 `RocketMQ` 的存储机制和刷盘策略。
等等。。。 等等。。。
<!-- @include: @article-footer.snippet.md -->

View File

@ -223,3 +223,5 @@ ShardingSphere 的优势如下(摘自 ShardingSphere 官方文档:<https://s
- **分库** 就是将数据库中的数据分散到不同的数据库上。**分表** 就是对单表的数据进行拆分,可以是垂直拆分,也可以是水平拆分。 - **分库** 就是将数据库中的数据分散到不同的数据库上。**分表** 就是对单表的数据进行拆分,可以是垂直拆分,也可以是水平拆分。
- 引入分库分表之后,需要系统解决事务、分布式 id、无法 join 操作问题。 - 引入分库分表之后,需要系统解决事务、分布式 id、无法 join 操作问题。
- ShardingSphere 绝对可以说是当前分库分表的首选ShardingSphere 的功能完善除了支持读写分离和分库分表还提供分布式事务、数据库治理等功能。另外ShardingSphere 的生态体系完善,社区活跃,文档完善,更新和发布比较频繁。 - ShardingSphere 绝对可以说是当前分库分表的首选ShardingSphere 的功能完善除了支持读写分离和分库分表还提供分布式事务、数据库治理等功能。另外ShardingSphere 的生态体系完善,社区活跃,文档完善,更新和发布比较频繁。
<!-- @include: @article-footer.snippet.md -->

View File

@ -15,3 +15,5 @@ head:
![](https://oss.javaguide.cn/javamianshizhibei/sql-optimization.png) ![](https://oss.javaguide.cn/javamianshizhibei/sql-optimization.png)
<!-- @include: @planet.snippet.md --> <!-- @include: @planet.snippet.md -->
<!-- @include: @article-footer.snippet.md -->

View File

@ -144,3 +144,5 @@ tag:
优秀程序员的专业技能,我们可能很难在短时间内学会,但这些基本的职业素养,是可以在短期内做到的。 优秀程序员的专业技能,我们可能很难在短时间内学会,但这些基本的职业素养,是可以在短期内做到的。
希望你我可以有则改之,无则加勉。 希望你我可以有则改之,无则加勉。
<!-- @include: @article-footer.snippet.md -->

View File

@ -105,3 +105,5 @@ tag:
普通程序员往往是工作的事情做完就拉到,很少回头去对自己的技术,对业务进行归纳和总结。 普通程序员往往是工作的事情做完就拉到,很少回头去对自己的技术,对业务进行归纳和总结。
而高级的程序员往往都会在一件比较大的事情做完之后总结一下,做个 ppt写个博客啥的记录下来。这样既对自己的工作是一个归纳也可以分享给其它同学促进团队的共同成长。 而高级的程序员往往都会在一件比较大的事情做完之后总结一下,做个 ppt写个博客啥的记录下来。这样既对自己的工作是一个归纳也可以分享给其它同学促进团队的共同成长。
<!-- @include: @article-footer.snippet.md -->

View File

@ -134,3 +134,5 @@ tag:
## 结语 ## 结语
以上就是我对互联网从业技术人员十年成长之路的心得,希望在你困惑和关键选择的时候可以帮助到你。如果我的只言片语能够在未来的某个时间帮助到你哪怕一点,那将是我莫大的荣幸。 以上就是我对互联网从业技术人员十年成长之路的心得,希望在你困惑和关键选择的时候可以帮助到你。如果我的只言片语能够在未来的某个时间帮助到你哪怕一点,那将是我莫大的荣幸。
<!-- @include: @article-footer.snippet.md -->

View File

@ -203,3 +203,5 @@ Brendan GreggJay Kreps 和 Brad Traversy 三个人走的技术路线各不相
> 译文: > 译文:
> >
> 实现战略目标,就像种树一样。刚开始只是一个小根芽,树干还没有长出来;树干长出来了,枝叶才能慢慢长出来;树枝长出来,然后才能开花和结果。刚开始种树的时候,只管栽培灌溉,别老是纠结枝什么时候长出来,花什么时候开,果实什么时候结出来。纠结有什么好处呢?只要你坚持投入栽培,还怕没有枝叶花实吗? > 实现战略目标,就像种树一样。刚开始只是一个小根芽,树干还没有长出来;树干长出来了,枝叶才能慢慢长出来;树枝长出来,然后才能开花和结果。刚开始种树的时候,只管栽培灌溉,别老是纠结枝什么时候长出来,花什么时候开,果实什么时候结出来。纠结有什么好处呢?只要你坚持投入栽培,还怕没有枝叶花实吗?
<!-- @include: @article-footer.snippet.md -->

Some files were not shown because too many files have changed in this diff Show More