Java电子书:Spring Cloud Alibaba 微服务原理与实战 格式 pdf 电子书 PDF 电子书 Java吧 java8.com
- d9 T% j4 O& q! {4 w/ q
1 z7 `; F" t( y; b2 p( U2 @1 h1 s, q( ~
编号:mudaima-P0100【Java吧 java8.com】 V' M' ^- f' U
8 D: b, j$ _% A m5 g. a
$ Q9 q% B$ `. {
, O( F4 r% |& J+ S- a% d, jJava电子书目录:前言
; [( g- P* I$ z& T/ F, ]第1章 微服务的发展史 8 g9 B$ @! N- e+ ~
1.1 从单体架构到分布式架构的演进 7 q5 w3 i1 s) @# E& A' Q
1.1.1 单体架构 , I8 P" o7 a, E# M8 C0 z
1.1.2 集群及垂直化 3 R) M ]" g* n W! i
1.1.3 SOA / p# ~9 Q& h' Q1 j; ]3 S6 Y
1.1.4 微服务架构
Y4 j6 t2 t: {1.2 微服务架构带来的挑战 0 i' H; a w7 b3 d; c! }# F+ u7 ^% K
1.2.1 微服务架构的优点 1 q3 k% o+ S' j/ w: y
1.2.2 微服务架构面临的挑战 & K' O2 q j* j( ?, t
1.3 如何实现微服务架构 6 ^/ ]8 D% [, m" t
1.3.1 微服务架构图
/ V; u8 Z6 f$ X$ \5 y# ]# h9 L1.3.2 微服务架构下的技术挑战
; B. A p1 Z+ F; I! Z ^, \( N" I第2章 微服务解决方案之Spring Cloud
2 N" E5 |1 j9 r9 d2.1 什么是Spring Cloud " Y7 s a1 P/ @) R3 x7 @- H
2.2 Spring Cloud版本简介
% B6 {, {* Y2 r, H& c2.3 Spring Cloud规范下的实现
" a" X3 V5 n( j" ]$ i2.4 Spring Cloud Netflix - E9 u( j4 X) M+ @
2.5 Spring Cloud Alibaba 1 v2 q, O1 A; F7 G* b
2.5.1 Spring Cloud Alibaba的优势
, {# Z* D' ?' p) U1 e0 {% o2.5.2 Spring Cloud Alibaba的版本
2 n9 u/ _! n+ ^! ]( c/ z1 k+ {3 v9 S第3章 Spring Cloud的核心之Spring Boot ; {) H; S6 B; v. }; Y3 E
3.1 重新认识Spring Boot
3 c3 E* | G' H9 W Z: p V( @3.1.1 Spring IoC/DI
+ N' q; r+ r& g1 F+ M1 S3.1.2 Bean装配方式的升级 0 o: Z F" f" X& `9 n5 G; Z% q
3.1.3 Spring Boot的价值 $ I. h5 J; A* C7 E4 Z5 o3 M( H) O
3.2 快速构建Spring Boot应用 ' ? o, ?# y& C. j2 _: s
3.3 Spring Boot自动装配的原理 3 \ c- r1 \( z
3.3.1 自动装配的实现
% w, ]: Q6 `& p) y& o7 E) e H3.3.2 EnableAutoConfiguration
& T+ M- E+ | X. _ I# f$ P- y! M6 _3.3.3 AutoConfigurationImportSelector
7 X; w1 d# Z2 h7 i3.3.4 自动装配原理分析 0 ?! k9 P( ~* x% [1 }: P
3.3.5@Conditional条件装配
9 X9 N: v9 }8 p4 _+ j, }: P$ V' _( ?3.3.6 spring-autoconfigure-metadata
$ a. M) t* B; D* o O3.4 手写实现一个Starter - q3 g% ~( k" \! _0 f6 Y7 v( L
3.4.1 Starter的命名规范 5 F" I" s& E6 M$ G y+ E
3.4.2 实现基于Redis的Starter # I* R- H ]2 ?7 j+ V, C- D
3.5 本章小结
* y+ u [! a; I2 O7 q! Y第4章 微服务架构下的服务治理
: w% a4 b* u, I7 @# F4.1 如何理解Apache Dubbo ( F1 f0 X; M( H! M4 m
4.2 Apache Dubbo实现远程通信 * q. J" m+ N/ {0 |, E% p2 j
4.3 Spring Boot集成Apache Dubbo
* H+ {0 E+ o, k) v8 r8 [0 k: q4.4 快速上手ZooKeeper p2 ]; p. S e
4.4.1 ZooKeeper的安装
0 u4 v0 h9 i& t* J3 ~0 W4.4.2 ZooKeeper的数据结构
0 g# _" U2 H- J7 n4.4.3 ZooKeeper的特性 3 X& E( p$ `( B' A b/ N
4.4.4 Watcher机制
+ W# k5 A) P+ y4.4.5 常见应用场景分析
) T+ ]: L+ y5 ?4.5 Apache Dubbo集成ZooKeeper实现服务注册
* }- j! k- Z8 C$ d5 Y7 d4.5.1 Apache Dubbo集成ZooKeeper实现服务注册的步骤 : j# e9 y" ]4 x) L
4.5.2 ZooKeeper注册中心的实现原理
: b* z0 [, d' { x# {1 y! g, e4.6 实战Dubbo Spring Cloud ; f) m) h* d3 u P; K4 }8 j
4.6.1 实现Dubbo服务提供方
1 m# e) w) t, o9 L4.6.2 实现Dubbo服务调用方 . g0 |# D2 U/ O6 N6 g2 |& l
4.7 Apache Dubbo的高级应用
) U1 Z) B/ c9 }( u% \$ Q1 y. G+ K4.7.1 集群容错 5 _& e6 U3 @( W& a+ p9 E
4.7.2 负载均衡 , ~ C; ?1 g" K
4.7.3 服务降级 5 ^$ i, f0 H: R9 k L$ y) W% k3 f
4.7.4 主机绑定规则
5 a- J3 w1 j% m$ g4.8 Apache Dubbo核心源码分析
2 A, W- _; @- a4 z1 r& ]: K7 p2 O: a! ~4.8.1 源码构建
+ I2 |9 c; Y: ?4.8.2 Dubbo的核心之SPI
- n. l3 {0 ~1 U: W6 j5 w4.8.3 无处不在的自适应扩展点 * S$ P* u- w6 L; h" s
4.8.4 Dubbo中的IoC和AOP
. k% H3 U; O* Y0 [4.8.5 Dubbo和Spring完美集成的原理
& G' Q5 Y% l9 ?% g4.9 本章小结 & z% j* I6 ^9 b) ]; ?8 w) W6 Q
第5章 服务注册与发现
" Q6 b/ i& i4 S5 z. U/ L d5.1 什么是Alibaba Nacos # h; q0 n* G$ u6 u3 v8 c, w% {
5.2 Nacos的基本使用 $ r) @" ]- I- M j' k& H' o
5.2.1 Nacos的安装
! N: | h+ I1 [; E1 f5.2.2 Nacos服务注册发现相关API说明 : z) g9 _ Q% {- M$ ?) W+ o
5.2.3 Nacos集成Spring Boot实现服务注册与发现
; u, o: o% _; d' c; a9 W5.3 Nacos的高可用部署 * k# w/ }; W6 E+ z. W& Z
5.3.1 安装环境要求 2 m1 ?5 o' w) z( d6 S
5.3.2 安装包及环境准备 / R) \& U2 J# j" y7 Q
5.3.3 集群配置 9 f- k0 a# u% g& o
5.3.4 配置MySQL数据库
3 B( g a6 {- h! U; X' U) [& e5.3.5 启动Nacos服务
0 N" F6 z4 s6 J0 j! R+ ^5.4 Dubbo使用Nacos实现注册中心 * Z" E) V# S5 Q5 L
5.5 Spring Cloud Alibaba Nacos Discovery 2 E; I5 A7 n! Z1 K
5.5.1 服务端开发 $ ^! \8 t$ }' b& o
5.5.2 消费端开发 1 K" L* P1 A* \; M# F4 f$ l# U
5.6 Nacos实现原理分析
- z% {6 W* q5 G, G' _4 ^8 Y' `. G5.6.1 Nacos架构图 / {+ i2 ?# D( ?+ K
5.6.2 注册中心的原理 , x7 j# f: q1 W% j y
5.7 深入解读Nacos源码
4 P7 c8 D" ~# a0 [* G; I; O3 ^5.7.1 Spring Cloud什么时候完成服务注册 + l! Y- c0 w1 a+ L% Y) p
5.7.2 NacosServiceRegistry的实现
2 _% ?/ I% ]) a( E- M# l5.7.3 从源码层面分析Nacos服务注册的原理
2 z4 y* b4 \! b5 N2 ?5.7.4 揭秘服务提供者地址查询
5 r: `* N; V. @/ X( J$ O* S. M5.7.5 分析Nacos服务地址动态感知原理 " }, Z" U& ?# Z' v" F J0 J" \
5.8 本章小结
4 R- W7 w5 Y) V' z- `- K' x$ p) ^第6章 Nacos实现统一配置管理 # m, W5 x! b9 T; k- @! K n: b
6.1 Nacos配置中心简介 3 S- x2 G; d9 B I" O w; J& k) R/ w0 N
6.2 Nacos集成Spring Boot实现统一配置管理
' I) s2 F: Q5 R: P) R6.2.1 项目准备 8 t! I! |1 Y& h5 o; i
6.2.2 启动Nacos Server
) S3 H" b0 O2 D2 C- s+ @6.2.3 创建配置 $ u6 y& O% B( o1 m2 \! T. j
6.2.4 启动服务并测试 % x7 S8 t' J( A. M9 b5 ]
6.3 Spring Cloud Alibaba Nacos Config ' D3 W/ a/ Y f4 V! x# a
6.3.1 Nacos Config的基本应用
, `0 Y5 i, l. i3 O* l0 [- x6.3.2 动态更新配置 / M& b6 h, i0 H+ Q8 a. R
6.3.3 基于Data ID配置YAML的文件扩展名 & C' @; ?' X6 M' V( {* r# t) c/ H
6.3.4 不同环境的配置切换
r) A+ ]# }6 ?; q0 N; w3 o6.3.5 Nacos Config自定义Namespace和Group / {0 N9 Y5 Y8 J0 a$ G
6.4 Nacos Config 实现原理解析
3 Y0 `8 G$ A/ V) h0 C3 t6.4.1 配置的CRUD
& C) Y! [/ P ~7 |4 O6.4.2 动态监听之Pull Or Push
! O! p' X0 Y1 Q; z ]6.5 Spring Cloud如何实现配置的加载 , s- g. Y0 K8 f$ B3 @/ |! G
6.5.1 PropertySourceBootstrapConfiguration
+ Y. \# |1 z, F6.5.2 PropertySourceLocator + z( g2 D! J$ P3 L- L# A* P
6.6 Nacos Config核心源码解析 # L4 |8 e" q3 }% C3 X
6.6.1 NacosFactory.createConfigService
1 H* b) H) M/ V+ W+ J6.6.2 NacosConfigService构造 1 I* E7 q1 V5 |. o
6.6.3 ClientWorker
) P, J% y) j& P, \1 S4 }. S6.6.4 ClientWorker.checkConfigInfo 4 y# i2 `1 |+ s( S) W
6.6.5 LongPollingRunnable.run
; S" i0 ?1 K4 [( A$ j) |2 K$ Z6.6.6 服务端长轮询处理机制 6 N* `& y' T0 d0 `
6.6.7 ClientLongPolling
8 U+ _1 i* G' P, m0 G' a+ o6.7 本章小结 8 j+ S* h$ z+ U% c" M
第7章 基于Sentinel的微服务限流及熔断 / D0 |4 t B6 N4 r
7.1 服务限流的作用及实现
5 E, Q/ p2 e+ d( N2 o+ Q6 d! A7.1.1 计数器算法 ; f5 |3 f( W- R4 L1 u2 c
7.1.2 滑动窗口算法
% v: T' K$ `6 ]# y! G( l7.1.3 令牌桶限流算法 9 i7 `+ ~: S' K5 E4 x8 w8 m
7.1.4 漏桶限流算法 2 G4 S/ A# y# b$ q' h; ~6 d$ z! L: ^; s
7.2 服务熔断与降级
# J h( j9 I3 X- t6 \1 H8 O7.3 分布式限流框架Sentinel
- y) N5 G2 N8 n: L8 A3 f$ L7.3.1 Sentinel的特性 : s: b: m2 S- p- ~7 C( L3 L+ V
7.3.2 Sentinel的组成 : `* ?1 [ P7 d% o( _1 T
7.3.3 Sentinel Dashboard的部署
$ W4 e4 `# F3 {9 M9 p5 h/ c1 v. F7.4 Sentinel的基本应用 8 Y/ S$ X# _7 u# i7 N! ]
7.4.1 Sentinel实现限流
: t. @$ d0 J3 V4 g, {6 `4 C- j7.4.2 资源的定义方式 8 l' g( ~2 ^9 S9 K4 I
7.4.3 Sentinel资源保护规则
/ J7 E1 N9 F) D7.4.4 Sentinel实现服务熔断
9 d$ R* W) N) s; r" O* g. }4 R8 z7.5 Spring Cloud集成Sentinel实践
$ C0 H, a+ d: U( A8 k7.5.1 Sentinel接入Spring Cloud " _' l5 v" v/ M% M+ p
7.5.2 基于Sentinel Dashboard来实现流控配置 6 L5 o; R/ Z. {8 ~4 d C: d
7.5.3 自定义URL限流异常
# ?0 ^ ]$ [9 S( ^ Y" |; w8 h7.5.4 URL资源清洗
: F0 ]' B5 _7 g/ ?6 T! r7.6 Sentinel集成Nacos实现动态流控规则 ( ]$ `0 F( f- I) ^
7.7 Sentinel Dashboard集成Nacos实现规则同步 3 n2 x1 p% j& z9 l' n+ N
7.7.1 Sentinel Dashboard源码修改 3 \8 L3 V$ L: y+ N G) Q! u$ x2 t
7.7.2 Sentinel Dashboard规则数据同步 / I7 C) u( C# Q w5 a( J3 d1 U! ?
7.8 Dubbo集成Sentinel实现限流
* |. ~5 [2 A. F- A; m' k7.8.1 Dubbo服务接入Sentinel Dashboard 4 c. E. D9 Y( w8 g
7.8.2 Dubbo服务限流规则配置
+ n$ ^; c2 L0 R4 I3 t- f% W/ a7.9 Sentinel热点限流
0 V) Z* z" x: j, V8 S4 X' W7.9.1 热点参数限流的使用 1 x1 E5 h5 b# ^3 \+ u; {
7.9.2@SentinelResource热点参数限流 9 D! K5 \, i" d8 S2 }
7.9.3 热点参数规则说明
% X2 H @" f; c7.10 Sentinel的工作原理 8 ~- ~/ ?2 h1 k9 |) M7 D0 F$ A
7.11 Spring Cloud Sentinel工作原理分析 ! ^# S/ I. P& @7 ?6 C
7.12 Sentinel核心源码分析 M3 a( r0 Z" K i- W
7.12.1 限流的源码实现
- L' ]( @* S2 o* v0 i- K7.12.2 实时指标数据统计
* z' q' I& j2 z5 U7.12.3 服务降级的实现原理
4 z1 n3 Z' @8 J! S" N2 h7.13 本章小结
2 E( k+ l& }8 i, C第8章 分布式事务 , s- q5 F+ W" |1 {1 F% W0 Y
8.1 分布式事务问题的理论模型
: G% y# z( U" t, E* B8.1.1 X/Open分布式事务模型
- J. i% U2 ?: T# r1 ]0 Z- J8.1.2 两阶段提交协议 " ~# y& ^6 E2 M* B: ~7 E" h
8.1.3 三阶段提交协议
p! l2 [ y( _/ S( s& H0 V8.1.4 CAP定理和BASE理论
7 M( m) u3 M; _( n8.2 分布式事务问题的常见解决方案 . E( Y4 s2 C6 B/ V' K
8.2.1 TCC补偿型方案 , X: @# i4 n) P3 I- Z6 y. g
8.2.2 基于可靠性消息的最终一致性方案 # j2 U* o$ s% V0 f; y8 {- `' Y; m
8.2.3 最大努力通知型 1 ?* [$ q3 _! A# H
8.3 分布式事务框架Seata
& i3 j0 w9 {6 o' v8.3.1 AT模式 : N. J/ n2 F9 Z
8.3.2 Saga模式 & B D$ N1 E4 w L8 f
8.4 Seata的安装
* i9 r$ m7 ~& N! i1 E3 M- w/ T8.4.1 file存储模式
: v0 l) w0 s8 b8.4.2 db存储模式 4 h- t4 ?. q" k5 ]9 j% W
8.4.3 Seata服务端配置中心说明
2 I; m6 C+ q% e' }1 c; ?/ j8.5 AT模式Dubbo集成Seata
" ~9 v) b' B, g9 `0 l( Q8.5.1 项目准备
. l; m' Z# X' u E, j* o8.5.2 数据库准备
& W7 k( D; u4 I! J8.5.3 核心方法说明
+ B( W5 t+ o3 L" }: c1 ?8.5.4 项目启动顺序及访问
) g3 Y. e# ]4 M& T) v! v8.5.5 整合Seata实现分布式事务 * |5 K3 R3 P3 B
8.6 Spring Cloud Alibaba Seata $ `( q, c0 }3 ` v
8.6.1 Spring Cloud项目准备
1 A, d* r( F) F+ q* ~6 h8.6.2 集成Spring Cloud Alibaba Seata
+ F0 J* I0 m! k8.6.3 关于事务分组的说明
( p( M: ~' G5 @2 g5 d6 K/ f8.7 Seata AT模式的实现原理
. x8 `+ i$ G6 }' Q: m% ]% u8.7.1 AT模式第一阶段的实现原理 , D k" g) k" a* P* M& v; g
8.7.2 AT模式第二阶段的原理分析
) L* F4 a5 p* C' l; Q) f3 i8.7.3 关于事务的隔离性保证
# y2 n1 {2 j6 D8 b% N4 G3 K' G8.8 本章小结
0 ?3 x3 I' T8 \2 u/ a: b第9章 RocketMQ分布式消息通信 # g! v; A0 U5 r" H
9.1 什么是RocketMQ , p7 C: X- I/ t9 B! d
9.1.1 RocketMQ的应用场景
6 J0 ?/ i8 G( [! H" [9.1.2 RocketMQ的安装 , x0 M$ }) B. w% h2 e
9.1.3 RocketMQ如何发送消息
3 `( N" G, a! ~+ }6 C6 x! l9.1.4 RocketMQ如何消费消息
- v* ?) ^( p( B' a, g( Y+ e9.2 Spring Cloud Alibaba RocketMQ
$ ^1 S& P* o& N3 _9.2.1 Spring Cloud Alibaba RocketMQ架构图 ! `0 E, N, j% d: U0 N( R
9.2.2 Spring Cloud Stream消息发送流程 ) c' _7 I& ?7 ]+ t
9.2.3 RocketMQ Binder集成消息发送 , R/ d( V q. t" o5 W
9.2.4 RocketMQ Binder集成消息订阅
* E( N' q. K, V! v/ |9.2.5 Spring Cloud Stream消息订阅流程 * }5 }! m$ ?, i8 g
9.3 RocketMQ集群管理 1 A" L1 d8 B) T0 M. w1 |3 D. h
9.3.1 整体架构设计 0 O# Q/ w5 \9 P% G9 |0 w
9.3.2 基本概念 7 k$ {, U/ Y Z+ B8 }
9.3.3 为什么放弃ZooKeeper而选择NameServer & Q; C) i+ T6 J/ z* @
9.4 如何实现顺序消息 - s$ k8 E+ K+ y$ {- c3 N
9.4.1 顺序消息的使用场景 ' g4 q6 R3 G: B6 Y! V
9.4.2 如何发送和消费顺序消息 & j- [# @, `- u3 Y- V, I4 i& u
9.4.3 顺序发送的技术原理
- A, O: J% F* V1 j- A9.4.4 普通发送的技术原理 $ b+ h) H. G: o, [ \' m3 S
9.4.5 顺序消费的技术原理 {" C# J) a: t
9.4.6 并发消费的技术原理 / P5 P- d3 ?9 s1 L0 Q) S* n$ r
9.4.7 消息的幂等性 ( d9 g& s/ S' ~2 r4 A% A6 `3 S4 t
9.5 如何实现事务消息 + o! e/ w) p/ `; }0 V1 `! p
9.5.1 事务消息的使用场景 5 ?' ?6 E, {1 b6 `# }7 N& O
9.5.2 如何发送事务消息
2 U5 V) X# o" u/ g" F9.5.3 事务消息的技术原理
2 T6 H) ]& X( K, P1 g9.6 高性能设计
0 Z$ z7 S) N. F0 P# C) s4 @' q: _9.6.1 顺序写盘 4 {( _: c: B! b! N
9.6.2 消费队列设计
' I+ S& l8 O2 D9.6.3 消息跳跃读取 6 i ] M! h8 l/ [ @! C
9.6.4 数据零拷贝
+ g& T0 e' p; M8 s' `9 d9.6.5 动态伸缩能力
9 R7 t# {! K, f) }- S9.6.6 消息实时投递
' [( y( p6 {7 {& u7 j9.7 高可用设计 / z |3 j) P! U" G" B; R
9.7.1 消息发送重试机制
7 y& C* k3 o" X* M& | h4 h9.7.2 故障规避机制
3 }' |8 z5 [* C% G9.7.3 同步刷盘与异步刷盘
( B# d& L; V5 L3 X9.7.4 主从复制
3 [ f/ v( W: ?0 v/ O* ~& n+ C3 r9.7.5 读写分离
* Z8 x; z% Q5 }# d/ \ \9.7.6 消费重试机制 0 {6 z3 j' B( \% }9 J& [1 O/ u
9.7.7 ACK机制 + B8 N w2 _) `; c' D0 X, m
9.7.8 Broker集群部署
* f. X4 }5 s0 w, p0 C. I; W9.8 本章小结
$ F3 q1 A& W5 h) L2 T第10章 微服务网关之Spring Cloud Gateway
c, Q; e& W" P( k& q; e10.1 API网关的作用
4 U, ^6 R9 n0 ?5 Z7 i10.1.1 统一认证鉴权
2 Q* U; z- B4 z. a10.1.2 灰度发布
5 h9 I- ?" E$ x, X& y; n10.2 网关的本质及技术选型
- \- `1 X) u9 \/ v& T5 Y10.2.1 OpenResty : T* C* ` h. L
10.2.2 Spring Cloud Zuul / l6 z: D0 T- k8 }7 m8 z& T; h
10.2.3 Spring Cloud Gateway % A# B# A1 _5 \1 t3 S& l: m' y
10.3 Spring Cloud Gateway网关实战 ) }& ^1 g% p6 l0 N1 v% o
10.3.1 spring-cloud-gateway-service : \% _# l6 P1 i S" X+ [
10.3.2 spring-cloud-gateway-sample & A; ]8 d+ b0 V, b8 O" T0 b/ K
10.4 Spring Cloud Gateway原理分析 % W. \; E2 r! h5 l, e
10.5 Route Predicate Factories
# o) q, H' w! v, V2 @10.5.1 指定时间规则匹配路由 6 m2 A4 W; X+ R1 g
10.5.2 Cookie匹配路由 ' h u/ [$ N9 C& q9 r6 U
10.5.3 Header匹配路由
( p1 ]& ~& v% K$ g10.5.4 Host匹配路由 ( x8 m2 f# C& Z" r& r- y" j: h6 }
10.5.5 请求方法匹配路由 5 m% Z; \. V3 j& d* B4 i E
10.5.6 请求路径匹配路由
& ]; n. B7 M9 v; q10.6 Gateway Filter Factories
' T7 Z' U1 X9 l+ `- V& \# y10.6.1 GatewayFilter $ c2 b J1 [ D! Z$ c% [. q
10.6.2 GlobalFilter
$ Y6 \7 R" H8 L5 V10.7 自定义过滤器 % P; i% V1 n/ ]3 z+ ^6 _4 \! n8 Q
10.7.1 自定义GatewayFilter
* G9 B* _4 ~' c8 a10.7.2 自定义GlobalFilter
" D' l6 _" n" I6 ]1 r4 J e10.8 Spring Cloud Gateway集成Nacos实现请求负载
( Y; Z5 B( J& k2 h( ^# j10.9 Spring Cloud Gateway集成Sentinel网关限流
: U* D- [6 c) r/ T4 T% p. Q4 H' y10.9.1 Route维度限流 5 V+ I- n* ?. \. ?& y
10.9.2 自定义API分组限流 $ w3 Q# ]( x8 h4 [6 x: \- F& [9 [
10.9.3 自定义异常
# H8 n0 O& y8 q" x5 X10.9.4 网关流控控制台 ' q( N; F% ~; G- j
10.9.5 网关限流原理 6 p% ^# Z$ h5 [
10.10 本章小结 2 M5 I$ P6 d% w: a9 F' e1 [
' Y1 u% n1 d- e" h
百度云盘下载地址(完全免费-绝无套路):& l# ]2 D7 w& ?
|