mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
[docs update]更改部分文章的文末内容
This commit is contained in:
parent
2004f24c8e
commit
20255f0f05
@ -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 -->
|
@ -383,3 +383,5 @@ public class Solution {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -459,3 +459,5 @@ public class Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -680,3 +680,5 @@ public class Solution {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -156,3 +156,5 @@ tag:
|
|||||||
**第 6 步:**
|
**第 6 步:**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -198,3 +198,5 @@ tag:
|
|||||||

|

|
||||||
|
|
||||||
堆排序完成!
|
堆排序完成!
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -327,3 +327,5 @@ myStack.pop();//报错:java.lang.IllegalArgumentException: Stack is empty.
|
|||||||
- 现实生活中的派对,播放器上的播放列表;
|
- 现实生活中的派对,播放器上的播放列表;
|
||||||
- 消息队列
|
- 消息队列
|
||||||
- 等等......
|
- 等等......
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -181,3 +181,5 @@ public void postOrder(TreeNode root){
|
|||||||
system.out.println(root.data);
|
system.out.println(root.data);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -111,3 +111,5 @@ DNS(Domain Name System,域名管理系统)基于 UDP 协议,用于解决
|
|||||||
|
|
||||||
- 《计算机网络自顶向下方法》(第七版)
|
- 《计算机网络自顶向下方法》(第七版)
|
||||||
- RTP 协议介绍:https://mthli.xyz/rtp-introduction/
|
- RTP 协议介绍:https://mthli.xyz/rtp-introduction/
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -101,3 +101,5 @@ ARP 的工作原理将分两种场景讨论:
|
|||||||
7. 路由器接口将对 IP 数据报重新封装成链路层帧,目标 MAC 地址为主机 B 的 MAC 地址,单播发送,直到目的地。
|
7. 路由器接口将对 IP 数据报重新封装成链路层帧,目标 MAC 地址为主机 B 的 MAC 地址,单播发送,直到目的地。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -317,3 +317,5 @@ HTTP 协议的本质就是一种浏览器与服务器之间约定好的通信格
|
|||||||
2. 域名系统-从域名解析出 IP 地址
|
2. 域名系统-从域名解析出 IP 地址
|
||||||
3. 访问一个网站大致的过程
|
3. 访问一个网站大致的过程
|
||||||
4. 系统调用和应用编程接口概念
|
4. 系统调用和应用编程接口概念
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 Formats:http://www.tcpipguide.com/free/t_DNSMessageResourceRecordFieldFormats-2.htm
|
- DNS Message Resource Record Field Formats:http://www.tcpipguide.com/free/t_DNSMessageResourceRecordFieldFormats-2.htm
|
||||||
- Understanding Different Types of Record in DNS Server:https://www.mustbegeek.com/understanding-different-types-of-record-in-dns-server/
|
- Understanding Different Types of Record in DNS Server:https://www.mustbegeek.com/understanding-different-types-of-record-in-dns-server/
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -138,3 +138,5 @@ SSL/TLS 介绍到这里,了解信息安全的朋友又会想到一个安全隐
|
|||||||
- **端口号**:HTTP 默认是 80,HTTPS 默认是 443。
|
- **端口号**:HTTP 默认是 80,HTTPS 默认是 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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -191,3 +191,5 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
|
|||||||
|
|
||||||
- TCP/IP model vs OSI model:https://fiberbit.com.tw/tcpip-model-vs-osi-model/
|
- TCP/IP model vs OSI model:https://fiberbit.com.tw/tcpip-model-vs-osi-model/
|
||||||
- Data Encapsulation and the TCP/IP Protocol Stack:https://docs.oracle.com/cd/E19683-01/806-4075/ipov-32/index.html
|
- Data Encapsulation and the TCP/IP Protocol Stack:https://docs.oracle.com/cd/E19683-01/806-4075/ipov-32/index.html
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -82,3 +82,5 @@ TCP 是全双工通信,可以双向传输数据。任何一方都可以在数
|
|||||||
- 《图解 HTTP》
|
- 《图解 HTTP》
|
||||||
|
|
||||||
- TCP and UDP Tutorial:https://www.9tut.com/tcp-and-udp-tutorial
|
- TCP and UDP Tutorial:https://www.9tut.com/tcp-and-udp-tutorial
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -427,3 +427,5 @@ vim ~/.bash_profile
|
|||||||
```bash
|
```bash
|
||||||
source /etc/profile
|
source /etc/profile
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -11,3 +11,5 @@ tag:
|
|||||||

|

|
||||||
|
|
||||||
<!-- @include: @planet.snippet.md -->
|
<!-- @include: @planet.snippet.md -->
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -217,3 +217,5 @@ tag:
|
|||||||
2. 唯一键冲突
|
2. 唯一键冲突
|
||||||
3. 事务回滚
|
3. 事务回滚
|
||||||
4. 批量插入(如 `insert...select` 语句)
|
4. 批量插入(如 `insert...select` 语句)
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -377,3 +377,5 @@ pt-online-schema-change 它会首先建立一个与原表结构相同的新表
|
|||||||
|
|
||||||
- 程序使用数据库账号只能在一个 DB 下使用,不准跨库
|
- 程序使用数据库账号只能在一个 DB 下使用,不准跨库
|
||||||
- 程序使用的账号原则上不准有 drop 权限
|
- 程序使用的账号原则上不准有 drop 权限
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -10,3 +10,5 @@ tag:
|
|||||||

|

|
||||||
|
|
||||||
<!-- @include: @planet.snippet.md -->
|
<!-- @include: @planet.snippet.md -->
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -10,3 +10,5 @@ tag:
|
|||||||

|

|
||||||
|
|
||||||
<!-- @include: @planet.snippet.md -->
|
<!-- @include: @planet.snippet.md -->
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -214,3 +214,5 @@ user2
|
|||||||
- Redis Data Structures:https://redis.com/redis-enterprise/data-structures/ 。
|
- Redis Data Structures:https://redis.com/redis-enterprise/data-structures/ 。
|
||||||
- 《Redis 深度历险:核心原理与应用实践》1.6 四两拨千斤——HyperLogLog
|
- 《Redis 深度历险:核心原理与应用实践》1.6 四两拨千斤——HyperLogLog
|
||||||
- 布隆过滤器,位图,HyperLogLog:https://hogwartsrico.github.io/2020/06/08/BloomFilter-HyperLogLog-BitMap/index.html
|
- 布隆过滤器,位图,HyperLogLog:https://hogwartsrico.github.io/2020/06/08/BloomFilter-HyperLogLog-BitMap/index.html
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -195,3 +195,5 @@ AOF 校验机制是 Redis 在启动时对 AOF 文件进行检查,以判断文
|
|||||||
- The difference between AOF and RDB persistence:https://www.sobyte.net/post/2022-04/redis-rdb-and-aof/
|
- The difference between AOF and RDB persistence:https://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 持久化 · Analyze:https://wingsxdu.com/posts/database/redis/rdb-and-aof/
|
- Redis RDB 与 AOF 持久化 · Analyze:https://wingsxdu.com/posts/database/redis/rdb-and-aof/
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -829,3 +829,5 @@ ORDER BY
|
|||||||
start_month
|
start_month
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -8,3 +8,5 @@ category: 分布式
|
|||||||

|

|
||||||
|
|
||||||
<!-- @include: @planet.snippet.md -->
|
<!-- @include: @planet.snippet.md -->
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -366,3 +366,5 @@ private static class LockData
|
|||||||
## 总结
|
## 总结
|
||||||
|
|
||||||
这篇文章我们介绍了实现分布式锁的两种常见方式。至于具体选择 Redis 还是 ZooKeeper 来实现分布式锁,还是要看业务的具体需求。如果对性能要求比较高的话,建议使用 Redis 实现分布式锁。如果对可靠性要求比较高的话,建议使用 ZooKeeper 实现分布式锁。
|
这篇文章我们介绍了实现分布式锁的两种常见方式。至于具体选择 Redis 还是 ZooKeeper 来实现分布式锁,还是要看业务的具体需求。如果对性能要求比较高的话,建议使用 Redis 实现分布式锁。如果对可靠性要求比较高的话,建议使用 ZooKeeper 实现分布式锁。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -80,3 +80,5 @@ category: 分布式
|
|||||||
- 分布式锁的用途:分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。
|
- 分布式锁的用途:分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。
|
||||||
- 分布式锁的应该具备的条件:互斥、高可用、可重入、高性能、非阻塞。
|
- 分布式锁的应该具备的条件:互斥、高可用、可重入、高性能、非阻塞。
|
||||||
- 分布式锁的常见实现方式:关系型数据库比如 MySQL、分布式协调服务 ZooKeeper、分布式键值存储系统比如 Redis 、Etcd 。
|
- 分布式锁的常见实现方式:关系型数据库比如 MySQL、分布式协调服务 ZooKeeper、分布式键值存储系统比如 Redis 、Etcd 。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -279,3 +279,5 @@ ZAB 协议包括两种基本的模式,分别是
|
|||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
- 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》
|
- 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -364,3 +364,5 @@ tag:
|
|||||||
- `zookeeper` 的典型应用场景,比如选主,注册中心等等。
|
- `zookeeper` 的典型应用场景,比如选主,注册中心等等。
|
||||||
|
|
||||||
如果忘了可以回去看看再次理解一下,如果有疑问和建议欢迎提出 🤝🤝🤝。
|
如果忘了可以回去看看再次理解一下,如果有疑问和建议欢迎提出 🤝🤝🤝。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -8,3 +8,5 @@ category: 分布式
|
|||||||

|

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

|

|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -66,3 +66,5 @@ category: 高可用
|
|||||||
- **灰度发布:** 将服务器集群分成若干部分,每天只发布一部分机器,观察运行稳定没有故障,第二天继续发布一部分机器,持续几天才把整个集群全部发布完毕,期间如果发现问题,只需要回滚已发布的一部分服务器即可
|
- **灰度发布:** 将服务器集群分成若干部分,每天只发布一部分机器,观察运行稳定没有故障,第二天继续发布一部分机器,持续几天才把整个集群全部发布完毕,期间如果发现问题,只需要回滚已发布的一部分服务器即可
|
||||||
- **定期检查/更换硬件:** 如果不是购买的云服务的话,定期还是需要对硬件进行一波检查的,对于一些需要更换或者升级的硬件,要及时更换或者升级。
|
- **定期检查/更换硬件:** 如果不是购买的云服务的话,定期还是需要对硬件进行一波检查的,对于一些需要更换或者升级的硬件,要及时更换或者升级。
|
||||||
- .....
|
- .....
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -147,3 +147,5 @@ category: 高可用
|
|||||||
4. 系统是否存在内存泄漏?(Java 的自动回收内存虽然很方便,但是,有时候代码写的不好真的会造成内存泄漏)
|
4. 系统是否存在内存泄漏?(Java 的自动回收内存虽然很方便,但是,有时候代码写的不好真的会造成内存泄漏)
|
||||||
5. 数据库索引使用是否合理?
|
5. 数据库索引使用是否合理?
|
||||||
6. ......
|
6. ......
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -42,3 +42,5 @@ category: 高可用
|
|||||||
- [《从零开始学架构》— 28 | 业务高可用的保障:异地多活架构](http://gk.link/a/10pKZ)
|
- [《从零开始学架构》— 28 | 业务高可用的保障:异地多活架构](http://gk.link/a/10pKZ)
|
||||||
|
|
||||||
不过,这些文章大多也都是在介绍概念知识。目前,网上还缺少真正介绍具体要如何去实践落地异地多活架构的资料。
|
不过,这些文章大多也都是在介绍概念知识。目前,网上还缺少真正介绍具体要如何去实践落地异地多活架构的资料。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -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 -->
|
@ -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 Balancing(Nginx 官方文档):<https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/>
|
- HTTP Load Balancing(Nginx 官方文档):<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 -->
|
@ -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 -->
|
@ -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 -->
|
@ -286,3 +286,5 @@ Pulsar 更新记录(可以直观看到项目是否还在维护):https://gi
|
|||||||
- 《大型网站技术架构 》
|
- 《大型网站技术架构 》
|
||||||
- KRaft: Apache Kafka Without ZooKeeper:https://developer.confluent.io/learn/kraft/
|
- KRaft: Apache Kafka Without ZooKeeper:https://developer.confluent.io/learn/kraft/
|
||||||
- 消息队列的使用场景是什么样的?:https://mp.weixin.qq.com/s/4V1jI6RylJr7Jr9JsQe73A
|
- 消息队列的使用场景是什么样的?:https://mp.weixin.qq.com/s/4V1jI6RylJr7Jr9JsQe73A
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -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 -->
|
@ -456,3 +456,5 @@ emmm,是不是有一点复杂 🤣,看英文图片和英文文档的时候
|
|||||||
7. 介绍了 `RocketMQ` 的存储机制和刷盘策略。
|
7. 介绍了 `RocketMQ` 的存储机制和刷盘策略。
|
||||||
|
|
||||||
等等。。。
|
等等。。。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -223,3 +223,5 @@ ShardingSphere 的优势如下(摘自 ShardingSphere 官方文档:<https://s
|
|||||||
- **分库** 就是将数据库中的数据分散到不同的数据库上。**分表** 就是对单表的数据进行拆分,可以是垂直拆分,也可以是水平拆分。
|
- **分库** 就是将数据库中的数据分散到不同的数据库上。**分表** 就是对单表的数据进行拆分,可以是垂直拆分,也可以是水平拆分。
|
||||||
- 引入分库分表之后,需要系统解决事务、分布式 id、无法 join 操作问题。
|
- 引入分库分表之后,需要系统解决事务、分布式 id、无法 join 操作问题。
|
||||||
- ShardingSphere 绝对可以说是当前分库分表的首选!ShardingSphere 的功能完善,除了支持读写分离和分库分表,还提供分布式事务、数据库治理等功能。另外,ShardingSphere 的生态体系完善,社区活跃,文档完善,更新和发布比较频繁。
|
- ShardingSphere 绝对可以说是当前分库分表的首选!ShardingSphere 的功能完善,除了支持读写分离和分库分表,还提供分布式事务、数据库治理等功能。另外,ShardingSphere 的生态体系完善,社区活跃,文档完善,更新和发布比较频繁。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -15,3 +15,5 @@ head:
|
|||||||

|

|
||||||
|
|
||||||
<!-- @include: @planet.snippet.md -->
|
<!-- @include: @planet.snippet.md -->
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -144,3 +144,5 @@ tag:
|
|||||||
优秀程序员的专业技能,我们可能很难在短时间内学会,但这些基本的职业素养,是可以在短期内做到的。
|
优秀程序员的专业技能,我们可能很难在短时间内学会,但这些基本的职业素养,是可以在短期内做到的。
|
||||||
|
|
||||||
希望你我可以有则改之,无则加勉。
|
希望你我可以有则改之,无则加勉。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -105,3 +105,5 @@ tag:
|
|||||||
普通程序员往往是工作的事情做完就拉到,很少回头去对自己的技术,对业务进行归纳和总结。
|
普通程序员往往是工作的事情做完就拉到,很少回头去对自己的技术,对业务进行归纳和总结。
|
||||||
|
|
||||||
而高级的程序员往往都会在一件比较大的事情做完之后总结一下,做个 ppt,写个博客啥的记录下来。这样既对自己的工作是一个归纳,也可以分享给其它同学,促进团队的共同成长。
|
而高级的程序员往往都会在一件比较大的事情做完之后总结一下,做个 ppt,写个博客啥的记录下来。这样既对自己的工作是一个归纳,也可以分享给其它同学,促进团队的共同成长。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -134,3 +134,5 @@ tag:
|
|||||||
## 结语
|
## 结语
|
||||||
|
|
||||||
以上就是我对互联网从业技术人员十年成长之路的心得,希望在你困惑和关键选择的时候可以帮助到你。如果我的只言片语能够在未来的某个时间帮助到你哪怕一点,那将是我莫大的荣幸。
|
以上就是我对互联网从业技术人员十年成长之路的心得,希望在你困惑和关键选择的时候可以帮助到你。如果我的只言片语能够在未来的某个时间帮助到你哪怕一点,那将是我莫大的荣幸。
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
@ -203,3 +203,5 @@ Brendan Gregg,Jay Kreps 和 Brad Traversy 三个人走的技术路线各不相
|
|||||||
> 译文:
|
> 译文:
|
||||||
>
|
>
|
||||||
> 实现战略目标,就像种树一样。刚开始只是一个小根芽,树干还没有长出来;树干长出来了,枝叶才能慢慢长出来;树枝长出来,然后才能开花和结果。刚开始种树的时候,只管栽培灌溉,别老是纠结枝什么时候长出来,花什么时候开,果实什么时候结出来。纠结有什么好处呢?只要你坚持投入栽培,还怕没有枝叶花实吗?
|
> 实现战略目标,就像种树一样。刚开始只是一个小根芽,树干还没有长出来;树干长出来了,枝叶才能慢慢长出来;树枝长出来,然后才能开花和结果。刚开始种树的时候,只管栽培灌溉,别老是纠结枝什么时候长出来,花什么时候开,果实什么时候结出来。纠结有什么好处呢?只要你坚持投入栽培,还怕没有枝叶花实吗?
|
||||||
|
|
||||||
|
<!-- @include: @article-footer.snippet.md -->
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user