|
分布式框架视频教程名称: Java-nginx分布式框架课程视频教程 java自学网[javazx.com] 分布式框架视频教程 it教程 Java自学网收集整理 java论坛 JLM
x; \4 Y3 J3 q, J# f' ^1 L百度网盘下载链接:
~, w- m8 L% @. G8 Q* j$ `" \+ z v& q[/hide]
& \( J/ j$ V' i2 z$ {6 B! o5 b密码: fqdw$ x) ~" U7 H9 f4 M! r
集数合计:5天[javazx.com]
3 y U' H- w1 V! x1 r5 R* S( b9 e( J. ?$ `0 F- r
链接失效声明:如果本链接地址失效,请及时联系站长QQ:40069106
! G1 G/ O7 w7 T9 S9 y
G: e U7 X* D. @# @3 b分布式框架视频教程详情描述:
. ?" z' l' n" y5 }A0925《Java-nginx分布式框架课程视频教程》javazx.com Java-nginx分布式框架课程视频教程 javazx点com java自学网整理" f5 |! k4 Y7 q, R
& p/ p+ v1 y2 x) R/ W' D分布式框架视频教程目录:& ~% I3 h; r$ M/ v
─day01( G+ W& m1 ]: h2 ?0 H4 C$ X2 d
│ │ 笔记源码资料.rar6 Z6 B) r2 n& T6 G' Y6 W6 q+ g: A5 p7 m
│ │
8 u# J6 `- @9 L# a: s& K+ @│ └─视频; r8 V9 ]% h9 C2 X5 X0 {" b; r- \
+ f$ U' ^+ B( K7 p$ C) @6 `│ 01-Nginx课程内容介绍.mp49 K0 V3 W$ K0 X$ ?4 M @
$ D) Q% [" z% \│ 02-Nginx背景介绍.avi
+ P- P" S9 ]1 W: U! s+ {│ 03-常见服务器的对比.avi3 x" j3 G0 ?6 Q
$ O0 E- R+ {* _6 p3 E `9 B│ 04-Nginx的优点.avi& t! [6 v, h$ _; Z# q9 Q' o$ m" s0 o, d8 n# [5 |1 ]/ L
│ 05-Nginx的功能特性及常用功能.avi; i* ?+ Z% [& [6 a1 g* B5 m$ @3 c
│ 06-Nginx的官方简介.avi
" T; M# D& O8 w│ 07-Nginx系统环境准备.avi8 s+ |+ m3 ]( w, K
│ 08-Nginx安装方式介绍及源码安装的准备工作.avi- o V; |% u8 g; o8 P& v
& C2 W2 K" {# n0 U7 S│ 09-通过Nginx源码简单安装.avi% X* _' x! M- P w3 n3 ^) W4 i
│ 10-通过yum安装Nginx上.avi$ J" H0 X6 b( s, `. d+ R- I" @4 f( T* u, Q: p# [
│ 11-通过yum安装Nginx下.avi+ O/ G5 w. g& P2 ]% A ?, {* D' f# C% b: J" D
│ 12-简单源码安装和yum安装的区别.avi3 g) u4 y3 I2 |0 V9 V8 \
│ 13-通过Nginx源码复杂安装.avi8 G- O {6 Q- b$ ~0 \, V6 R2 r* L u; B* Q! h: k, W& g+ c
│ 14-Nginx的目录结构分析.avi* v+ _5 y$ B# S1 e4 v& e6 o- h+ J6 M: z' ^# d6 n6 Z% n
│ 15-Nginx服务器启停方式介绍.avi9 i3 X) v+ H& v/ ^* R; ]* Y
# t$ a7 A" N' ~' ]: g│ 16-Nginx服务的信号控制.avi
@2 d) d- n* k1 B7 z g( N│ 17-Nginx服务的信号控制之USR2.avi" M1 A- A4 K, G% _' `2 H
. _" N1 t5 U1 H$ v' c/ D│ 18-Nginx服务的命令行控制.avi
" P& V3 P4 y; X7 G! U│ 19-Nginx服务器版本升级需求分析.avi7 c. H9 x5 u1 }# S- y9 q/ |* X4 u
; C, S& ?1 S4 F; g│ 20-Nginx使用服务信号升级.avi0 {& D4 _9 F9 ~7 G0 b' O( x$ M+ G ~2 J2 A- U$ B! H* U
│ 21-Nginx使用make命令升级.avi" o9 w0 Z$ A8 a& I, M* E9 m! J: k) Y
│ 22-Nginx配置文件nginx.conf的文件结构.avi8 U2 M& R- {. ~) p* g
│ 23-Nginx全局块的user指令.avi8 M0 d6 A- m+ W# O- x
│ 24-Nginx全局块的工作进程的两个指令.avi e4 a, w+ x( v# X/ @7 L! R* u5 D( P `- {0 `2 a7 `
│ 25-Nginx全局块的其他配置指令.avi9 R$ _2 O3 x) L/ k6 p8 v1 W* U$ E2 s! N
│ 26-Nginx的events块指令讲解.avi/ ~- R2 x1 n& ~' n0 Y9 _
│ 27-Nginx的events块指令的配置使用.avi! S7 R& r+ {% W7 s8 l6 x$ r9 J# {. Z+ K8 t
│ 28-Nginx的http块MIME-Type的使用.avi" a9 `" u, ] D! j2 D I: x7 u. B6 B- @0 o- I. V
│ 29-Nginx的http块自定义服务日志.avi" S# v4 @' L: F1 z5 Q1 O& g% q ?, f9 z# L$ G* W0 }
│ 30-Nginx的http块其他的配置指令说明.avi/ m c! v/ u- g4 U8 t! ?( a( q8 N: \) ^6 C3 }- J. v
│ 31-Nginx的server块和location块的简单说明.mp4! h' V7 U; }1 I/ L5 N v3 Q, ]
│
0 p4 S7 T( M( [/ l/ @$ B$ W( {├─day02& T4 J9 H' z }, V6 [3 K$ }$ a
│ │ 笔记源码资料.rar- l$ R1 F1 _* \+ G$ B" w
│ │
! S8 _( D. g# o│ └─视频
* v5 }3 }. M8 K8 w- U│ 01-Nginx基础配置实例需求分析.mp4+ o9 z4 ?0 e0 o$ i8 E; u" V( p3 r# y# q H6 t
│ 02-Nginx基础配置实例配置实现.avi0 p) s$ s7 J) E) q' X% {% Y! N( w# {% j
│ 03-Nginx基础配置实例测试.avi
: b2 S# b' `# V$ E/ a4 @│ 04-Nginx配置成系统服务.avi
" n) {% i. A0 A: [│ 05-Nginx命令配置到系统环境.avi$ s) I; P/ K, {; j; R+ V$ S( U2 [/ ~
│ 06-Nginx静态资源概述.avi7 R4 l1 C6 K1 C% a8 [6 L
│ 07-Nginx配置指令之listen.avi1 H0 ?# S% q& C- J% J( u( l) v0 T& }/ B0 \7 p
│ 08-server_name精确匹配配置.avi$ R: @9 A* A2 b5 m, b9 l& Z, o
│ 09-server_name通配符匹配配置.avi, G# S) O5 h7 I% Z+ q/ k" l$ M0 G" e% W* S4 l" D( M/ o
│ 10-server_name正则表达式匹配配置.avi L! U/ V7 l( i
/ D O* [) Q# V8 L( ?│ 11-Nginx的server_name匹配执行顺序.avi" q1 R4 }# {5 Z4 B8 p& j
│ 12-Nginx的location指令.avi1 [* t! I% W, l3 y. n) Z
│ 13-Nginx的root和alias指令.avi" |" h6 \5 P" T9 c# Y$ w+ X# g" Q& G# C* G! ` C% O9 W
│ 14-Nginx的index指令.avi6 w* E4 H; @. d
3 s4 B4 K$ k/ P/ x1 W3 y│ 15-Nginx的error_page指令.avi& l3 I2 B, B, a8 V
! g5 s4 L2 a5 q* S7 h/ y│ 16-Nginx静态资源优化配置之sendfile.avi7 Q' i3 U* j; d' |/ v/ S$ A
│ 17-Nginx静态资源优化配置之tcp_nopush和tcp_nodelay.avi
% Y, E8 @& M5 V│ 18-Nginx静态资源压缩实战内容介绍.avi* g/ s0 e- h& L' { z8 O
( {9 z0 i7 O' R" W0 R" o) R, z S" r│ 19-Nginx的Gzip模块配置指令(一).avi6 E# D8 o, X4 [+ l
: O4 ]+ F- R5 p" R│ 20-Nginx的Gzip模块配置指令(二).avi3 g) |9 L4 t' h- M' }6 S1 q5 a- m4 h1 x' B
│ 21-Nginx的Gzip模块配置指令(三).avi: v8 Z0 v( g/ O7 ~6 K1 t
3 u& U$ ^ b% X│ 22-Nginx中Gzip压缩功能的实例配置.avi
6 N0 Y5 u- e0 n. A3 r+ [, u│ 23-Nginx的Gzip和sendfile的共存问题.avi
2 O* L$ _+ Z8 D, |) U" I, q. q│ 24-Nginx中添加gzip_static支持.avi. _5 c$ h7 ~" i3 l6 b3 t+ _ C7 \4 l6 J Y- `! w
│ 25-Nginx中gzip_static使用测试.avi. D7 r2 N$ t5 ~$ T, Y! n
│ 26-Nginx中浏览器缓存的相关概念.avi# {7 J( j8 t% ?* A6 W5 ?2 R- q
- p6 }% }0 l# y3 m4 a. A+ K│ 27-Nginx中浏览器缓存的执行流程.avi$ S$ d8 H- C( M* E4 L2 q# x9 K$ Y2 C; V
│ 28-浏览器强缓存和弱缓存的效果演示.avi; \# e9 _; D! _; P
│ 29-Nginx关于浏览器缓存相关的配置指令.avi$ C% _; P4 @* V J* \( T1 Q, W4 ~' g4 B: i( o8 { L, |
│ 30-Nginx跨域问题的原因分析.avi+ U( O8 q& u; o% z) R8 R" K4 g6 d' \7 r1 [2 ^6 g: p
│ 31-Nginx跨域问题的案例演示.avi
" k/ j( O B5 G5 z% t! G) x" {; Q7 f│ 32-Nginx解决跨域问题的具体实现.avi
0 w7 \; O* A+ H) ]. Q│ 33-Nginx静态资源盗链的效果展示.avi& A8 a- G# m3 k/ y
│ 34-Nginx防盗链的实现原理和实现步骤.mp4$ x' C9 _- D' ?" [1 ?' B$ d
│ . \6 o7 M9 U2 S( q
% `1 B6 _0 X# s6 s. F├─day03# W; T0 v9 |) o9 a8 X
│ │ 笔记源码资料.rar, Q' m0 k+ D' w. q& `; l( k
│ │ % t0 G- a0 _; ?
1 f* q; E! l t" I│ └─视频0 P6 J; m0 D! k+ ~ s. S' Y4 w
, R2 O5 Q/ g B+ p+ z" c+ Q6 Q│ 01-Nginx的rewrite内容介绍.mp4/ {) k' ]6 w. L# M a
│ 02-Nginx的rewrite之set指令.avi
$ @/ F, a1 O( G( e* d `; I8 m) p│ 03-Nginx的rewrite之if指令(一).avi( {8 Y Y% N G5 A
+ k, K' |5 P) m2 {1 [) e│ 04-Nginx的rewrite之if指令(二).avi$ K# X0 r4 o% n% f) D8 t6 t; L
│ 05-Nginx的rewrite之break指令.avi
2 l0 U: z$ }$ p( x. R│ 06-Nginx的rewrite之return指令.avi$ T) a, W& d. _
# o0 K6 H+ `/ e; ]│ 07-Nginx的rewrite之rewrite指令.avi
7 n0 L K4 i1 {│ 08-Nginx的rewrite之rewrite_log指令.avi1 h; i# K6 P4 l9 e5 [: L3 U3 `5 k' m3 W8 p. E2 s; a' c$ H) r
│ 09-Nginx的rewrite案例之域名跳转.avi r* _7 g. |0 J: r2 n, L8 h$ y, S5 r% Z3 P3 E+ i
│ 10-Nginx的rewrite案例之域名镜像.avi# C& l* E8 e5 j2 r
│ 11-Nginx的rewrite案例之独立域名.avi4 D& W, Y& S/ O4 c
│ 12-Nginx的rewrite案例之目录自动添加斜杠.avi/ s, U4 k3 V+ L4 O: G& X$ B3 N# D* ~8 `( }7 f! M1 L0 G: D
│ 13-Nginx的rewrite案例之目录合并.avi/ Z# f! B. J: ?$ ]5 @% a: |
1 U) a M+ U7 b│ 14-Nginx的rewrite案例之防盗链.avi9 T0 N. P! ^% o6 t( n0 o: ~+ ?! Y* {1 ~/ B& }! p
│ 15-Nginx代理概述及环境准备.avi* I1 w* \3 W$ J4 W) ~5 D" ~7 e
│ 16-Nginx正向代理实现.avi
: o* x/ V1 ]$ _, c/ W│ 17-Nginx反向代理之proxy_pass指令.avi8 F8 p8 Z& }! c! |1 Q: `( i! y# j+ k
│ 18-Nginx反向代理之proxy_set_header指令.avi* I3 Y0 ~% f4 X& p% x w& K0 Z* g7 \2 j, {+ v; _8 Z4 B2 d5 V6 V7 n
│ 19-Nginx反向代理之proxy_redirect指令.avi' ^ ^ L' u+ u" e8 ]$ d( R3 ]
8 }+ b J% S/ g/ Q│ 20-Nginx反向代理的实战案例.avi* L- c9 N1 R2 D( d: d
│ 21-Nginx的安全控制及SSL加密介绍.avi# h7 b" K; i: h h% B! q8 U R3 Z) K
5 q/ ?& C* ?8 _% B/ p│ 22-Nginx添加SSL的支持.avi7 i9 M) g' T- f5 g# m' Y
# [& h+ E% [; {" s: [1 U2 w- c│ 23-Nginx的SSL相关指令.avi) G$ P8 V, m* X" k* x4 i5 |: J5 t# q
│ 24-Nginx如何通过阿里云购买SSL证书简介.avi1 m, e0 e: ~( S6 \/ u E
│ 25-Nginx使用openssl生成证书文件.avi; h3 \- e, J+ b+ U a2 u L4 e8 I3 N- e" l/ i9 t6 R
│ 26-Nginx开启SSL支持实例配置.avi/ p8 v$ G2 Z' F( a' G4 t5 s: [' P. |) [5 g
│ 27-Nginx反向代理的系统优化.mp4& n K) I/ | o3 N& D" `; H4 T2 h
│ b& b0 K. B) N2 s; a
: }, x5 x3 ?5 p% ~) T0 @! K├─day046 u1 f! h( ^" p/ x: X4 f2 W
- v8 v3 C3 d% f9 x│ │ 笔记源码资料.rar. q7 ?4 o. ?, d1 o
# z/ B* \3 N5 n, C& n│ │ ; b7 Y2 Z$ G/ R; h! W. G; i7 ]4 F% P% W
│ └─视频% ?( O8 S, o% f2 w
8 u2 v& X" u( b9 e4 o│ 01-负载均衡概念.mp4+ N+ @7 L8 m1 b9 O( ^
% S8 n9 s1 I5 T4 G│ 02-负载均衡的原理及流程分析.avi, t+ t1 j; H$ H% e3 C' }1 ?
5 u0 f7 D8 Q; C! W1 s6 w7 G, W│ 03-负载均衡实现之用户手动选择与DNS轮询.avi# v1 f% l) a: k, }
│ 04-负载均衡实现之四层与七层负载.avi; v, Q, @4 x0 Q) P. o. J- N1 v7 A2 m( J7 s0 o# i x
│ 05-Nginx七层负载均衡配置.avi, t6 U0 c6 `) D, t6 x- T; Z
│ 06-Nginx负载均衡状态介绍.avi6 U. ^0 y7 j( B; b4 @/ ]
│ 07-Nginx负载均衡状态之down.avi% m1 ~+ D7 _& u) S; u( h: n2 j' l) [6 R
│ 08-Nginx负载均衡状态之backup.avi
3 `0 z0 j2 z! i9 W( s- i# Y; V│ 09-Nginx负载均衡状态值max_fails和fail_timeout.avi; b% v6 n# o7 h% @ [3 K5 w4 Y2 N3 l/ P6 Z6 W
│ 10-Nginx负载均衡策略介绍.avi* Z) |$ K& X7 `: j4 W' a! k8 E' Z2 c% {+ d2 ?( m- f
│ 11-Nginx负载均衡策略之轮询与加权轮询.avi( ^$ d. q7 v) m7 N2 V8 y7 @' \9 _
│ 12-Nginx负载均衡策略之ip_hash.avi; @8 Z. u, _- N5 p4 ]- ]% h2 K) H5 B
│ 13-Nginx负载均衡策略之least_conn.avi
/ x1 K! x) F* P% l6 J│ 14-Nginx负载均衡策略之url_hash.avi4 b: u7 X' l8 x0 v* I5 N- s2 n% B& m+ d) L5 c7 }
│ 15-Nginx负载均衡策略之fair介绍.avi: A) d% ^5 t8 l3 R7 y! Q: k' `' I3 ]
│ 16-Nginx负载均衡策略之fair的模块添加.avi3 w* Q7 d. N) E& R$ x2 _( a$ O6 ]
│ 17-Nginx七层负载均衡的案例.avi! ^8 ^0 i' n% Z: h3 m) J3 ?
│ 18-Nginx四层负载均衡模块添加.avi' N! }5 G3 Z' [' H5 i; ~* V% v4 e7 _* e
│ 19-Nginx四层负载均衡案例需求分析.avi |; X! C' ? J
│ 20-Nginx四层负载均衡案例实现(一).avi& |( N u9 ~6 g! l8 V" O, `
& B, b' e* E* o$ ~# P& `, O│ 21-Nginx四层负载均衡案例实现(二).avi# c6 t/ }& Q7 e- H& \ b! v& h) @$ d
│ 22-Nginx四层负载均衡案例实现(三).avi$ G$ p* }3 ^3 A. a
% a. d) d9 S% Y, s8 U _ u) E" k│ 23-Nginx四层负载均衡案例实现(四).avi1 g) C% x5 z K1 T1 l" o! x9 L- q" m
% U# J- B" i+ g0 n│ 24-Nginx缓存集成中缓存的概念.avi
8 z- l* S1 `* a- C3 s8 k1 m│ 25-Nginx缓存的实现流程与原理分析.avi- t; K! Q8 _2 i( }
( \7 E; p2 I8 d4 ~1 G9 I. q- X│ 26-Nginx缓存的实现指令之proxy_cache_path.avi1 e& t- f8 X+ q& }/ W
/ i( T1 d8 q: V8 h I- ^, F6 x│ 27-Nginx缓存的实现指令之其他指令.avi+ ^8 l5 n' N3 q: P7 Z' O5 a9 K. B+ Q- C* J
│ 28-Nginx缓存案例的需求分析.avi5 u9 @6 f) p: `2 W
│ 29-Nginx缓存案例实现(一).avi
( W Q# z: x- `7 V# y* G1 L│ 30-Nginx缓存案例实现(二).avi& l8 J5 l9 p& h1 ]0 X. Z4 c* e+ b$ {
│ 31-Nginx缓存案例实现(三).avi7 r* m9 z1 u9 S6 t; E/ _- O0 B" Y9 Q# Q, {6 @% X% N+ g
│ 32-Nginx清除缓存的实现方式.avi( N+ F; b" ^. C9 n/ L) W
│ 33-Nginx设置资源不缓存的指令介绍.avi
1 Y) ~) W1 p) V, t& u│ 34-Nginx设置资源不缓存的条件变量介绍.avi! N, M7 j; x* [ r+ h% D; p6 _5 W: H7 z: t
│ 35-Nginx设置资源不缓存的案例实现.mp4: q* d" E0 v6 \2 e0 ?5 k5 J
│
& [0 ]+ q* ]. ]! o. g- p├─day05" r9 o P; E; |7 ^$ s
4 r: _; }+ P( y* C│ │ 笔记源码资料.rar3 @2 Z" _- p. A7 n7 B' P6 K) g( ^$ H' l$ @) N# B
│ │ " L$ v: A+ O6 I+ W
, R5 X! C$ t& l# F# w% I│ └─视频( q8 ]% Y( l. j
│ 01-Nginx实现服务端集群搭建的需求分析.mp4
5 t; `/ ^& a0 l* O# H7 `) c│ 02-Nginx实现服务端集群搭建的Tomcat环境准备.avi9 {$ _2 b* F0 o5 X. d
│ 03-Nginx实现服务端集群搭建的Nginx环境准备.avi8 t8 m4 c9 z) @! A+ z5 g
0 s) O+ n: G: B: }│ 04-Nginx动静分离的概念介绍.avi; }9 \5 O( `% ?
│ 05-Nginx动静分离的实现.avi. f/ g! I; |/ W/ v/ c/ u& e1 e$ s: V( m) G# z; J
│ 06-Nginx部署tomcat集群环境的实现.avi. g# a2 b$ Y) d/ X
│ 07-Keepalived之VRRP原理分析.avi, I3 y& @" r0 ], J, t: ^, c8 T6 R) F% [! R' v5 k
│ 08-Keepalived之环境准备.avi, N6 F# S6 h" U! t8 ^2 j: X4 f8 Y: x0 h; g: x4 v/ Z
│ 09-Keepalived之配置文件.avi) G- T2 f0 t& E& q; W
2 ?$ J' ?) L8 L8 p* m/ H5 F│ 10-Keepalived之效果测试.avi) Q5 e+ o, n$ c" F+ G/ d" P$ ]3 W* u- F5 Z# n
│ 11-Keepalived之自动切换脚本实现.avi7 z4 r3 a2 U8 A9 p+ l. [- }2 H! @/ L7 p- z7 a& x+ [ C5 |
│ 12-Nginx制作下载站点.avi! @% }) ~5 L# x' _7 U# y8 m, n/ e6 k
, v, Q% B3 v8 o+ L' ^6 r│ 13-Nginx用户认证模块的使用.avi4 d1 l9 X7 k9 `5 g) Z; v! J6 L; ~2 C
│ 14-Lua的概念介绍.avi1 y2 f+ g9 Y c/ O: W0 l% U
" j* X! j2 V, B2 G! v3 v7 k; c│ 15-Lua的安装.avi
7 m" G) ]8 |- V│ 16-Lua的第一个案例交互式和脚本式使用.avi2 e* U+ `8 m5 [/ B$ U a1 A2 G, c' l) o' p! \! G" w! I* o# Z
│ 17-Lua的单行和多行注释.avi6 P1 c+ J5 L* G% V
│ 18-Lua的其他语法.avi5 m+ _1 e3 j7 n2 o( {* ?6 m1 C. t5 [6 D, L$ C* P6 t; ?3 o
│ 19-Lua的数据类型上.avi) o# i) k% t* M# i u0 m# C: ]* C. M
│ 20-Lua的数据类型中.avi
! R. `# M: d9 J* Q2 \8 `│ 21-Lua的数据类型下.avi: d5 `6 e/ N% l4 Q0 Q
6 q2 @( a6 L* l9 { M│ 22-Lua的条件判断.avi; @- D7 k2 X6 t3 R$ S
% G* N) h* c6 m$ W) Z' k│ 23-Lua的循环之while循环.avi8 R/ ~6 h9 l1 B6 `
│ 24-Lua的循环之repeat循环.avi
* \1 y% r/ Y9 U│ 25-Lua的循环之for循环.avi: I& a( d0 u7 J7 o! @9 i* c
│ 26-ngx_lua的环境准备之OpenResty搭建.avi5 g B0 _1 X* E6 N4 Z# K( p/ g
│ 27-ngx_lua的指令介绍.avi9 G4 S/ I8 @' f0 x1 I
& N [ @& \; k; F1 E' ?: f; Z│ 28-ngx_lua操作Redis的实现.avi$ Z' p, W. R( L9 ^" Q$ G9 g. y4 c' P6 ]6 ~3 c' W; }
│ 29-ngx_lua操作Mysql实现查询.avi9 ?+ V- m7 a( ]1 [. A, A9 F4 Z- M
│ 30-lua_cjson的使用.avi/ l5 b. |& M4 p7 [, @3 ?2 O$ k8 Z
& J/ j) _( v8 u3 F│ 31-ngx_lua操作Mysql实现增删改.avi. ?8 E1 U) r' ]! D' X! {5 e6 x& _, F% p) j( K1 K ?
│ 32-ngx_lua综合案例.mp45 M) }' R$ b) l) T$ S9 S# y; E" x6 S% h" a8 H6 d8 u$ a/ }
│ % R5 \$ `3 p3 A! g! f! m
└─大纲
% x3 l; o, v; ^, _ Nginx.xmind
1 u; K- c4 v7 J# ~8 d# j5 o |
|