From 20255f0f055680249e9f5293f52cf62b17cbcb16 Mon Sep 17 00:00:00 2001 From: Guide Date: Mon, 7 Aug 2023 18:56:33 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]=E6=9B=B4=E6=94=B9=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=96=87=E7=AB=A0=E7=9A=84=E6=96=87=E6=9C=AB=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cs-basics/algorithms/10-classical-sorting-algorithms.md | 2 ++ docs/cs-basics/algorithms/linkedlist-algorithm-problems.md | 2 ++ docs/cs-basics/algorithms/string-algorithm-problems.md | 2 ++ docs/cs-basics/algorithms/the-sword-refers-to-offer.md | 2 ++ docs/cs-basics/data-structure/bloom-filter.md | 2 ++ docs/cs-basics/data-structure/graph.md | 2 ++ docs/cs-basics/data-structure/heap.md | 2 ++ docs/cs-basics/data-structure/linear-data-structure.md | 2 ++ docs/cs-basics/data-structure/red-black-tree.md | 2 ++ docs/cs-basics/data-structure/tree.md | 2 ++ docs/cs-basics/network/application-layer-protocol.md | 2 ++ docs/cs-basics/network/arp.md | 2 ++ docs/cs-basics/network/computer-network-xiexiren-summary.md | 2 ++ docs/cs-basics/network/dns.md | 2 ++ docs/cs-basics/network/http-status-codes.md | 2 ++ docs/cs-basics/network/http-vs-https.md | 2 ++ docs/cs-basics/network/http1.0-vs-http1.1.md | 2 ++ docs/cs-basics/network/nat.md | 2 ++ docs/cs-basics/network/network-attack-means.md | 2 ++ docs/cs-basics/network/osi-and-tcp-ip-model.md | 2 ++ docs/cs-basics/network/other-network-questions.md | 2 ++ docs/cs-basics/network/other-network-questions2.md | 2 ++ docs/cs-basics/network/tcp-connection-and-disconnection.md | 2 ++ docs/cs-basics/network/tcp-reliability-guarantee.md | 2 ++ docs/cs-basics/operating-system/linux-intro.md | 2 ++ .../operating-system/operating-system-basic-questions-01.md | 2 ++ .../operating-system/operating-system-basic-questions-02.md | 2 ++ docs/cs-basics/operating-system/shell-intro.md | 2 ++ docs/database/basis.md | 2 ++ docs/database/character-set.md | 2 ++ docs/database/elasticsearch/elasticsearch-questions-01.md | 2 ++ docs/database/mongodb/mongodb-questions-01.md | 2 ++ docs/database/mongodb/mongodb-questions-02.md | 2 ++ docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md | 2 ++ docs/database/mysql/how-sql-executed-in-mysql.md | 2 ++ .../mysql/index-invalidation-caused-by-implicit-conversion.md | 2 ++ docs/database/mysql/innodb-implementation-of-mvcc.md | 2 ++ .../mysql/mysql-auto-increment-primary-key-continuous.md | 2 ++ ...h-performance-optimization-specification-recommendations.md | 2 ++ docs/database/mysql/mysql-index.md | 2 ++ docs/database/mysql/mysql-logs.md | 2 ++ docs/database/mysql/mysql-query-cache.md | 2 ++ docs/database/mysql/mysql-query-execution-plan.md | 2 ++ docs/database/mysql/mysql-questions-01.md | 2 ++ docs/database/mysql/some-thoughts-on-database-storage-time.md | 2 ++ docs/database/mysql/transaction-isolation-level.md | 2 ++ docs/database/nosql.md | 2 ++ .../redis/3-commonly-used-cache-read-and-write-strategies.md | 2 ++ docs/database/redis/cache-basics.md | 2 ++ docs/database/redis/redis-cluster.md | 2 ++ docs/database/redis/redis-common-blocking-problems-summary.md | 2 ++ docs/database/redis/redis-data-structures-01.md | 2 ++ docs/database/redis/redis-data-structures-02.md | 2 ++ docs/database/redis/redis-memory-fragmentation.md | 2 ++ docs/database/redis/redis-persistence.md | 2 ++ docs/database/redis/redis-questions-01.md | 2 ++ docs/database/redis/redis-questions-02.md | 2 ++ docs/database/sql/sql-questions-01.md | 2 ++ docs/database/sql/sql-questions-02.md | 2 ++ docs/database/sql/sql-questions-03.md | 2 ++ docs/database/sql/sql-questions-04.md | 2 ++ docs/database/sql/sql-questions-05.md | 2 ++ docs/database/sql/sql-syntax-summary.md | 2 ++ docs/distributed-system/api-gateway.md | 2 ++ docs/distributed-system/distributed-configuration-center.md | 2 ++ docs/distributed-system/distributed-id-design.md | 2 ++ docs/distributed-system/distributed-id.md | 2 ++ docs/distributed-system/distributed-lock-implementations.md | 2 ++ docs/distributed-system/distributed-lock.md | 2 ++ .../zookeeper/zookeeper-in-action.md | 2 ++ .../zookeeper/zookeeper-intro.md | 2 ++ .../zookeeper/zookeeper-plus.md | 2 ++ docs/distributed-system/distributed-transaction.md | 2 ++ docs/distributed-system/protocol/cap-and-base-theorem.md | 2 ++ docs/distributed-system/protocol/gossip-protocl.md | 2 ++ docs/distributed-system/protocol/paxos-algorithm.md | 2 ++ docs/distributed-system/protocol/raft-algorithm.md | 2 ++ docs/distributed-system/rpc/dubbo.md | 2 ++ docs/distributed-system/rpc/http&rpc.md | 2 ++ docs/distributed-system/rpc/rpc-intro.md | 2 ++ docs/distributed-system/spring-cloud-gateway-questions.md | 2 ++ docs/high-availability/fallback-and-circuit-breaker.md | 2 ++ docs/high-availability/high-availability-system-design.md | 2 ++ docs/high-availability/limit-request.md | 2 ++ docs/high-availability/performance-test.md | 2 ++ docs/high-availability/redundancy.md | 2 ++ docs/high-availability/timeout-and-retry.md | 2 ++ docs/high-performance/cdn.md | 2 ++ docs/high-performance/load-balancing.md | 2 ++ docs/high-performance/message-queue/disruptor-questions.md | 2 ++ docs/high-performance/message-queue/kafka-questions-01.md | 2 ++ docs/high-performance/message-queue/message-queue.md | 2 ++ docs/high-performance/message-queue/rabbitmq-questions.md | 2 ++ docs/high-performance/message-queue/rocketmq-questions.md | 2 ++ .../read-and-write-separation-and-library-subtable.md | 2 ++ docs/high-performance/sql-optimization.md | 2 ++ .../advanced-programmer/20-bad-habits-of-bad-programmers.md | 2 ++ .../seven-tips-for-becoming-an-advanced-programmer.md | 2 ++ .../advanced-programmer/ten-years-of-dachang-growth-road.md | 2 ++ .../the-growth-strategy-of-the-technological-giant.md | 2 ++ ...g-about-technology-and-business-after-five-years-of-work.md | 3 ++- ...l-ability-of-programmers-in-the-first-test-of-technology.md | 2 ++ .../interview/my-personal-experience-in-2021.md | 2 ++ .../interview/screen-candidates-for-packaging.md | 2 ++ .../interview/some-secrets-about-alibaba-interview.md | 2 ++ .../interview/summary-of-spring-recruitment.md | 2 ++ .../interview/technical-preliminary-preparation.md | 2 ++ ...nking-of-an-interview-experienced-by-an-older-programmer.md | 2 ++ .../the-experience-of-get-offer-from-over-20-big-companies.md | 2 ++ .../personal-experience/8-years-programmer-work-summary.md | 2 ++ .../personal-experience/four-year-work-in-tencent-summary.md | 2 ++ .../personal-experience/huawei-od-275-days.md | 2 ++ ...ears-of-back-end-develop--experience-in-didi-and-toutiao.md | 2 ++ .../programmer/efficient-book-publishing-and-practice-guide.md | 2 ++ .../programmer/how-do-programmers-publish-a-technical-book.md | 2 ++ docs/high-quality-technical-articles/readme.md | 2 ++ .../work/32-tips-improving-career.md | 2 ++ .../work/employee-performance.md | 2 ++ .../work/get-into-work-mode-quickly-when-you-join-a-company.md | 2 ++ docs/java/basis/bigdecimal.md | 2 ++ docs/java/basis/generics-and-wildcards.md | 2 ++ docs/java/basis/java-basic-questions-01.md | 2 ++ docs/java/basis/java-basic-questions-02.md | 2 ++ docs/java/basis/java-basic-questions-03.md | 2 ++ docs/java/basis/java-keyword-summary.md | 2 ++ docs/java/basis/proxy.md | 2 ++ docs/java/basis/reflection.md | 2 ++ docs/java/basis/serialization.md | 2 ++ docs/java/basis/spi.md | 2 ++ docs/java/basis/syntactic-sugar.md | 2 ++ docs/java/basis/unsafe.md | 2 ++ docs/java/basis/why-there-only-value-passing-in-java.md | 2 ++ docs/java/collection/arrayblockingqueue-source-code.md | 3 ++- docs/java/collection/arraylist-source-code.md | 2 ++ docs/java/collection/concurrent-hash-map-source-code.md | 2 ++ docs/java/collection/copyonwritearraylist-source-code.md | 2 ++ docs/java/collection/delayqueue-source-code.md | 3 ++- docs/java/collection/hashmap-source-code.md | 2 ++ docs/java/collection/java-collection-precautions-for-use.md | 2 ++ docs/java/collection/java-collection-questions-01.md | 2 ++ docs/java/collection/java-collection-questions-02.md | 2 ++ docs/java/collection/linkedhashmap-source-code.md | 3 ++- docs/java/collection/linkedlist-source-code.md | 3 ++- docs/java/collection/priorityqueue-source-code.md | 2 ++ docs/java/concurrent/aqs.md | 2 ++ docs/java/concurrent/atomic-classes.md | 2 ++ docs/java/concurrent/completablefuture-intro.md | 2 ++ docs/java/concurrent/java-concurrent-collections.md | 2 ++ docs/java/concurrent/java-concurrent-questions-01.md | 2 ++ docs/java/concurrent/java-concurrent-questions-02.md | 2 ++ docs/java/concurrent/java-concurrent-questions-03.md | 2 ++ docs/java/concurrent/java-thread-pool-best-practices.md | 2 ++ docs/java/concurrent/java-thread-pool-summary.md | 2 ++ docs/java/concurrent/jmm.md | 2 ++ docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md | 2 ++ docs/java/concurrent/reentrantlock.md | 2 ++ docs/java/concurrent/threadlocal.md | 2 ++ docs/java/io/io-basis.md | 2 ++ docs/java/io/io-design-patterns.md | 2 ++ docs/java/io/io-model.md | 2 ++ docs/java/io/nio-basis.md | 3 ++- docs/java/jvm/class-file-structure.md | 2 ++ docs/java/jvm/class-loading-process.md | 2 ++ docs/java/jvm/classloader.md | 2 ++ docs/java/jvm/jdk-monitoring-and-troubleshooting-tools.md | 2 ++ docs/java/jvm/jvm-garbage-collection.md | 2 ++ docs/java/jvm/jvm-in-action.md | 2 ++ docs/java/jvm/jvm-intro.md | 2 ++ docs/java/jvm/jvm-parameters-intro.md | 2 ++ docs/java/jvm/memory-area.md | 2 ++ docs/java/new-features/java10.md | 2 ++ docs/java/new-features/java11.md | 2 ++ docs/java/new-features/java12-13.md | 2 ++ docs/java/new-features/java14-15.md | 2 ++ docs/java/new-features/java16.md | 2 ++ docs/java/new-features/java17.md | 2 ++ docs/java/new-features/java18.md | 2 ++ docs/java/new-features/java19.md | 2 ++ docs/java/new-features/java20.md | 2 ++ docs/java/new-features/java8-common-new-features.md | 2 ++ docs/java/new-features/java8-tutorial-translate.md | 2 ++ docs/java/new-features/java9.md | 2 ++ docs/snippets/article-footer.snippet.md | 1 + docs/snippets/small-advertisement.snippet.md | 2 -- docs/system-design/J2EE基础知识.md | 2 ++ docs/system-design/basis/RESTfulAPI.md | 2 ++ docs/system-design/basis/naming.md | 2 ++ docs/system-design/basis/refactoring.md | 2 ++ docs/system-design/basis/software-engineering.md | 2 ++ docs/system-design/basis/unit-test.md | 2 ++ docs/system-design/design-pattern.md | 2 ++ docs/system-design/framework/mybatis/mybatis-interview.md | 2 ++ docs/system-design/framework/netty.md | 2 ++ .../framework/spring/spring-boot-auto-assembly-principles.md | 2 ++ .../framework/spring/spring-common-annotations.md | 2 ++ .../framework/spring/spring-design-patterns-summary.md | 2 ++ .../framework/spring/spring-knowledge-and-questions-summary.md | 2 ++ docs/system-design/framework/spring/spring-transaction.md | 2 ++ .../spring/springboot-knowledge-and-questions-summary.md | 2 ++ docs/system-design/framework/spring/springboot-source-code.md | 2 ++ docs/system-design/schedule-task.md | 2 ++ .../security/advantages-and-disadvantages-of-jwt.md | 2 ++ .../system-design/security/basis-of-authority-certification.md | 2 ++ docs/system-design/security/data-desensitization.md | 2 ++ docs/system-design/security/design-of-authority-system.md | 2 ++ docs/system-design/security/encryption-algorithms.md | 2 ++ docs/system-design/security/jwt-intro.md | 2 ++ docs/system-design/security/sentive-words-filter.md | 2 ++ docs/system-design/security/sso-intro.md | 2 ++ docs/system-design/system-design-questions.md | 2 ++ docs/system-design/web-real-time-message-push.md | 2 ++ docs/tools/docker/docker-in-action.md | 2 ++ docs/tools/docker/docker-intro.md | 2 ++ docs/tools/git/git-intro.md | 2 ++ docs/tools/git/github-tips.md | 2 ++ docs/tools/gradle/gradle-core-concepts.md | 2 ++ docs/tools/maven/maven-core-concepts.md | 2 ++ 217 files changed, 431 insertions(+), 8 deletions(-) create mode 100644 docs/snippets/article-footer.snippet.md diff --git a/docs/cs-basics/algorithms/10-classical-sorting-algorithms.md b/docs/cs-basics/algorithms/10-classical-sorting-algorithms.md index 9b2951ee..e2a85919 100644 --- a/docs/cs-basics/algorithms/10-classical-sorting-algorithms.md +++ b/docs/cs-basics/algorithms/10-classical-sorting-algorithms.md @@ -737,3 +737,5 @@ public static int[] radixSort(int[] arr) { - - - + + \ No newline at end of file diff --git a/docs/cs-basics/algorithms/linkedlist-algorithm-problems.md b/docs/cs-basics/algorithms/linkedlist-algorithm-problems.md index 678fed36..36883cce 100644 --- a/docs/cs-basics/algorithms/linkedlist-algorithm-problems.md +++ b/docs/cs-basics/algorithms/linkedlist-algorithm-problems.md @@ -383,3 +383,5 @@ public class Solution { } } ``` + + \ No newline at end of file diff --git a/docs/cs-basics/algorithms/string-algorithm-problems.md b/docs/cs-basics/algorithms/string-algorithm-problems.md index 518d9b6c..2d8826c6 100644 --- a/docs/cs-basics/algorithms/string-algorithm-problems.md +++ b/docs/cs-basics/algorithms/string-algorithm-problems.md @@ -459,3 +459,5 @@ public class Main { } ``` + + \ No newline at end of file diff --git a/docs/cs-basics/algorithms/the-sword-refers-to-offer.md b/docs/cs-basics/algorithms/the-sword-refers-to-offer.md index 03ae1444..9f2589e5 100644 --- a/docs/cs-basics/algorithms/the-sword-refers-to-offer.md +++ b/docs/cs-basics/algorithms/the-sword-refers-to-offer.md @@ -680,3 +680,5 @@ public class Solution { } } ``` + + \ No newline at end of file diff --git a/docs/cs-basics/data-structure/bloom-filter.md b/docs/cs-basics/data-structure/bloom-filter.md index f50def1d..70433293 100644 --- a/docs/cs-basics/data-structure/bloom-filter.md +++ b/docs/cs-basics/data-structure/bloom-filter.md @@ -306,3 +306,5 @@ root@21396d02c252:/data# redis-cli 127.0.0.1:6379> BF.EXISTS myFilter github (integer) 0 ``` + + \ No newline at end of file diff --git a/docs/cs-basics/data-structure/graph.md b/docs/cs-basics/data-structure/graph.md index 7c5db080..38065c6a 100644 --- a/docs/cs-basics/data-structure/graph.md +++ b/docs/cs-basics/data-structure/graph.md @@ -156,3 +156,5 @@ tag: **第 6 步:** ![深度优先搜索6](https://oss.javaguide.cn/github/javaguide/cs-basics/data-structure/depth-first-search6.png) + + \ No newline at end of file diff --git a/docs/cs-basics/data-structure/heap.md b/docs/cs-basics/data-structure/heap.md index 55a17569..8521084f 100644 --- a/docs/cs-basics/data-structure/heap.md +++ b/docs/cs-basics/data-structure/heap.md @@ -198,3 +198,5 @@ tag: ![堆排序6](./pictures/堆/堆排序6.png) 堆排序完成! + + \ No newline at end of file diff --git a/docs/cs-basics/data-structure/linear-data-structure.md b/docs/cs-basics/data-structure/linear-data-structure.md index e290a3a3..8f0eaa28 100644 --- a/docs/cs-basics/data-structure/linear-data-structure.md +++ b/docs/cs-basics/data-structure/linear-data-structure.md @@ -327,3 +327,5 @@ myStack.pop();//报错:java.lang.IllegalArgumentException: Stack is empty. - 现实生活中的派对,播放器上的播放列表; - 消息队列 - 等等...... + + \ No newline at end of file diff --git a/docs/cs-basics/data-structure/red-black-tree.md b/docs/cs-basics/data-structure/red-black-tree.md index 11043f45..ed63c679 100644 --- a/docs/cs-basics/data-structure/red-black-tree.md +++ b/docs/cs-basics/data-structure/red-black-tree.md @@ -19,3 +19,5 @@ tag: **为什么要用红黑树?** 简单来说红黑树就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。详细了解可以查看 [漫画:什么是红黑树?](https://juejin.im/post/5a27c6946fb9a04509096248#comment)(也介绍到了二叉查找树,非常推荐) **相关阅读**:[《红黑树深入剖析及 Java 实现》](https://zhuanlan.zhihu.com/p/24367771)(美团点评技术团队) + + \ No newline at end of file diff --git a/docs/cs-basics/data-structure/tree.md b/docs/cs-basics/data-structure/tree.md index 6b016ce5..5a3f8365 100644 --- a/docs/cs-basics/data-structure/tree.md +++ b/docs/cs-basics/data-structure/tree.md @@ -181,3 +181,5 @@ public void postOrder(TreeNode root){ system.out.println(root.data); } ``` + + \ No newline at end of file diff --git a/docs/cs-basics/network/application-layer-protocol.md b/docs/cs-basics/network/application-layer-protocol.md index fd8ceec5..044c0196 100644 --- a/docs/cs-basics/network/application-layer-protocol.md +++ b/docs/cs-basics/network/application-layer-protocol.md @@ -111,3 +111,5 @@ DNS(Domain Name System,域名管理系统)基于 UDP 协议,用于解决 - 《计算机网络自顶向下方法》(第七版) - RTP 协议介绍:https://mthli.xyz/rtp-introduction/ + + \ No newline at end of file diff --git a/docs/cs-basics/network/arp.md b/docs/cs-basics/network/arp.md index ba485ba2..72589555 100644 --- a/docs/cs-basics/network/arp.md +++ b/docs/cs-basics/network/arp.md @@ -101,3 +101,5 @@ ARP 的工作原理将分两种场景讨论: 7. 路由器接口将对 IP 数据报重新封装成链路层帧,目标 MAC 地址为主机 B 的 MAC 地址,单播发送,直到目的地。 ![](./images/arp/arp_different_lan.png) + + \ No newline at end of file diff --git a/docs/cs-basics/network/computer-network-xiexiren-summary.md b/docs/cs-basics/network/computer-network-xiexiren-summary.md index 216cbdc2..d87581aa 100644 --- a/docs/cs-basics/network/computer-network-xiexiren-summary.md +++ b/docs/cs-basics/network/computer-network-xiexiren-summary.md @@ -317,3 +317,5 @@ HTTP 协议的本质就是一种浏览器与服务器之间约定好的通信格 2. 域名系统-从域名解析出 IP 地址 3. 访问一个网站大致的过程 4. 系统调用和应用编程接口概念 + + \ No newline at end of file diff --git a/docs/cs-basics/network/dns.md b/docs/cs-basics/network/dns.md index 21eae6a0..d749c36f 100644 --- a/docs/cs-basics/network/dns.md +++ b/docs/cs-basics/network/dns.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 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/ + + \ No newline at end of file diff --git a/docs/cs-basics/network/http-status-codes.md b/docs/cs-basics/network/http-status-codes.md index 4cacb50c..269585b8 100644 --- a/docs/cs-basics/network/http-status-codes.md +++ b/docs/cs-basics/network/http-status-codes.md @@ -68,3 +68,5 @@ HTTP 状态码用于描述 HTTP 请求的结果,比如 2xx 就代表请求被 - https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status - https://en.wikipedia.org/wiki/List_of_HTTP_status_codes - https://segmentfault.com/a/1190000018264501 + + \ No newline at end of file diff --git a/docs/cs-basics/network/http-vs-https.md b/docs/cs-basics/network/http-vs-https.md index 98742292..aca58035 100644 --- a/docs/cs-basics/network/http-vs-https.md +++ b/docs/cs-basics/network/http-vs-https.md @@ -138,3 +138,5 @@ SSL/TLS 介绍到这里,了解信息安全的朋友又会想到一个安全隐 - **端口号**:HTTP 默认是 80,HTTPS 默认是 443。 - **URL 前缀**:HTTP 的 URL 前缀是 `http://`,HTTPS 的 URL 前缀是 `https://`。 - **安全性和资源消耗**:HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。 + + \ No newline at end of file diff --git a/docs/cs-basics/network/http1.0-vs-http1.1.md b/docs/cs-basics/network/http1.0-vs-http1.1.md index cc27c0e0..328ffa24 100644 --- a/docs/cs-basics/network/http1.0-vs-http1.1.md +++ b/docs/cs-basics/network/http1.0-vs-http1.1.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) + + \ No newline at end of file diff --git a/docs/cs-basics/network/nat.md b/docs/cs-basics/network/nat.md index 814df5e0..52f6740c 100644 --- a/docs/cs-basics/network/nat.md +++ b/docs/cs-basics/network/nat.md @@ -56,3 +56,5 @@ SOHO 子网的“代理人”,也就是和外界的窗口,通常由路由器 4. LAN 主机对 WAN 不可见,不可直接寻址,可以保证一定程度的安全性。 然而,NAT 协议由于其独特性,存在着一些争议。比如,可能你已经注意到了,**NAT 协议在 LAN 以外,标识一个内部主机时,使用的是端口号,因为 IP 地址都是相同的。**这种将端口号作为主机寻址的行为,可能会引发一些误会。此外,路由器作为网络层的设备,修改了传输层的分组内容(修改了源 IP 地址和端口号),同样是不规范的行为。但是,尽管如此,NAT 协议作为 IPv4 时代的产物,极大地方便了一些本来棘手的问题,一直被沿用至今。 + + \ No newline at end of file diff --git a/docs/cs-basics/network/network-attack-means.md b/docs/cs-basics/network/network-attack-means.md index f3e785cc..d07b00d1 100644 --- a/docs/cs-basics/network/network-attack-means.md +++ b/docs/cs-basics/network/network-attack-means.md @@ -466,3 +466,5 @@ CDN 加速,我们可以这么理解:为了减少流氓骚扰,我干脆将 - 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/ - 什么是 DNS 洪水?| DNS 洪水 DDoS 攻击:https://www.cloudflare.com/zh-cn/learning/ddos/dns-flood-ddos-attack/ + + \ No newline at end of file diff --git a/docs/cs-basics/network/osi-and-tcp-ip-model.md b/docs/cs-basics/network/osi-and-tcp-ip-model.md index 57c74108..2c87c0e6 100644 --- a/docs/cs-basics/network/osi-and-tcp-ip-model.md +++ b/docs/cs-basics/network/osi-and-tcp-ip-model.md @@ -191,3 +191,5 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础 - 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 + + \ No newline at end of file diff --git a/docs/cs-basics/network/other-network-questions.md b/docs/cs-basics/network/other-network-questions.md index 5805cc45..6b75f371 100644 --- a/docs/cs-basics/network/other-network-questions.md +++ b/docs/cs-basics/network/other-network-questions.md @@ -311,3 +311,5 @@ DNS 服务器自底向上可以依次分为以下几个层级(所有 DNS 服务 - HTTP 请求头字段大全| HTTP Request Headers: - HTTP1、HTTP2、HTTP3: - 如何看待 HTTP/3 ? - 车小胖的回答 - 知乎: + + \ No newline at end of file diff --git a/docs/cs-basics/network/other-network-questions2.md b/docs/cs-basics/network/other-network-questions2.md index ef6acc1c..d740838b 100644 --- a/docs/cs-basics/network/other-network-questions2.md +++ b/docs/cs-basics/network/other-network-questions2.md @@ -186,3 +186,5 @@ ARP 协议,全称 **地址解析协议(Address Resolution Protocol)**, - 《计算机网络自顶向下方法》(第七版) - 什么是 Internet 协议(IP)?: - What Is NAT and What Are the Benefits of NAT Firewalls?: + + \ No newline at end of file diff --git a/docs/cs-basics/network/tcp-connection-and-disconnection.md b/docs/cs-basics/network/tcp-connection-and-disconnection.md index 287ee68a..b97a718a 100644 --- a/docs/cs-basics/network/tcp-connection-and-disconnection.md +++ b/docs/cs-basics/network/tcp-connection-and-disconnection.md @@ -82,3 +82,5 @@ TCP 是全双工通信,可以双向传输数据。任何一方都可以在数 - 《图解 HTTP》 - TCP and UDP Tutorial:https://www.9tut.com/tcp-and-udp-tutorial + + \ No newline at end of file diff --git a/docs/cs-basics/network/tcp-reliability-guarantee.md b/docs/cs-basics/network/tcp-reliability-guarantee.md index c2f081f2..ba558b59 100644 --- a/docs/cs-basics/network/tcp-reliability-guarantee.md +++ b/docs/cs-basics/network/tcp-reliability-guarantee.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/) 6. TCP 流量控制(Flow Control):https://notfalse.net/24/tcp-flow-control 7. TCP 之滑动窗口原理 : https://cloud.tencent.com/developer/article/1857363 + + \ No newline at end of file diff --git a/docs/cs-basics/operating-system/linux-intro.md b/docs/cs-basics/operating-system/linux-intro.md index cdc4fb9f..f7b7c50c 100644 --- a/docs/cs-basics/operating-system/linux-intro.md +++ b/docs/cs-basics/operating-system/linux-intro.md @@ -427,3 +427,5 @@ vim ~/.bash_profile ```bash source /etc/profile ``` + + \ No newline at end of file diff --git a/docs/cs-basics/operating-system/operating-system-basic-questions-01.md b/docs/cs-basics/operating-system/operating-system-basic-questions-01.md index 7498b83e..912be456 100644 --- a/docs/cs-basics/operating-system/operating-system-basic-questions-01.md +++ b/docs/cs-basics/operating-system/operating-system-basic-questions-01.md @@ -457,3 +457,5 @@ Thread[线程 2,5,main]waiting get resource1 - 操作系统为什么要分用户态和内核态:https://blog.csdn.net/chen134225/article/details/81783980 - 从根上理解用户态与内核态:https://juejin.cn/post/6923863670132850701 - 什么是僵尸进程与孤儿进程:https://blog.csdn.net/a745233700/article/details/120715371 + + \ No newline at end of file diff --git a/docs/cs-basics/operating-system/operating-system-basic-questions-02.md b/docs/cs-basics/operating-system/operating-system-basic-questions-02.md index 2b2e014a..07638ef7 100644 --- a/docs/cs-basics/operating-system/operating-system-basic-questions-02.md +++ b/docs/cs-basics/operating-system/operating-system-basic-questions-02.md @@ -409,3 +409,5 @@ LRU 算法是实际使用中应用的比较多,也被认为是最接近 OPT - 为什么 Linux 需要虚拟内存:https://draveness.me/whys-the-design-os-virtual-memory/ - 程序员的自我修养(七):内存缺页错误:https://liam.page/2017/09/01/page-fault/ - 虚拟内存的那点事儿:https://juejin.cn/post/6844903507594575886 + + \ No newline at end of file diff --git a/docs/cs-basics/operating-system/shell-intro.md b/docs/cs-basics/operating-system/shell-intro.md index a1481faf..3a62daf0 100644 --- a/docs/cs-basics/operating-system/shell-intro.md +++ b/docs/cs-basics/operating-system/shell-intro.md @@ -532,3 +532,5 @@ funWithParam 1 2 3 4 5 6 7 8 9 34 73 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 ! ``` + + \ No newline at end of file diff --git a/docs/database/basis.md b/docs/database/basis.md index 667131bf..66733657 100644 --- a/docs/database/basis.md +++ b/docs/database/basis.md @@ -154,3 +154,5 @@ Tips:你应该更多地关注在使用场景上,而不是执行效率。 - - - + + \ No newline at end of file diff --git a/docs/database/character-set.md b/docs/database/character-set.md index feb08c39..32d173f7 100644 --- a/docs/database/character-set.md +++ b/docs/database/character-set.md @@ -323,3 +323,5 @@ Incorrect string value: '\xF0\x9F\x98\x98\xF0\x9F...' for column 'name' at row 1 - MySQL8 文档: - MySQL5.7 文档: - MySQL Connector/J 文档: + + \ No newline at end of file diff --git a/docs/database/elasticsearch/elasticsearch-questions-01.md b/docs/database/elasticsearch/elasticsearch-questions-01.md index be3817a5..743e94ec 100644 --- a/docs/database/elasticsearch/elasticsearch-questions-01.md +++ b/docs/database/elasticsearch/elasticsearch-questions-01.md @@ -11,3 +11,5 @@ tag: ![](https://oss.javaguide.cn/javamianshizhibei/elasticsearch-questions.png) + + \ No newline at end of file diff --git a/docs/database/mongodb/mongodb-questions-01.md b/docs/database/mongodb/mongodb-questions-01.md index 699d11bd..b7717156 100644 --- a/docs/database/mongodb/mongodb-questions-01.md +++ b/docs/database/mongodb/mongodb-questions-01.md @@ -282,3 +282,5 @@ WiredTiger 日志也会被压缩,默认使用的也是 Snappy 压缩算法。 - Transactions - MongoDB 官方文档: - WiredTiger Storage Engine - MongoDB 官方文档: - WiredTiger 存储引擎之一:基础数据结构分析: + + \ No newline at end of file diff --git a/docs/database/mongodb/mongodb-questions-02.md b/docs/database/mongodb/mongodb-questions-02.md index 851981a8..7272f880 100644 --- a/docs/database/mongodb/mongodb-questions-02.md +++ b/docs/database/mongodb/mongodb-questions-02.md @@ -271,3 +271,5 @@ Rebalance 操作是比较耗费系统资源的,我们可以通过在业务低 - Sharding - MongoDB 官方文档: - MongoDB 分片集群介绍 - 阿里云文档: - 分片集群使用注意事项 - - 腾讯云文档: + + \ No newline at end of file diff --git a/docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md b/docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md index 4dc48353..3daf6f70 100644 --- a/docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md +++ b/docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md @@ -953,3 +953,5 @@ OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 6. SQL对大小写不敏感 7. 清除已有语句:\c ``` + + \ No newline at end of file diff --git a/docs/database/mysql/how-sql-executed-in-mysql.md b/docs/database/mysql/how-sql-executed-in-mysql.md index cdcde73a..9e2bbbcc 100644 --- a/docs/database/mysql/how-sql-executed-in-mysql.md +++ b/docs/database/mysql/how-sql-executed-in-mysql.md @@ -138,3 +138,5 @@ update tb_student A set A.age='19' where A.name=' 张三 '; - 《MySQL 实战 45 讲》 - MySQL 5.6 参考手册: + + \ No newline at end of file diff --git a/docs/database/mysql/index-invalidation-caused-by-implicit-conversion.md b/docs/database/mysql/index-invalidation-caused-by-implicit-conversion.md index b433a40e..27d7ba30 100644 --- a/docs/database/mysql/index-invalidation-caused-by-implicit-conversion.md +++ b/docs/database/mysql/index-invalidation-caused-by-implicit-conversion.md @@ -158,3 +158,5 @@ INSERT INTO `test1` (`id`, `num1`, `num2`, `type1`, `type2`, `str1`, `str2`) VAL 4. 字符串转换为数值类型时,非数字开头的字符串会转化为`0`,以数字开头的字符串会截取从第一个字符到第一个非数字内容为止的值为转化结果。 所以,我们在写 SQL 时一定要养成良好的习惯,查询的字段是什么类型,等号右边的条件就写成对应的类型。特别当查询的字段是字符串时,等号右边的条件一定要用引号引起来标明这是一个字符串,否则会造成索引失效触发全表扫描。 + + \ No newline at end of file diff --git a/docs/database/mysql/innodb-implementation-of-mvcc.md b/docs/database/mysql/innodb-implementation-of-mvcc.md index 665f2cdc..d37e7088 100644 --- a/docs/database/mysql/innodb-implementation-of-mvcc.md +++ b/docs/database/mysql/innodb-implementation-of-mvcc.md @@ -255,3 +255,5 @@ private: - [Innodb 中的事务隔离级别和锁的关系](https://tech.meituan.com/2014/08/20/innodb-lock.html) - [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/) + + \ No newline at end of file diff --git a/docs/database/mysql/mysql-auto-increment-primary-key-continuous.md b/docs/database/mysql/mysql-auto-increment-primary-key-continuous.md index 92ecdf84..31a884fe 100644 --- a/docs/database/mysql/mysql-auto-increment-primary-key-continuous.md +++ b/docs/database/mysql/mysql-auto-increment-primary-key-continuous.md @@ -217,3 +217,5 @@ tag: 2. 唯一键冲突 3. 事务回滚 4. 批量插入(如 `insert...select` 语句) + + \ No newline at end of file diff --git a/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md b/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md index cd0079be..8d87b90f 100644 --- a/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md +++ b/docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md @@ -377,3 +377,5 @@ pt-online-schema-change 它会首先建立一个与原表结构相同的新表 - 程序使用数据库账号只能在一个 DB 下使用,不准跨库 - 程序使用的账号原则上不准有 drop 权限 + + \ No newline at end of file diff --git a/docs/database/mysql/mysql-index.md b/docs/database/mysql/mysql-index.md index 0a00fdc4..0041c058 100644 --- a/docs/database/mysql/mysql-index.md +++ b/docs/database/mysql/mysql-index.md @@ -445,3 +445,5 @@ mysql> EXPLAIN SELECT `score`,`name` FROM `cus_order` ORDER BY `score` DESC; | Extra | 附加信息 | 篇幅问题,我这里只是简单介绍了一下 MySQL 执行计划,详细介绍请看:[MySQL 执行计划分析](./mysql-query-execution-plan.md)这篇文章。 + + \ No newline at end of file diff --git a/docs/database/mysql/mysql-logs.md b/docs/database/mysql/mysql-logs.md index 6f35478d..dbe9d667 100644 --- a/docs/database/mysql/mysql-logs.md +++ b/docs/database/mysql/mysql-logs.md @@ -328,3 +328,5 @@ MySQL InnoDB 引擎使用 **redo log(重做日志)** 保证事务的**持久性* - [CURD 这么多年,你有了解过 MySQL 的架构设计吗?](https://mp.weixin.qq.com/s/R-1km7r0z3oWfwYQV8iiqA) - [浅谈 MySQL InnoDB 的内存组件](https://mp.weixin.qq.com/s/7Kab4IQsNcU_bZdbv_MuOg) + + \ No newline at end of file diff --git a/docs/database/mysql/mysql-query-cache.md b/docs/database/mysql/mysql-query-cache.md index 760a197a..fae835af 100644 --- a/docs/database/mysql/mysql-query-cache.md +++ b/docs/database/mysql/mysql-query-cache.md @@ -204,3 +204,5 @@ MySQL 中的查询缓存虽然能够提升数据库的查询性能,但是查 - MySQL 缓存机制: - RDS MySQL 查询缓存(Query Cache)的设置和使用 - 阿里元云数据库 RDS 文档: - 8.10.3 The MySQL Query Cache - MySQL 官方文档: + + \ No newline at end of file diff --git a/docs/database/mysql/mysql-query-execution-plan.md b/docs/database/mysql/mysql-query-execution-plan.md index 696fcbb4..5ac02043 100644 --- a/docs/database/mysql/mysql-query-execution-plan.md +++ b/docs/database/mysql/mysql-query-execution-plan.md @@ -139,3 +139,5 @@ rows 列表示根据表统计信息及选用情况,大致估算出找到所需 - https://dev.mysql.com/doc/refman/5.7/en/explain-output.html - https://juejin.cn/post/6953444668973514789 + + \ No newline at end of file diff --git a/docs/database/mysql/mysql-questions-01.md b/docs/database/mysql/mysql-questions-01.md index de4a63da..0b5cea33 100644 --- a/docs/database/mysql/mysql-questions-01.md +++ b/docs/database/mysql/mysql-questions-01.md @@ -826,3 +826,5 @@ mysql> EXPLAIN SELECT `score`,`name` FROM `cus_order` ORDER BY `score` DESC; - 详解 MySQL InnoDB 中意向锁的作用: - 深入剖析 MySQL 自增锁: - 在数据库中不可重复读和幻读到底应该怎么分?: + + \ No newline at end of file diff --git a/docs/database/mysql/some-thoughts-on-database-storage-time.md b/docs/database/mysql/some-thoughts-on-database-storage-time.md index fe19f18a..51d7f380 100644 --- a/docs/database/mysql/some-thoughts-on-database-storage-time.md +++ b/docs/database/mysql/some-thoughts-on-database-storage-time.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] | 是 | | 数值型时间戳 | 4字节 | 全数字如1578707612 | 1970-01-01 00:00:01之后的时间 | 否 | + + \ No newline at end of file diff --git a/docs/database/mysql/transaction-isolation-level.md b/docs/database/mysql/transaction-isolation-level.md index 647b80ee..7a043bb1 100644 --- a/docs/database/mysql/transaction-isolation-level.md +++ b/docs/database/mysql/transaction-isolation-level.md @@ -111,3 +111,5 @@ SQL 脚本 1 在第一次查询工资为 500 的记录时只有一条,SQL 脚 - - [Mysql 锁:灵魂七拷问](https://tech.youzan.com/seven-questions-about-the-lock-of-MySQL/) - [Innodb 中的事务隔离级别和锁的关系](https://tech.meituan.com/2014/08/20/innodb-lock.html) + + \ No newline at end of file diff --git a/docs/database/nosql.md b/docs/database/nosql.md index fd70056f..719f4dfd 100644 --- a/docs/database/nosql.md +++ b/docs/database/nosql.md @@ -57,3 +57,5 @@ NoSQL 数据库主要可以分为下面四种类型: - NoSQL 是什么?- MongoDB 官方文档: - 什么是 NoSQL? - AWS: - NoSQL vs. SQL Databases - MongoDB 官方文档: + + \ No newline at end of file diff --git a/docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md b/docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md index 91427109..78d76a4f 100644 --- a/docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md +++ b/docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md @@ -114,3 +114,5 @@ Write Behind Pattern 和 Read/Write Through Pattern 很相似,两者都是由 这种策略在我们平时开发过程中也非常非常少见,但是不代表它的应用场景少,比如消息队列中消息的异步写入磁盘、MySQL 的 Innodb Buffer Pool 机制都用到了这种策略。 Write Behind Pattern 下 db 的写性能非常高,非常适合一些数据经常变化又对数据一致性要求没那么高的场景,比如浏览量、点赞量。 + + \ No newline at end of file diff --git a/docs/database/redis/cache-basics.md b/docs/database/redis/cache-basics.md index 2a9aee57..259e8d6e 100644 --- a/docs/database/redis/cache-basics.md +++ b/docs/database/redis/cache-basics.md @@ -10,3 +10,5 @@ tag: ![](https://oss.javaguide.cn/javamianshizhibei/database-questions.png) + + \ No newline at end of file diff --git a/docs/database/redis/redis-cluster.md b/docs/database/redis/redis-cluster.md index 2db4feda..8e2b727a 100644 --- a/docs/database/redis/redis-cluster.md +++ b/docs/database/redis/redis-cluster.md @@ -10,3 +10,5 @@ tag: ![](https://oss.javaguide.cn/github/javaguide/database/redis/redis-cluster-javamianshizhibei.png) + + \ No newline at end of file diff --git a/docs/database/redis/redis-common-blocking-problems-summary.md b/docs/database/redis/redis-common-blocking-problems-summary.md index facf3e3a..f572c20c 100644 --- a/docs/database/redis/redis-common-blocking-problems-summary.md +++ b/docs/database/redis/redis-common-blocking-problems-summary.md @@ -171,3 +171,5 @@ Redis 是典型的 CPU 密集型应用,不建议和其他多核 CPU 密集型 - Redis 阻塞的 6 大类场景分析与总结:https://mp.weixin.qq.com/s/eaZCEtTjTuEmXfUubVHjew - Redis 开发与运维笔记-Redis 的噩梦-阻塞:https://mp.weixin.qq.com/s/TDbpz9oLH6ifVv6ewqgSgA + + \ No newline at end of file diff --git a/docs/database/redis/redis-data-structures-01.md b/docs/database/redis/redis-data-structures-01.md index 434f432d..f60f3f5c 100644 --- a/docs/database/redis/redis-data-structures-01.md +++ b/docs/database/redis/redis-data-structures-01.md @@ -499,3 +499,5 @@ value1 - Redis Commands: 。 - Redis Data types tutorial: 。 - Redis 存储对象信息是用 Hash 还是 String : + + \ No newline at end of file diff --git a/docs/database/redis/redis-data-structures-02.md b/docs/database/redis/redis-data-structures-02.md index 7b090c7d..5a06df1c 100644 --- a/docs/database/redis/redis-data-structures-02.md +++ b/docs/database/redis/redis-data-structures-02.md @@ -214,3 +214,5 @@ user2 - Redis Data Structures:https://redis.com/redis-enterprise/data-structures/ 。 - 《Redis 深度历险:核心原理与应用实践》1.6 四两拨千斤——HyperLogLog - 布隆过滤器,位图,HyperLogLog:https://hogwartsrico.github.io/2020/06/08/BloomFilter-HyperLogLog-BitMap/index.html + + \ No newline at end of file diff --git a/docs/database/redis/redis-memory-fragmentation.md b/docs/database/redis/redis-memory-fragmentation.md index 799e2131..76498b99 100644 --- a/docs/database/redis/redis-memory-fragmentation.md +++ b/docs/database/redis/redis-memory-fragmentation.md @@ -120,3 +120,5 @@ config set active-defrag-cycle-max 50 - Redis 官方文档:https://redis.io/topics/memory-optimization - Redis 核心技术与实战 - 极客时间 - 删除数据后,为什么内存占用率还是很高?:https://time.geekbang.org/column/article/289140 - Redis 源码解析——内存分配: + + \ No newline at end of file diff --git a/docs/database/redis/redis-persistence.md b/docs/database/redis/redis-persistence.md index 499994cb..e472822b 100644 --- a/docs/database/redis/redis-persistence.md +++ b/docs/database/redis/redis-persistence.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/ - Redis AOF 持久化详解 - 程序员历小冰:http://remcarpediem.net/article/376c55d8/ - Redis RDB 与 AOF 持久化 · Analyze:https://wingsxdu.com/posts/database/redis/rdb-and-aof/ + + \ No newline at end of file diff --git a/docs/database/redis/redis-questions-01.md b/docs/database/redis/redis-questions-01.md index 088bf2db..212555bf 100644 --- a/docs/database/redis/redis-questions-01.md +++ b/docs/database/redis/redis-questions-01.md @@ -599,3 +599,5 @@ Redis 提供 6 种数据淘汰策略: - 《Redis 设计与实现》 - 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) + + \ No newline at end of file diff --git a/docs/database/redis/redis-questions-02.md b/docs/database/redis/redis-questions-02.md index 624122ec..d2eedeff 100644 --- a/docs/database/redis/redis-questions-02.md +++ b/docs/database/redis/redis-questions-02.md @@ -754,3 +754,5 @@ Cache Aside Pattern 中遇到写请求是这样的:更新 DB,然后直接删 - What is Redis Pipeline: - 一文详解 Redis 中 BigKey、HotKey 的发现与处理: - Redis延迟问题全面排障指南:https://mp.weixin.qq.com/s/mIc6a9mfEGdaNDD3MmfFsg + + \ No newline at end of file diff --git a/docs/database/sql/sql-questions-01.md b/docs/database/sql/sql-questions-01.md index 0d6499dd..70de96f8 100644 --- a/docs/database/sql/sql-questions-01.md +++ b/docs/database/sql/sql-questions-01.md @@ -1821,3 +1821,5 @@ FROM Customers WHERE cust_state = 'MI' or cust_state = 'IL' ORDER BY cust_name; ``` + + \ No newline at end of file diff --git a/docs/database/sql/sql-questions-02.md b/docs/database/sql/sql-questions-02.md index 2bdbc994..ab215746 100644 --- a/docs/database/sql/sql-questions-02.md +++ b/docs/database/sql/sql-questions-02.md @@ -446,3 +446,5 @@ ALTER TABLE employees DROP INDEX idx_email; DROP INDEX uniq_idx_exam_id ON examination_info; DROP INDEX full_idx_tag ON examination_info; ``` + + \ No newline at end of file diff --git a/docs/database/sql/sql-questions-03.md b/docs/database/sql/sql-questions-03.md index 2511e0ab..9f8807db 100644 --- a/docs/database/sql/sql-questions-03.md +++ b/docs/database/sql/sql-questions-03.md @@ -1297,3 +1297,5 @@ GROUP BY user_info.uid ORDER BY act_month_total DESC, act_days_2021 DESC ``` + + \ No newline at end of file diff --git a/docs/database/sql/sql-questions-04.md b/docs/database/sql/sql-questions-04.md index 45ab6072..0aa3d8e5 100644 --- a/docs/database/sql/sql-questions-04.md +++ b/docs/database/sql/sql-questions-04.md @@ -829,3 +829,5 @@ ORDER BY start_month ``` + + \ No newline at end of file diff --git a/docs/database/sql/sql-questions-05.md b/docs/database/sql/sql-questions-05.md index 7a527ef3..56366f74 100644 --- a/docs/database/sql/sql-questions-05.md +++ b/docs/database/sql/sql-questions-05.md @@ -1009,3 +1009,5 @@ INNER JOIN a AS b ON UPPER(a.tag)= b.tag #a小写 b大写 AND a.tag != b.tag WHERE a.answer_cnt < 3; ``` + + \ No newline at end of file diff --git a/docs/database/sql/sql-syntax-summary.md b/docs/database/sql/sql-syntax-summary.md index 12b4efde..257f8824 100644 --- a/docs/database/sql/sql-syntax-summary.md +++ b/docs/database/sql/sql-syntax-summary.md @@ -1208,3 +1208,5 @@ DROP TRIGGER IF EXISTS trigger_insert_user; - [后端程序员必备: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) + + \ No newline at end of file diff --git a/docs/distributed-system/api-gateway.md b/docs/distributed-system/api-gateway.md index 96344219..322294ef 100644 --- a/docs/distributed-system/api-gateway.md +++ b/docs/distributed-system/api-gateway.md @@ -169,3 +169,5 @@ Shenyu 通过插件扩展功能,插件是 ShenYu 的灵魂,并且插件也 - Kong 插件开发教程[通俗易懂]: - API 网关 Kong 实战: - Spring Cloud Gateway 原理介绍和应用: + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-configuration-center.md b/docs/distributed-system/distributed-configuration-center.md index e10ba19d..1c97bddb 100644 --- a/docs/distributed-system/distributed-configuration-center.md +++ b/docs/distributed-system/distributed-configuration-center.md @@ -8,3 +8,5 @@ category: 分布式 ![](https://oss.javaguide.cn/javamianshizhibei/distributed-system.png) + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-id-design.md b/docs/distributed-system/distributed-id-design.md index c3172737..3b8c96ca 100644 --- a/docs/distributed-system/distributed-id-design.md +++ b/docs/distributed-system/distributed-id-design.md @@ -171,3 +171,5 @@ span 是层的意思,比如在第一个实例算是第一层, 请求代理 - 客户的长网址: - ID 映射的短网址: (演示使用,可能无法正确打开) - 转进制后的短网址: (演示使用,可能无法正确打开) + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-id.md b/docs/distributed-system/distributed-id.md index 2a85c53a..89a2eb3d 100644 --- a/docs/distributed-system/distributed-id.md +++ b/docs/distributed-system/distributed-id.md @@ -354,3 +354,5 @@ Tinyid 的优缺点这里就不分析了,结合数据库号段模式的优缺 除了上面介绍的方式之外,像 ZooKeeper 这类中间件也可以帮助我们生成唯一 ID。**没有银弹,一定要结合实际项目来选择最适合自己的方案。** 不过,本文主要介绍的是分布式 ID 的理论知识。在实际的面试中,面试官可能会结合具体的业务场景来考察你对分布式 ID 的设计,你可以参考这篇文章:[分布式 ID 设计指南](./distributed-id-design)(对于实际工作中分布式 ID 的设计也非常有帮助)。 + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-lock-implementations.md b/docs/distributed-system/distributed-lock-implementations.md index 810eb63b..9aff2844 100644 --- a/docs/distributed-system/distributed-lock-implementations.md +++ b/docs/distributed-system/distributed-lock-implementations.md @@ -366,3 +366,5 @@ private static class LockData ## 总结 这篇文章我们介绍了实现分布式锁的两种常见方式。至于具体选择 Redis 还是 ZooKeeper 来实现分布式锁,还是要看业务的具体需求。如果对性能要求比较高的话,建议使用 Redis 实现分布式锁。如果对可靠性要求比较高的话,建议使用 ZooKeeper 实现分布式锁。 + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-lock.md b/docs/distributed-system/distributed-lock.md index a4a054d1..c6223170 100644 --- a/docs/distributed-system/distributed-lock.md +++ b/docs/distributed-system/distributed-lock.md @@ -80,3 +80,5 @@ category: 分布式 - 分布式锁的用途:分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。 - 分布式锁的应该具备的条件:互斥、高可用、可重入、高性能、非阻塞。 - 分布式锁的常见实现方式:关系型数据库比如 MySQL、分布式协调服务 ZooKeeper、分布式键值存储系统比如 Redis 、Etcd 。 + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md index 04e49a7d..b008d277 100644 --- a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md +++ b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md @@ -293,3 +293,5 @@ zkClient.setData().forPath("/node1/00001","c++".getBytes());//更新节点数据 ```java List childrenPaths = zkClient.getChildren().forPath("/node1"); ``` + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.md b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.md index f4102f61..29c29181 100644 --- a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.md +++ b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.md @@ -279,3 +279,5 @@ ZAB 协议包括两种基本的模式,分别是 ## 参考 - 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》 + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md index a791b2df..dd7219aa 100644 --- a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md +++ b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md @@ -364,3 +364,5 @@ tag: - `zookeeper` 的典型应用场景,比如选主,注册中心等等。 如果忘了可以回去看看再次理解一下,如果有疑问和建议欢迎提出 🤝🤝🤝。 + + \ No newline at end of file diff --git a/docs/distributed-system/distributed-transaction.md b/docs/distributed-system/distributed-transaction.md index 508fbcd5..73e3122d 100644 --- a/docs/distributed-system/distributed-transaction.md +++ b/docs/distributed-system/distributed-transaction.md @@ -8,3 +8,5 @@ category: 分布式 ![](https://oss.javaguide.cn/javamianshizhibei/distributed-system.png) + + \ No newline at end of file diff --git a/docs/distributed-system/protocol/cap-and-base-theorem.md b/docs/distributed-system/protocol/cap-and-base-theorem.md index 0f4a6578..eab55788 100644 --- a/docs/distributed-system/protocol/cap-and-base-theorem.md +++ b/docs/distributed-system/protocol/cap-and-base-theorem.md @@ -159,3 +159,5 @@ CAP 理论这节我们也说过了: ### 总结 **ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。** + + \ No newline at end of file diff --git a/docs/distributed-system/protocol/gossip-protocl.md b/docs/distributed-system/protocol/gossip-protocl.md index 16a2239a..1ef3e521 100644 --- a/docs/distributed-system/protocol/gossip-protocl.md +++ b/docs/distributed-system/protocol/gossip-protocl.md @@ -141,3 +141,5 @@ Gossip 设计了两种可能的消息传播模式:**反熵(Anti-Entropy)** - 一万字详解 Redis Cluster Gossip 协议:https://segmentfault.com/a/1190000038373546 - 《分布式协议与算法实战》 - 《Redis 设计与实现》 + + \ No newline at end of file diff --git a/docs/distributed-system/protocol/paxos-algorithm.md b/docs/distributed-system/protocol/paxos-algorithm.md index f271047c..39453d91 100644 --- a/docs/distributed-system/protocol/paxos-algorithm.md +++ b/docs/distributed-system/protocol/paxos-algorithm.md @@ -79,3 +79,5 @@ Basic Paxos 算法的仅能就单个值达成共识,为了能够对一系列 - https://zh.wikipedia.org/wiki/Paxos - 分布式系统中的一致性与共识算法:http://www.xuyasong.com/?p=1970 + + \ No newline at end of file diff --git a/docs/distributed-system/protocol/raft-algorithm.md b/docs/distributed-system/protocol/raft-algorithm.md index f09af1af..2f85b72a 100644 --- a/docs/distributed-system/protocol/raft-algorithm.md +++ b/docs/distributed-system/protocol/raft-algorithm.md @@ -167,3 +167,5 @@ raft 的要求之一就是安全性不依赖于时间:系统不能仅仅因为 - 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://knowledge-sharing.gitbooks.io/raft/content/chapter5.html + + \ No newline at end of file diff --git a/docs/distributed-system/rpc/dubbo.md b/docs/distributed-system/rpc/dubbo.md index 22a0618e..7c9d1a6f 100644 --- a/docs/distributed-system/rpc/dubbo.md +++ b/docs/distributed-system/rpc/dubbo.md @@ -457,3 +457,5 @@ Kryo 和 FST 这两种序列化方式是 Dubbo 后来才引入的,性能非常 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) + + \ No newline at end of file diff --git a/docs/distributed-system/rpc/http&rpc.md b/docs/distributed-system/rpc/http&rpc.md index 88ac10b0..ce381f18 100644 --- a/docs/distributed-system/rpc/http&rpc.md +++ b/docs/distributed-system/rpc/http&rpc.md @@ -192,3 +192,5 @@ res = remoteFunc(req) - 从发展历史来说,**HTTP 主要用于 B/S 架构,而 RPC 更多用于 C/S 架构。但现在其实已经没分那么清了,B/S 和 C/S 在慢慢融合。** 很多软件同时支持多端,所以对外一般用 HTTP 协议,而内部集群的微服务之间则采用 RPC 协议进行通讯。 - RPC 其实比 HTTP 出现的要早,且比目前主流的 HTTP1.1 性能要更好,所以大部分公司内部都还在使用 RPC。 - **HTTP2.0** 在 **HTTP1.1** 的基础上做了优化,性能可能比很多 RPC 协议都要好,但由于是这几年才出来的,所以也不太可能取代掉 RPC。 + + \ No newline at end of file diff --git a/docs/distributed-system/rpc/rpc-intro.md b/docs/distributed-system/rpc/rpc-intro.md index b65ed37e..c6391527 100644 --- a/docs/distributed-system/rpc/rpc-intro.md +++ b/docs/distributed-system/rpc/rpc-intro.md @@ -137,3 +137,5 @@ Dubbo 也是 Spring Cloud Alibaba 里面的一个组件。 ## 既然有了 HTTP 协议,为什么还要有 RPC ? 关于这个问题的详细答案,请看这篇文章:[有了 HTTP 协议,为什么还要有 RPC ?](http&rpc.md) 。 + + \ No newline at end of file diff --git a/docs/distributed-system/spring-cloud-gateway-questions.md b/docs/distributed-system/spring-cloud-gateway-questions.md index a85c8ee1..3cb1a2ee 100644 --- a/docs/distributed-system/spring-cloud-gateway-questions.md +++ b/docs/distributed-system/spring-cloud-gateway-questions.md @@ -153,3 +153,5 @@ public class GlobalErrorWebExceptionHandler implements ErrorWebExceptionHandler - Spring Cloud Gateway 官方文档: - Creating a custom Spring Cloud Gateway Filter: - 全局异常处理: + + \ No newline at end of file diff --git a/docs/high-availability/fallback-and-circuit-breaker.md b/docs/high-availability/fallback-and-circuit-breaker.md index bc2e477b..8302f9d9 100644 --- a/docs/high-availability/fallback-and-circuit-breaker.md +++ b/docs/high-availability/fallback-and-circuit-breaker.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)中。 + + \ No newline at end of file diff --git a/docs/high-availability/high-availability-system-design.md b/docs/high-availability/high-availability-system-design.md index 67547074..9c893305 100644 --- a/docs/high-availability/high-availability-system-design.md +++ b/docs/high-availability/high-availability-system-design.md @@ -66,3 +66,5 @@ category: 高可用 - **灰度发布:** 将服务器集群分成若干部分,每天只发布一部分机器,观察运行稳定没有故障,第二天继续发布一部分机器,持续几天才把整个集群全部发布完毕,期间如果发现问题,只需要回滚已发布的一部分服务器即可 - **定期检查/更换硬件:** 如果不是购买的云服务的话,定期还是需要对硬件进行一波检查的,对于一些需要更换或者升级的硬件,要及时更换或者升级。 - ..... + + \ No newline at end of file diff --git a/docs/high-availability/limit-request.md b/docs/high-availability/limit-request.md index 72593d3c..6169a5ee 100644 --- a/docs/high-availability/limit-request.md +++ b/docs/high-availability/limit-request.md @@ -209,3 +209,5 @@ Resilience4j 不仅提供限流,还提供了熔断、负载保护、自动重 - 服务治理之轻量级熔断框架 Resilience4j: - 超详细的 Guava RateLimiter 限流原理解析: - 实战 Spring Cloud Gateway 之限流篇 👍: + + \ No newline at end of file diff --git a/docs/high-availability/performance-test.md b/docs/high-availability/performance-test.md index e6e9f9d1..55f9b3c0 100644 --- a/docs/high-availability/performance-test.md +++ b/docs/high-availability/performance-test.md @@ -147,3 +147,5 @@ category: 高可用 4. 系统是否存在内存泄漏?(Java 的自动回收内存虽然很方便,但是,有时候代码写的不好真的会造成内存泄漏) 5. 数据库索引使用是否合理? 6. ...... + + \ No newline at end of file diff --git a/docs/high-availability/redundancy.md b/docs/high-availability/redundancy.md index 71b86b46..e2c88b01 100644 --- a/docs/high-availability/redundancy.md +++ b/docs/high-availability/redundancy.md @@ -42,3 +42,5 @@ category: 高可用 - [《从零开始学架构》— 28 | 业务高可用的保障:异地多活架构](http://gk.link/a/10pKZ) 不过,这些文章大多也都是在介绍概念知识。目前,网上还缺少真正介绍具体要如何去实践落地异地多活架构的资料。 + + \ No newline at end of file diff --git a/docs/high-availability/timeout-and-retry.md b/docs/high-availability/timeout-and-retry.md index 2dc78454..79d32f32 100644 --- a/docs/high-availability/timeout-and-retry.md +++ b/docs/high-availability/timeout-and-retry.md @@ -68,3 +68,5 @@ category: 高可用 - 微服务之间调用超时的设置治理: - 超时、重试和抖动回退: + + \ No newline at end of file diff --git a/docs/high-performance/cdn.md b/docs/high-performance/cdn.md index c5ffc53b..e80d2932 100644 --- a/docs/high-performance/cdn.md +++ b/docs/high-performance/cdn.md @@ -131,3 +131,5 @@ http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTim - 时间戳防盗链 - 七牛云 CDN: - CDN 是个啥玩意?一文说个明白: - 《透视 HTTP 协议》- 37 | CDN:加速我们的网络服务: + + \ No newline at end of file diff --git a/docs/high-performance/load-balancing.md b/docs/high-performance/load-balancing.md index a41af365..1c827466 100644 --- a/docs/high-performance/load-balancing.md +++ b/docs/high-performance/load-balancing.md @@ -233,3 +233,5 @@ Spring Cloud 2020.0.0 版本移除了 Netflix 除 Eureka 外的所有组件。Sp - 干货 | eBay 的 4 层软件负载均衡实现: - HTTP Load Balancing(Nginx 官方文档): - 深入浅出负载均衡 - vivo 互联网技术: + + \ No newline at end of file diff --git a/docs/high-performance/message-queue/disruptor-questions.md b/docs/high-performance/message-queue/disruptor-questions.md index e8f01100..314f5b03 100644 --- a/docs/high-performance/message-queue/disruptor-questions.md +++ b/docs/high-performance/message-queue/disruptor-questions.md @@ -136,3 +136,5 @@ CPU 缓存是通过将最近使用的数据存储在高速缓存中来实现更 - Disruptor 高性能之道-等待策略: - 《Java 并发编程实战》- 40 | 案例分析(三):高性能队列 Disruptor: + + \ No newline at end of file diff --git a/docs/high-performance/message-queue/kafka-questions-01.md b/docs/high-performance/message-queue/kafka-questions-01.md index 7f124abb..d6f4b0ac 100644 --- a/docs/high-performance/message-queue/kafka-questions-01.md +++ b/docs/high-performance/message-queue/kafka-questions-01.md @@ -222,3 +222,5 @@ acks 的默认值即为 1,代表我们的消息被 leader 副本接收之后 - Kafka 官方文档:https://kafka.apache.org/documentation/ - 极客时间—《Kafka 核心技术与实战》第 11 节:无消息丢失配置怎么实现? + + \ No newline at end of file diff --git a/docs/high-performance/message-queue/message-queue.md b/docs/high-performance/message-queue/message-queue.md index 4d7b6717..75e69a6b 100644 --- a/docs/high-performance/message-queue/message-queue.md +++ b/docs/high-performance/message-queue/message-queue.md @@ -286,3 +286,5 @@ Pulsar 更新记录(可以直观看到项目是否还在维护):https://gi - 《大型网站技术架构 》 - KRaft: Apache Kafka Without ZooKeeper:https://developer.confluent.io/learn/kraft/ - 消息队列的使用场景是什么样的?:https://mp.weixin.qq.com/s/4V1jI6RylJr7Jr9JsQe73A + + \ No newline at end of file diff --git a/docs/high-performance/message-queue/rabbitmq-questions.md b/docs/high-performance/message-queue/rabbitmq-questions.md index 0f0d9f8e..37ba61ba 100644 --- a/docs/high-performance/message-queue/rabbitmq-questions.md +++ b/docs/high-performance/message-queue/rabbitmq-questions.md @@ -243,3 +243,5 @@ Demo 级别的,一般就是你本地启动了玩玩儿的?,没人生产用 ## 如何解决消息队列的延时以及过期失效问题? RabbtiMQ 是可以设置过期时间的,也就是 TTL。如果消息在 queue 中积压超过一定的时间就会被 RabbitMQ 给清理掉,这个数据就没了。那这就是第二个坑了。这就不是说数据会大量积压在 mq 里,而是大量的数据会直接搞丢。我们可以采取一个方案,就是批量重导,这个我们之前线上也有类似的场景干过。就是大量积压的时候,我们当时就直接丢弃数据了,然后等过了高峰期以后,比如大家一起喝咖啡熬夜到晚上 12 点以后,用户都睡觉了。这个时候我们就开始写程序,将丢失的那批数据,写个临时程序,一点一点的查出来,然后重新灌入 mq 里面去,把白天丢的数据给他补回来。也只能是这样了。假设 1 万个订单积压在 mq 里面,没有处理,其中 1000 个订单都丢了,你只能手动写程序把那 1000 个订单给查出来,手动发到 mq 里去再补一次。 + + \ No newline at end of file diff --git a/docs/high-performance/message-queue/rocketmq-questions.md b/docs/high-performance/message-queue/rocketmq-questions.md index 0209c37b..9149e8eb 100644 --- a/docs/high-performance/message-queue/rocketmq-questions.md +++ b/docs/high-performance/message-queue/rocketmq-questions.md @@ -456,3 +456,5 @@ emmm,是不是有一点复杂 🤣,看英文图片和英文文档的时候 7. 介绍了 `RocketMQ` 的存储机制和刷盘策略。 等等。。。 + + \ No newline at end of file diff --git a/docs/high-performance/read-and-write-separation-and-library-subtable.md b/docs/high-performance/read-and-write-separation-and-library-subtable.md index 38c78977..4a0e1815 100644 --- a/docs/high-performance/read-and-write-separation-and-library-subtable.md +++ b/docs/high-performance/read-and-write-separation-and-library-subtable.md @@ -223,3 +223,5 @@ ShardingSphere 的优势如下(摘自 ShardingSphere 官方文档: \ No newline at end of file diff --git a/docs/high-performance/sql-optimization.md b/docs/high-performance/sql-optimization.md index ffd444fc..3f10f6dc 100644 --- a/docs/high-performance/sql-optimization.md +++ b/docs/high-performance/sql-optimization.md @@ -15,3 +15,5 @@ head: ![](https://oss.javaguide.cn/javamianshizhibei/sql-optimization.png) + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/advanced-programmer/20-bad-habits-of-bad-programmers.md b/docs/high-quality-technical-articles/advanced-programmer/20-bad-habits-of-bad-programmers.md index bb7fb8f3..db1f2e5e 100644 --- a/docs/high-quality-technical-articles/advanced-programmer/20-bad-habits-of-bad-programmers.md +++ b/docs/high-quality-technical-articles/advanced-programmer/20-bad-habits-of-bad-programmers.md @@ -144,3 +144,5 @@ tag: 优秀程序员的专业技能,我们可能很难在短时间内学会,但这些基本的职业素养,是可以在短期内做到的。 希望你我可以有则改之,无则加勉。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/advanced-programmer/seven-tips-for-becoming-an-advanced-programmer.md b/docs/high-quality-technical-articles/advanced-programmer/seven-tips-for-becoming-an-advanced-programmer.md index 0284e68a..344a2982 100644 --- a/docs/high-quality-technical-articles/advanced-programmer/seven-tips-for-becoming-an-advanced-programmer.md +++ b/docs/high-quality-technical-articles/advanced-programmer/seven-tips-for-becoming-an-advanced-programmer.md @@ -105,3 +105,5 @@ tag: 普通程序员往往是工作的事情做完就拉到,很少回头去对自己的技术,对业务进行归纳和总结。 而高级的程序员往往都会在一件比较大的事情做完之后总结一下,做个 ppt,写个博客啥的记录下来。这样既对自己的工作是一个归纳,也可以分享给其它同学,促进团队的共同成长。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/advanced-programmer/ten-years-of-dachang-growth-road.md b/docs/high-quality-technical-articles/advanced-programmer/ten-years-of-dachang-growth-road.md index 8a69e8f5..4df141c0 100644 --- a/docs/high-quality-technical-articles/advanced-programmer/ten-years-of-dachang-growth-road.md +++ b/docs/high-quality-technical-articles/advanced-programmer/ten-years-of-dachang-growth-road.md @@ -134,3 +134,5 @@ tag: ## 结语 以上就是我对互联网从业技术人员十年成长之路的心得,希望在你困惑和关键选择的时候可以帮助到你。如果我的只言片语能够在未来的某个时间帮助到你哪怕一点,那将是我莫大的荣幸。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/advanced-programmer/the-growth-strategy-of-the-technological-giant.md b/docs/high-quality-technical-articles/advanced-programmer/the-growth-strategy-of-the-technological-giant.md index 2565f5f5..84d9531d 100644 --- a/docs/high-quality-technical-articles/advanced-programmer/the-growth-strategy-of-the-technological-giant.md +++ b/docs/high-quality-technical-articles/advanced-programmer/the-growth-strategy-of-the-technological-giant.md @@ -203,3 +203,5 @@ Brendan Gregg,Jay Kreps 和 Brad Traversy 三个人走的技术路线各不相 > 译文: > > 实现战略目标,就像种树一样。刚开始只是一个小根芽,树干还没有长出来;树干长出来了,枝叶才能慢慢长出来;树枝长出来,然后才能开花和结果。刚开始种树的时候,只管栽培灌溉,别老是纠结枝什么时候长出来,花什么时候开,果实什么时候结出来。纠结有什么好处呢?只要你坚持投入栽培,还怕没有枝叶花实吗? + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/advanced-programmer/thinking-about-technology-and-business-after-five-years-of-work.md b/docs/high-quality-technical-articles/advanced-programmer/thinking-about-technology-and-business-after-five-years-of-work.md index a35672c2..b1f74e99 100644 --- a/docs/high-quality-technical-articles/advanced-programmer/thinking-about-technology-and-business-after-five-years-of-work.md +++ b/docs/high-quality-technical-articles/advanced-programmer/thinking-about-technology-and-business-after-five-years-of-work.md @@ -106,4 +106,5 @@ tag: 人的精力是有限的,而且面对三十这个天花板,各种事件也会接连而至,在职场中学会合理安排时间并不断提升核心能力,这样才能保证自己的竞争力。 -职场就像苦海无边,回首望去可能也没有岸边停泊,但是要具有换船的能力或者有个小木筏也就大差不差了。 \ No newline at end of file +职场就像苦海无边,回首望去可能也没有岸边停泊,但是要具有换船的能力或者有个小木筏也就大差不差了。 + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/how-to-examine-the-technical-ability-of-programmers-in-the-first-test-of-technology.md b/docs/high-quality-technical-articles/interview/how-to-examine-the-technical-ability-of-programmers-in-the-first-test-of-technology.md index cef6e51c..2050604e 100644 --- a/docs/high-quality-technical-articles/interview/how-to-examine-the-technical-ability-of-programmers-in-the-first-test-of-technology.md +++ b/docs/high-quality-technical-articles/interview/how-to-examine-the-technical-ability-of-programmers-in-the-first-test-of-technology.md @@ -342,3 +342,5 @@ tag: - [技术面试官的 9 大误区](https://zhuanlan.zhihu.com/p/51404304) - [如何当一个好的面试官?](https://www.zhihu.com/question/26240321) + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/my-personal-experience-in-2021.md b/docs/high-quality-technical-articles/interview/my-personal-experience-in-2021.md index dba4a243..a88b672a 100644 --- a/docs/high-quality-technical-articles/interview/my-personal-experience-in-2021.md +++ b/docs/high-quality-technical-articles/interview/my-personal-experience-in-2021.md @@ -199,3 +199,5 @@ tag: - **对于自己不会的,尽量多的说!!!!** 实在不行,就往别的地方说!!!总之是引导面试官往自己会的地方上说。 - 面试中的笔试和前面的笔试风格不同,面试笔试题目不太难,但是考察是冷静思考,代码优雅,没有 bug,先思考清楚!!!在写!!! - 在描述项目的难点的时候,不要去聊文档调研是难点,回答这部分问题更应该是技术上的难点,最后通过了什么技术解决了这个问题,这部分技术可以让面试官来更多提问以便知道自己的技术能力。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/screen-candidates-for-packaging.md b/docs/high-quality-technical-articles/interview/screen-candidates-for-packaging.md index b2ed4c77..89e04b9b 100644 --- a/docs/high-quality-technical-articles/interview/screen-candidates-for-packaging.md +++ b/docs/high-quality-technical-articles/interview/screen-candidates-for-packaging.md @@ -116,3 +116,5 @@ tag: 然而笔者碰到的问题是:使用 Git 两年却不知道 GitHub、使用 Redis 一年却不知道数据结构也不知道序列化、专业做爬虫却不懂 `content-type` 含义、使用搜索引擎技术却说不出两个分词插件、使用数据库读写分离却不知道同步延时等等。 写在最后,笔者认为在招聘途中,并不是不允许求职者包装,但是尽可能满足能筹平衡。虽然这篇文章没有完美的结尾,但是笔者提供了面试失败的各种经验。笔者最终招到了如意的小伙伴。也希望所有技术面试官早日找到符合自己产品发展的 IT 伙伴。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/some-secrets-about-alibaba-interview.md b/docs/high-quality-technical-articles/interview/some-secrets-about-alibaba-interview.md index 32a33086..796422b0 100644 --- a/docs/high-quality-technical-articles/interview/some-secrets-about-alibaba-interview.md +++ b/docs/high-quality-technical-articles/interview/some-secrets-about-alibaba-interview.md @@ -117,3 +117,5 @@ action,action,action ,重要的事情说三遍,做技术的不可能光 但是,面试时间有限,同学们一定要在有限的时间里展现出自己的**能力**和**无限的潜力** 。 最后,祝愿优秀的你能找到自己理想的工作! + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/summary-of-spring-recruitment.md b/docs/high-quality-technical-articles/interview/summary-of-spring-recruitment.md index 1d4ca463..79a6241d 100644 --- a/docs/high-quality-technical-articles/interview/summary-of-spring-recruitment.md +++ b/docs/high-quality-technical-articles/interview/summary-of-spring-recruitment.md @@ -161,3 +161,5 @@ Java 卷吗?毫无疑问,很卷,我个人认为开发属于没有什么门 ## 祝福 惟愿诸君,前程似锦! + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/technical-preliminary-preparation.md b/docs/high-quality-technical-articles/interview/technical-preliminary-preparation.md index 4a7a3de9..593aec5c 100644 --- a/docs/high-quality-technical-articles/interview/technical-preliminary-preparation.md +++ b/docs/high-quality-technical-articles/interview/technical-preliminary-preparation.md @@ -212,3 +212,5 @@ tag: 重点是:有些问题你答得很有深度,也体现了你的深度思考能力。 这一点是我当了技术面试官才领会到的。当然,并不是每位技术面试官都是这么想的,但我觉得这应该是个更合适的方式。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/the-experience-and-thinking-of-an-interview-experienced-by-an-older-programmer.md b/docs/high-quality-technical-articles/interview/the-experience-and-thinking-of-an-interview-experienced-by-an-older-programmer.md index 02ccd59a..1cb88123 100644 --- a/docs/high-quality-technical-articles/interview/the-experience-and-thinking-of-an-interview-experienced-by-an-older-programmer.md +++ b/docs/high-quality-technical-articles/interview/the-experience-and-thinking-of-an-interview-experienced-by-an-older-programmer.md @@ -358,3 +358,5 @@ ZOOM 的一位面试官或许是我见过的所有面试官中最差劲的。共 经过这一段面试的历炼,我觉得现在相比离职时的自己,又有了不少进步的。不说脱胎换骨,至少也是蜕了一层皮吧。差距,差距还是有的。起码面试那些知名大厂企业的技术专家和架构师还有差距。这与我平时工作的挑战性、认知视野的局限性及总结不足有关。下一次,我希望积蓄足够实力做到更好,和内心热爱的有价值有意义的事情再近一些些。 面试,其实也是一段工作经历。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/interview/the-experience-of-get-offer-from-over-20-big-companies.md b/docs/high-quality-technical-articles/interview/the-experience-of-get-offer-from-over-20-big-companies.md index 16d8f9e4..83794da6 100644 --- a/docs/high-quality-technical-articles/interview/the-experience-of-get-offer-from-over-20-big-companies.md +++ b/docs/high-quality-technical-articles/interview/the-experience-of-get-offer-from-over-20-big-companies.md @@ -195,3 +195,5 @@ tag: 这篇文章其实算讲的是方法论,很多我们一看就明白的「道理」实施起来可能会很难。可能会遇到一个不按常理出牌的面试官,也可能也会遇到一个沟通困难的面试官,当然也可能会撞上一个不怎么匹配的岗位。 总而言之,为了自己想要争取的东西,做好足够的准备总是没有坏处的。祝愿大家能成为`π`型人才,获得想要的`offer`! + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/personal-experience/8-years-programmer-work-summary.md b/docs/high-quality-technical-articles/personal-experience/8-years-programmer-work-summary.md index f6362c7f..cad4dddc 100644 --- a/docs/high-quality-technical-articles/personal-experience/8-years-programmer-work-summary.md +++ b/docs/high-quality-technical-articles/personal-experience/8-years-programmer-work-summary.md @@ -232,3 +232,5 @@ _PS:有几个问题先在这里解释一下,评论就不一一回复了_ ## 总结 好了 7 年多,近 8 年的职场讲完了,不管过去如何,未来还是要继续努力,希望看到这篇文章觉得有帮助的朋友,可以帮忙点个推荐,这样可能更多的人看到,也许可以避免更多的人犯我犯的错误。另外欢迎私信或者其他方式交流(某 Xin 号,jingyewandeng),可以讨论职场经验,方向,我也可以帮忙改简历(免费啊),不用怕打扰,能帮助别人是一项很有成绩感的事,并且过程中也会有收获,程序员也不要太腼腆呵呵 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/personal-experience/four-year-work-in-tencent-summary.md b/docs/high-quality-technical-articles/personal-experience/four-year-work-in-tencent-summary.md index c0d82be8..5f2b4aea 100644 --- a/docs/high-quality-technical-articles/personal-experience/four-year-work-in-tencent-summary.md +++ b/docs/high-quality-technical-articles/personal-experience/four-year-work-in-tencent-summary.md @@ -105,3 +105,5 @@ PS:还好以前有奖杯,不然一点念想都没了。(现在腾讯似乎 - 深入一个技术方向,不断钻研底层技术知识,这样就有希望成为此技术专家。坦白来说,虽然我深入研究并实践过领域驱动设计,也用来建模和解决了一些复杂业务问题,但是发自内心的,我其实更喜欢钻研技术,同时,我又对大数据很感兴趣。因此,我决定了,以后的方向,就做数据相关的工作。 腾讯的四年,是我的第一份工作经历,认识了很多厉害的人,学到了很多。最后自己主动离开,也算走的体面(即使损失了大礼包),还是感谢腾讯。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/personal-experience/huawei-od-275-days.md b/docs/high-quality-technical-articles/personal-experience/huawei-od-275-days.md index 56b1c129..61732279 100644 --- a/docs/high-quality-technical-articles/personal-experience/huawei-od-275-days.md +++ b/docs/high-quality-technical-articles/personal-experience/huawei-od-275-days.md @@ -335,3 +335,5 @@ blabla 有少量的基础问题和一面有重复,还有几个和大数据相 **入职鹅厂已经 1 月有余。不同的岗位,不同的工作内容,也是不同的挑战。** 感受比较深的是,作为程序员,还是要自我驱动,努力提升个人技术能力,横向纵向都要扩充,这样才能走得长远。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/personal-experience/two-years-of-back-end-develop--experience-in-didi-and-toutiao.md b/docs/high-quality-technical-articles/personal-experience/two-years-of-back-end-develop--experience-in-didi-and-toutiao.md index b3609658..5f6071fd 100644 --- a/docs/high-quality-technical-articles/personal-experience/two-years-of-back-end-develop--experience-in-didi-and-toutiao.md +++ b/docs/high-quality-technical-articles/personal-experience/two-years-of-back-end-develop--experience-in-didi-and-toutiao.md @@ -148,3 +148,5 @@ tag: 本来还想分享一些生活方面的故事,发现已经这么长了,那就先这样叭。上面写的一些总结和建议我自己做的也不是很好,还需要继续加油,和大家共勉。另外,其中某些观点,由于个人视角的局限性也不保证是普适和正确的,可能再工作几年这些观点也会发生改变,欢迎大家跟我交流~(甩锅成功) 最后祝大家都能找到心仪的工作,快乐工作,幸福生活,广阔天地,大有作为。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/programmer/efficient-book-publishing-and-practice-guide.md b/docs/high-quality-technical-articles/programmer/efficient-book-publishing-and-practice-guide.md index e7077a59..4c223ee6 100644 --- a/docs/high-quality-technical-articles/programmer/efficient-book-publishing-and-practice-guide.md +++ b/docs/high-quality-technical-articles/programmer/efficient-book-publishing-and-practice-guide.md @@ -138,3 +138,5 @@ tag: 可能当下,写公众号和录视频等的方式,挣钱收益要高于出书,不过话可以这样说,经营公众号和录制视频也是个长期的事情,在短时间里可能未必有收益,如果不是系统地发表内容的话,可能甚至不会有收益。所以出书可能是个非常好的前期准备工作,你靠出书系统积累了素材,靠出书整合了你的知识体系,那么在此基础上,靠公众号或者录视频挣钱可能就会事半功倍。 从上文里大家可以看到,在出书前期,联系出版社编辑和定选题并不难,如果要写案例书,那么在参考别人内容的基础上,要写完一般书可能也不是高不可攀的事情。甚至可以这样说,出书是个体力活,只要坚持,要出本书并不难,只是你愿不愿意坚持下去的问题。但一旦你有了属于自己的技术书,那么在找工作时,你就能自信地和面试官说你是这方面的专家,在你的视频、公众号和文字里,你也能正大光明地说,你是计算机图书的作者。更为重要的是,和名校、大厂经历一样,属于你的技术书同样是证明程序员能力的重要证据,当你通过出书有效整合了相关方面的知识体系后,那么在这方面,不管是找工作,或者是干私活,或者是接项目做,你都能理直气壮地和别人说:我能行! + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/programmer/how-do-programmers-publish-a-technical-book.md b/docs/high-quality-technical-articles/programmer/how-do-programmers-publish-a-technical-book.md index 1927c927..75d3182c 100644 --- a/docs/high-quality-technical-articles/programmer/how-do-programmers-publish-a-technical-book.md +++ b/docs/high-quality-technical-articles/programmer/how-do-programmers-publish-a-technical-book.md @@ -91,3 +91,5 @@ tag: 其实出书收益并不高,算下来月入大概能在 3k 左右,如果是和图书出版公司合作,估计更少,但这好歹能证明自己的实力。不过在出书后不能止步于此,因为在大厂里有太多的牛人,甚至不用靠出书来证明自己的实力。 那么如何让出书带来的利益最大化呢?第一可以靠这进大厂,面试时有自己的书绝对是加分项。第二可以用这个去各大网站开专栏,录视频,或者开公众号,毕竟有出版社的背书,能更让别人信服你的能力。第三更得用写书时积累的学习方法和上进的态势继续专研更高深技术,技术有了,不仅能到大厂挣更多的钱,还能通过企业培训等方式更高效地挣钱。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/readme.md b/docs/high-quality-technical-articles/readme.md index 013a763e..68eb6111 100644 --- a/docs/high-quality-technical-articles/readme.md +++ b/docs/high-quality-technical-articles/readme.md @@ -40,3 +40,5 @@ - [新入职一家公司如何快速进入工作状态](./work/get-into-work-mode-quickly-when-you-join-a-company.md) - [32 条总结教你提升职场经验](./work/32-tips-improving-career.md) - [聊聊大厂的绩效考核](./work/employee-performance.md) + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/work/32-tips-improving-career.md b/docs/high-quality-technical-articles/work/32-tips-improving-career.md index 00da6451..8c5cca97 100644 --- a/docs/high-quality-technical-articles/work/32-tips-improving-career.md +++ b/docs/high-quality-technical-articles/work/32-tips-improving-career.md @@ -68,3 +68,5 @@ tag: - Leader 的天然职责是让团队活下去,唯一的途径是实现上级、老板、公司经营者的目标,越是艰难的时候越明显; - Leader 的重要职责是识别团队需要被做的事情,并坚定信念,使众人行,越是艰难的时候越要坚定; - Leader 应该让自己遇到的每个人都感觉自己很重要、被需要。 + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/work/employee-performance.md b/docs/high-quality-technical-articles/work/employee-performance.md index 11e0d4b0..9e366dcd 100644 --- a/docs/high-quality-technical-articles/work/employee-performance.md +++ b/docs/high-quality-technical-articles/work/employee-performance.md @@ -130,3 +130,5 @@ A 和 C 属于绩效的两个极端,背后的逻辑类似,反着理解即可 当大家攻山头的能力都很强时,**到底做成什么样才算做好了?**当你弄清楚了这个玄机,职场也就看透了。 如果这篇文章让你有一点启发,来个点赞和在看呀!我是武哥,我们下期见! + + \ No newline at end of file diff --git a/docs/high-quality-technical-articles/work/get-into-work-mode-quickly-when-you-join-a-company.md b/docs/high-quality-technical-articles/work/get-into-work-mode-quickly-when-you-join-a-company.md index 30b4e1cc..69242565 100644 --- a/docs/high-quality-technical-articles/work/get-into-work-mode-quickly-when-you-join-a-company.md +++ b/docs/high-quality-technical-articles/work/get-into-work-mode-quickly-when-you-join-a-company.md @@ -92,3 +92,5 @@ tag: 关于如何快速进入工作状态,如果你有好的方法与建议,欢迎在评论区留言。 最后我们用一张思维导图来回顾一下这篇文章的内容。如果你觉得这篇文章对你有所帮助,可以关注文末公众号,我会经常分享一些自己成长过程中的经验与心得,与大家一起学习与进步。 + + \ No newline at end of file diff --git a/docs/java/basis/bigdecimal.md b/docs/java/basis/bigdecimal.md index 8363fd78..1b0b2f16 100644 --- a/docs/java/basis/bigdecimal.md +++ b/docs/java/basis/bigdecimal.md @@ -356,3 +356,5 @@ public class BigDecimalUtil { 浮点数没有办法用二进制精确表示,因此存在精度丢失的风险。 不过,Java 提供了`BigDecimal` 来操作浮点数。`BigDecimal` 的实现利用到了 `BigInteger` (用来操作大整数), 所不同的是 `BigDecimal` 加入了小数位的概念。 + + \ No newline at end of file diff --git a/docs/java/basis/generics-and-wildcards.md b/docs/java/basis/generics-and-wildcards.md index 6f9be1fb..ee66b2e8 100644 --- a/docs/java/basis/generics-and-wildcards.md +++ b/docs/java/basis/generics-and-wildcards.md @@ -16,3 +16,5 @@ tag: ![](https://oss.javaguide.cn/xingqiu/image-20220211231206733.png) + + \ No newline at end of file diff --git a/docs/java/basis/java-basic-questions-01.md b/docs/java/basis/java-basic-questions-01.md index 5c2ee325..afdbd78f 100644 --- a/docs/java/basis/java-basic-questions-01.md +++ b/docs/java/basis/java-basic-questions-01.md @@ -1020,3 +1020,5 @@ public class VariableLengthArgument { - Oracle vs OpenJDK:https://www.educba.com/oracle-vs-openjdk/ - Differences between Oracle JDK and OpenJDK:https://stackoverflow.com/questions/22358071/differences-between-oracle-jdk-and-openjdk - 彻底弄懂 Java 的移位操作符:https://juejin.cn/post/6844904025880526861 + + \ No newline at end of file diff --git a/docs/java/basis/java-basic-questions-02.md b/docs/java/basis/java-basic-questions-02.md index 146d04cf..8e0ee281 100644 --- a/docs/java/basis/java-basic-questions-02.md +++ b/docs/java/basis/java-basic-questions-02.md @@ -784,3 +784,5 @@ public static String getStr() { - 深入解析 String#intern: - R 大(RednaxelaFX)关于常量折叠的回答:https://www.zhihu.com/question/55976094/answer/147302764 + + \ No newline at end of file diff --git a/docs/java/basis/java-basic-questions-03.md b/docs/java/basis/java-basic-questions-03.md index 3492e754..404540b1 100644 --- a/docs/java/basis/java-basic-questions-03.md +++ b/docs/java/basis/java-basic-questions-03.md @@ -571,3 +571,5 @@ for (String s : strs) { Java 中最常用的语法糖主要有泛型、自动拆装箱、变长参数、枚举、内部类、增强 for 循环、try-with-resources 语法、lambda 表达式等。 关于这些语法糖的详细解读,请看这篇文章 [Java 语法糖详解](./syntactic-sugar.md) 。 + + \ No newline at end of file diff --git a/docs/java/basis/java-keyword-summary.md b/docs/java/basis/java-keyword-summary.md index 34a05f66..dd97323a 100644 --- a/docs/java/basis/java-keyword-summary.md +++ b/docs/java/basis/java-keyword-summary.md @@ -305,3 +305,5 @@ public class Test { - https://blog.csdn.net/chen13579867831/article/details/78995480 - https://www.cnblogs.com/chenssy/p/3388487.html - https://www.cnblogs.com/Qian123/p/5713440.html + + \ No newline at end of file diff --git a/docs/java/basis/proxy.md b/docs/java/basis/proxy.md index 13d839e4..27057544 100644 --- a/docs/java/basis/proxy.md +++ b/docs/java/basis/proxy.md @@ -400,3 +400,5 @@ after method send 这篇文章中主要介绍了代理模式的两种实现:静态代理以及动态代理。涵盖了静态代理和动态代理实战、静态代理和动态代理的区别、JDK 动态代理和 Cglib 动态代理区别等内容。 文中涉及到的所有源码,你可以在这里找到:[https://github.com/Snailclimb/guide-rpc-framework-learning/tree/master/src/main/java/github/javaguide/proxy](https://github.com/Snailclimb/guide-rpc-framework-learning/tree/master/src/main/java/github/javaguide/proxy) 。 + + \ No newline at end of file diff --git a/docs/java/basis/reflection.md b/docs/java/basis/reflection.md index 61161c59..2eecf687 100644 --- a/docs/java/basis/reflection.md +++ b/docs/java/basis/reflection.md @@ -182,3 +182,5 @@ value is JavaGuide ```java Class targetClass = Class.forName("cn.javaguide.TargetObject"); ``` + + \ No newline at end of file diff --git a/docs/java/basis/serialization.md b/docs/java/basis/serialization.md index f8a8a491..a79915fe 100644 --- a/docs/java/basis/serialization.md +++ b/docs/java/basis/serialization.md @@ -219,3 +219,5 @@ Kryo 是专门针对 Java 语言序列化方式并且性能非常好,如果你 像 Protobuf、 ProtoStuff、hessian 这类都是跨语言的序列化方式,如果有跨语言需求的话可以考虑使用。 除了我上面介绍到的序列化方式的话,还有像 Thrift,Avro 这些。 + + \ No newline at end of file diff --git a/docs/java/basis/spi.md b/docs/java/basis/spi.md index 338491a6..f6c015c8 100644 --- a/docs/java/basis/spi.md +++ b/docs/java/basis/spi.md @@ -558,3 +558,5 @@ public class MyServiceLoader { 1. 遍历加载所有的实现类,这样效率还是相对较低的; 2. 当多个 `ServiceLoader` 同时 `load` 时,会有并发问题。 + + \ No newline at end of file diff --git a/docs/java/basis/syntactic-sugar.md b/docs/java/basis/syntactic-sugar.md index 80919251..70db9120 100644 --- a/docs/java/basis/syntactic-sugar.md +++ b/docs/java/basis/syntactic-sugar.md @@ -808,3 +808,5 @@ Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 前面介绍了 12 种 Java 中常用的语法糖。所谓语法糖就是提供给开发人员便于开发的一种语法而已。但是这种语法只有开发人员认识。要想被执行,需要进行解糖,即转成 JVM 认识的语法。当我们把语法糖解糖之后,你就会发现其实我们日常使用的这些方便的语法,其实都是一些其他更简单的语法构成的。 有了这些语法糖,我们在日常开发的时候可以大大提升效率,但是同时也要避过度使用。使用之前最好了解下原理,避免掉坑。 + + \ No newline at end of file diff --git a/docs/java/basis/unsafe.md b/docs/java/basis/unsafe.md index 0a6fb36f..9c09c5a5 100644 --- a/docs/java/basis/unsafe.md +++ b/docs/java/basis/unsafe.md @@ -728,3 +728,5 @@ public native int pageSize(); ## 总结 在本文中,我们首先介绍了 `Unsafe` 的基本概念、工作原理,并在此基础上,对它的 API 进行了说明与实践。相信大家通过这一过程,能够发现 `Unsafe` 在某些场景下,确实能够为我们提供编程中的便利。但是回到开头的话题,在使用这些便利时,确实存在着一些安全上的隐患,在我看来,一项技术具有不安全因素并不可怕,可怕的是它在使用过程中被滥用。尽管之前有传言说会在 Java9 中移除 `Unsafe` 类,不过它还是照样已经存活到了 Java16。按照存在即合理的逻辑,只要使用得当,它还是能给我们带来不少的帮助,因此最后还是建议大家,在使用 `Unsafe` 的过程中一定要做到使用谨慎使用、避免滥用。 + + \ No newline at end of file diff --git a/docs/java/basis/why-there-only-value-passing-in-java.md b/docs/java/basis/why-there-only-value-passing-in-java.md index ad44d43a..372666b4 100644 --- a/docs/java/basis/why-there-only-value-passing-in-java.md +++ b/docs/java/basis/why-there-only-value-passing-in-java.md @@ -215,3 +215,5 @@ Java 中将实参传递给方法(或函数)的方式是 **值传递**: - [Java 到底是值传递还是引用传递? - Hollis 的回答 - 知乎](https://www.zhihu.com/question/31203609/answer/576030121) - [Oracle Java Tutorials - Passing Information to a Method or a Constructor](https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html) - [Interview with James Gosling, Father of Java](https://mappingthejourney.com/single-post/2017/06/29/episode-3-interview-with-james-gosling-father-of-java/) + + \ No newline at end of file diff --git a/docs/java/collection/arrayblockingqueue-source-code.md b/docs/java/collection/arrayblockingqueue-source-code.md index 87eb9395..49c127eb 100644 --- a/docs/java/collection/arrayblockingqueue-source-code.md +++ b/docs/java/collection/arrayblockingqueue-source-code.md @@ -770,4 +770,5 @@ public boolean contains(Object o) { - 深入理解 Java 系列 | BlockingQueue 用法详解: - 深入浅出阻塞队列 BlockingQueue 及其典型实现 ArrayBlockingQueue: -- 并发编程大扫盲:ArrayBlockingQueue 底层原理和实战: \ No newline at end of file +- 并发编程大扫盲:ArrayBlockingQueue 底层原理和实战: + \ No newline at end of file diff --git a/docs/java/collection/arraylist-source-code.md b/docs/java/collection/arraylist-source-code.md index 31d02b78..1b60ce53 100644 --- a/docs/java/collection/arraylist-source-code.md +++ b/docs/java/collection/arraylist-source-code.md @@ -967,3 +967,5 @@ public class EnsureCapacityTest { ``` 通过运行结果,我们可以看出向 `ArrayList` 添加大量元素之前使用`ensureCapacity` 方法可以提升性能。不过,这个性能差距几乎可以忽略不计。而且,实际项目根本也不可能往 `ArrayList` 里面添加这么多元素。 + + \ No newline at end of file diff --git a/docs/java/collection/concurrent-hash-map-source-code.md b/docs/java/collection/concurrent-hash-map-source-code.md index ca72fe0c..b8ed7566 100644 --- a/docs/java/collection/concurrent-hash-map-source-code.md +++ b/docs/java/collection/concurrent-hash-map-source-code.md @@ -589,3 +589,5 @@ Java7 中 `ConcurrentHashMap` 使用的分段锁,也就是每一个 Segment Java8 中的 `ConcurrentHashMap` 使用的 `Synchronized` 锁加 CAS 的机制。结构也由 Java7 中的 **`Segment` 数组 + `HashEntry` 数组 + 链表** 进化成了 **Node 数组 + 链表 / 红黑树**,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。 有些同学可能对 `Synchronized` 的性能存在疑问,其实 `Synchronized` 锁自从引入锁升级策略后,性能不再是问题,有兴趣的同学可以自己了解下 `Synchronized` 的**锁升级**。 + + \ No newline at end of file diff --git a/docs/java/collection/copyonwritearraylist-source-code.md b/docs/java/collection/copyonwritearraylist-source-code.md index 9741a87c..8cd99e9e 100644 --- a/docs/java/collection/copyonwritearraylist-source-code.md +++ b/docs/java/collection/copyonwritearraylist-source-code.md @@ -314,3 +314,5 @@ System.out.println("列表清空后为:" + list); 列表清空后为:[] ``` + + \ No newline at end of file diff --git a/docs/java/collection/delayqueue-source-code.md b/docs/java/collection/delayqueue-source-code.md index 8b9354c1..bf889490 100644 --- a/docs/java/collection/delayqueue-source-code.md +++ b/docs/java/collection/delayqueue-source-code.md @@ -355,4 +355,5 @@ public E peek() { - 《深入理解高并发编程:JDK核心技术》: - 一口气说出Java 6种延时队列的实现方法(面试官也得服): -- 图解DelayQueue源码(java 8)——延时队列的小九九: \ No newline at end of file +- 图解DelayQueue源码(java 8)——延时队列的小九九: + \ No newline at end of file diff --git a/docs/java/collection/hashmap-source-code.md b/docs/java/collection/hashmap-source-code.md index 44751cf0..b33352dc 100644 --- a/docs/java/collection/hashmap-source-code.md +++ b/docs/java/collection/hashmap-source-code.md @@ -575,3 +575,5 @@ public class HashMapDemo { } ``` + + \ No newline at end of file diff --git a/docs/java/collection/java-collection-precautions-for-use.md b/docs/java/collection/java-collection-precautions-for-use.md index 380f63ce..be6af5f5 100644 --- a/docs/java/collection/java-collection-precautions-for-use.md +++ b/docs/java/collection/java-collection-precautions-for-use.md @@ -439,3 +439,5 @@ CollectionUtils.addAll(list, str); Integer[] array = {1, 2, 3}; List list = List.of(array); ``` + + \ No newline at end of file diff --git a/docs/java/collection/java-collection-questions-01.md b/docs/java/collection/java-collection-questions-01.md index 057fdd10..b1909d70 100644 --- a/docs/java/collection/java-collection-questions-01.md +++ b/docs/java/collection/java-collection-questions-01.md @@ -488,3 +488,5 @@ Java 中常用的阻塞队列实现类有以下几种: - 是否有界:`ArrayBlockingQueue` 是有界队列,必须在创建时指定容量大小。`LinkedBlockingQueue` 创建时可以不指定容量大小,默认是`Integer.MAX_VALUE`,也就是无界的。但也可以指定队列大小,从而成为有界的。 - 锁是否分离: `ArrayBlockingQueue`中的锁是没有分离的,即生产和消费用的是同一个锁;`LinkedBlockingQueue`中的锁是分离的,即生产用的是`putLock`,消费是`takeLock`,这样可以防止生产者和消费者线程之间的锁争夺。 - 内存占用:`ArrayBlockingQueue` 需要提前分配数组内存,而 `LinkedBlockingQueue` 则是动态分配链表节点内存。这意味着,`ArrayBlockingQueue` 在创建时就会占用一定的内存空间,且往往申请的内存比实际所用的内存更大,而`LinkedBlockingQueue` 则是根据元素的增加而逐渐占用内存空间。 + + \ No newline at end of file diff --git a/docs/java/collection/java-collection-questions-02.md b/docs/java/collection/java-collection-questions-02.md index e654a9ed..e9bf4035 100644 --- a/docs/java/collection/java-collection-questions-02.md +++ b/docs/java/collection/java-collection-questions-02.md @@ -506,3 +506,5 @@ synchronizedList(List list)//返回指定列表支持的同步(线程安全 synchronizedMap(Map m) //返回由指定映射支持的同步(线程安全的)Map。 synchronizedSet(Set s) //返回指定 set 支持的同步(线程安全的)set。 ``` + + \ No newline at end of file diff --git a/docs/java/collection/linkedhashmap-source-code.md b/docs/java/collection/linkedhashmap-source-code.md index 2946bb35..de599f22 100644 --- a/docs/java/collection/linkedhashmap-source-code.md +++ b/docs/java/collection/linkedhashmap-source-code.md @@ -578,4 +578,5 @@ linkedHashMap get time: 67 - LinkedHashMap 源码详细分析(JDK1.8): - HashMap 与 LinkedHashMap: -- 源于 LinkedHashMap 源码: \ No newline at end of file +- 源于 LinkedHashMap 源码: + \ No newline at end of file diff --git a/docs/java/collection/linkedlist-source-code.md b/docs/java/collection/linkedlist-source-code.md index 39f9a2ac..a7fab17c 100644 --- a/docs/java/collection/linkedlist-source-code.md +++ b/docs/java/collection/linkedlist-source-code.md @@ -512,4 +512,5 @@ System.out.println("清空后的链表:" + list); 链表内容:[orange, grape] 链表长度:2 清空后的链表:[] -``` \ No newline at end of file +``` + \ No newline at end of file diff --git a/docs/java/collection/priorityqueue-source-code.md b/docs/java/collection/priorityqueue-source-code.md index 4fe12259..c9bc72c2 100644 --- a/docs/java/collection/priorityqueue-source-code.md +++ b/docs/java/collection/priorityqueue-source-code.md @@ -11,3 +11,5 @@ tag: + + \ No newline at end of file diff --git a/docs/java/concurrent/aqs.md b/docs/java/concurrent/aqs.md index 942560f0..86eed751 100644 --- a/docs/java/concurrent/aqs.md +++ b/docs/java/concurrent/aqs.md @@ -790,3 +790,5 @@ threadnum:7is finish - Java 并发之 AQS 详解: - 从 ReentrantLock 的实现看 AQS 的原理及应用: + + \ No newline at end of file diff --git a/docs/java/concurrent/atomic-classes.md b/docs/java/concurrent/atomic-classes.md index bcc32153..6ae33a98 100644 --- a/docs/java/concurrent/atomic-classes.md +++ b/docs/java/concurrent/atomic-classes.md @@ -446,3 +446,5 @@ class User { ## 参考 - 《Java 并发编程的艺术》 + + \ No newline at end of file diff --git a/docs/java/concurrent/completablefuture-intro.md b/docs/java/concurrent/completablefuture-intro.md index 31b97dc2..057cf57e 100644 --- a/docs/java/concurrent/completablefuture-intro.md +++ b/docs/java/concurrent/completablefuture-intro.md @@ -525,3 +525,5 @@ abc 如果想要深入学习的话,可以多找一些书籍和博客看。 另外,建议 G 友们可以看看京东的 [asyncTool](https://gitee.com/jd-platform-opensource/asyncTool) 这个并发框架,里面大量使用到了 `CompletableFuture` 。 + + \ No newline at end of file diff --git a/docs/java/concurrent/java-concurrent-collections.md b/docs/java/concurrent/java-concurrent-collections.md index edfb8889..db013996 100644 --- a/docs/java/concurrent/java-concurrent-collections.md +++ b/docs/java/concurrent/java-concurrent-collections.md @@ -151,3 +151,5 @@ private static ArrayBlockingQueue blockingQueue = new ArrayBlockingQueu - 《实战 Java 高并发程序设计》 - https://javadoop.com/post/java-concurrent-queue - https://juejin.im/post/5aeebd02518825672f19c546 + + \ No newline at end of file diff --git a/docs/java/concurrent/java-concurrent-questions-01.md b/docs/java/concurrent/java-concurrent-questions-01.md index ace63d45..efdd86a4 100644 --- a/docs/java/concurrent/java-concurrent-questions-01.md +++ b/docs/java/concurrent/java-concurrent-questions-01.md @@ -324,3 +324,5 @@ Process finished with exit code 0 new 一个 `Thread`,线程进入了新建状态。调用 `start()`方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 `start()` 会执行线程的相应准备工作,然后自动执行 `run()` 方法的内容,这是真正的多线程工作。 但是,直接执行 `run()` 方法,会把 `run()` 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。 **总结:调用 `start()` 方法方可启动线程并使线程进入就绪状态,直接执行 `run()` 方法的话不会以多线程的方式执行。** + + \ No newline at end of file diff --git a/docs/java/concurrent/java-concurrent-questions-02.md b/docs/java/concurrent/java-concurrent-questions-02.md index 1bde52da..6ea77860 100644 --- a/docs/java/concurrent/java-concurrent-questions-02.md +++ b/docs/java/concurrent/java-concurrent-questions-02.md @@ -706,3 +706,5 @@ Atomic 原子类部分的内容我单独写了一篇文章来总结:[Atomic - 高性能解决线程饥饿的利器 StampedLock:https://mp.weixin.qq.com/s/2Acujjr4BHIhlFsCLGwYSg - 理解 Java 中的 ThreadLocal - 技术小黑屋:https://droidyue.com/blog/2016/03/13/learning-threadlocal-in-java/ - ThreadLocal (Java Platform SE 8 ) - Oracle Help Center:https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html + + \ No newline at end of file diff --git a/docs/java/concurrent/java-concurrent-questions-03.md b/docs/java/concurrent/java-concurrent-questions-03.md index 2a536ed1..3295bc8b 100644 --- a/docs/java/concurrent/java-concurrent-questions-03.md +++ b/docs/java/concurrent/java-concurrent-questions-03.md @@ -954,3 +954,5 @@ public int await() throws InterruptedException, BrokenBarrierException { - Java 多线程(三)——FutureTask/CompletableFuture:https://www.cnblogs.com/iwehdio/p/14285282.html - Java 并发之 AQS 详解:https://www.cnblogs.com/waterystone/p/4920797.html - Java 并发包基石-AQS 详解:https://www.cnblogs.com/chengxiao/archive/2017/07/24/7141160.html + + \ No newline at end of file diff --git a/docs/java/concurrent/java-thread-pool-best-practices.md b/docs/java/concurrent/java-thread-pool-best-practices.md index f20fa673..06e4200c 100644 --- a/docs/java/concurrent/java-thread-pool-best-practices.md +++ b/docs/java/concurrent/java-thread-pool-best-practices.md @@ -296,3 +296,5 @@ server.tomcat.max-threads=1 解决上述问题比较建议的办法是使用阿里巴巴开源的 `TransmittableThreadLocal`(`TTL`)。`TransmittableThreadLocal`类继承并加强了 JDK 内置的`InheritableThreadLocal`类,在使用线程池等会池化复用线程的执行组件情况下,提供`ThreadLocal`值的传递功能,解决异步执行时上下文传递的问题。 `TransmittableThreadLocal` 项目地址:https://github.com/alibaba/transmittable-thread-local 。 + + \ No newline at end of file diff --git a/docs/java/concurrent/java-thread-pool-summary.md b/docs/java/concurrent/java-thread-pool-summary.md index c8120294..de2488bb 100644 --- a/docs/java/concurrent/java-thread-pool-summary.md +++ b/docs/java/concurrent/java-thread-pool-summary.md @@ -810,3 +810,5 @@ public class ScheduledThreadPoolExecutor - [Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor Example](https://www.journaldev.com/2340/java-scheduler-scheduledexecutorservice-scheduledthreadpoolexecutor-example "Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor Example") - [java.util.concurrent.ScheduledThreadPoolExecutor Example](https://examples.javacodegeeks.com/core-java/util/concurrent/scheduledthreadpoolexecutor/java-util-concurrent-scheduledthreadpoolexecutor-example/ "java.util.concurrent.ScheduledThreadPoolExecutor Example") - [ThreadPoolExecutor – Java Thread Pool Example](https://www.journaldev.com/1069/threadpoolexecutor-java-thread-pool-example-executorservice "ThreadPoolExecutor – Java Thread Pool Example") + + \ No newline at end of file diff --git a/docs/java/concurrent/jmm.md b/docs/java/concurrent/jmm.md index d8f69b46..e1aea07c 100644 --- a/docs/java/concurrent/jmm.md +++ b/docs/java/concurrent/jmm.md @@ -236,3 +236,5 @@ happens-before 与 JMM 的关系用《Java 并发编程的艺术》这本书中 - Java 内存访问重排序的研究:https://tech.meituan.com/2014/09/23/java-memory-reordering.html - 嘿,同学,你要的 Java 内存模型 (JMM) 来了:https://xie.infoq.cn/article/739920a92d0d27e2053174ef2 - JSR 133 (Java Memory Model) FAQ:https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html + + \ No newline at end of file diff --git a/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md b/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md index 77564054..a983d1ed 100644 --- a/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md +++ b/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md @@ -172,3 +172,5 @@ CAS 只对单个共享变量有效,当操作涉及跨多个共享变量时 CAS - 《Java 并发编程核心 78 讲》 - 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其 Java 实现!:https://zhuanlan.zhihu.com/p/71156910 - 一文彻底搞懂 CAS 实现原理 & 深入到 CPU 指令:https://zhuanlan.zhihu.com/p/94976168 + + \ No newline at end of file diff --git a/docs/java/concurrent/reentrantlock.md b/docs/java/concurrent/reentrantlock.md index 517ed44d..5ed5acba 100644 --- a/docs/java/concurrent/reentrantlock.md +++ b/docs/java/concurrent/reentrantlock.md @@ -1018,3 +1018,5 @@ public class LeeMain { - Lea D. The java. util. concurrent synchronizer framework[J]. Science of Computer Programming, 2005, 58(3): 293-309. - 《Java 并发编程实战》 - [不可不说的 Java“锁”事](https://tech.meituan.com/2018/11/15/java-lock.html) + + \ No newline at end of file diff --git a/docs/java/concurrent/threadlocal.md b/docs/java/concurrent/threadlocal.md index 8bf21a4f..30e25128 100644 --- a/docs/java/concurrent/threadlocal.md +++ b/docs/java/concurrent/threadlocal.md @@ -910,3 +910,5 @@ public class MyThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { #### 使用 MQ 发送消息给第三方系统 在 MQ 发送的消息体中自定义属性`requestId`,接收方消费消息后,自己解析`requestId`使用即可。 + + \ No newline at end of file diff --git a/docs/java/io/io-basis.md b/docs/java/io/io-basis.md index 7e441a46..ab497981 100755 --- a/docs/java/io/io-basis.md +++ b/docs/java/io/io-basis.md @@ -544,3 +544,5 @@ randomAccessFile.write(new byte[]{'H', 'I', 'J', 'K'}); ![](https://oss.javaguide.cn/github/javaguide/java/image-20220428104115362.png) `RandomAccessFile` 的实现依赖于 `FileDescriptor` (文件描述符) 和 `FileChannel` (内存映射文件)。 + + \ No newline at end of file diff --git a/docs/java/io/io-design-patterns.md b/docs/java/io/io-design-patterns.md index e251d9a6..1c14c056 100644 --- a/docs/java/io/io-design-patterns.md +++ b/docs/java/io/io-design-patterns.md @@ -317,3 +317,5 @@ class PollingWatchService - Patterns in Java APIs:http://cecs.wright.edu/~tkprasad/courses/ceg860/paper/node26.html - 装饰器模式:通过剖析 Java IO 类库源码学习装饰器模式:https://time.geekbang.org/column/article/204845 - sun.nio 包是什么,是 java 代码么? - RednaxelaFX https://www.zhihu.com/question/29237781/answer/43653953 + + \ No newline at end of file diff --git a/docs/java/io/io-model.md b/docs/java/io/io-model.md index 03ca308e..d201aea9 100644 --- a/docs/java/io/io-model.md +++ b/docs/java/io/io-model.md @@ -128,3 +128,5 @@ AIO 也就是 NIO 2。Java 7 中引入了 NIO 的改进版 NIO 2,它是异步 IO - 10 分钟看懂, Java NIO 底层原理:https://www.cnblogs.com/crazymakercircle/p/10225159.html - IO 模型知多少 | 理论篇:https://www.cnblogs.com/sheng-jie/p/how-much-you-know-about-io-models.html - 《UNIX 网络编程 卷 1;套接字联网 API 》6.2 节 IO 模型 + + \ No newline at end of file diff --git a/docs/java/io/nio-basis.md b/docs/java/io/nio-basis.md index e4e79ddc..b125683e 100644 --- a/docs/java/io/nio-basis.md +++ b/docs/java/io/nio-basis.md @@ -390,4 +390,5 @@ private void loadFileIntoMemory(File xmlFile) throws IOException { - Java NIO:Buffer、Channel 和 Selector:https://www.javadoop.com/post/java-nio - \ No newline at end of file + + \ No newline at end of file diff --git a/docs/java/jvm/class-file-structure.md b/docs/java/jvm/class-file-structure.md index aac8a9cf..c796ae8c 100644 --- a/docs/java/jvm/class-file-structure.md +++ b/docs/java/jvm/class-file-structure.md @@ -212,3 +212,5 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用 - Chapter 4. The class File Format - Java Virtual Machine Specification:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html - 实例分析 JAVA CLASS 的文件结构: - 《Java 虚拟机原理图解》 1.2.2、Class 文件中的常量池详解(上): + + \ No newline at end of file diff --git a/docs/java/jvm/class-loading-process.md b/docs/java/jvm/class-loading-process.md index bf01849d..5fef15fc 100644 --- a/docs/java/jvm/class-loading-process.md +++ b/docs/java/jvm/class-loading-process.md @@ -142,3 +142,5 @@ tag: - 《深入理解 Java 虚拟机》 - 《实战 Java 虚拟机》 - Chapter 5. Loading, Linking, and Initializing - Java Virtual Machine Specification:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.4 + + \ No newline at end of file diff --git a/docs/java/jvm/classloader.md b/docs/java/jvm/classloader.md index 7e84c9e4..b86bea21 100644 --- a/docs/java/jvm/classloader.md +++ b/docs/java/jvm/classloader.md @@ -310,3 +310,5 @@ Tomcat 的类加载器的层次结构如下: - Class Loaders in Java:https://www.baeldung.com/java-classloaders - Class ClassLoader - Oracle 官方文档:https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html - 老大难的 Java ClassLoader 再不理解就老了:https://zhuanlan.zhihu.com/p/51374915 + + \ No newline at end of file diff --git a/docs/java/jvm/jdk-monitoring-and-troubleshooting-tools.md b/docs/java/jvm/jdk-monitoring-and-troubleshooting-tools.md index dd591324..9de4cadb 100644 --- a/docs/java/jvm/jdk-monitoring-and-troubleshooting-tools.md +++ b/docs/java/jvm/jdk-monitoring-and-troubleshooting-tools.md @@ -308,3 +308,5 @@ VisualVM 基于 NetBeans 平台开发,因此他一开始就具备了插件扩 - - + + \ No newline at end of file diff --git a/docs/java/jvm/jvm-garbage-collection.md b/docs/java/jvm/jvm-garbage-collection.md index f57e8c43..0a071b3f 100644 --- a/docs/java/jvm/jvm-garbage-collection.md +++ b/docs/java/jvm/jvm-garbage-collection.md @@ -510,3 +510,5 @@ $ java -XX:+UseZGC className - 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第二版》 - https://my.oschina.net/hosee/blog/644618 - + + \ No newline at end of file diff --git a/docs/java/jvm/jvm-in-action.md b/docs/java/jvm/jvm-in-action.md index 7d38c7d6..0bf90f3f 100644 --- a/docs/java/jvm/jvm-in-action.md +++ b/docs/java/jvm/jvm-in-action.md @@ -51,3 +51,5 @@ JVM 线上问题排查和性能调优也是面试常问的一个问题,尤其 [Java 中 9 种常见的 CMS GC 问题分析与解决 - 美团技术团 - 2020](https://tech.meituan.com/2020/11/12/java-9-cms-gc.html) 这篇文章共 2w+ 字,详细介绍了 GC 基础,总结了 CMS GC 的一些常见问题分析与解决办法。 + + \ No newline at end of file diff --git a/docs/java/jvm/jvm-intro.md b/docs/java/jvm/jvm-intro.md index 3fad8066..39afe8c7 100644 --- a/docs/java/jvm/jvm-intro.md +++ b/docs/java/jvm/jvm-intro.md @@ -530,3 +530,5 @@ JDK5.0 以后每个线程堆栈大小为 1M,以前每个线程堆栈大小为 ## finally 真的扯了很久这东西,参考了多方的资料,有极客时间的《深入拆解虚拟机》和《Java 核心技术面试精讲》,也有百度,也有自己在学习的一些线上课程的总结。希望对你有所帮助,谢谢。 + + \ No newline at end of file diff --git a/docs/java/jvm/jvm-parameters-intro.md b/docs/java/jvm/jvm-parameters-intro.md index 502fd299..a71d5182 100644 --- a/docs/java/jvm/jvm-parameters-intro.md +++ b/docs/java/jvm/jvm-parameters-intro.md @@ -231,3 +231,5 @@ JVM 具有四种类型的 GC 实现: - [你们要的线上 GC 问题案例来啦 - 编了个程 - 2021](https://mp.weixin.qq.com/s/df1uxHWUXzhErxW1sZ6OvQ) - [Java 中 9 种常见的 CMS GC 问题分析与解决 - 美团技术团队 - 2020](https://tech.meituan.com/2020/11/12/java-9-cms-gc.html) - [从实际案例聊聊 Java 应用的 GC 优化-美团技术团队 - 美团技术团队 - 2017](https://tech.meituan.com/2017/12/29/jvm-optimize.html) + + \ No newline at end of file diff --git a/docs/java/jvm/memory-area.md b/docs/java/jvm/memory-area.md index 6c714419..a1267716 100644 --- a/docs/java/jvm/memory-area.md +++ b/docs/java/jvm/memory-area.md @@ -351,3 +351,5 @@ HotSpot 虚拟机主要使用的就是这种方式来进行对象访问。 - - - + + \ No newline at end of file diff --git a/docs/java/new-features/java10.md b/docs/java/new-features/java10.md index 41118979..1fd9190e 100644 --- a/docs/java/new-features/java10.md +++ b/docs/java/new-features/java10.md @@ -115,3 +115,5 @@ Oracle 的 HotSpot VM 便附带两个用 C++ 实现的 JIT compiler:C1 及 C2 - Guide to Java10 : - 4 Class Data Sharing : https://docs.oracle.com/javase/10/vm/class-data-sharing.htm#JSJVM-GUID-7EAA3411-8CF0-4D19-BD05-DF5E1780AA91 + + \ No newline at end of file diff --git a/docs/java/new-features/java11.md b/docs/java/new-features/java11.md index 8057b136..edcb61bd 100644 --- a/docs/java/new-features/java11.md +++ b/docs/java/new-features/java11.md @@ -127,3 +127,5 @@ Consumer consumer = (String i) -> System.out.println(i); - JDK 11 Release Notes:https://www.oracle.com/java/technologies/javase/11-relnote-issues.html - Java 11 – Features and Comparison: + + \ No newline at end of file diff --git a/docs/java/new-features/java12-13.md b/docs/java/new-features/java12-13.md index 65d4a54a..54a56f78 100644 --- a/docs/java/new-features/java12-13.md +++ b/docs/java/new-features/java12-13.md @@ -294,3 +294,5 @@ public String translateEscapes() { - Oracle Java13 ReleaseNote - New Java13 Features - Java13 新特性概述 + + \ No newline at end of file diff --git a/docs/java/new-features/java14-15.md b/docs/java/new-features/java14-15.md index 16341b00..5185e8e0 100644 --- a/docs/java/new-features/java14-15.md +++ b/docs/java/new-features/java14-15.md @@ -239,3 +239,5 @@ Java 15 并没有对此特性进行调整,继续预览特性,主要用于接 - **DatagramSocket API 重构** - **禁用和废弃偏向锁(Biased Locking)**:偏向锁的引入增加了 JVM 的复杂性大于其带来的性能提升。不过,你仍然可以使用 `-XX:+UseBiasedLocking` 启用偏向锁定,但它会提示 这是一个已弃用的 API。 - ...... + + \ No newline at end of file diff --git a/docs/java/new-features/java16.md b/docs/java/new-features/java16.md index d569f642..3648487c 100644 --- a/docs/java/new-features/java16.md +++ b/docs/java/new-features/java16.md @@ -148,3 +148,5 @@ public class Outer { - [Consolidated JDK 16 Release Notes](https://www.oracle.com/java/technologies/javase/16all-relnotes.html) - [Java 16 正式发布,新特性一一解析](https://www.infoq.cn/article/IAkwhx7i9V7G8zLVEd4L) - [实操 | 剖析 Java16 新语法特性](https://xie.infoq.cn/article/8304c894c4e38318d38ceb116)(写的很赞) + + \ No newline at end of file diff --git a/docs/java/new-features/java17.md b/docs/java/new-features/java17.md index 7a742234..71361f3a 100644 --- a/docs/java/new-features/java17.md +++ b/docs/java/new-features/java17.md @@ -172,3 +172,5 @@ Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行 该孵化器 API 提供了一个 API 的初始迭代以表达一些向量计算,这些计算在运行时可靠地编译为支持的 CPU 架构上的最佳向量硬件指令,从而获得优于同等标量计算的性能,充分利用单指令多数据(SIMD)技术(大多数现代 CPU 上都可以使用的一种指令)。尽管 HotSpot 支持自动向量化,但是可转换的标量操作集有限且易受代码更改的影响。该 API 将使开发人员能够轻松地用 Java 编写可移植的高性能向量算法。 在 [Java 18 新特性概览](./java18.md) 中,我有详细介绍到向量 API,这里就不再做额外的介绍了。 + + \ No newline at end of file diff --git a/docs/java/new-features/java18.md b/docs/java/new-features/java18.md index 3f9da396..03688d07 100644 --- a/docs/java/new-features/java18.md +++ b/docs/java/new-features/java18.md @@ -137,3 +137,5 @@ Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行 外部函数和内存 API 在 Java 17 中进行了第一轮孵化,由 [JEP 412](https://openjdk.java.net/jeps/412) 提出。第二轮孵化由[ JEP 419](https://openjdk.org/jeps/419) 提出并集成到了 Java 18 中,预览由 [JEP 424](https://openjdk.org/jeps/424) 提出并集成到了 Java 19 中。 在 [Java 19 新特性概览](./java19.md) 中,我有详细介绍到外部函数和内存 API,这里就不再做额外的介绍了。 + + \ No newline at end of file diff --git a/docs/java/new-features/java19.md b/docs/java/new-features/java19.md index 4729cca4..6c6502c5 100644 --- a/docs/java/new-features/java19.md +++ b/docs/java/new-features/java19.md @@ -114,3 +114,5 @@ JDK 19 引入了结构化并发,一种多线程编程方法,目的是为了 ``` 结构化并发非常适合虚拟线程,虚拟线程是 JDK 实现的轻量级线程。许多虚拟线程共享同一个操作系统线程,从而允许非常多的虚拟线程。 + + \ No newline at end of file diff --git a/docs/java/new-features/java20.md b/docs/java/new-features/java20.md index e2f07b06..162aec0e 100644 --- a/docs/java/new-features/java20.md +++ b/docs/java/new-features/java20.md @@ -169,3 +169,5 @@ JDK 20 中对结构化并发唯一变化是更新为支持在任务范围内创 向量(Vector) API 最初由 [JEP 338](https://openjdk.java.net/jeps/338) 提出,并作为[孵化 API](http://openjdk.java.net/jeps/11)集成到 Java 16 中。第二轮孵化由 [JEP 414](https://openjdk.java.net/jeps/414) 提出并集成到 Java 17 中,第三轮孵化由 [JEP 417](https://openjdk.java.net/jeps/417) 提出并集成到 Java 18 中,第四轮由 [JEP 426](https://openjdk.java.net/jeps/426) 提出并集成到了 Java 19 中。 Java20 的这次孵化基本没有改变向量 API ,只是进行了一些错误修复和性能增强,详见 [JEP 438](https://openjdk.org/jeps/438)。 + + \ No newline at end of file diff --git a/docs/java/new-features/java8-common-new-features.md b/docs/java/new-features/java8-common-new-features.md index 9ad7a79d..2c537076 100644 --- a/docs/java/new-features/java8-common-new-features.md +++ b/docs/java/new-features/java8-common-new-features.md @@ -1052,3 +1052,5 @@ System.out.println("本地时区时间: " + localZoned); - Date time-api 这些都是开发当中比较常用的特性。梳理下来发现它们真香,而我却没有更早的应用。总觉得学习 java 8 新特性比较麻烦,一直使用老的实现方式。其实这些新特性几天就可以掌握,一但掌握,效率会有很大的提高。其实我们涨工资也是涨的学习的钱,不学习终究会被淘汰,35 岁危机会提前来临。 + + \ No newline at end of file diff --git a/docs/java/new-features/java8-tutorial-translate.md b/docs/java/new-features/java8-tutorial-translate.md index 9936f309..8d7947f3 100644 --- a/docs/java/new-features/java8-tutorial-translate.md +++ b/docs/java/new-features/java8-tutorial-translate.md @@ -895,3 +895,5 @@ System.out.println(hints2.length); // 2 ## Where to go from here? 关于 Java 8 的新特性就写到这了,肯定还有更多的特性等待发掘。JDK 1.8 里还有很多很有用的东西,比如`Arrays.parallelSort`, `StampedLock`和`CompletableFuture`等等。 + + \ No newline at end of file diff --git a/docs/java/new-features/java9.md b/docs/java/new-features/java9.md index d13fdcb6..7488c22d 100644 --- a/docs/java/new-features/java9.md +++ b/docs/java/new-features/java9.md @@ -257,3 +257,5 @@ System.out.println(currentProcess.info()); - 《深入剖析 Java 新特性》-极客时间 - JShell:怎么快速验证简单的小问题? - New Features in Java 9:https://www.baeldung.com/new-java-9 - Java – Try with Resources:https://www.baeldung.com/java-try-with-resources + + \ No newline at end of file diff --git a/docs/snippets/article-footer.snippet.md b/docs/snippets/article-footer.snippet.md new file mode 100644 index 00000000..06340738 --- /dev/null +++ b/docs/snippets/article-footer.snippet.md @@ -0,0 +1 @@ +![JavaGuide 官方公众号](https://oss.javaguide.cn/github/javaguide/gongzhonghaoxuanchuan.png) \ No newline at end of file diff --git a/docs/snippets/small-advertisement.snippet.md b/docs/snippets/small-advertisement.snippet.md index 09c801cd..03b14a87 100644 --- a/docs/snippets/small-advertisement.snippet.md +++ b/docs/snippets/small-advertisement.snippet.md @@ -4,5 +4,3 @@ - **知识星球**:技术专栏/一对一提问/简历修改/求职指南/面试打卡/不定时福利,欢迎加入 **[JavaGuide 官方知识星球](../about-the-author/zhishixingqiu-two-years.md)**。 ::: - -![JavaGuide 官方公众号](https://oss.javaguide.cn/github/javaguide/gongzhonghaoxuanchuan.png) diff --git a/docs/system-design/J2EE基础知识.md b/docs/system-design/J2EE基础知识.md index 5e347f80..986e7e6f 100644 --- a/docs/system-design/J2EE基础知识.md +++ b/docs/system-design/J2EE基础知识.md @@ -284,3 +284,5 @@ Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式,但 Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。 Cookie 存储在客户端中,而 Session 存储在服务器上,相对来说 Session 安全性更高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。 + + \ No newline at end of file diff --git a/docs/system-design/basis/RESTfulAPI.md b/docs/system-design/basis/RESTfulAPI.md index 944cff39..1a518757 100644 --- a/docs/system-design/basis/RESTfulAPI.md +++ b/docs/system-design/basis/RESTfulAPI.md @@ -175,3 +175,5 @@ GET /classes?page=1&size=10 //指定第1页,每页10个数据 - - + + \ No newline at end of file diff --git a/docs/system-design/basis/naming.md b/docs/system-design/basis/naming.md index 9b27c6f8..3733801e 100644 --- a/docs/system-design/basis/naming.md +++ b/docs/system-design/basis/naming.md @@ -247,3 +247,5 @@ Codelf 提供了在线网站版本,网址:[https://unbug.github.io/codelf/]( 另外,国人开发的一个叫做 Codelf 的网站被很多人称为“变量命名神器”,当你为命名而头疼的时候,你可以去参考一下上面提供的一些命名示例。 最后,祝愿大家都不用再为命名而困扰! + + \ No newline at end of file diff --git a/docs/system-design/basis/refactoring.md b/docs/system-design/basis/refactoring.md index 3fff7ff2..a49d618e 100644 --- a/docs/system-design/basis/refactoring.md +++ b/docs/system-design/basis/refactoring.md @@ -140,3 +140,5 @@ Code Review 可以非常有效提高代码的整体质量,它会帮助我们 - [再读《重构》- ThoughtWorks 洞见 - 2020](https://insights.thoughtworks.cn/reread-refactoring/):详细介绍了重构的要点比如小步重构、捡垃圾式的重构,主要是重构概念相关的介绍。 - [常见代码重构技巧 - VectorJin - 2021](https://juejin.cn/post/6954378167947624484):从软件设计原则、设计模式、代码分层、命名规范等角度介绍了如何进行重构,比较偏实战。 + + \ No newline at end of file diff --git a/docs/system-design/basis/software-engineering.md b/docs/system-design/basis/software-engineering.md index 713fb2af..22c70854 100644 --- a/docs/system-design/basis/software-engineering.md +++ b/docs/system-design/basis/software-engineering.md @@ -96,3 +96,5 @@ Dijkstra(Dijkstra 算法的作者) 在 1972 年图灵奖获奖感言中也 - 软件工程的基本概念-清华大学软件学院 刘强: - 软件开发过程-维基百科:[https://zh.wikipedia.org/wiki/软件开发过程](https://zh.wikipedia.org/wiki/软件开发过程) + + \ No newline at end of file diff --git a/docs/system-design/basis/unit-test.md b/docs/system-design/basis/unit-test.md index d3e73515..d72db5f6 100644 --- a/docs/system-design/basis/unit-test.md +++ b/docs/system-design/basis/unit-test.md @@ -134,3 +134,5 @@ Mockito 和 Spock 都是非常不错的 Mock 工具,相对来说,Mockito 的 作为一名经验丰富的程序员,写单元测试更多的是**对自己的代码负责**。有测试用例的代码,别人更容易看懂,以后别人接手你的代码时,也可能放心做改动。 **多敲代码实践,多跟有单元测试经验的工程师交流**,你会发现写单元测试获得的收益会更多。 + + \ No newline at end of file diff --git a/docs/system-design/design-pattern.md b/docs/system-design/design-pattern.md index 2c07d175..30fdbe91 100644 --- a/docs/system-design/design-pattern.md +++ b/docs/system-design/design-pattern.md @@ -18,3 +18,5 @@ head: **《设计模式》PDF 电子书内容概览**: ![《设计模式》PDF文档概览](https://oss.javaguide.cn/github/javaguide/system-design/design-pattern-pdf.png) + + \ No newline at end of file diff --git a/docs/system-design/framework/mybatis/mybatis-interview.md b/docs/system-design/framework/mybatis/mybatis-interview.md index bbce5e1d..6f7f4aba 100644 --- a/docs/system-design/framework/mybatis/mybatis-interview.md +++ b/docs/system-design/framework/mybatis/mybatis-interview.md @@ -297,3 +297,5 @@ MyBatis 提供了 9 种动态 sql 标签: 答:Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 MyBatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 ORM 映射工具。 面试题看似都很简单,但是想要能正确回答上来,必定是研究过源码且深入的人,而不是仅会使用的人或者用的很熟的人,以上所有面试题及其答案所涉及的内容,在我的 MyBatis 系列博客中都有详细讲解和原理分析。 + + \ No newline at end of file diff --git a/docs/system-design/framework/netty.md b/docs/system-design/framework/netty.md index 504919a4..8ece6e9f 100644 --- a/docs/system-design/framework/netty.md +++ b/docs/system-design/framework/netty.md @@ -7,3 +7,5 @@ icon: "network" **Netty** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)中。 + + \ No newline at end of file diff --git a/docs/system-design/framework/spring/spring-boot-auto-assembly-principles.md b/docs/system-design/framework/spring/spring-boot-auto-assembly-principles.md index 7a982850..cc7b50e3 100644 --- a/docs/system-design/framework/spring/spring-boot-auto-assembly-principles.md +++ b/docs/system-design/framework/spring/spring-boot-auto-assembly-principles.md @@ -320,3 +320,5 @@ public class RabbitAutoConfiguration { ## 总结 Spring Boot 通过`@EnableAutoConfiguration`开启自动装配,通过 SpringFactoriesLoader 最终加载`META-INF/spring.factories`中的自动配置类实现自动装配,自动配置类其实就是通过`@Conditional`按需加载的配置类,想要其生效必须引入`spring-boot-starter-xxx`包实现起步依赖 + + \ No newline at end of file diff --git a/docs/system-design/framework/spring/spring-common-annotations.md b/docs/system-design/framework/spring/spring-common-annotations.md index 3baa7859..dc745130 100644 --- a/docs/system-design/framework/spring/spring-common-annotations.md +++ b/docs/system-design/framework/spring/spring-common-annotations.md @@ -958,3 +958,5 @@ public abstract class TestBase { _暂时总结到这里吧!虽然花了挺长时间才写完,不过可能还是会一些常用的注解的被漏掉,所以,我将文章也同步到了 Github 上去,Github 地址: 欢迎完善!_ 本文已经收录进我的 75K Star 的 Java 开源项目 JavaGuide:[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)。 + + \ No newline at end of file diff --git a/docs/system-design/framework/spring/spring-design-patterns-summary.md b/docs/system-design/framework/spring/spring-design-patterns-summary.md index f6a7857c..0b68f1ac 100644 --- a/docs/system-design/framework/spring/spring-design-patterns-summary.md +++ b/docs/system-design/framework/spring/spring-design-patterns-summary.md @@ -351,3 +351,5 @@ Spring 框架中用到了哪些设计模式? - - - + + \ No newline at end of file diff --git a/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md b/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md index 45706f9c..49a6f938 100644 --- a/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md +++ b/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md @@ -789,3 +789,5 @@ public interface PasswordEncoder { - - - + + \ No newline at end of file diff --git a/docs/system-design/framework/spring/spring-transaction.md b/docs/system-design/framework/spring/spring-transaction.md index 1fc2af25..4dcc85b1 100644 --- a/docs/system-design/framework/spring/spring-transaction.md +++ b/docs/system-design/framework/spring/spring-transaction.md @@ -697,3 +697,5 @@ private void method1() { - Spring 事务的传播特性:[https://github.com/love-somnus/Spring/wiki/Spring 事务的传播特性](https://github.com/love-somnus/Spring/wiki/Spring事务的传播特性) - [Spring 事务传播行为详解](https://segmentfault.com/a/1190000013341344):[https://segmentfault.com/a/1190000013341344](https://segmentfault.com/a/1190000013341344) - 全面分析 Spring 的编程式事务管理及声明式事务管理:[https://www.ibm.com/developerworks/cn/education/opensource/os-cn-spring-trans/index.html](https://www.ibm.com/developerworks/cn/education/opensource/os-cn-spring-trans/index.html) + + \ No newline at end of file diff --git a/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md b/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md index f348b08a..d6a72c11 100644 --- a/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md +++ b/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md @@ -8,3 +8,5 @@ tag: **Spring Boot** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)中。 + + \ No newline at end of file diff --git a/docs/system-design/framework/spring/springboot-source-code.md b/docs/system-design/framework/spring/springboot-source-code.md index 674f0f37..c5027959 100644 --- a/docs/system-design/framework/spring/springboot-source-code.md +++ b/docs/system-design/framework/spring/springboot-source-code.md @@ -11,3 +11,5 @@ tag: + + \ No newline at end of file diff --git a/docs/system-design/schedule-task.md b/docs/system-design/schedule-task.md index b0f00008..e9fc2ef1 100644 --- a/docs/system-design/schedule-task.md +++ b/docs/system-design/schedule-task.md @@ -332,3 +332,5 @@ public ReturnT myAnnotationJobHandler(String param) throws Exception { 这篇文章并没有介绍到实际使用,但是,并不代表实际使用不重要。我在写这篇文章之前,已经动手写过相应的 Demo。像 Quartz,我在大学那会就用过。不过,当时用的是 Spring 。为了能够更好地体验,我自己又在 Spring Boot 上实际体验了一下。如果你并没有实际使用某个框架,就直接说它并不好用的话,是站不住脚的。 最后,这篇文章要感谢艿艿的帮助,写这篇文章的时候向艿艿询问过一些问题。推荐一篇艿艿写的偏实战类型的硬核文章:[《Spring Job?Quartz?XXL-Job?年轻人才做选择,艿艿全莽~》](https://mp.weixin.qq.com/s?__biz=MzUzMTA2NTU2Ng==&mid=2247490679&idx=1&sn=25374dbdcca95311d41be5d7b7db454d&chksm=fa4963c6cd3eead055bb9cd10cca13224bb35d0f7373a27aa22a55495f71e24b8273a7603314&scene=27#wechat_redirect) 。 + + \ No newline at end of file diff --git a/docs/system-design/security/advantages-and-disadvantages-of-jwt.md b/docs/system-design/security/advantages-and-disadvantages-of-jwt.md index 13fbcce6..2911b9b6 100644 --- a/docs/system-design/security/advantages-and-disadvantages-of-jwt.md +++ b/docs/system-design/security/advantages-and-disadvantages-of-jwt.md @@ -178,3 +178,5 @@ JWT 也不是银弹,也有很多缺陷,具体是选择 JWT 还是 Session - How to log out when using JWT: - CSRF protection with JSON Web JWTs: - Invalidating JSON Web JWTs: + + \ No newline at end of file diff --git a/docs/system-design/security/basis-of-authority-certification.md b/docs/system-design/security/basis-of-authority-certification.md index cb520675..b5669705 100644 --- a/docs/system-design/security/basis-of-authority-certification.md +++ b/docs/system-design/security/basis-of-authority-certification.md @@ -253,3 +253,5 @@ OAuth 2.0 比较常用的场景就是第三方登录,当你的网站接入了 - 不要用 JWT 替代 session 管理(上):全面了解 Token,JWT,OAuth,SAML,SSO:https://zhuanlan.zhihu.com/p/38942172 - Introduction to JSON Web Tokens:https://jwt.io/introduction - JSON Web Token Claims:https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-token-claims + + \ No newline at end of file diff --git a/docs/system-design/security/data-desensitization.md b/docs/system-design/security/data-desensitization.md index 082aab97..6f23dc91 100644 --- a/docs/system-design/security/data-desensitization.md +++ b/docs/system-design/security/data-desensitization.md @@ -6,3 +6,5 @@ tag: --- 数据脱敏说的就是我们根据特定的规则对敏感信息数据进行变形,比如我们把手机号、身份证号某些位数使用 \* 来代替。 + + \ No newline at end of file diff --git a/docs/system-design/security/design-of-authority-system.md b/docs/system-design/security/design-of-authority-system.md index 1be9a095..91252316 100644 --- a/docs/system-design/security/design-of-authority-system.md +++ b/docs/system-design/security/design-of-authority-system.md @@ -207,3 +207,5 @@ head: ## 参考 - 选择合适的权限模型:https://docs.authing.cn/v2/guides/access-control/choose-the-right-access-control-model.html + + \ No newline at end of file diff --git a/docs/system-design/security/encryption-algorithms.md b/docs/system-design/security/encryption-algorithms.md index ce3564b8..451b4b67 100644 --- a/docs/system-design/security/encryption-algorithms.md +++ b/docs/system-design/security/encryption-algorithms.md @@ -356,3 +356,5 @@ DSA 算法签名过程: - 奇妙的安全旅行之 DSA 算法: - AES-GCM 加密简介: - Java AES 256 GCM Encryption and Decryption Example | JCE Unlimited Strength: + + \ No newline at end of file diff --git a/docs/system-design/security/jwt-intro.md b/docs/system-design/security/jwt-intro.md index 9b50bbb1..4d3f47cf 100644 --- a/docs/system-design/security/jwt-intro.md +++ b/docs/system-design/security/jwt-intro.md @@ -162,3 +162,5 @@ HMACSHA256( 5. 密钥一定保管好,一定不要泄露出去。JWT 安全的核心在于签名,签名安全的核心在密钥。 6. Payload 要加入 `exp` (JWT 的过期时间),永久有效的 JWT 不合理。并且,JWT 的过期时间不易过长。 7. ...... + + \ No newline at end of file diff --git a/docs/system-design/security/sentive-words-filter.md b/docs/system-design/security/sentive-words-filter.md index 4d015708..75b154ae 100644 --- a/docs/system-design/security/sentive-words-filter.md +++ b/docs/system-design/security/sentive-words-filter.md @@ -98,3 +98,5 @@ System.out.println(matchStrList2); - [一种敏感词自动过滤管理系统](https://patents.google.com/patent/CN101964000B) - [一种网络游戏中敏感词过滤方法及系统](https://patents.google.com/patent/CN103714160A/zh) + + \ No newline at end of file diff --git a/docs/system-design/security/sso-intro.md b/docs/system-design/security/sso-intro.md index 17ace7db..d709f9e5 100644 --- a/docs/system-design/security/sso-intro.md +++ b/docs/system-design/security/sso-intro.md @@ -120,3 +120,5 @@ SSO 英文全称 Single Sign On,单点登录。SSO 是在多个应用系统中 - 关于方案:这次设计方案更多是提供实现思路。如果涉及到 APP 用户登录等情况,在访问 SSO 服务时,增加对 APP 的签名验证就好了。当然,如果有无线网关,验证签名不是问题。 - 关于时序图:时序图中并没有包含所有场景,只列举了核心/主要场景,另外对于一些不影响理解思路的消息能省就省了。 + + \ No newline at end of file diff --git a/docs/system-design/system-design-questions.md b/docs/system-design/system-design-questions.md index 462a98f7..3c18c79f 100644 --- a/docs/system-design/system-design-questions.md +++ b/docs/system-design/system-design-questions.md @@ -9,3 +9,5 @@ icon: "design" ![](https://oss.javaguide.cn/javamianshizhibei/system-design-questions.png) + + \ No newline at end of file diff --git a/docs/system-design/web-real-time-message-push.md b/docs/system-design/web-real-time-message-push.md index 5bde2f12..d927def7 100644 --- a/docs/system-design/web-real-time-message-push.md +++ b/docs/system-design/web-real-time-message-push.md @@ -445,3 +445,5 @@ MQTT 协议为什么在物联网(IOT)中如此受偏爱?而不是其它协 | SSE | 一种服务器端到客户端(浏览器)的单向消息推送。 | 简单、易实现,功能丰富 | 不支持双向通信 | | WebSocket | 除了最初建立连接时用 HTTP 协议,其他时候都是直接基于 TCP 协议进行通信的,可以实现客户端和服务端的全双工通信。 | 性能高、开销小 | 对开发人员要求更高,实现相对复杂一些 | | MQTT | 基于发布/订阅(publish/subscribe)模式的轻量级通讯协议,通过订阅相应的主题来获取消息。 | 成熟稳定,轻量级 | 对开发人员要求更高,实现相对复杂一些 | + + \ No newline at end of file diff --git a/docs/tools/docker/docker-in-action.md b/docs/tools/docker/docker-in-action.md index 2d4e7306..623dd519 100644 --- a/docs/tools/docker/docker-in-action.md +++ b/docs/tools/docker/docker-in-action.md @@ -630,3 +630,5 @@ Loaded image: my_tomcat:1.0 REPOSITORY TAG IMAGE ID CREATED SIZE my_tomcat 1.0 79ab047fade5 7 minutes ago 463MB ``` + + \ No newline at end of file diff --git a/docs/tools/docker/docker-intro.md b/docs/tools/docker/docker-intro.md index 20d21fdb..12d58a01 100644 --- a/docs/tools/docker/docker-intro.md +++ b/docs/tools/docker/docker-intro.md @@ -297,3 +297,5 @@ LXC 技术主要是借助 Linux 内核中提供的 CGroup 功能和 namespace - [Linux Namespace 和 Cgroup](https://segmentfault.com/a/1190000009732550 "Linux Namespace和Cgroup") - [LXC vs Docker: Why Docker is Better](https://www.upguard.com/articles/docker-vs-lxc "LXC vs Docker: Why Docker is Better") - [CGroup 介绍、应用实例及原理描述](https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html "CGroup 介绍、应用实例及原理描述") + + \ No newline at end of file diff --git a/docs/tools/git/git-intro.md b/docs/tools/git/git-intro.md index 391ee2bc..2ed009e1 100644 --- a/docs/tools/git/git-intro.md +++ b/docs/tools/git/git-intro.md @@ -245,3 +245,5 @@ git push origin - [图解 Git](https://marklodato.github.io/visual-git-guide/index-zh-cn.html):图解 Git 中的最常用命令。如果你稍微理解 git 的工作原理,这篇文章能够让你理解的更透彻。 - [猴子都能懂得 Git 入门](https://backlog.com/git-tutorial/cn/intro/intro1_1.html):有趣的讲解。 - [Pro Git book](https://git-scm.com/book/zh/v2):国外的一本 Git 书籍,被翻译成多国语言,质量很高。 + + \ No newline at end of file diff --git a/docs/tools/git/github-tips.md b/docs/tools/git/github-tips.md index 28528815..274a8988 100644 --- a/docs/tools/git/github-tips.md +++ b/docs/tools/git/github-tips.md @@ -146,3 +146,5 @@ GitHub Actions 有一个官方市场,上面有非常多别人提交的 Actions 这一篇文章,我毫无保留地把自己这些年总结的 Github 小技巧分享了出来,真心希望对大家有帮助,真心希望大家一定要利用好 Github 这个专属程序员的宝藏。 另外,这篇文章中,我并没有提到 Github 搜索技巧。在我看来,Github 搜索技巧不必要记网上那些文章说的各种命令啥的,真没啥卵用。你会发现你用的最多的还是关键字搜索以及 Github 自带的筛选功能。 + + \ No newline at end of file diff --git a/docs/tools/gradle/gradle-core-concepts.md b/docs/tools/gradle/gradle-core-concepts.md index 62eeb3ad..2d54fd7d 100644 --- a/docs/tools/gradle/gradle-core-concepts.md +++ b/docs/tools/gradle/gradle-core-concepts.md @@ -302,3 +302,5 @@ Gradle 支持单项目和多项目构建。在初始化阶段,Gradle 确定哪 - 【Gradle】Gradle 的生命周期详解: - 手把手带你自定义 Gradle 插件 —— Gradle 系列(2): - Gradle 爬坑指南 -- 理解 Plugin、Task、构建流程: + + \ No newline at end of file diff --git a/docs/tools/maven/maven-core-concepts.md b/docs/tools/maven/maven-core-concepts.md index b2bb3f60..d2155aad 100644 --- a/docs/tools/maven/maven-core-concepts.md +++ b/docs/tools/maven/maven-core-concepts.md @@ -460,3 +460,5 @@ Maven 插件被分为下面两种类型: - Maven 依赖范围: - 解决 maven 依赖冲突,这篇就够了!: - Multi-Module Project with Maven: + + \ No newline at end of file