Merge branch 'master' of github.com:heibaiying/Full-Stack-Notes

This commit is contained in:
luoxiang 2019-09-01 19:23:55 +08:00
commit 4acd83ce21
4 changed files with 165 additions and 96 deletions

123
README.md
View File

@ -1,42 +1,39 @@
# :memo:全栈工程师笔记 # :coffee: JAVA
# :coffee: Java - Java 基础
- GOF 23 种设计模式 ( Java 语言实现 )
- 深入理解 Java 虚拟机
- 网络编程原理
- Netty 编程模式
1. Java 基础
2. GOF 23 种设计模式 (Java 语言实现)
3. 深入理解 Java 虚拟机
4. 无锁并行计算框架 Disruptor
6. 网络编程原理
6. Netty 编程模式
## 💻 前端
1. JavaScript 三座大山 —— 原型与原型链,作用域与闭包,异步与单线程 ## 💻 前端基础
2. ECMAScript 6.0 核心知识
- JavaScript 核心概念 —— 原型与原型链,作用域与闭包,异步与单线程
- ECMAScript 6.0 基础
## 💾 数据库 ## 💾 数据库
### 1. Oracle ### MySQL
+ [MySQL 核心概念](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_基础.md)
+ [MySQL 备份详解](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_备份.md)
### 2. MySQL
+ [MySQL 基础](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_基础.md)
+ [MySQL 常用备份方式](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_备份.md)
+ [MySQL 二进制日志复制、GTID 复制与半同步复制](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_复制.md) + [MySQL 二进制日志复制、GTID 复制与半同步复制](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_复制.md)
+ [MySQL 高可用架构之 PXC 集群](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_PXC集群.md) + [MySQL 高可用架构之 PXC 集群](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_PXC集群.md)
+ [MyCat 分库分表](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_分库分表.md) + [MyCat 分库分表](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_分库分表.md)
+ [MySQL 查询性能分析之 Explain](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_EXPLAIN.md) + [MySQL 查询性能分析之 Explain](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MySQL_EXPLAIN.md)
### 3. Redis ### Redis
+ [Redis 基本数据类型和常用命令](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_数据类型和常用命令.md) + [Redis 基本数据类型和常用命令](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_数据类型和常用命令.md)
+ [Redis AOF 和 RDB 持久化策略原理](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_持久化.md) + [Redis AOF 和 RDB 持久化策略原理](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_持久化.md)
+ [Redis 哨兵模式](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_哨兵模式.md) + [Redis 哨兵模式](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_哨兵模式.md)
+ [Reids 集群模式](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_集群模式.md) + [Reids 集群模式](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Redis_集群模式.md)
### 4.MongoDB ### MongoDB
+ [MongoDB 基础](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_基础.md) + [MongoDB 基础](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_基础.md)
+ [MongoDB 索引](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_索引.md) + [MongoDB 索引](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_索引.md)
@ -44,58 +41,48 @@
+ [MongoDB 复制](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_复制.md) + [MongoDB 复制](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_复制.md)
+ [MongoDB 分片](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_分片.md) + [MongoDB 分片](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/MongoDB_分片.md)
## 📟 操作系统 ## 📟 操作系统
+ [Linux 常用 Shell 命令](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Linux_常用Shell命令.md) + [Linux 常用 Shell 命令](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Linux_常用Shell命令.md)
- [Docker 基础](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Docker_基础.md)
- Kubernetes 简介及集群搭建
## 🌳 Spring
### 1.spring 基础 ## 🌳 Spring 系列
### Spring
+ AOP + AOP
+ IOC + IOC
+ Spring事务机制、事务的传播与监控 + Spring事务机制、事务的传播与监控
+ ......
### 2.spring Boot ### Spring Cloud
+ spring 自动装配原理
+ 理解 SpringApplication
+ Web MVC REST
+ WebFlux 核心
+ ......
## 🚀 分布式框架
### 1. Dubbo
+ Dubbo 管理中心及监控平台安装部署
+ Dubbo 负载均衡和服务降级
### 2. Spring Cloud
- Eureka 服务的注册和发现 - Eureka 服务的注册和发现
- Eureka 高可用集群搭建 - Eureka 高可用集群搭建
- Ribbon 客户端负载均衡 RestTemplate 服务远程调用 - Ribbon 客户端负载均衡RestTemplate 服务远程调用
- OpenFeign 声明式服务调用服务容错处理 - OpenFeign 声明式服务调用,服务容错处理
- Hystix 服务容错保护、Hystrix Dashboard 断路器监控、Turbine 断路器聚合监控 - Hystix 服务容错保护Hystrix Dashboard 断路器监控Turbine 断路器聚合监控
- Zuul 网关服务 - Zuul 网关服务
- Sleuth + Zipkin 服务链路追踪 - Sleuth + Zipkin 服务链路追踪
- Config 分布式配置中心 集成 Bus 消息总线实现配置热更新 - Config 分布式配置中心 ,集成 Bus 消息总线实现配置热更新
### 3.分布式解决方案 ### 分布式解决方案
+ 全局 id 生成方案 + 全局 ID 生成方案
+ 分布式 session 解决方案 + 分布式 Session 解决方案
+ 分布式事务解决方案实战 + 分布式事务解决方案实战
+ 分布式锁解决方案 + 分布式锁解决方案
## 中间件
### 1. 消息中间件Kafka ## 常用技术栈
### Kafka
1. [Kafka 简介](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka简介.md) 1. [Kafka 简介](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka简介.md)
2. [基于 Zookeeper 搭建 Kafka 高可用集群](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/基于Zookeeper搭建Kafka高可用集群.md) 2. [基于 Zookeeper 搭建 Kafka 高可用集群](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/基于Zookeeper搭建Kafka高可用集群.md)
@ -103,37 +90,33 @@
4. [Kafka 消费者详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka消费者详解.md) 4. [Kafka 消费者详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka消费者详解.md)
5. [深入理解 Kafka 副本机制](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka深入理解分区副本机制.md) 5. [深入理解 Kafka 副本机制](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka深入理解分区副本机制.md)
### 2. 消息中间件:RabbitMQ ### RabbitMQ
- [RabbitMQ 基础](https://github.com/heibaiying/BigData-Notes/blob/master/notes/RabbitMQ_基础.md) - [RabbitMQ 核心概念](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/RabbitMQ_基础.md)
- [RabbitMQ 客户端开发](https://github.com/heibaiying/BigData-Notes/blob/master/notes/RabbitMQ_客客户端开发.md) - [RabbitMQ 客户端开发](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/RabbitMQ_客户端开发.md)
- [基于 HAProxy + KeepAlived 搭建 RabbitMQ 高可用集群](https://github.com/heibaiying/BigData-Notes/blob/master/notes/RabbitMQ_高可用集群架构.md) - [基于 HAProxy + KeepAlived 搭建 RabbitMQ 高可用集群](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/RabbitMQ_高可用集群架构.md)
### 3.负载均衡中间件 Nginx ### ZooKeeper
1. [ZooKeeper 简介及核心概念](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper简介及核心概念.md)
2. [ZooKeeper 单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
3. [ZooKeeper 常用 Shell 命令](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper常用Shell命令.md)
4. [ZooKeeper Java 客户端 —— Apache Curator](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper_Java客户端Curator.md)
5. [ZooKeeper ACL 权限控制](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper_ACL权限控制.md)
### Nginx
- Nginx 反向代理及负载均衡服务配置实战 - Nginx 反向代理及负载均衡服务配置实战
- 利用 keeplived+Nginx 实现 Nginx 高可用方案 - 利用 keeplived+Nginx 实现 Nginx 高可用方案
- Nginx 动静分离实战 - Nginx 动静分离实战
### 4.分布式协调服务 Zookeeper ### Dubbo
1. [Zookeeper 简介及核心概念](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper简介及核心概念.md) - Dubbo 管理中心及监控平台安装部署
2. [Zookeeper 单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md) - Dubbo 负载均衡和服务降级
3. [Zookeeper 常用 Shell 命令](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper常用Shell命令.md)
4. [Zookeeper Java 客户端 —— Apache Curator](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper_Java客户端Curator.md)
5. [Zookeeper ACL 权限控制](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Zookeeper_ACL权限控制.md)
## Docker
- [Docker 基础](https://github.com/heibaiying/Full-Stack-Notes/blob/master/notes/Docker_基础.md)
- kubernetes 简介及集群搭建
## 📊 数据结构 ## 📊 算法
数组、栈、队列、链表、二分搜索树、集合、映射、优先队列、堆、线段树、Trie、并查集、AVL、红黑树、哈希表 TODO
## 算法基础

View File

@ -14,8 +14,8 @@ Docker 是一个构建发布和运行应用程序的开放平台。Docker 以
Docker 使用 Go 语言进行开发,基于 Linux 内核的 cgroupnamespace以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。最初实现是基于 LXC从 0.7 版本以后开始去除 LXC转而使用自行开发的 libcontainer从 1.11 开始,则进一步演进为使用 runC 和 containerd。 Docker 使用 Go 语言进行开发,基于 Linux 内核的 cgroupnamespace以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。最初实现是基于 LXC从 0.7 版本以后开始去除 LXC转而使用自行开发的 libcontainer从 1.11 开始,则进一步演进为使用 runC 和 containerd。
- runc :是一个 Linux 命令行工具,用于根据 [OCI容器运行时规范](https://github.com/opencontainers/runtime-spec) 创建和运行容器。 - **runc** :是一个 Linux 命令行工具,用于根据 [OCI容器运行时规范](https://github.com/opencontainers/runtime-spec) 创建和运行容器。
- containerd :是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集。 - **containerd** :是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集。
下图体现了 Docker 和传统虚拟化方式的不同之处:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,再在该系统上运行所需应用进程;而 Docker 容器内的应用进程则是直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,因此要比传统虚拟机更为轻便。 下图体现了 Docker 和传统虚拟化方式的不同之处:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,再在该系统上运行所需应用进程;而 Docker 容器内的应用进程则是直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,因此要比传统虚拟机更为轻便。
@ -79,10 +79,10 @@ Docker 提供了大量命令用于管理镜像、容器和服务,命令的统
列出所有顶层镜像的相关信息。常用参数如下: 列出所有顶层镜像的相关信息。常用参数如下:
- -a :显示所有镜像,包括中间隐藏的镜像 - **-a** :显示所有镜像,包括中间隐藏的镜像
- -q :只显示镜像 ID - **-q** :只显示镜像 ID
- --digests :显示摘要信息 - **--digests** :显示摘要信息
- --no-trunc :显示完整镜像信息 - **--no-trunc** :显示完整镜像信息
#### 3. docker pull 镜像名 [:TAG] #### 3. docker pull 镜像名 [:TAG]
@ -98,23 +98,23 @@ Docker 提供了大量命令用于管理镜像、容器和服务,命令的统
run 是 docker 中最为核心的一个命令,用于新建并启动容器,其拥有众多可用参数,可以使用`docker run --help`查看所有可用参数。常用参数如下: run 是 docker 中最为核心的一个命令,用于新建并启动容器,其拥有众多可用参数,可以使用`docker run --help`查看所有可用参数。常用参数如下:
+ -i :表示使用交互模式,始终保持输入流开放; + **-i** :表示使用交互模式,始终保持输入流开放;
+ -t :表示分配一个伪终端,通常和`-i`结合使用,表示使用伪终端与容器进行交互; + **-t** :表示分配一个伪终端,通常和`-i`结合使用,表示使用伪终端与容器进行交互;
+ -d :以后台方式运行容器; + **-d** :以后台方式运行容器;
+ --name :指定容器启动容器的名字,如果不指定,则由 docker 随机分配; + **--name** :指定容器启动容器的名字,如果不指定,则由 docker 随机分配;
+ -c :用于给运行在容器中的所有进程分配 CPU 的 shares 值,这是一个相对权重,实际的处理速度与宿主机的 CPU 相关; + **-c** :用于给运行在容器中的所有进程分配 CPU 的 shares 值,这是一个相对权重,实际的处理速度与宿主机的 CPU 相关;
+ -m 用于限制为容器中所有进程分配的内存总量以B、K、M、G为单位 + **-m** 用于限制为容器中所有进程分配的内存总量以B、K、M、G为单位
+ -v :用于挂载数据卷 volume可以用多个`-v`参数同时挂载多个 volume。volume 的格式为:`[host-dir]:[container-dir]:[rw:ro]``[rw:ro]`用于指定数据卷的模式,`rw`代表读写模式,`ro`代表只读模式。 + **-v** :用于挂载数据卷 volume可以用多个`-v`参数同时挂载多个 volume。volume 的格式为:`[host-dir]:[container-dir]:[rw:ro]``[rw:ro]`用于指定数据卷的模式,`rw`代表读写模式,`ro`代表只读模式。
+ -p :用于将容器的端口暴露给宿主机的端口,格式为:`hostPort:containerPort`,通过端口的暴露,可以让外部主机能够访问容器内的应用。 + **-p** :用于将容器的端口暴露给宿主机的端口,格式为:`hostPort:containerPort`,通过端口的暴露,可以让外部主机能够访问容器内的应用。
#### 2. docker ps [OPTIONS] #### 2. docker ps [OPTIONS]
列出当前所有正在运行的容器。常用参数如下: 列出当前所有正在运行的容器。常用参数如下:
- -a :列出所有容器,包括运行的和已经停止的所有容器 - **-a** :列出所有容器,包括运行的和已经停止的所有容器
- -n :显示最近创建的 n 个容器 - **-n** :显示最近创建的 n 个容器
- -q :只显示容器编号 - **-q** :只显示容器编号
- --no-trunc :不要截断输出信息 - **--no-trunc** :不要截断输出信息
#### 3. 启动\重启\停止\强制停止容器 #### 3. 启动\重启\停止\强制停止容器
@ -131,8 +131,8 @@ run 是 docker 中最为核心的一个命令,用于新建并启动容器,
想要退出正在运行的容器,有以下两种常用方法: 想要退出正在运行的容器,有以下两种常用方法:
+ exit :退出并停止容器; + **exit** :退出并停止容器;
+ ctrl+P+Q :退出。 + **ctrl+P+Q** :退出。
#### 6. docker rm 容器名或ID #### 6. docker rm 容器名或ID
@ -150,12 +150,12 @@ docker inspect --format='{{.NetworkSettings}}' 32cb3ace3279
可以使用`docker logs [OPTIONS] CONTAINER`查看容器中进程的运行日志,常用参数如下: 可以使用`docker logs [OPTIONS] CONTAINER`查看容器中进程的运行日志,常用参数如下:
- --details :显示日志详情 - **--details** :显示日志详情
- -f :跟随日志输出显示 - **-f** :跟随日志输出显示
- --tail :从末尾开始显示指定行的数据 - **--tail** :从末尾开始显示指定行的数据
- -t :显示时间戳 - **-t** :显示时间戳
- --since :开始时间 - **--since** :开始时间
- --until 结束时间 - **--until** 结束时间
## 四、DockerFile ## 四、DockerFile

View File

@ -143,6 +143,7 @@ rabbitmqctl set_cluster_name my_rabbitmq_cluster
除了可以使用命令行外,还可以使用打开任意节点的 UI 界面进行查看,情况如下: 除了可以使用命令行外,还可以使用打开任意节点的 UI 界面进行查看,情况如下:
<div align="center"> <img src="https://github.com/heibaiying/Full-Stack-Notes/blob/master/pictures/rabbitmq-集群模式.png"/> </div> <div align="center"> <img src="https://github.com/heibaiying/Full-Stack-Notes/blob/master/pictures/rabbitmq-集群模式.png"/> </div>
### 2.5 配置镜像队列 ### 2.5 配置镜像队列
#### 1. 开启镜像队列 #### 1. 开启镜像队列
@ -508,6 +509,7 @@ systemctl start keepalived
此时只有 hadoop001 上是存在虚拟 IP 的,而 hadoop002 上是没有的。 此时只有 hadoop001 上是存在虚拟 IP 的,而 hadoop002 上是没有的。
<div align="center"> <img src="https://github.com/heibaiying/Full-Stack-Notes/blob/master/pictures/rabbitmq-keepalived-vip2.png"/> </div> <div align="center"> <img src="https://github.com/heibaiying/Full-Stack-Notes/blob/master/pictures/rabbitmq-keepalived-vip2.png"/> </div>
### 4.6 验证故障转移 ### 4.6 验证故障转移
这里我们验证一下故障转移,因为按照我们上面的检测脚本,如果 HAProxy 已经停止且无法重启时 KeepAlived 服务就会停止,这里我们直接使用以下命令停止 Keepalived 服务: 这里我们验证一下故障转移,因为按照我们上面的检测脚本,如果 HAProxy 已经停止且无法重启时 KeepAlived 服务就会停止,这里我们直接使用以下命令停止 Keepalived 服务:

View File

@ -0,0 +1,84 @@
# Nginx 编译方式安装
## 一、安装依赖
+ **PCRE**:安装 PCRE 库来支持正则表达式,它主要被 NGINX Core 和 Rewrite 模块所需要:
```shell
# PCRE库的编译需要该组件所以需要预先安装
$ yum -y install gcc-c++
$ wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
$ tar -zxf pcre-8.42.tar.gz
$ cd pcre-8.42
$ ./configure
$ make
$ sudo make install
```
+ **zlib** :安装 zlib 库来支持 header 头压缩,它主要被 NGINX Gzip 模块所依赖:
```shell
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure
$ make
$ sudo make install
```
+ **OpenSSL**:安装 OpenSSL 库来支持 HTTPS 协议,它主要被 NGINX SSL 模块和其他模块所依赖:
```shell
yum install openssl openssl-devel
```
## 二、安装 Nginx
### 2.1 下载并解压
下载所需版本的 Nginx 并进行解压Nginx 版本号的规则为:`主版本号.次版本号.修订号`,其中稳定版的次版本号为偶数,测试版的次版本号为奇数,生产环境下应尽量下载稳定版:
```shell
$ wget https://nginx.org/download/nginx-1.16.1.tar.gz
$ tar -zxvf nginx-1.16.1.tar.gz
```
### 2.2 编译安装
按需编译 Nginx可以使用 `--with` 来包含非默认安装的模块,或使用 `--without` 来排除默认安装的模块。关于全部模块的信息,可以使用 ` ./configure --help` 命令进行查看或查阅官方文档https://nginx.org/en/docs/configure.html
```shell
$ cd nginx-1.16.1
$ ./configure \
--prefix=/usr/app/nginx-1.16.1 \
--with-pcre=/usr/app/pcre-8.42 \
--with-zlib=/usr/app/zlib-1.2.11 \
--with-http_ssl_module \ # 启用HTTPS支持
--with-stream \ # 启用TCP和UDP代理功能
--with-mail=dynamic # 启用邮件代理功能
$ make
$ sudo make install
```
### 2.3 配置环境变量
```shell
$ vim /etc/profile
```
增加如下配置:
```shell
export NGINX_HOME=/usr/app/nginx-1.16.1
export PATH=${NGINX_HOME}/sbin:$PATH
```
使得配置的环境变量立即生效:
```shell
$ source /etc/profile
```