Skip to content

Commit

Permalink
docs: 文档整理
Browse files Browse the repository at this point in the history
  • Loading branch information
dunwu committed May 13, 2021
1 parent a44378a commit 42937ae
Show file tree
Hide file tree
Showing 23 changed files with 161 additions and 153 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<p align="center">
<a href="https://dunwu.github.io/javatech/" target="_blank" rel="noopener noreferrer">
<img src="http://dunwu.test.upcdn.net/common/logo/dunwu-logo.png" alt="logo" width="150px"/>
<img src="https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png" alt="logo" width="150px"/>
</a>
</p>

Expand Down Expand Up @@ -52,7 +52,7 @@
>
> 如果想深入学习缓存,建议先了解一下 [缓存基本原理](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md),有助于理解缓存的特性、原理,使用缓存常见的问题及解决方案。
![img](http://dunwu.test.upcdn.net/snap/20200710163555.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200710163555.png)

- [缓存面试题](docs/cache/cache-interview.md) 💯
- [缓存基本原理](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md)
Expand Down
21 changes: 14 additions & 7 deletions docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ module.exports = {
},
},
themeConfig: {
logo: 'images/dunwu-logo-100.png',
logo: 'https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png',
repo: 'dunwu/javatech',
repoLabel: 'Github',
docsDir: 'docs',
Expand All @@ -42,12 +42,8 @@ module.exports = {
link: '/mq/',
},
{
text: '搜索引擎',
link: '/search/',
},
{
text: '存储',
link: '/storage/',
text: 'LIB库',
link: '/lib/',
},
{
text: '微服务',
Expand Down Expand Up @@ -129,6 +125,17 @@ module.exports = {
updatePopup: true,
},
],
[
'@vuepress/last-updated',
{
transformer: (timestamp, lang) => {
// 不要忘了安装 moment
const moment = require('moment')
moment.locale(lang)
return moment(timestamp).fromNow()
},
},
],
['@vuepress/medium-zoom', true],
[
'container',
Expand Down
6 changes: 2 additions & 4 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
---
home: true
heroImage: http://dunwu.test.upcdn.net/common/logo/dunwu-logo.png
heroImage: https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png
heroText: JAVATECH
tagline: ☕ javatech 汇总了 Java 开发中常见的主流技术的应用、特性、原理。
actionLink: /
footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
---

# JAVATECH

![license](https://badgen.net/github/license/dunwu/javatech)
![build](https://travis-ci.com/dunwu/javatech.svg?branch=master)

Expand Down Expand Up @@ -53,7 +51,7 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
>
> 如果想深入学习缓存,建议先了解一下 [缓存基本原理](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md),有助于理解缓存的特性、原理,使用缓存常见的问题及解决方案。
![img](http://dunwu.test.upcdn.net/snap/20200710163555.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200710163555.png)

- [缓存面试题](cache/cache-interview.md) 💯
- [缓存基本原理](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/cache/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
>
> 如果想深入学习缓存,建议先了解一下 [缓存基本原理](https://github.com/dunwu/blog/blob/master/source/_posts/theory/cache.md),有助于理解缓存的特性、原理,使用缓存常见的问题及解决方案。
![img](http://dunwu.test.upcdn.net/snap/20200710163555.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200710163555.png)

## 📖 内容

Expand Down
2 changes: 1 addition & 1 deletion docs/cache/cache-framework.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

因此,在很多缓存框架、缓存库中,其 API 都参考了 JSR 107 规范。

![img](http://dunwu.test.upcdn.net/snap/20200709174139.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200709174139.png)

Java Caching 定义了 5 个核心接口

Expand Down
2 changes: 1 addition & 1 deletion docs/cache/ehcache.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。
![img](http://dunwu.test.upcdn.net/cs/java/javaweb/technology/cache/ehcache-architecture.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javaweb/technology/cache/ehcache-architecture.png)

<!-- TOC depthFrom:2 depthTo:3 -->

Expand Down
2 changes: 1 addition & 1 deletion docs/framework/Mybatis应用指南.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> MyBatis 的前身就是 iBatis ,是一个作用在数据持久层的对象关系映射(Object Relational Mapping,简称 ORM)框架。
![img](http://dunwu.test.upcdn.net/snap/20200716162305.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716162305.png)

<!-- TOC depthFrom:2 depthTo:3 -->

Expand Down
4 changes: 2 additions & 2 deletions docs/framework/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

- [Spring](https://dunwu.github.io/spring-tutorial/) 📚
- [Spring Boot](https://dunwu.github.io/spring-boot-tutorial/) 📚
- [Mybatis 应用指南](framework/Mybatis应用指南.md)
- [Mybatis 原理](framework/Mybatis原理.md)
- [Mybatis 应用指南](Mybatis应用指南.md)
- [Mybatis 原理](Mybatis原理.md)
20 changes: 10 additions & 10 deletions docs/lib/javalib-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ logback 当前分成三个模块:`logback-core`、`logback-classic` 和 `logba

Log4j2 架构:

![img](http://dunwu.test.upcdn.net/cs/java/javalib/log/log4j2-architecture.jpg!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/log/log4j2-architecture.jpg)

### Log4j vs Logback vs Log4j2

Expand Down Expand Up @@ -125,7 +125,7 @@ common-logging 的功能是提供日志功能的 API 接口,本身并不提供

[官网地址](http://www.slf4j.org/)

![img](http://dunwu.test.upcdn.net/cs/java/javalib/log/slf4j-to-other-log.png!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/log/slf4j-to-other-log.png)

### common-logging vs slf4j

Expand Down Expand Up @@ -165,15 +165,15 @@ logger.debug("id: {}, name: {} ", id, name);

还有一种情况:你的老项目使用了 common-logging,或是直接使用日志实现组件。如果修改老的代码,工作量太大,需要兼容处理。在下文,都将看到各种应对方法。

***:据我所知,当前仍没有方法可以将 slf4j 桥接到 common-logging。如果我孤陋寡闻了,请不吝赐教。***
**_:据我所知,当前仍没有方法可以将 slf4j 桥接到 common-logging。如果我孤陋寡闻了,请不吝赐教。_**

#### slf4j 直接绑定日志组件

**slf4j + logback**

添加依赖到 pom.xml 中即可。

*logback-classic-1.0.13.jar* 会自动将 *slf4j-api-1.7.21.jar**logback-core-1.0.13.jar* 也添加到你的项目中。
_logback-classic-1.0.13.jar_ 会自动将 _slf4j-api-1.7.21.jar__logback-core-1.0.13.jar_ 也添加到你的项目中。

```xml
<dependency>
Expand All @@ -187,7 +187,7 @@ logger.debug("id: {}, name: {} ", id, name);

添加依赖到 pom.xml 中即可。

*slf4j-log4j12-1.7.21.jar* 会自动将 *slf4j-api-1.7.21.jar**log4j-1.2.17.jar* 也添加到你的项目中。
_slf4j-log4j12-1.7.21.jar_ 会自动将 _slf4j-api-1.7.21.jar__log4j-1.2.17.jar_ 也添加到你的项目中。

```xml
<dependency>
Expand All @@ -201,7 +201,7 @@ logger.debug("id: {}, name: {} ", id, name);

添加依赖到 pom.xml 中即可。

*slf4j-jdk14-1.7.21.jar* 会自动将 *slf4j-api-1.7.21.jar* 也添加到你的项目中。
_slf4j-jdk14-1.7.21.jar_ 会自动将 _slf4j-api-1.7.21.jar_ 也添加到你的项目中。

```xml
<dependency>
Expand All @@ -219,7 +219,7 @@ logger.debug("id: {}, name: {} ", id, name);

假如你正在开发应用程序所调用的组件当中已经使用了 common-logging,这时你需要 jcl-over-slf4j.jar 把日志信息输出重定向到 slf4j-api,slf4j-api 再去调用 slf4j 实际依赖的日志组件。这个过程称为桥接。下图是官方的 slf4j 桥接策略图:

![img](http://dunwu.test.upcdn.net/cs/java/javalib/log/slf4j-bind-strategy.png!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/log/slf4j-bind-strategy.png)

从图中应该可以看出,无论你的老项目中使用的是 common-logging 或是直接使用 log4j、java.util.logging,都可以使用对应的桥接 jar 包来解决兼容问题。

Expand Down Expand Up @@ -257,7 +257,7 @@ logger.debug("id: {}, name: {} ", id, name);

做 java web 开发,基本离不开 spring 框架。很遗憾,spring 使用的日志解决方案是 common-logging + log4j。

所以,你需要一个桥接 jar 包:*logback-ext-spring*
所以,你需要一个桥接 jar 包:_logback-ext-spring_

```xml
<dependency>
Expand Down Expand Up @@ -435,7 +435,7 @@ log4j2 基本配置形式如下:
- 要点
- 它有 `<appender>``<logger>``<root>` 三个子元素。

![img](http://dunwu.test.upcdn.net/cs/java/javalib/log/logback-configuration.png!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/log/logback-configuration.png)

### `<appender>`

Expand Down Expand Up @@ -473,7 +473,7 @@ log4j2 基本配置形式如下:
- 属性
- class:设置具体的实例化类。

![img](http://dunwu.test.upcdn.net/cs/java/javalib/log/logback-appender.png!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/log/logback-appender.png)

### `<logger>`

Expand Down
9 changes: 4 additions & 5 deletions docs/lib/template/freemark.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
## Freemark 简介

Freemark 模板编写为 FreeMarker Template Language (FTL)。它是简单的,专用的语言, *不是* 像 PHP 那样成熟的编程语言。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
Freemark 模板编写为 FreeMarker Template Language (FTL)。它是简单的,专用的语言, _不是_ 像 PHP 那样成熟的编程语言。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

![img](http://freemarker.foofun.cn/figures/overview.png)

这种方式通常被称为 [MVC (模型 视图 控制器) 模式](http://freemarker.foofun.cn/gloss.html#gloss.MVC),对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML 设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。

Freemark 模板一句话概括就是:***`模板 + 数据模型 = 输出`***
Freemark 模板一句话概括就是:**_`模板 + 数据模型 = 输出`_**

## 总体结构

Expand All @@ -19,7 +19,7 @@ Freemark 模板一句话概括就是:***`模板 + 数据模型 = 输出`***
- **FTL 标签**:FTL 标签和 HTML 标签很相似,但是它们却是给 FreeMarker 的指示, 而且不会打印在输出内容中。
- **注释**:注释和 HTML 的注释也很相似,但它们是由 `<#--``-->`来分隔的。注释会被 FreeMarker 直接忽略, 更不会在输出内容中显示。

![img](http://dunwu.test.upcdn.net/snap/ftl-template.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/ftl-template.png)

> 🔔 注意:
>
Expand Down Expand Up @@ -74,7 +74,7 @@ FTL 指令有两种类型: [预定义指令](http://freemarker.foofun.cn/gloss

### 变量

注意:变量 *仅仅*[文本区](http://freemarker.foofun.cn/dgui_template_overallstructure.html) (比如 `<h1>Hello ${name}!</h1>`) 和 [字符串](http://freemarker.foofun.cn/dgui_template_exp.html#dgui_template_exp_direct_string) 中起作用。
注意:变量 _仅仅_[文本区](http://freemarker.foofun.cn/dgui_template_overallstructure.html) (比如 `<h1>Hello ${name}!</h1>`) 和 [字符串](http://freemarker.foofun.cn/dgui_template_exp.html#dgui_template_exp_direct_string) 中起作用。

正确示例:

Expand Down Expand Up @@ -158,4 +158,3 @@ FTL 支持的所有转义字符:
- [Freemark Github](https://github.com/apache/freemarker)
- [Freemark 中文教程](http://freemarker.foofun.cn/)
- [在线 Freemark 工具](https://try.freemarker.apache.org/)

10 changes: 5 additions & 5 deletions docs/limiting/hystrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@ Hystrix 官方宣布**不再发布新版本**。

当一切正常时,整体系统如下所示:

![img](http://dunwu.test.upcdn.net/snap/20200717141615.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200717141615.png)

在高并发场景,这些依赖的稳定性与否对系统的影响非常大,但是依赖有很多不可控问题:如网络连接、资源繁忙、服务宕机等。例如:下图中有一个 QPS 为 50 的依赖 I 出现不可用,但是其他依赖服务是可用的。

![img](http://dunwu.test.upcdn.net/snap/20200717141749.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200717141749.png)

但是,在高并发场景下,当依赖 I 阻塞时,大多数服务器的线程池就出现阻塞(BLOCK)。当这种级联故障愈演愈烈,就可能造成整个线上服务不可用的雪崩效应,如下图:

![img](http://dunwu.test.upcdn.net/snap/20200717141859.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200717141859.png)

Hystrix 就是为了解决这类问题而应运而生。

Expand All @@ -88,15 +88,15 @@ Hystrix 具有以下功能:

如果使用 Hystrix 对每个基础依赖服务进行过载保护,则整个系统架构将会类似下图所示,每个依赖项彼此隔离,受到延迟时发生饱和的资源的被限制访问,并包含 fallback 逻辑(用于降级处理),该逻辑决定了在依赖项中发生任何类型的故障时做出对应的处理。

![img](http://dunwu.test.upcdn.net/snap/20200717142842.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200717142842.png)

## Hystrix 核心概念

## 二、Hystrix 工作流程

如下图所示,Hystrix 的工作流程大致可以分为 9 个步骤。

![img](http://dunwu.test.upcdn.net/snap/20200717143247.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200717143247.png)

### (一)包装命令

Expand Down
6 changes: 3 additions & 3 deletions docs/mq/activemq.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ JMS 有两种消息模型:

#### P2P 的特点

![img](http://dunwu.test.upcdn.net/cs/java/javalib/jms/jms-pointToPoint.gif!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/jms/jms-pointToPoint.gif)

在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列 `javax.jms.Queue` 相关联。

Expand All @@ -27,7 +27,7 @@ JMS 有两种消息模型:

#### Pub/Sub 的特点

![img](http://dunwu.test.upcdn.net/cs/java/javalib/jms/jms-publishSubscribe.gif!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/jms/jms-publishSubscribe.gif)

发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题 `javax.jms.Topic` 关联。

Expand All @@ -41,7 +41,7 @@ JMS 有两种消息模型:

### JMS 编程模型

![img](http://dunwu.test.upcdn.net/cs/java/javalib/jms/jms-publishSubscribe.gif!zp)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/jms/jms-publishSubscribe.gif)

#### ConnectionFactory

Expand Down
8 changes: 4 additions & 4 deletions docs/mq/rocketmq.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ RocketMQ 是一款开源的分布式消息队列,基于高可用分布式集

RocketMQ 被阿里巴巴捐赠给 Apache,成为 Apache 的孵化项目。

![img](http://dunwu.test.upcdn.net/cs/java/javaweb/distributed/mq/rocketmq/rmq-model.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javaweb/distributed/mq/rocketmq/rmq-model.png)

RocketMQ 有以下核心概念:

Expand Down Expand Up @@ -320,7 +320,7 @@ nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
## 架构
![img](http://dunwu.test.upcdn.net/cs/java/javaweb/distributed/mq/rocketmq/rmq-basic-arc.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javaweb/distributed/mq/rocketmq/rmq-basic-arc.png)
RocketMQ 由四部分组成:NameServer、Broker、Producer、Consumer。其中任意一个组成都可以水平扩展为集群模式,以避免单点故障问题。
Expand Down Expand Up @@ -369,7 +369,7 @@ Broker 有几个重要的子模块:
- **HA Service**:高可用服务,提供 Master Broker 和 Slave Broker 之间的数据同步功能。
- **Index Service**:根据特定的 Message key 对投递到 Broker 的消息进行索引服务,以提供消息的快速查询。
![img](http://dunwu.test.upcdn.net/cs/java/javaweb/distributed/mq/rocketmq/rmq-basic-component.png)
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javaweb/distributed/mq/rocketmq/rmq-basic-component.png)
## 原理
Expand Down Expand Up @@ -508,4 +508,4 @@ RocketMQ 分布式事务步骤:
## 参考资料
- [RocketMQ 官方文档](http://rocketmq.apache.org/docs/quick-start/)
- [分布式开放消息系统(RocketMQ)的原理与实践](https://www.jianshu.com/p/453c6e7ff81c)
- [分布式开放消息系统(RocketMQ)的原理与实践](https://www.jianshu.com/p/453c6e7ff81c)
16 changes: 10 additions & 6 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,19 @@
"view-info": "vuepress view-info ./ --temp .temp"
},
"devDependencies": {
"@vuepress/plugin-back-to-top": "^1.5.3",
"@vuepress/plugin-medium-zoom": "^1.5.3",
"@vuepress/plugin-pwa": "^1.5.3",
"@vuepress/theme-vue": "^1.5.3",
"markdownlint-cli": "^0.23.1",
"@vuepress/plugin-active-header-links": "^1.8.2",
"@vuepress/plugin-back-to-top": "^1.8.2",
"@vuepress/plugin-medium-zoom": "^1.8.2",
"@vuepress/plugin-pwa": "^1.8.2",
"@vuepress/theme-vue": "^1.8.2",
"markdownlint-cli": "^0.25.0",
"markdownlint-rule-emphasis-style": "^1.0.1",
"rimraf": "^3.0.1",
"vue-toasted": "^1.1.25",
"vuepress": "^1.5.3",
"vuepress": "^1.8.2",
"vuepress-plugin-flowchart": "^1.4.2"
},
"dependencies": {
"moment": "^2.29.1"
}
}
Loading

0 comments on commit 42937ae

Please sign in to comment.