mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-29 06:41:32 +08:00
Merge branch 'main' into tweaks2
This commit is contained in:
commit
deddd256f3
16
README.md
16
README.md
@ -125,10 +125,11 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
|
|||||||
|
|
||||||
### 操作系统
|
### 操作系统
|
||||||
|
|
||||||
- [操作系统常见面试题总结(上)](./docs/cs-basics/operating-system/operating-system-basic-questions-01.md)
|
- [操作系统常见知识点&面试题总结(上)](./docs/cs-basics/operating-system/operating-system-basic-questions-01.md)
|
||||||
- [操作系统常见面试题总结(下)](./docs/cs-basics/operating-system/operating-system-basic-questions-02.md)
|
- [操作系统常见知识点&面试题总结(下)](./docs/cs-basics/operating-system/operating-system-basic-questions-02.md)
|
||||||
- [后端程序员必备的 Linux 基础知识总结](./docs/cs-basics/operating-system/linux-intro.md)
|
- **Linux** :
|
||||||
- [Shell 编程基础知识总结](./docs/cs-basics/operating-system/shell-intro.md)
|
- [后端程序员必备的 Linux 基础知识总结](./docs/cs-basics/operating-system/linux-intro.md)
|
||||||
|
- [Shell 编程基础知识总结](./docs/cs-basics/operating-system/shell-intro.md)
|
||||||
|
|
||||||
### 网络
|
### 网络
|
||||||
|
|
||||||
@ -258,7 +259,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
|
|||||||
### Git
|
### Git
|
||||||
|
|
||||||
- [Git 核心概念总结](./docs/tools/git/git-intro.md)
|
- [Git 核心概念总结](./docs/tools/git/git-intro.md)
|
||||||
- [Github 实用小技巧总结](./docs/tools/git/github-tips.md)
|
- [GitHub 实用小技巧总结](./docs/tools/git/github-tips.md)
|
||||||
|
|
||||||
## 系统设计
|
## 系统设计
|
||||||
|
|
||||||
@ -343,12 +344,13 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
|
|||||||
|
|
||||||
### API 网关
|
### API 网关
|
||||||
|
|
||||||
- [API 网关基础知识总结](./docs/distributed-system/api-gateway.md)
|
- [API 网关基础知识总结](https://javaguide.cn/distributed-system/api-gateway.html)
|
||||||
- [Spring Cloud Gateway 常见知识点&面试题总结](./docs/distributed-system/spring-cloud-gateway-questions.md)
|
- [Spring Cloud Gateway 常见知识点&面试题总结](./docs/distributed-system/spring-cloud-gateway-questions.md)
|
||||||
|
|
||||||
### 分布式 ID
|
### 分布式 ID
|
||||||
|
|
||||||
[分布式 ID 常见知识点&面试题总结](https://javaguide.cn/distributed-system/distributed-id.html)
|
- [分布式 ID 常见知识点&面试题总结](https://javaguide.cn/distributed-system/distributed-id.html)
|
||||||
|
- [分布式 ID 设计指南](https://javaguide.cn/distributed-system/distributed-id-design.html)
|
||||||
|
|
||||||
### 分布式锁
|
### 分布式锁
|
||||||
|
|
||||||
|
@ -467,20 +467,17 @@ export default sidebar({
|
|||||||
text: "ZooKeeper",
|
text: "ZooKeeper",
|
||||||
icon: "framework",
|
icon: "framework",
|
||||||
prefix: "distributed-process-coordination/zookeeper/",
|
prefix: "distributed-process-coordination/zookeeper/",
|
||||||
children: [
|
children: ["zookeeper-intro", "zookeeper-plus"],
|
||||||
"zookeeper-intro",
|
|
||||||
"zookeeper-plus",
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "API网关",
|
text: "API网关",
|
||||||
icon: "gateway",
|
icon: "gateway",
|
||||||
children: ["api-gateway","spring-cloud-gateway-questions"],
|
children: ["api-gateway", "spring-cloud-gateway-questions"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "分布式ID",
|
text: "分布式ID",
|
||||||
icon: "id",
|
icon: "id",
|
||||||
children: ["distributed-id"],
|
children: ["distributed-id", "distributed-id-design"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: "分布式锁",
|
text: "分布式锁",
|
||||||
|
@ -31,7 +31,7 @@ tag:
|
|||||||
|
|
||||||
不知道其他公司的程序员是怎么样的?我感觉技术积累很大程度在乎平时,单纯依靠工作绝大部分情况只会加快自己做需求的熟练度,当然,写多了之后或多或少也会提升你对代码质量的认识(前提是你有这个意识)。
|
不知道其他公司的程序员是怎么样的?我感觉技术积累很大程度在乎平时,单纯依靠工作绝大部分情况只会加快自己做需求的熟练度,当然,写多了之后或多或少也会提升你对代码质量的认识(前提是你有这个意识)。
|
||||||
|
|
||||||
工作之余,我会利用业余时间来学习自己想学的东西。工作中的例子就是我刚进公司的第一个项目用到了 Spring Security + JWT ,因为当时自己对于这个技术不太了解,然后就在工作之外大概花了一周的时间学习写了一个 Demo 分享了出来,Github 地址:<https://github.com/Snailclimb/spring-security-jwt-guide> 。以次为契机,我还分享了
|
工作之余,我会利用业余时间来学习自己想学的东西。工作中的例子就是我刚进公司的第一个项目用到了 Spring Security + JWT ,因为当时自己对于这个技术不太了解,然后就在工作之外大概花了一周的时间学习写了一个 Demo 分享了出来,GitHub 地址:<https://github.com/Snailclimb/spring-security-jwt-guide> 。以次为契机,我还分享了
|
||||||
|
|
||||||
- [《一问带你区分清楚 Authentication、Authorization 以及 Cookie、Session、Token》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485626&idx=1&sn=3247aa9000693dd692de8a04ccffeec1&chksm=cea24771f9d5ce675ea0203633a95b68bfe412dc6a9d05f22d221161147b76161d1b470d54b3&token=684071313&lang=zh_CN&scene=21#wechat_redirect)
|
- [《一问带你区分清楚 Authentication、Authorization 以及 Cookie、Session、Token》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485626&idx=1&sn=3247aa9000693dd692de8a04ccffeec1&chksm=cea24771f9d5ce675ea0203633a95b68bfe412dc6a9d05f22d221161147b76161d1b470d54b3&token=684071313&lang=zh_CN&scene=21#wechat_redirect)
|
||||||
- [JWT 身份认证优缺点分析以及常见问题解决方案](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485655&idx=1&sn=583eeeb081ea21a8ec6347c72aa223d6&chksm=cea2471cf9d5ce0aa135f2fb9aa32d98ebb3338292beaccc1aae43d1178b16c0125eb4139ca4&token=1737409938&lang=zh_CN#rd)
|
- [JWT 身份认证优缺点分析以及常见问题解决方案](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485655&idx=1&sn=583eeeb081ea21a8ec6347c72aa223d6&chksm=cea2471cf9d5ce0aa135f2fb9aa32d98ebb3338292beaccc1aae43d1178b16c0125eb4139ca4&token=1737409938&lang=zh_CN#rd)
|
||||||
|
@ -5,7 +5,7 @@ tag:
|
|||||||
- 个人经历
|
- 个人经历
|
||||||
---
|
---
|
||||||
|
|
||||||
2021-03-21,晚上 12 点,肝完了我正在做的一个项目的前端的某块功能,我随手打开了[我的 Github 主页](https://github.com/Snailclimb)。
|
2021-03-21,晚上 12 点,肝完了我正在做的一个项目的前端的某块功能,我随手打开了[我的 GitHub 主页](https://github.com/Snailclimb)。
|
||||||
|
|
||||||
好家伙!几天没注意,[JavaGuide](https://github.com/Snailclimb/JavaGuide) 这个项目直接上了 100K star。
|
好家伙!几天没注意,[JavaGuide](https://github.com/Snailclimb/JavaGuide) 这个项目直接上了 100K star。
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ tag:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
老粉应该大部分都是通过 JavaGuide 这个项目认识我的,这是我在大三开始准备秋招面试时创建的一个项目。没想到这个项目竟然火了一把,一度霸占了 Github 榜单。可能当时国内这类开源文档教程类项目太少了,所以这个项目受欢迎程度非常高。
|
老粉应该大部分都是通过 JavaGuide 这个项目认识我的,这是我在大三开始准备秋招面试时创建的一个项目。没想到这个项目竟然火了一把,一度霸占了 GitHub 榜单。可能当时国内这类开源文档教程类项目太少了,所以这个项目受欢迎程度非常高。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ head:
|
|||||||
|
|
||||||
除了理论知识之外,学习计算机网络非常重要的一点就是:“**动手实践**”。这点和我们编程差不多。
|
除了理论知识之外,学习计算机网络非常重要的一点就是:“**动手实践**”。这点和我们编程差不多。
|
||||||
|
|
||||||
Github 上就有一些名校的计算机网络试验/Project:
|
GitHub 上就有一些名校的计算机网络试验/Project:
|
||||||
|
|
||||||
- [哈工大计算机网络实验](https://github.com/rccoder/HIT-Computer-Network)
|
- [哈工大计算机网络实验](https://github.com/rccoder/HIT-Computer-Network)
|
||||||
- [《计算机网络-自顶向下方法(原书第 6 版)》编程作业,Wireshark 实验文档的翻译和解答。](https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES)
|
- [《计算机网络-自顶向下方法(原书第 6 版)》编程作业,Wireshark 实验文档的翻译和解答。](https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES)
|
||||||
@ -141,7 +141,7 @@ Github 上就有一些名校的计算机网络试验/Project:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
这是一本被 Github 上的爆火的计算机自学项目 [Teach Yourself Computer Science](https://link.zhihu.com/?target=https%3A//teachyourselfcs.com/) 强烈推荐的一本算法书籍。
|
这是一本被 GitHub 上的爆火的计算机自学项目 [Teach Yourself Computer Science](https://link.zhihu.com/?target=https%3A//teachyourselfcs.com/) 强烈推荐的一本算法书籍。
|
||||||
|
|
||||||
类似的神书还有 [《算法导论》](https://book.douban.com/subject/20432061/)、[《计算机程序设计艺术(第 1 卷)》](https://book.douban.com/subject/1130500/) 。
|
类似的神书还有 [《算法导论》](https://book.douban.com/subject/20432061/)、[《计算机程序设计艺术(第 1 卷)》](https://book.douban.com/subject/1130500/) 。
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ head:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
Github 上也已经有大佬用 Java 实现过一个简易的数据库,介绍的挺详细的,感兴趣的朋友可以去看看。地址:[https://github.com/alchemystar/Freedom](https://github.com/alchemystar/Freedom) 。
|
GitHub 上也已经有大佬用 Java 实现过一个简易的数据库,介绍的挺详细的,感兴趣的朋友可以去看看。地址:[https://github.com/alchemystar/Freedom](https://github.com/alchemystar/Freedom) 。
|
||||||
|
|
||||||
除了这个用 Java 写的之外,**[db_tutorial](https://github.com/cstack/db_tutorial)** 这个项目是国外的一个大佬用 C 语言写的,朋友们也可以去瞅瞅。
|
除了这个用 Java 写的之外,**[db_tutorial](https://github.com/cstack/db_tutorial)** 这个项目是国外的一个大佬用 C 语言写的,朋友们也可以去瞅瞅。
|
||||||
|
|
||||||
|
@ -122,12 +122,12 @@ _这本书还是非常适合我们用来学习 Java 多线程的。这本书的
|
|||||||
|
|
||||||
非常重要!非常重要!特别是 Git 和 Docker。
|
非常重要!非常重要!特别是 Git 和 Docker。
|
||||||
|
|
||||||
- **IDEA** :熟悉基本操作以及常用快捷。你可以通过 Github 上的开源教程 [《IntelliJ IDEA 简体中文专题教程》](https://github.com/judasn/IntelliJ-IDEA-Tutorial) 来学习 IDEA 的使用。
|
- **IDEA** :熟悉基本操作以及常用快捷。你可以通过 GitHub 上的开源教程 [《IntelliJ IDEA 简体中文专题教程》](https://github.com/judasn/IntelliJ-IDEA-Tutorial) 来学习 IDEA 的使用。
|
||||||
- **Maven** :强烈建议学习常用框架之前可以提前花几天时间学习一下**Maven**的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)。
|
- **Maven** :强烈建议学习常用框架之前可以提前花几天时间学习一下**Maven**的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)。
|
||||||
- **Git** :基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。你可以看看这篇 Github 上开源的 [《Git 极简入门》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Git) 。
|
- **Git**:基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。你可以看看这篇 Github 上开源的 [《Git 极简入门》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Git) 。
|
||||||
- **Docker** :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。你可以看看这篇 Github 上开源的 [《Docker 基本概念解读》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Docker)、[《一文搞懂 Docker 镜像的常用操作!》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Docker-Image)
|
- **Docker** :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。你可以看看这篇 Github 上开源的 [《Docker 基本概念解读》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Docker) 、[《一文搞懂 Docker 镜像的常用操作!》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Docker-Image)
|
||||||
|
|
||||||
除了这些工具之外,我强烈建议你一定要搞懂 Github 的使用。一些使用 Github 的小技巧,你可以看[《Github 小技巧》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Github%E6%8A%80%E5%B7%A7)这篇文章。
|
除了这些工具之外,我强烈建议你一定要搞懂 GitHub 的使用。一些使用 GitHub 的小技巧,你可以看[《GitHub 小技巧》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Github%E6%8A%80%E5%B7%A7)这篇文章。
|
||||||
|
|
||||||
## 常用框架
|
## 常用框架
|
||||||
|
|
||||||
|
@ -9,11 +9,11 @@ category: 计算机书籍
|
|||||||
|
|
||||||
开源的目的是为了大家能一起完善,如果你觉得内容有任何需要完善/补充的地方,欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-cs/issues) 推荐自己认可的技术书籍,让我们共同维护一个优质的技术书籍精选集!
|
开源的目的是为了大家能一起完善,如果你觉得内容有任何需要完善/补充的地方,欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-cs/issues) 推荐自己认可的技术书籍,让我们共同维护一个优质的技术书籍精选集!
|
||||||
|
|
||||||
- Github 地址:[https://github.com/CodingDocs/awesome-cs](https://github.com/CodingDocs/awesome-cs)
|
- GitHub 地址:[https://github.com/CodingDocs/awesome-cs](https://github.com/CodingDocs/awesome-cs)
|
||||||
- Gitee 地址:[https://gitee.com/SnailClimb/awesome-cs](https://gitee.com/SnailClimb/awesome-cs)
|
- Gitee 地址:[https://gitee.com/SnailClimb/awesome-cs](https://gitee.com/SnailClimb/awesome-cs)
|
||||||
|
|
||||||
如果内容对你有帮助的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份书单,感谢!
|
如果内容对你有帮助的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份书单,感谢!
|
||||||
|
|
||||||
本项目推荐的大部分书籍的 PDF 版本我已经整理到了云盘里,你可以在公众号“**Github 掘金计划**” 后台回复“**书籍**”获取到。
|
本项目推荐的大部分书籍的 PDF 版本我已经整理到了云盘里,你可以在公众号“**GitHub 掘金计划**” 后台回复“**书籍**”获取到。
|
||||||
|
|
||||||

|

|
||||||
|
@ -353,7 +353,7 @@ COMMIT;
|
|||||||
>
|
>
|
||||||
> 翻译过来的意思是:原子性,隔离性和持久性是数据库的属性,而一致性(在 ACID 意义上)是应用程序的属性。应用可能依赖数据库的原子性和隔离属性来实现一致性,但这并不仅取决于数据库。因此,字母 C 不属于 ACID 。
|
> 翻译过来的意思是:原子性,隔离性和持久性是数据库的属性,而一致性(在 ACID 意义上)是应用程序的属性。应用可能依赖数据库的原子性和隔离属性来实现一致性,但这并不仅取决于数据库。因此,字母 C 不属于 ACID 。
|
||||||
|
|
||||||
《Designing Data-Intensive Application(数据密集型应用系统设计)》这本书强推一波,值得读很多遍!豆瓣有接近 90% 的人看了这本书之后给了五星好评。另外,中文翻译版本已经在 Github 开源,地址:[https://github.com/Vonng/ddia](https://github.com/Vonng/ddia) 。
|
《Designing Data-Intensive Application(数据密集型应用系统设计)》这本书强推一波,值得读很多遍!豆瓣有接近 90% 的人看了这本书之后给了五星好评。另外,中文翻译版本已经在 GitHub 开源,地址:[https://github.com/Vonng/ddia](https://github.com/Vonng/ddia) 。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ Memcached 是分布式缓存最开始兴起的那会,比较常用的。后来
|
|||||||
|
|
||||||
关于 Redis 和 Tendis 的对比,腾讯官方曾经发过一篇文章:[Redis vs Tendis:冷热混合存储版架构揭秘](https://mp.weixin.qq.com/s/MeYkfOIdnU6LYlsGb24KjQ) ,可以简单参考一下。
|
关于 Redis 和 Tendis 的对比,腾讯官方曾经发过一篇文章:[Redis vs Tendis:冷热混合存储版架构揭秘](https://mp.weixin.qq.com/s/MeYkfOIdnU6LYlsGb24KjQ) ,可以简单参考一下。
|
||||||
|
|
||||||
从这个项目的 Github 提交记录可以看出,Tendis 开源版几乎已经没有被维护更新了,加上其关注度并不高,使用的公司也比较少。因此,不建议你使用 Tendis 来实现分布式缓存。
|
从这个项目的 GitHub 提交记录可以看出,Tendis 开源版几乎已经没有被维护更新了,加上其关注度并不高,使用的公司也比较少。因此,不建议你使用 Tendis 来实现分布式缓存。
|
||||||
|
|
||||||
### 说一下 Redis 和 Memcached 的区别和共同点
|
### 说一下 Redis 和 Memcached 的区别和共同点
|
||||||
|
|
||||||
|
@ -74,8 +74,8 @@ Zuul 主要通过过滤器(类似于 AOP)来过滤请求,从而实现网
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
- Github 地址 :<https://github.com/Netflix/zuul>
|
- GitHub 地址: <https://github.com/Netflix/zuul>
|
||||||
- 官方 Wiki :<https://github.com/Netflix/zuul/wiki>
|
- 官方 Wiki : <https://github.com/Netflix/zuul/wiki>
|
||||||
|
|
||||||
### Spring Cloud Gateway
|
### Spring Cloud Gateway
|
||||||
|
|
||||||
@ -89,8 +89,8 @@ Spring Cloud Gateway 不仅提供统一的路由方式,并且基于 Filter 链
|
|||||||
|
|
||||||
Spring Cloud Gateway 和 Zuul 2.x 的差别不大,也是通过过滤器来处理请求。不过,目前更加推荐使用 Spring Cloud Gateway 而非 Zuul,Spring Cloud 生态对其支持更加友好。
|
Spring Cloud Gateway 和 Zuul 2.x 的差别不大,也是通过过滤器来处理请求。不过,目前更加推荐使用 Spring Cloud Gateway 而非 Zuul,Spring Cloud 生态对其支持更加友好。
|
||||||
|
|
||||||
- Github 地址 :<https://github.com/spring-cloud/spring-cloud-gateway>
|
- Github 地址 : <https://github.com/spring-cloud/spring-cloud-gateway>
|
||||||
- 官网 :<https://spring.io/projects/spring-cloud-gateway>
|
- 官网 : <https://spring.io/projects/spring-cloud-gateway>
|
||||||
|
|
||||||
### Kong
|
### Kong
|
||||||
|
|
||||||
@ -117,8 +117,8 @@ $ curl -X POST http://kong:8001/services/{service}/plugins \
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
- Github 地址:<https://github.com/Kong/kong>
|
- Github 地址: <https://github.com/Kong/kong>
|
||||||
- 官网地址 :<https://konghq.com/kong>
|
- 官网地址 : <https://konghq.com/kong>
|
||||||
|
|
||||||
### APISIX
|
### APISIX
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ APISIX 同样支持定制化的插件开发。开发者除了能够使用 Lua
|
|||||||

|

|
||||||
|
|
||||||
- Github 地址 :<https://github.com/apache/apisix>
|
- Github 地址 :<https://github.com/apache/apisix>
|
||||||
- 官网地址:<https://apisix.apache.org/zh/>
|
- 官网地址: <https://apisix.apache.org/zh/>
|
||||||
|
|
||||||
相关阅读:
|
相关阅读:
|
||||||
|
|
||||||
@ -161,8 +161,8 @@ Shenyu 是一款基于 WebFlux 的可扩展、高性能、响应式网关,Apac
|
|||||||
|
|
||||||
Shenyu 通过插件扩展功能,插件是 ShenYu 的灵魂,并且插件也是可扩展和热插拔的。不同的插件实现不同的功能。Shenyu 自带了诸如限流、熔断、转发、重写、重定向、和路由监控等插件。
|
Shenyu 通过插件扩展功能,插件是 ShenYu 的灵魂,并且插件也是可扩展和热插拔的。不同的插件实现不同的功能。Shenyu 自带了诸如限流、熔断、转发、重写、重定向、和路由监控等插件。
|
||||||
|
|
||||||
- Github 地址:<https://github.com/apache/incubator-shenyu>
|
- Github 地址: <https://github.com/apache/incubator-shenyu>
|
||||||
- 官网地址 :<https://shenyu.apache.org/>
|
- 官网地址 : <https://shenyu.apache.org/>
|
||||||
|
|
||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
|
173
docs/distributed-system/distributed-id-design.md
Normal file
173
docs/distributed-system/distributed-id-design.md
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
---
|
||||||
|
title: 分布式ID设计指南
|
||||||
|
category: 分布式
|
||||||
|
---
|
||||||
|
|
||||||
|
::: tip
|
||||||
|
|
||||||
|
看到百度 Geek 说的一篇结合具体场景聊分布式 ID 设计的文章,感觉挺不错的。于是,我将这篇文章的部分内容整理到了这里。原文传送门:[分布式 ID 生成服务的技术原理和项目实战](https://mp.weixin.qq.com/s/bFDLb6U6EgI-DvCdLTq_QA) 。
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
网上绝大多数的分布式 ID 生成服务,一般着重于技术原理剖析,很少见到根据具体的业务场景去选型 ID 生成服务的文章。
|
||||||
|
|
||||||
|
本文结合一些使用场景,进一步探讨业务场景中对 ID 有哪些具体的要求。
|
||||||
|
|
||||||
|
## 场景一:订单系统
|
||||||
|
|
||||||
|
我们在商场买东西一码付二维码,下单生成的订单号,使用到的优惠券码,联合商品兑换券码,这些是在网上购物经常使用到的单号,那么为什么有些单号那么长,有些只有几位数?有些单号一看就知道年月日的信息,有些却看不出任何意义?下面展开分析下订单系统中不同场景的 id 服务的具体实现。
|
||||||
|
|
||||||
|
### 1、一码付
|
||||||
|
|
||||||
|
我们常见的一码付,指的是一个二维码可以使用支付宝或者微信进行扫码支付。
|
||||||
|
|
||||||
|
二维码的本质是一个字符串。聚合码的本质就是一个链接地址。用户使用支付宝微信直接扫一个码付钱,不用担心拿支付宝扫了微信的收款码或者用微信扫了支付宝的收款码,这极大减少了用户扫码支付的时间。
|
||||||
|
|
||||||
|
实现原理是当客户用 APP 扫码后,网站后台就会判断客户的扫码环境。(微信、支付宝、QQ 钱包、京东支付、云闪付等)。
|
||||||
|
|
||||||
|
判断扫码环境的原理就是根据打开链接浏览器的 HTTP header。任何浏览器打开 http 链接时,请求的 header 都会有 User-Agent(UA、用户代理)信息。
|
||||||
|
|
||||||
|
UA 是一个特殊字符串头,服务器依次可以识别出客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等很多信息。
|
||||||
|
|
||||||
|
各渠道对应支付产品的名称不一样,一定要仔细看各支付产品的 API 介绍。
|
||||||
|
|
||||||
|
1. 微信支付:JSAPI 支付支付
|
||||||
|
2. 支付宝:手机网站支付
|
||||||
|
3. QQ 钱包:公众号支付
|
||||||
|
|
||||||
|
其本质均为在 APP 内置浏览器中实现 HTML5 支付。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
文库的研发同学在这个思路上,做了优化迭代。动态生成一码付的二维码预先绑定用户所选的商品信息和价格,根据用户所选的商品动态更新。这样不仅支持一码多平台调起支付,而且不用用户选择商品输入金额,即可完成订单支付的功能,很丝滑。用户在真正扫码后,服务端才通过前端获取用户 UID,结合二维码绑定的商品信息,真正的生成订单,发送支付信息到第三方(qq、微信、支付宝),第三方生成支付订单推给用户设备,从而调起支付。
|
||||||
|
|
||||||
|
区别于固定的一码付,在文库的应用中,使用到了动态二维码,二维码本质是一个短网址,ID 服务提供短网址的唯一标志参数。唯一的短网址映射的 ID 绑定了商品的订单信息,技术和业务的深度结合,缩短了支付流程,提升用户的支付体验。
|
||||||
|
|
||||||
|
### 2、订单号
|
||||||
|
|
||||||
|
订单号在实际的业务过程中作为一个订单的唯一标识码存在,一般实现以下业务场景:
|
||||||
|
|
||||||
|
1. 用户订单遇到问题,需要找客服进行协助;
|
||||||
|
2. 对订单进行操作,如线下收款,订单核销;
|
||||||
|
3. 下单,改单,成单,退单,售后等系统内部的订单流程处理和跟进。
|
||||||
|
|
||||||
|
很多时候搜索订单相关信息的时候都是以订单 ID 作为唯一标识符,这是由于订单号的生成规则的唯一性决定的。从技术角度看,除了 ID 服务必要的特性之外,在订单号的设计上需要体现几个特性:
|
||||||
|
|
||||||
|
**(1)信息安全**
|
||||||
|
|
||||||
|
编号不能透露公司的运营情况,比如日销、公司流水号等信息,以及商业信息和用户手机号,身份证等隐私信息。并且不能有明显的整体规律(可以有局部规律),任意修改一个字符就能查询到另一个订单信息,这也是不允许的。
|
||||||
|
|
||||||
|
类比于我们高考时候的考生编号的生成规则,一定不能是连号的,否则只需要根据顺序往下查询就能搜索到别的考生的成绩,这是绝对不可允许。
|
||||||
|
|
||||||
|
**(2)部分可读**
|
||||||
|
|
||||||
|
位数要便于操作,因此要求订单号的位数适中,且局部有规律。这样可以方便在订单异常,或者退货时客服查询。
|
||||||
|
|
||||||
|
过长的订单号或易读性差的订单号会导致客服输入困难且易错率较高,影响用户体验的售后体验。因此在实际的业务场景中,订单号的设计通常都会适当携带一些允许公开的对使用场景有帮助的信息,如时间,星期,类型等等,这个主要根据所涉及的编号对应的使用场景来。
|
||||||
|
|
||||||
|
而且像时间、星期这些自增长的属于作为订单号的设计的一部分元素,有助于解决业务累积而导致的订单号重复的问题。
|
||||||
|
|
||||||
|
**(3)查询效率**
|
||||||
|
|
||||||
|
常见的电商平台订单号大多是纯数字组成,兼具可读性的同时,int 类型相对 varchar 类型的查询效率更高,对在线业务更加友好。
|
||||||
|
|
||||||
|
### 3、优惠券和兑换券
|
||||||
|
|
||||||
|
优惠券、兑换券是运营推广最常用的促销工具之一,合理使用它们,可以让买家得到实惠,商家提升商品销量。常见场景有:
|
||||||
|
|
||||||
|
1. 在文库购买【文库 VIP+QQ 音乐年卡】联合商品,支付成功后会得到 QQ 音乐年卡的兑换码,可以去 QQ 音乐 App 兑换音乐会员年卡;
|
||||||
|
2. 疫情期间,部分地方政府发放的消费券;
|
||||||
|
3. 瓶装饮料经常会出现输入优惠编码兑换奖品。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
从技术角度看,有些场景适合 ID 即时生成,比如电商平台购物领取的优惠券,只需要在用户领取时分配优惠券信息即可。有些线上线下结合的场景,比如疫情优惠券,瓶盖开奖,京东卡,超市卡这种,则需要预先生成,预先生成的券码具备以下特性:
|
||||||
|
|
||||||
|
1.预先生成,在活动正式开始前提供出来进行活动预热;
|
||||||
|
|
||||||
|
2.优惠券体量大,以万为单位,通常在 10 万级别以上;
|
||||||
|
|
||||||
|
3.不可破解、仿制券码;
|
||||||
|
|
||||||
|
4.支持用后核销;
|
||||||
|
|
||||||
|
5.优惠券、兑换券属于广撒网的策略,所以利用率低,也就不适合使用数据。
|
||||||
|
|
||||||
|
**库进行存储(占空间,有效的数据有少)**
|
||||||
|
|
||||||
|
设计思路上,需要设计一种有效的兑换码生成策略,支持预先生成,支持校验,内容简洁,生成的兑换码都具有唯一性,那么这种策略就是一种特殊的编解码策略,按照约定的编解码规则支撑上述需求。
|
||||||
|
|
||||||
|
既然是一种编解码规则,那么需要约定编码空间(也就是用户看到的组成兑换码的字符),编码空间由字符 a-z,A-Z,数字 0-9 组成,为了增强兑换码的可识别度,剔除大写字母 O 以及 I,可用字符如下所示,共 60 个字符:
|
||||||
|
|
||||||
|
abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXZY0123456789
|
||||||
|
|
||||||
|
之前说过,兑换码要求近可能简洁,那么设计时就需要考虑兑换码的字符数,假设上限为 12 位,而字符空间有 60 位,那么可以表示的空间范围为 60^12=130606940160000000000000(也就是可以 12 位的兑换码可以生成天量,应该够运营同学挥霍了),转换成 2 进制:
|
||||||
|
|
||||||
|
1001000100000000101110011001101101110011000000000000000000000(61 位)
|
||||||
|
|
||||||
|
**兑换码组成成分分析**
|
||||||
|
|
||||||
|
兑换码可以预先生成,并且不需要额外的存储空间保存这些信息,每一个优惠方案都有独立的一组兑换码(指运营同学组织的每一场运营活动都有不同的兑换码,不能混合使用, 例如双 11 兑换码不能使用在双 12 活动上),每个兑换码有自己的编号,防止重复,为了保证兑换码的有效性,对兑换码的数据需要进行校验,当前兑换码的数据组成如下所示:
|
||||||
|
|
||||||
|
优惠方案 ID + 兑换码序列号 i + 校验码
|
||||||
|
|
||||||
|
**编码方案**
|
||||||
|
|
||||||
|
1. 兑换码序列号 i,代表当前兑换码是当前活动中第 i 个兑换码,兑换码序列号的空间范围决定了优惠活动可以发行的兑换码数目,当前采用 30 位 bit 位表示,可表示范围:1073741824(10 亿个券码)。
|
||||||
|
2. 优惠方案 ID, 代表当前优惠方案的 ID 号,优惠方案的空间范围决定了可以组织的优惠活动次数,当前采用 15 位表示,可以表示范围:32768(考虑到运营活动的频率,以及 ID 的初始值 10000,15 位足够,365 天每天有运营活动,可以使用 54 年)。
|
||||||
|
3. 校验码,校验兑换码是否有效,主要为了快捷的校验兑换码信息的是否正确,其次可以起到填充数据的目的,增强数据的散列性,使用 13 位表示校验位,其中分为两部分,前 6 位和后 7 位。
|
||||||
|
|
||||||
|
深耕业务还会有区分通用券和单独券的情况,分别具备以下特点,技术实现需要因地制宜地思考。
|
||||||
|
|
||||||
|
1. 通用券:多个玩家都可以输入兑换,然后有总量限制,期限限制。
|
||||||
|
2. 单独券:运营同学可以在后台设置兑换码的奖励物品、期限、个数,然后由后台生成兑换码的列表,兑换之后核销。
|
||||||
|
|
||||||
|
## 场景二:Tracing
|
||||||
|
|
||||||
|
### 1、日志跟踪
|
||||||
|
|
||||||
|
在分布式服务架构下,一个 Web 请求从网关流入,有可能会调用多个服务对请求进行处理,拿到最终结果。这个过程中每个服务之间的通信又是单独的网络请求,无论请求经过的哪个服务出了故障或者处理过慢都会对前端造成影响。
|
||||||
|
|
||||||
|
处理一个 Web 请求要调用的多个服务,为了能更方便的查询哪个环节的服务出现了问题,现在常用的解决方案是为整个系统引入分布式链路跟踪。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在分布式链路跟踪中有两个重要的概念:跟踪(trace)和 跨度( span)。trace 是请求在分布式系统中的整个链路视图,span 则代表整个链路中不同服务内部的视图,span 组合在一起就是整个 trace 的视图。
|
||||||
|
|
||||||
|
在整个请求的调用链中,请求会一直携带 traceid 往下游服务传递,每个服务内部也会生成自己的 spanid 用于生成自己的内部调用视图,并和 traceid 一起传递给下游服务。
|
||||||
|
|
||||||
|
### 2、TraceId 生成规则
|
||||||
|
|
||||||
|
这种场景下,生成的 ID 除了要求唯一之外,还要求生成的效率高、吞吐量大。traceid 需要具备接入层的服务器实例自主生成的能力,如果每个 trace 中的 ID 都需要请求公共的 ID 服务生成,纯纯的浪费网络带宽资源。且会阻塞用户请求向下游传递,响应耗时上升,增加了没必要的风险。所以需要服务器实例最好可以自行计算 tracid,spanid,避免依赖外部服务。
|
||||||
|
|
||||||
|
产生规则:服务器 IP + ID 产生的时间 + 自增序列 + 当前进程号 ,比如:
|
||||||
|
|
||||||
|
0ad1348f1403169275002100356696
|
||||||
|
|
||||||
|
前 8 位 0ad1348f 即产生 TraceId 的机器的 IP,这是一个十六进制的数字,每两位代表 IP 中的一段,我们把这个数字,按每两位转成 10 进制即可得到常见的 IP 地址表示方式 10.209.52.143,您也可以根据这个规律来查找到请求经过的第一个服务器。
|
||||||
|
|
||||||
|
后面的 13 位 1403169275002 是产生 TraceId 的时间。之后的 4 位 1003 是一个自增的序列,从 1000 涨到 9000,到达 9000 后回到 1000 再开始往上涨。最后的 5 位 56696 是当前的进程 ID,为了防止单机多进程出现 TraceId 冲突的情况,所以在 TraceId 末尾添加了当前的进程 ID。
|
||||||
|
|
||||||
|
### 3、SpanId 生成规则
|
||||||
|
|
||||||
|
span 是层的意思,比如在第一个实例算是第一层, 请求代理或者分流到下一个实例处理,就是第二层,以此类推。通过层,SpanId 代表本次调用在整个调用链路树中的位置。
|
||||||
|
|
||||||
|
假设一个 服务器实例 A 接收了一次用户请求,代表是整个调用的根节点,那么 A 层处理这次请求产生的非服务调用日志记录 spanid 的值都是 0,A 层需要通过 RPC 依次调用 B、C、D 三个服务器实例,那么在 A 的日志中,SpanId 分别是 0.1,0.2 和 0.3,在 B、C、D 中,SpanId 也分别是 0.1,0.2 和 0.3;如果 C 系统在处理请求的时候又调用了 E,F 两个服务器实例,那么 C 系统中对应的 spanid 是 0.2.1 和 0.2.2,E、F 两个系统对应的日志也是 0.2.1 和 0.2.2。
|
||||||
|
|
||||||
|
根据上面的描述可以知道,如果把一次调用中所有的 SpanId 收集起来,可以组成一棵完整的链路树。
|
||||||
|
|
||||||
|
**spanid 的生成本质:在跨层传递透传的同时,控制大小版本号的自增来实现的。**
|
||||||
|
|
||||||
|
## 场景三:短网址
|
||||||
|
|
||||||
|
短网址主要功能包括网址缩短与还原两大功能。相对于长网址,短网址可以更方便地在电子邮件,社交网络,微博和手机上传播,例如原来很长的网址通过短网址服务即可生成相应的短网址,避免折行或超出字符限制。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
常用的 ID 生成服务比如:MySQL ID 自增、 Redis 键自增、号段模式,生成的 ID 都是一串数字。短网址服务把客户的长网址转换成短网址,
|
||||||
|
|
||||||
|
实际是在 dwz.cn 域名后面拼接新产生的数字类型 ID,直接用数字 ID,网址长度也有些长,服务可以通过数字 ID 转更高进制的方式压缩长度。这种算法在短网址的技术实现上越来越多了起来,它可以进一步压缩网址长度。转进制的压缩算法在生活中有广泛的应用场景,举例:
|
||||||
|
|
||||||
|
- 客户的长网址:https://wenku.baidu.com/ndbusiness/browse/wenkuvipcashier?cashier_code=PCoperatebanner
|
||||||
|
- ID 映射的短网址:https://dwz.cn/2047601319t66 (演示使用,可能无法正确打开)
|
||||||
|
- 转进制后的短网址:https://dwz.cn/2ezwDJ0(演示使用,可能无法正确打开)
|
@ -352,3 +352,5 @@ Tinyid 的优缺点这里就不分析了,结合数据库号段模式的优缺
|
|||||||
通过这篇文章,我基本上已经把最常见的分布式 ID 生成方案都总结了一波。
|
通过这篇文章,我基本上已经把最常见的分布式 ID 生成方案都总结了一波。
|
||||||
|
|
||||||
除了上面介绍的方式之外,像 ZooKeeper 这类中间件也可以帮助我们生成唯一 ID。**没有银弹,一定要结合实际项目来选择最适合自己的方案。**
|
除了上面介绍的方式之外,像 ZooKeeper 这类中间件也可以帮助我们生成唯一 ID。**没有银弹,一定要结合实际项目来选择最适合自己的方案。**
|
||||||
|
|
||||||
|
不过,本文主要介绍的是分布式 ID 的理论知识。在实际的面试中,面试官可能会结合具体的业务场景来考察你对分布式 ID 的设计,你可以参考这篇文章:[分布式 ID 设计指南](https://chat.yqcloud.top/distributed-id-design.md)(对于实际工作中分布式 ID 的设计也非常有帮助)。
|
||||||
|
@ -66,7 +66,7 @@ Dubbo 是由阿里开源,后来加入了 Apache 。正是由于 Dubbo 的出
|
|||||||
|
|
||||||
Dubbo 算的是比较优秀的国产开源项目了,它的源码也是非常值得学习和阅读的!
|
Dubbo 算的是比较优秀的国产开源项目了,它的源码也是非常值得学习和阅读的!
|
||||||
|
|
||||||
- Github :[https://github.com/apache/incubator-dubbo](https://github.com/apache/incubator-dubbo "https://github.com/apache/incubator-dubbo")
|
- GitHub :[https://github.com/apache/incubator-dubbo](https://github.com/apache/incubator-dubbo "https://github.com/apache/incubator-dubbo")
|
||||||
- 官网:https://dubbo.apache.org/zh/
|
- 官网:https://dubbo.apache.org/zh/
|
||||||
|
|
||||||
### Motan
|
### Motan
|
||||||
@ -94,7 +94,7 @@ gRPC 是 Google 开源的一个高性能、通用的开源 RPC 框架。其由
|
|||||||
|
|
||||||
不过,gRPC 的设计导致其几乎没有服务治理能力。如果你想要解决这个问题的话,就需要依赖其他组件比如腾讯的 PolarisMesh(北极星)了。
|
不过,gRPC 的设计导致其几乎没有服务治理能力。如果你想要解决这个问题的话,就需要依赖其他组件比如腾讯的 PolarisMesh(北极星)了。
|
||||||
|
|
||||||
- Github:[https://github.com/grpc/grpc](https://github.com/grpc/grpc "https://github.com/grpc/grpc")
|
- GitHub:[https://github.com/grpc/grpc](https://github.com/grpc/grpc "https://github.com/grpc/grpc")
|
||||||
- 官网:[https://grpc.io/](https://grpc.io/ "https://grpc.io/")
|
- 官网:[https://grpc.io/](https://grpc.io/ "https://grpc.io/")
|
||||||
|
|
||||||
### Thrift
|
### Thrift
|
||||||
|
@ -17,8 +17,8 @@ Spring Cloud Gateway 不仅提供统一的路由方式,并且基于 Filter 链
|
|||||||
|
|
||||||
Spring Cloud Gateway 和 Zuul 2.x 的差别不大,也是通过过滤器来处理请求。不过,目前更加推荐使用 Spring Cloud Gateway 而非 Zuul,Spring Cloud 生态对其支持更加友好。
|
Spring Cloud Gateway 和 Zuul 2.x 的差别不大,也是通过过滤器来处理请求。不过,目前更加推荐使用 Spring Cloud Gateway 而非 Zuul,Spring Cloud 生态对其支持更加友好。
|
||||||
|
|
||||||
- Github 地址 :<https://github.com/spring-cloud/spring-cloud-gateway>
|
- GitHub 地址: <https://github.com/spring-cloud/spring-cloud-gateway>
|
||||||
- 官网 :<https://spring.io/projects/spring-cloud-gateway>
|
- 官网 : <https://spring.io/projects/spring-cloud-gateway>
|
||||||
|
|
||||||
## Spring Cloud Gateway 的工作流程?
|
## Spring Cloud Gateway 的工作流程?
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ category: 高可用
|
|||||||
|
|
||||||
实际上,日常生活中就有非常多的冗余思想的应用。
|
实际上,日常生活中就有非常多的冗余思想的应用。
|
||||||
|
|
||||||
拿我自己来说,我对于重要文件的保存方法就是冗余思想的应用。我日常所使用的重要文件都会同步一份在 Github 以及个人云盘上,这样就可以保证即使电脑硬盘损坏,我也可以通过 Github 或者个人云盘找回自己的重要文件。
|
拿我自己来说,我对于重要文件的保存方法就是冗余思想的应用。我日常所使用的重要文件都会同步一份在 GitHub 以及个人云盘上,这样就可以保证即使电脑硬盘损坏,我也可以通过 GitHub 或者个人云盘找回自己的重要文件。
|
||||||
|
|
||||||
高可用集群(High Availability Cluster,简称 HA Cluster)、同城灾备、异地灾备、同城多活和异地多活是冗余思想在高可用系统设计中最典型的应用。
|
高可用集群(High Availability Cluster,简称 HA Cluster)、同城灾备、异地灾备、同城多活和异地多活是冗余思想在高可用系统设计中最典型的应用。
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ LMAX 公司 2010 年在 QCon 演讲后,Disruptor 获得了业界关注,并
|
|||||||
Disruptor 提供的功能优点类似于 Kafka、RocketMQ 这类分布式队列,不过,其作为范围是 JVM(内存)。
|
Disruptor 提供的功能优点类似于 Kafka、RocketMQ 这类分布式队列,不过,其作为范围是 JVM(内存)。
|
||||||
|
|
||||||
- Github 地址:<https://github.com/LMAX-Exchange/disruptor>
|
- Github 地址:<https://github.com/LMAX-Exchange/disruptor>
|
||||||
- 官方教程:<https://lmax-exchange.github.io/disruptor/user-guide/index.html>
|
- 官方教程: <https://lmax-exchange.github.io/disruptor/user-guide/index.html>
|
||||||
|
|
||||||
关于如何在 Spring Boot 项目中使用 Disruptor,可以看这篇文章:[Spring Boot + Disruptor 实战入门](https://mp.weixin.qq.com/s/0iG5brK3bYF0BgSjX4jRiA) 。
|
关于如何在 Spring Boot 项目中使用 Disruptor,可以看这篇文章:[Spring Boot + Disruptor 实战入门](https://mp.weixin.qq.com/s/0iG5brK3bYF0BgSjX4jRiA) 。
|
||||||
|
|
||||||
|
@ -113,6 +113,6 @@ tag:
|
|||||||
|
|
||||||
大体上的套路便是如此:你说你杀过猪。那么你杀过几头猪,分别是啥时候,杀过多大的猪,有啥毛色。事实上对方可能给你的回答是:杀过、十几头、杀过五十斤的、杀过绿色、黄色、红色、蓝色的猪。那么问题就来了。
|
大体上的套路便是如此:你说你杀过猪。那么你杀过几头猪,分别是啥时候,杀过多大的猪,有啥毛色。事实上对方可能给你的回答是:杀过、十几头、杀过五十斤的、杀过绿色、黄色、红色、蓝色的猪。那么问题就来了。
|
||||||
|
|
||||||
然而笔者碰到的问题是:使用 Git 两年却不知道 Github、使用 Redis 一年却不知道数据结构也不知道序列化、专业做爬虫却不懂 `content-type` 含义、使用搜索引擎技术却说不出两个分词插件、使用数据库读写分离却不知道同步延时等等。
|
然而笔者碰到的问题是:使用 Git 两年却不知道 GitHub、使用 Redis 一年却不知道数据结构也不知道序列化、专业做爬虫却不懂 `content-type` 含义、使用搜索引擎技术却说不出两个分词插件、使用数据库读写分离却不知道同步延时等等。
|
||||||
|
|
||||||
写在最后,笔者认为在招聘途中,并不是不允许求职者包装,但是尽可能满足能筹平衡。虽然这篇文章没有完美的结尾,但是笔者提供了面试失败的各种经验。笔者最终招到了如意的小伙伴。也希望所有技术面试官早日找到符合自己产品发展的 IT 伙伴。
|
写在最后,笔者认为在招聘途中,并不是不允许求职者包装,但是尽可能满足能筹平衡。虽然这篇文章没有完美的结尾,但是笔者提供了面试失败的各种经验。笔者最终招到了如意的小伙伴。也希望所有技术面试官早日找到符合自己产品发展的 IT 伙伴。
|
||||||
|
@ -118,7 +118,7 @@ tag:
|
|||||||
这里就涉及到版权问题,先要说明,作者不能抱有任何幻想,如果出了版权问题,书没出版还好,如果已经出版了,作者不仅要赔钱,而且在业内就会有不好的名声,可谓身败名裂。但其实要避免版权问题一点也不难。
|
这里就涉及到版权问题,先要说明,作者不能抱有任何幻想,如果出了版权问题,书没出版还好,如果已经出版了,作者不仅要赔钱,而且在业内就会有不好的名声,可谓身败名裂。但其实要避免版权问题一点也不难。
|
||||||
|
|
||||||
- 不能抄袭网上现有的内容,哪怕一句也不行。对此,作者可以在理解人家语句含义的基础上改写。不能抄袭人家书上现有的目录,更不能抄袭人家书上的话,同样一句也不行,对应的解决方法同样是在理解的基础上改写。
|
- 不能抄袭网上现有的内容,哪怕一句也不行。对此,作者可以在理解人家语句含义的基础上改写。不能抄袭人家书上现有的目录,更不能抄袭人家书上的话,同样一句也不行,对应的解决方法同样是在理解的基础上改写。
|
||||||
- 不能抄袭 Github 上或者任何地方别人的代码,哪怕这个代码是开源的。对此,你可以在理解对方代码的基础上,先运行通,然后一定得自己新建一个项目,在你的项目里参考别人的代码实现你的功能,在这个过程中不能有大段的复制粘贴操作。也就是说,你的代码和别人的代码,在注释,变量命名,类名和方法名上不能有雷同的地方,当然你还可以额外加上你自己的功能。
|
- 不能抄袭 GitHub 上或者任何地方别人的代码,哪怕这个代码是开源的。对此,你可以在理解对方代码的基础上,先运行通,然后一定得自己新建一个项目,在你的项目里参考别人的代码实现你的功能,在这个过程中不能有大段的复制粘贴操作。也就是说,你的代码和别人的代码,在注释,变量命名,类名和方法名上不能有雷同的地方,当然你还可以额外加上你自己的功能。
|
||||||
- 至于在写技术和案例介绍时,你就可以用你自己的话来说,这样也不会出现版权问题。
|
- 至于在写技术和案例介绍时,你就可以用你自己的话来说,这样也不会出现版权问题。
|
||||||
|
|
||||||
用了上述办法以后,作者就可以在参考现有资料的基础上,充分加上属于你的功能,写上你独到的理解,从而高效地出版属于你自己的书。
|
用了上述办法以后,作者就可以在参考现有资料的基础上,充分加上属于你的功能,写上你独到的理解,从而高效地出版属于你自己的书。
|
||||||
|
@ -14,7 +14,7 @@ tag:
|
|||||||
|
|
||||||
在面试或联系副业的时候,如果能令人信服地证明自己的实力,那么很有可能事半功倍。如何证明自己的实力?最有信服力的是大公司职位背景背书,没有之一,比如在 BAT 担任资深架构,那么其它话甚至都不用讲了。
|
在面试或联系副业的时候,如果能令人信服地证明自己的实力,那么很有可能事半功倍。如何证明自己的实力?最有信服力的是大公司职位背景背书,没有之一,比如在 BAT 担任资深架构,那么其它话甚至都不用讲了。
|
||||||
|
|
||||||
不过,不是每个人入职后马上就是大公司架构师,在上进的路上,还可以通过公众号,专栏博文,Github 代码量和出书出视频等方式来证明自己。和其它方式相比,属于自己的技术图书由于经过了国家级出版社的加持,相对更能让别人认可自己的实力,而对于一些小公司而言,一本属于自己的书甚至可以说是免面试的通行证。所以在本文里,就将和广大程序员朋友聊聊出版技术书的那些事。
|
不过,不是每个人入职后马上就是大公司架构师,在上进的路上,还可以通过公众号,专栏博文,GitHub 代码量和出书出视频等方式来证明自己。和其它方式相比,属于自己的技术图书由于经过了国家级出版社的加持,相对更能让别人认可自己的实力,而对于一些小公司而言,一本属于自己的书甚至可以说是免面试的通行证。所以在本文里,就将和广大程序员朋友聊聊出版技术书的那些事。
|
||||||
|
|
||||||
## 1.不是有能力了再出书,而是在出书过程中升能力
|
## 1.不是有能力了再出书,而是在出书过程中升能力
|
||||||
|
|
||||||
|
14
docs/home.md
14
docs/home.md
@ -117,9 +117,12 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
|
|||||||
|
|
||||||
### 操作系统
|
### 操作系统
|
||||||
|
|
||||||
- [操作系统常见问题总结!](./cs-basics/operating-system/operating-system-basic-questions-01.md)
|
- [操作系统常见知识点&面试题总结(上)](./cs-basics/operating-system/operating-system-basic-questions-01.md)
|
||||||
- [后端程序员必备的 Linux 基础知识总结](./cs-basics/operating-system/linux-intro.md)
|
- [操作系统常见知识点&面试题总结(下)](./cs-basics/operating-system/operating-system-basic-questions-02.md)
|
||||||
- [Shell 编程基础知识总结](./cs-basics/operating-system/shell-intro.md)
|
- **Linux** :
|
||||||
|
- [后端程序员必备的 Linux 基础知识总结](./cs-basics/operating-system/linux-intro.md)
|
||||||
|
- [Shell 编程基础知识总结](./cs-basics/operating-system/shell-intro.md)
|
||||||
|
|
||||||
|
|
||||||
### 网络
|
### 网络
|
||||||
|
|
||||||
@ -249,7 +252,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
|
|||||||
### Git
|
### Git
|
||||||
|
|
||||||
- [Git 核心概念总结](./tools/git/git-intro.md)
|
- [Git 核心概念总结](./tools/git/git-intro.md)
|
||||||
- [Github 实用小技巧总结](./tools/git/github-tips.md)
|
- [GitHub 实用小技巧总结](./tools/git/github-tips.md)
|
||||||
|
|
||||||
## 系统设计
|
## 系统设计
|
||||||
|
|
||||||
@ -339,7 +342,8 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8](https://docs.oracle.
|
|||||||
|
|
||||||
### 分布式 ID
|
### 分布式 ID
|
||||||
|
|
||||||
[分布式 ID 常见知识点&面试题总结](./distributed-system/distributed-id.md)
|
- [分布式 ID 常见知识点&面试题总结](./distributed-system/distributed-id.md)
|
||||||
|
- [分布式 ID 设计指南](./distributed-system/distributed-id-design.md)
|
||||||
|
|
||||||
### 分布式锁
|
### 分布式锁
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ icon: project
|
|||||||
|
|
||||||
### 实战类开源项目
|
### 实战类开源项目
|
||||||
|
|
||||||
Github 或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
|
GitHub 或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
|
||||||
|
|
||||||
你可以参考 [Java 优质开源实战项目](https://javaguide.cn/open-source-project/practical-project.html "Java 优质开源实战项目") 上面推荐的实战类开源项目,质量都很高,项目类型也比较全面,涵盖博客/论坛系统、考试/刷题系统、商城系统、权限管理系统、快速开发脚手架以及各种轮子。
|
你可以参考 [Java 优质开源实战项目](https://javaguide.cn/open-source-project/practical-project.html "Java 优质开源实战项目") 上面推荐的实战类开源项目,质量都很高,项目类型也比较全面,涵盖博客/论坛系统、考试/刷题系统、商城系统、权限管理系统、快速开发脚手架以及各种轮子。
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ icon: jianli
|
|||||||
### 个人信息
|
### 个人信息
|
||||||
|
|
||||||
- 最基本的 :姓名(身份证上的那个)、年龄、电话、籍贯、联系方式、邮箱地址
|
- 最基本的 :姓名(身份证上的那个)、年龄、电话、籍贯、联系方式、邮箱地址
|
||||||
- 潜在加分项 :Github 地址、博客地址(如果技术博客和 Github 上没有什么内容的话,就不要写了)
|
- 潜在加分项: GitHub 地址、博客地址(如果技术博客和 GitHub 上没有什么内容的话,就不要写了)
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
@ -233,7 +233,7 @@ FAB 法则由下面 3 个单词组成(FAB 法则的名字就是由它们的首
|
|||||||
- 尽量避免主观表述,少一点语义模糊的形容词。表述要简洁明了,简历结构要清晰。
|
- 尽量避免主观表述,少一点语义模糊的形容词。表述要简洁明了,简历结构要清晰。
|
||||||
- 精简表述,突出亮点。校招简历建议不要超过 2 页,社招简历建议不要超过 3 页。如果内容过多的话,不需要非把内容压缩到一页,保持排版干净整洁就可以了。
|
- 精简表述,突出亮点。校招简历建议不要超过 2 页,社招简历建议不要超过 3 页。如果内容过多的话,不需要非把内容压缩到一页,保持排版干净整洁就可以了。
|
||||||
- 不会的东西就不要写在简历上了。注意简历真实性,适当润色没有问题。
|
- 不会的东西就不要写在简历上了。注意简历真实性,适当润色没有问题。
|
||||||
- 技术博客、Github 以及获奖经历等可以直接证明自己能力的东西,能写就尽量写在这里。不过,如果技术博客和 Github 上没有什么内容的话,就不要写了。
|
- 技术博客、GitHub 以及获奖经历等可以直接证明自己能力的东西,能写就尽量写在这里。不过,如果技术博客和 GitHub 上没有什么内容的话,就不要写了。
|
||||||
- 技术名词最好规范大小写比较好,比如 java->Java ,spring boot -> Spring Boot 。这个虽然有些面试官不会介意,但是很多面试官都会在意这个细节的。
|
- 技术名词最好规范大小写比较好,比如 java->Java ,spring boot -> Spring Boot 。这个虽然有些面试官不会介意,但是很多面试官都会在意这个细节的。
|
||||||
- 工作经历建议采用时间倒序的方式来介绍,实习经历建议将最有价值的放在最前面。
|
- 工作经历建议采用时间倒序的方式来介绍,实习经历建议将最有价值的放在最前面。
|
||||||
- 将自己的项目经历完美的展示出来非常重要,重点是突出自己做了什么(挖掘亮点),而不是介绍项目是做什么的。
|
- 将自己的项目经历完美的展示出来非常重要,重点是突出自己做了什么(挖掘亮点),而不是介绍项目是做什么的。
|
||||||
|
@ -82,7 +82,7 @@ icon: path
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
技术博客、Github 以及在校获奖经历的话,能写就尽量写在这里。 你可以参考下面 👇 的模板进行修改:
|
技术博客、GitHub 以及在校获奖经历的话,能写就尽量写在这里。 你可以参考下面 👇 的模板进行修改:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -204,11 +204,11 @@ icon: path
|
|||||||
|
|
||||||
**社招:**
|
**社招:**
|
||||||
|
|
||||||
> 面试官,您好!我叫独秀儿。我目前有 1 年半的工作经验,熟练使用 Spring、MyBatis 等框架、了解 Java 底层原理比如 JVM 调优并且有着丰富的分布式开发经验。离开上一家公司是因为我想在技术上得到更多的锻炼。在上一个公司我参与了一个分布式电子交易系统的开发,负责搭建了整个项目的基础架构并且通过分库分表解决了原始数据库以及一些相关表过于庞大的问题,目前这个网站最高支持 10 万人同时访问。工作之余,我利用自己的业余时间写了一个简单的 RPC 框架,这个框架用到了 Netty 进行网络通信, 目前我已经将这个项目开源,在 Github 上收获了 2k 的 Star! 说到业余爱好的话,我比较喜欢通过博客整理分享自己所学知识,现在已经是多个博客平台的认证作者。 生活中我是一个比较积极乐观的人,一般会通过运动打球的方式来放松。我一直都非常想加入贵公司,我觉得贵公司的文化和技术氛围我都非常喜欢,期待能与你共事!
|
> 面试官,您好!我叫独秀儿。我目前有 1 年半的工作经验,熟练使用 Spring、MyBatis 等框架、了解 Java 底层原理比如 JVM 调优并且有着丰富的分布式开发经验。离开上一家公司是因为我想在技术上得到更多的锻炼。在上一个公司我参与了一个分布式电子交易系统的开发,负责搭建了整个项目的基础架构并且通过分库分表解决了原始数据库以及一些相关表过于庞大的问题,目前这个网站最高支持 10 万人同时访问。工作之余,我利用自己的业余时间写了一个简单的 RPC 框架,这个框架用到了 Netty 进行网络通信, 目前我已经将这个项目开源,在 GitHub 上收获了 2k 的 Star! 说到业余爱好的话,我比较喜欢通过博客整理分享自己所学知识,现在已经是多个博客平台的认证作者。 生活中我是一个比较积极乐观的人,一般会通过运动打球的方式来放松。我一直都非常想加入贵公司,我觉得贵公司的文化和技术氛围我都非常喜欢,期待能与你共事!
|
||||||
|
|
||||||
**校招:**
|
**校招:**
|
||||||
|
|
||||||
> 面试官,您好!我叫秀儿。大学时间我主要利用课外时间学习了 Java 以及 Spring、MyBatis 等框架 。在校期间参与过一个考试系统的开发,这个系统的主要用了 Spring、MyBatis 和 shiro 这三种框架。我在其中主要担任后端开发,主要负责了权限管理功能模块的搭建。另外,我在大学的时候参加过一次软件编程大赛,我和我的团队做的在线订餐系统成功获得了第二名的成绩。我还利用自己的业余时间写了一个简单的 RPC 框架,这个框架用到了 Netty 进行网络通信, 目前我已经将这个项目开源,在 Github 上收获了 2k 的 Star! 说到业余爱好的话,我比较喜欢通过博客整理分享自己所学知识,现在已经是多个博客平台的认证作者。 生活中我是一个比较积极乐观的人,一般会通过运动打球的方式来放松。我一直都非常想加入贵公司,我觉得贵公司的文化和技术氛围我都非常喜欢,期待能与你共事!
|
> 面试官,您好!我叫秀儿。大学时间我主要利用课外时间学习了 Java 以及 Spring、MyBatis 等框架 。在校期间参与过一个考试系统的开发,这个系统的主要用了 Spring、MyBatis 和 shiro 这三种框架。我在其中主要担任后端开发,主要负责了权限管理功能模块的搭建。另外,我在大学的时候参加过一次软件编程大赛,我和我的团队做的在线订餐系统成功获得了第二名的成绩。我还利用自己的业余时间写了一个简单的 RPC 框架,这个框架用到了 Netty 进行网络通信, 目前我已经将这个项目开源,在 GitHub 上收获了 2k 的 Star! 说到业余爱好的话,我比较喜欢通过博客整理分享自己所学知识,现在已经是多个博客平台的认证作者。 生活中我是一个比较积极乐观的人,一般会通过运动打球的方式来放松。我一直都非常想加入贵公司,我觉得贵公司的文化和技术氛围我都非常喜欢,期待能与你共事!
|
||||||
|
|
||||||
## 减少抱怨
|
## 减少抱怨
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ public class KryoSerializer implements Serializer {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Github 地址:[https://github.com/EsotericSoftware/kryo](https://github.com/EsotericSoftware/kryo) 。
|
GitHub 地址:[https://github.com/EsotericSoftware/kryo](https://github.com/EsotericSoftware/kryo) 。
|
||||||
|
|
||||||
### Protobuf
|
### Protobuf
|
||||||
|
|
||||||
@ -192,7 +192,7 @@ message Person {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Github 地址:[https://github.com/protocolbuffers/protobuf](https://github.com/protocolbuffers/protobuf)。
|
GitHub 地址:[https://github.com/protocolbuffers/protobuf](https://github.com/protocolbuffers/protobuf)。
|
||||||
|
|
||||||
### ProtoStuff
|
### ProtoStuff
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ Github 地址:[https://github.com/protocolbuffers/protobuf](https://github.com
|
|||||||
|
|
||||||
protostuff 基于 Google protobuf,但是提供了更多的功能和更简易的用法。虽然更加易用,但是不代表 ProtoStuff 性能更差。
|
protostuff 基于 Google protobuf,但是提供了更多的功能和更简易的用法。虽然更加易用,但是不代表 ProtoStuff 性能更差。
|
||||||
|
|
||||||
Github 地址:[https://github.com/protostuff/protostuff](https://github.com/protostuff/protostuff)。
|
GitHub 地址:[https://github.com/protostuff/protostuff](https://github.com/protostuff/protostuff)。
|
||||||
|
|
||||||
### Hessian
|
### Hessian
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ JDK1.7 之前,字符串常量池存放在永久代。JDK1.7 字符串常量池
|
|||||||
|
|
||||||
相关问题:[JVM 常量池中存储的是对象还是引用呢? - RednaxelaFX - 知乎](https://www.zhihu.com/question/57109429/answer/151717241)
|
相关问题:[JVM 常量池中存储的是对象还是引用呢? - RednaxelaFX - 知乎](https://www.zhihu.com/question/57109429/answer/151717241)
|
||||||
|
|
||||||
最后再来分享一段周志明老师在[《深入理解 Java 虚拟机(第 3 版)》样例代码&勘误](https://github.com/fenixsoft/jvm_book) Github 仓库的 [issue#112](https://github.com/fenixsoft/jvm_book/issues/112) 中说过的话:
|
最后再来分享一段周志明老师在[《深入理解 Java 虚拟机(第 3 版)》样例代码&勘误](https://github.com/fenixsoft/jvm_book) GitHub 仓库的 [issue#112](https://github.com/fenixsoft/jvm_book/issues/112) 中说过的话:
|
||||||
|
|
||||||
> **运行时常量池、方法区、字符串常量池这些都是不随虚拟机实现而改变的逻辑概念,是公共且抽象的,Metaspace、Heap 是与具体某种虚拟机实现相关的物理概念,是私有且具体的。**
|
> **运行时常量池、方法区、字符串常量池这些都是不随虚拟机实现而改变的逻辑概念,是公共且抽象的,Metaspace、Heap 是与具体某种虚拟机实现相关的物理概念,是私有且具体的。**
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# 《Java8 指南》中文翻译
|
# 《Java8 指南》中文翻译
|
||||||
|
|
||||||
随着 Java 8 的普及度越来越高,很多人都提到面试中关于 Java 8 也是非常常问的知识点。应各位要求和需要,我打算对这部分知识做一个总结。本来准备自己总结的,后面看到 Github 上有一个相关的仓库,地址:
|
随着 Java 8 的普及度越来越高,很多人都提到面试中关于 Java 8 也是非常常问的知识点。应各位要求和需要,我打算对这部分知识做一个总结。本来准备自己总结的,后面看到 GitHub 上有一个相关的仓库,地址:
|
||||||
[https://github.com/winterbe/java8-tutorial](https://github.com/winterbe/java8-tutorial)。这个仓库是英文的,我对其进行了翻译并添加和修改了部分内容,下面是正文。
|
[https://github.com/winterbe/java8-tutorial](https://github.com/winterbe/java8-tutorial)。这个仓库是英文的,我对其进行了翻译并添加和修改了部分内容,下面是正文。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
@ -14,7 +14,7 @@ icon: guide
|
|||||||
|
|
||||||
一定一定一定要注意 **排版规范** :
|
一定一定一定要注意 **排版规范** :
|
||||||
|
|
||||||
- [中文文案排版指北 - Github](https://github.com/sparanoid/chinese-copywriting-guidelines)
|
- [中文文案排版指北 - GitHub](https://github.com/sparanoid/chinese-copywriting-guidelines)
|
||||||
- [写给大家看的中文排版指南 - 知乎](https://zhuanlan.zhihu.com/p/20506092)
|
- [写给大家看的中文排版指南 - 知乎](https://zhuanlan.zhihu.com/p/20506092)
|
||||||
- [中文文案排版细则 - Dawner](https://dawner.top/posts/chinese-copywriting-rules/)
|
- [中文文案排版细则 - Dawner](https://dawner.top/posts/chinese-copywriting-rules/)
|
||||||
- [中文技术文档写作风格指南](https://github.com/yikeke/zh-style-guide/)
|
- [中文技术文档写作风格指南](https://github.com/yikeke/zh-style-guide/)
|
||||||
|
@ -18,7 +18,7 @@ icon: help
|
|||||||
|
|
||||||
## 如何看待 JavaGuide 的 star 数量很多?
|
## 如何看待 JavaGuide 的 star 数量很多?
|
||||||
|
|
||||||
[JavaGuide](https://github.com/Snailclimb) 目前已经是 Java 领域 star 数量最多的几个项目之一,登顶过很多次 Github Trending。
|
[JavaGuide](https://github.com/Snailclimb) 目前已经是 Java 领域 star 数量最多的几个项目之一,登顶过很多次 GitHub Trending。
|
||||||
|
|
||||||
不过,这个真心没啥好嘚瑟的。因为,教程类的含金量其实是比较低的,star 数量比较多主要也是因为受众面比较广,大家觉得不错,点个 star 就相当于收藏了。很多特别优秀的框架,star 数量可能只有几 K。所以,单纯看 star 数量没啥意思,就当看个笑话吧!
|
不过,这个真心没啥好嘚瑟的。因为,教程类的含金量其实是比较低的,star 数量比较多主要也是因为受众面比较广,大家觉得不错,点个 star 就相当于收藏了。很多特别优秀的框架,star 数量可能只有几 K。所以,单纯看 star 数量没啥意思,就当看个笑话吧!
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ JavaGuide 整体目录规划已经非常清晰了,你可以从头开始学习
|
|||||||
## 项目说明
|
## 项目说明
|
||||||
|
|
||||||
- [在线阅读网站](https://javaguide.cn)基于 Vuepress 搭建,使用的是主题是 [vuepress-theme-hope](https://github.com/vuepress-theme-hope/vuepress-theme-hope)(很 Nice 的一个主题)。
|
- [在线阅读网站](https://javaguide.cn)基于 Vuepress 搭建,使用的是主题是 [vuepress-theme-hope](https://github.com/vuepress-theme-hope/vuepress-theme-hope)(很 Nice 的一个主题)。
|
||||||
- 项目的 Markdown 格式参考:[Github Markdown 格式](https://guides.github.com/features/mastering-markdown/),表情素材来自:[EMOJI CHEAT SHEET](https://www.webpagefx.com/tools/emoji-cheat-sheet/)。
|
- 项目的 Markdown 格式参考:[GitHub Markdown 格式](https://guides.github.com/features/mastering-markdown/),表情素材来自:[EMOJI CHEAT SHEET](https://www.webpagefx.com/tools/emoji-cheat-sheet/)。
|
||||||
- Logo 下的小图标是使用[Shields.IO](https://shields.io/) 生成的。
|
- Logo 下的小图标是使用[Shields.IO](https://shields.io/) 生成的。
|
||||||
|
|
||||||
## 贡献者
|
## 贡献者
|
||||||
|
@ -5,11 +5,11 @@ category: 开源项目
|
|||||||
|
|
||||||
<!-- @include: @small-advertisement.snippet.md -->
|
<!-- @include: @small-advertisement.snippet.md -->
|
||||||
|
|
||||||
精选 Github 和 Gitee 上优质的 Java 开源项目。
|
精选 GitHub 和 Gitee 上优质的 Java 开源项目。
|
||||||
|
|
||||||
欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-java/issues)推荐自己认可的 Java 开源项目,让我们共同维护一个优质的 Java 开源项目精选集!
|
欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-java/issues)推荐自己认可的 Java 开源项目,让我们共同维护一个优质的 Java 开源项目精选集!
|
||||||
|
|
||||||
- Github 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java)
|
- GitHub 地址:[https://github.com/CodingDocs/awesome-java](https://github.com/CodingDocs/awesome-java)
|
||||||
- Gitee 地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java)
|
- Gitee 地址:[https://gitee.com/SnailClimb/awesome-java](https://gitee.com/SnailClimb/awesome-java)
|
||||||
|
|
||||||
如果内容对你有帮助的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,感谢!
|
如果内容对你有帮助的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份名单,感谢!
|
||||||
|
@ -46,7 +46,7 @@ icon: "xitongsheji"
|
|||||||
|
|
||||||
- [WxJava](https://github.com/Wechat-Group/WxJava) : WxJava (微信开发 Java SDK),支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发。
|
- [WxJava](https://github.com/Wechat-Group/WxJava) : WxJava (微信开发 Java SDK),支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发。
|
||||||
- [Sa-Token](https://github.com/dromara/sa-token) :轻量级 Java 权限认证框架。支持认证授权、单点登录、踢人下线、自动续签等功能。
|
- [Sa-Token](https://github.com/dromara/sa-token) :轻量级 Java 权限认证框架。支持认证授权、单点登录、踢人下线、自动续签等功能。
|
||||||
- [JustAuth](https://github.com/justauth/JustAuth) :小而全而美的第三方登录开源组件。目前已经集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow 等国内外数十家第三方平台。
|
- [JustAuth](https://github.com/justauth/JustAuth) :小而全而美的第三方登录开源组件。目前已经集成了诸如:GitHub、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow 等国内外数十家第三方平台。
|
||||||
|
|
||||||
## 网络通讯
|
## 网络通讯
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ icon: "book"
|
|||||||
- **[spring-boot-demo](https://github.com/xkcoding/spring-boot-demo "spring-boot-demo")** :spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 63 个集成 demo,已经完成 52 个。
|
- **[spring-boot-demo](https://github.com/xkcoding/spring-boot-demo "spring-boot-demo")** :spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 63 个集成 demo,已经完成 52 个。
|
||||||
- **[SpringBoot-Labs](https://github.com/YunaiV/SpringBoot-Labs)** :Spring Boot 系列教程。
|
- **[SpringBoot-Labs](https://github.com/YunaiV/SpringBoot-Labs)** :Spring Boot 系列教程。
|
||||||
|
|
||||||
相关文章:[Github 点赞接近 100k 的 SpringBoot 学习教程+实战推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488298&idx=3&sn=0a8fd88ec5a050de131c2a3305482ac4&chksm=cea25ce1f9d5d5f7f53a0237d27489326bce4546353b038085c03b086d91ef396bf824d3a155&token=496868067&lang=zh_CN#rd)
|
相关文章:[GitHub 点赞接近 100k 的 SpringBoot 学习教程+实战推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488298&idx=3&sn=0a8fd88ec5a050de131c2a3305482ac4&chksm=cea25ce1f9d5d5f7f53a0237d27489326bce4546353b038085c03b086d91ef396bf824d3a155&token=496868067&lang=zh_CN#rd)
|
||||||
|
|
||||||
### SpringCloud
|
### SpringCloud
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ icon: "book"
|
|||||||
- **[springcloud-learning](https://github.com/macrozheng/springcloud-learning)** : 一套涵盖大部分核心组件使用的 Spring Cloud 教程。
|
- **[springcloud-learning](https://github.com/macrozheng/springcloud-learning)** : 一套涵盖大部分核心组件使用的 Spring Cloud 教程。
|
||||||
- **[SpringCloud](https://github.com/zhoutaoo/SpringCloud "SpringCloud")** :基于 SpringCloud2.1 的微服务开发脚手架,整合了 spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway 等。
|
- **[SpringCloud](https://github.com/zhoutaoo/SpringCloud "SpringCloud")** :基于 SpringCloud2.1 的微服务开发脚手架,整合了 spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway 等。
|
||||||
|
|
||||||
相关文章:[Github 点赞接近 70k 的 Spring Cloud 学习教程+实战项目推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488377&idx=1&sn=0fb33ef330159db5a9c8bc0f029cd739&chksm=cea25cb2f9d5d5a4c7bacc9dcfc90ed86e89f4262e32b40c7aa47af84c747cb6c0429f753e1d&token=496868067&lang=zh_CN#rd)
|
相关文章:[GitHub 点赞接近 70k 的 Spring Cloud 学习教程+实战项目推荐!牛批!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247488377&idx=1&sn=0fb33ef330159db5a9c8bc0f029cd739&chksm=cea25cb2f9d5d5a4c7bacc9dcfc90ed86e89f4262e32b40c7aa47af84c747cb6c0429f753e1d&token=496868067&lang=zh_CN#rd)
|
||||||
|
|
||||||
### Nginx
|
### Nginx
|
||||||
|
|
||||||
|
@ -955,6 +955,6 @@ public abstract class TestBase {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
_暂时总结到这里吧!虽然花了挺长时间才写完,不过可能还是会一些常用的注解的被漏掉,所以,我将文章也同步到了 Github 上去,Github 地址:欢迎完善!_
|
_暂时总结到这里吧!虽然花了挺长时间才写完,不过可能还是会一些常用的注解的被漏掉,所以,我将文章也同步到了 Github 上去,Github 地址: 欢迎完善!_
|
||||||
|
|
||||||
本文已经收录进我的 75K Star 的 Java 开源项目 JavaGuide:[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)。
|
本文已经收录进我的 75K Star 的 Java 开源项目 JavaGuide:[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)。
|
||||||
|
@ -30,7 +30,7 @@ Spring 翻译过来就是春天的意思,可见其目标和使命就是为 Jav
|
|||||||
Spring 提供的核心功能主要是 IoC 和 AOP。学习 Spring ,一定要把 IoC 和 AOP 的核心思想搞懂!
|
Spring 提供的核心功能主要是 IoC 和 AOP。学习 Spring ,一定要把 IoC 和 AOP 的核心思想搞懂!
|
||||||
|
|
||||||
- Spring 官网:<https://spring.io/>
|
- Spring 官网:<https://spring.io/>
|
||||||
- Github 地址:https://github.com/spring-projects/spring-framework
|
- GitHub 地址: https://github.com/spring-projects/spring-framework
|
||||||
|
|
||||||
### Spring 包含的模块有哪些?
|
### Spring 包含的模块有哪些?
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ public class OrdersService {
|
|||||||
>
|
>
|
||||||
> 翻译过来的意思是:原子性,隔离性和持久性是数据库的属性,而一致性(在 ACID 意义上)是应用程序的属性。应用可能依赖数据库的原子性和隔离属性来实现一致性,但这并不仅取决于数据库。因此,字母 C 不属于 ACID 。
|
> 翻译过来的意思是:原子性,隔离性和持久性是数据库的属性,而一致性(在 ACID 意义上)是应用程序的属性。应用可能依赖数据库的原子性和隔离属性来实现一致性,但这并不仅取决于数据库。因此,字母 C 不属于 ACID 。
|
||||||
|
|
||||||
《Designing Data-Intensive Application(数据密集型应用系统设计)》这本书强推一波,值得读很多遍!豆瓣有接近 90% 的人看了这本书之后给了五星好评。另外,中文翻译版本已经在 Github 开源,地址:[https://github.com/Vonng/ddiaopen in new window](https://github.com/Vonng/ddia) 。
|
《Designing Data-Intensive Application(数据密集型应用系统设计)》这本书强推一波,值得读很多遍!豆瓣有接近 90% 的人看了这本书之后给了五星好评。另外,中文翻译版本已经在 GitHub 开源,地址:[https://github.com/Vonng/ddiaopen in new window](https://github.com/Vonng/ddia) 。
|
||||||
|
|
||||||
## 详谈 Spring 对事务的支持
|
## 详谈 Spring 对事务的支持
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ public class TestJob implements SimpleJob {
|
|||||||
|
|
||||||
**相关地址:**
|
**相关地址:**
|
||||||
|
|
||||||
- Github 地址:<https://github.com/apache/shardingsphere-elasticjob。>
|
- GitHub 地址:<https://github.com/apache/shardingsphere-elasticjob。>
|
||||||
- 官方网站:<https://shardingsphere.apache.org/elasticjob/index_zh.html> 。
|
- 官方网站:<https://shardingsphere.apache.org/elasticjob/index_zh.html> 。
|
||||||
|
|
||||||
**优缺点总结:**
|
**优缺点总结:**
|
||||||
@ -288,7 +288,7 @@ public ReturnT<String> myAnnotationJobHandler(String param) throws Exception {
|
|||||||
|
|
||||||
**相关地址:**
|
**相关地址:**
|
||||||
|
|
||||||
- Github 地址:<https://github.com/xuxueli/xxl-job/。>
|
- GitHub 地址:<https://github.com/xuxueli/xxl-job/。>
|
||||||
- 官方介绍:<https://www.xuxueli.com/xxl-job/> 。
|
- 官方介绍:<https://www.xuxueli.com/xxl-job/> 。
|
||||||
|
|
||||||
**优缺点总结:**
|
**优缺点总结:**
|
||||||
|
@ -133,7 +133,7 @@ Git 有三种状态,你的文件可能处于其中之一:
|
|||||||
|
|
||||||
### 推送改动到远程仓库
|
### 推送改动到远程仓库
|
||||||
|
|
||||||
- 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:`git remote add origin <server>` ,比如我们要让本地的一个仓库和 Github 上创建的一个仓库关联可以这样`git remote add origin https://github.com/Snailclimb/test.git`
|
- 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:`git remote add origin <server>` ,比如我们要让本地的一个仓库和 GitHub 上创建的一个仓库关联可以这样`git remote add origin https://github.com/Snailclimb/test.git`
|
||||||
- 将这些改动提交到远端仓库:`git push origin master` (可以把 _master_ 换成你想要推送的任何分支)
|
- 将这些改动提交到远端仓库:`git push origin master` (可以把 _master_ 换成你想要推送的任何分支)
|
||||||
|
|
||||||
如此你就能够将你的改动推送到所添加的服务器上去了。
|
如此你就能够将你的改动推送到所添加的服务器上去了。
|
||||||
|
@ -15,7 +15,7 @@ category: 知识星球
|
|||||||
|
|
||||||
通过这个简易的轮子,你可以学到 RPC 的底层原理和原理以及各种 Java 编码实践的运用。你甚至可以把它当做你的毕设/项目经验的选择,这是非常不错!对比其他求职者的项目经验都是各种系统,造轮子肯定是更加能赢得面试官的青睐。
|
通过这个简易的轮子,你可以学到 RPC 的底层原理和原理以及各种 Java 编码实践的运用。你甚至可以把它当做你的毕设/项目经验的选择,这是非常不错!对比其他求职者的项目经验都是各种系统,造轮子肯定是更加能赢得面试官的青睐。
|
||||||
|
|
||||||
- Github 地址:[https://github.com/Snailclimb/guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework) 。
|
- GitHub 地址:[https://github.com/Snailclimb/guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework) 。
|
||||||
- Gitee 地址:[https://gitee.com/SnailClimb/guide-rpc-framework](https://gitee.com/SnailClimb/guide-rpc-framework) 。
|
- Gitee 地址:[https://gitee.com/SnailClimb/guide-rpc-framework](https://gitee.com/SnailClimb/guide-rpc-framework) 。
|
||||||
|
|
||||||
## 星球其他资源
|
## 星球其他资源
|
||||||
|
2
sw.js
2
sw.js
@ -26,7 +26,7 @@ const getFixedUrl = (req) => {
|
|||||||
url.protocol = self.location.protocol
|
url.protocol = self.location.protocol
|
||||||
|
|
||||||
// 2. add query for caching-busting.
|
// 2. add query for caching-busting.
|
||||||
// Github Pages served with Cache-Control: max-age=600
|
// GitHub Pages served with Cache-Control: max-age=600
|
||||||
// max-age on mutable content is error-prone, with SW life of bugs can even extend.
|
// max-age on mutable content is error-prone, with SW life of bugs can even extend.
|
||||||
// Until cache mode of Fetch API landed, we have to workaround cache-busting with query string.
|
// Until cache mode of Fetch API landed, we have to workaround cache-busting with query string.
|
||||||
// Cache-Control-Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=453190
|
// Cache-Control-Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=453190
|
||||||
|
Loading…
x
Reference in New Issue
Block a user