Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11250|回复: 48

Nginx核心知识100讲【全】价值129元2019年新

[复制链接]

该用户从未签到

11

主题

143

帖子

285

积分

普通会员

Rank: 2

积分
285
发表于 2022-6-3 06:15:02 | 显示全部楼层 |阅读模式
├─1 第一章 初识Nginx│      01 - 课程综述.mp4' k0 P& q  ]( ?0 V
│      02. Nginx 适用于哪些场景?.mp4# l  a2 D6 e- r5 H* M
│      03. Nginx 出现的历史背景.mp4, i, R6 O4 B$ k8 u
  C% i, e4 E: G6 C' `' ?│      04. 为什么用 Nginx:它的 5 个主要优点.mp4
( q1 W( @" z5 @7 \' g8 s│      05. Nginx 的四个主要组成部分.mp4
' |, P8 @6 V3 S5 j│      06. Nginx 的版本发布历史.mp4" ?. y0 I# t  p( z+ w3 W; R2 |& X
│      07. 选择哪一个 Nginx 发行版本?.mp44 w, [& P4 h. _# x5 J& S9 ], o
│      08. 编译出适合自己的 Nginx.mp4: U( I+ h8 B0 z
9 t2 {/ Q3 f' G" }9 J│      09. Nginx 配置文件的通用语法介绍.mp4! J8 r2 o. X# b9 L9 |2 M) V3 @4 L
+ ^8 n8 O# o/ l3 \' H8 J6 h& s│      10. Nginx 命令行及演示:重载、热部署、日志切割.mp4( f. r9 \+ i9 W1 X" S: ^0 J6 Z* f
6 {8 ^- S; c2 C# L" d) U, @│      11. 用 Nginx 搭建一个可用的静态资源 Web 服务器.mp4, c. h& V/ t0 \* ^
│      12. 用 Nginx 搭建一个具备缓存功能的反向代理服务.mp4$ x# p; K) e. L9 ^/ N9 t  a) t  ~/ q$ \7 c* S
│      13. 用 GoAccess 实现可视化并实时监控 access 日志.mp4: n. t! T5 t9 F
; F0 X- Z* i) u8 R0 K│      14. 从网络原理来看 SSL 安全协议.mp4! O6 t3 \& E0 n) y: P' K8 s1 p6 T% s1 I2 b6 j0 o: @8 u8 I* s) b1 Y
│      16. SSL 证书的公信力是如何保证的?.mp49 k6 O0 T! b+ D+ E2 c" L  D$ o4 [
" ~, y; U2 [9 T1 B│      17. SSL 协议握手时 Nginx 的性能瓶颈在哪里?.mp4
3 |3 H, I  |  E9 r; h8 ?; r3 Z5 G│      18. 用免费 SSL 证书实现一个 HTTPS 站点.mp4
. \$ ]% m( B' z' d8 ~, x! {- S│      19. 基于 OpenResty 用 Lua 语言实现简单服务.mp4' k/ W! V5 {& g$ O4 e! m' c& R* @
│      Nginx核心知识100讲-第一部分课件.pdf+ u# F% k+ h% U  @( K* p% S. I3 m
│      $ q* |7 e. ?5 O
9 m, a! N5 f6 @  G- X# {7 v4 i) x├─2 第二章 Nginx架构) E3 k: [% c7 p+ i) Y! R. j. z
│      20 Nginx的请求处理流程.mp4* q2 K) I" P4 j* M: `; ~3 _. A0 l# g% I& ^
│      21 Nginx的进程结构.mp4% |& J* C, |, ?! x+ T
│      22 Nginx的进程结构实例演示.mp42 z' F+ G9 a7 I0 Q: }! }
│      23 使用信号管理Nginx的父子进程.mp4/ L2 {7 |7 t( A) y3 c' q
$ V. p3 C4 V( G( A│      24 reload重载配置文件的真相.mp41 O1 L+ f( M& O5 U
│      25 热升级的完整流程.mp47 ]) n. }9 d+ D! f
│      26 优雅地关闭worker进程.mp4
# N! h9 R) `8 j: K# b4 |│      27 网络收发与Nginx事件间的对应关系.mp4* D  @) l' q* d9 A) B7 F
│      28 Nginx网络事件实例演示.mp4/ \, T7 h- ?  ~6 D
│      29 Nginx的事件驱动模型.mp4
, m0 |$ E3 V9 T" r$ m( c) H, r/ _│      30 epoll的优劣及原理.mp41 c5 r* ~9 N3 w& }! _0 O4 D2 _, a* x; Q6 C: k; ?
│      31 Nginx的请求切换.mp4
3 {! y" V# m6 Y) f│      32 同步&异步、阻塞&非阻塞之间的区别.mp42 A, x  n7 }" m4 A- k6 d! r& I1 P
│      33 Nginx的模块究竟是什么?.mp42 h5 J1 U" g: |; m; G* N3 }4 @) f( _& C
│      34 Nginx模块的分类.mp44 q: e7 R* x3 i& z: B% s
7 P+ _" r. [9 Y7 Z│      35 Nginx如何通过连接池处理网络请求.mp4
. Y* S4 o7 K" e7 {4 i& `; w│      36 内存池对性能的影响.mp4* j# Z" V! }9 G  Y
" E2 }5 x4 \( i0 G& V│      37 所有worker进程协同工作的关键.mp4% u; c0 n$ }$ D# ]; X. d7 Z. q( D3 S0 i" Q% {  w6 J4 \
│      38 用好共享内存的工具 Slab管理器.mp4: g% X' j7 @+ p' k! e8 @" p/ V
│      39 哈希表的max_size与bucket_size如何配置.mp4) f4 _) f( X* c6 }  f3 S* J7 e. n6 p2 O( Q; Y+ s- z" p
│      40 Nginx中最常用的容器 红黑树.mp4- _0 x, Q3 A2 [! {) o  F- d. m7 L; n* l
│      41 使用动态模块来提升运维效率.mp4
6 y3 r7 [! R* F: S│      
& |# J5 n! ?+ w! o- ?6 D% w├─3 第三章 详解HTTP模块* B! L/ S7 d3 a* i$ Y
% p9 k7 F& d; F, N│      42 - 冲突的配置指令以谁为准?.mp4* u* L  d& a2 K5 X
│      43 - Listen指令的用法.mp43 R- w9 U: J/ N; l; v
│      44 - 处理HTTP请求头部的流程.mp4: P2 Y+ M! {' w9 y! J2 A: o% k! W
│      45 - Nginx中的正则表达式.mp47 X% Y* z7 ^7 @9 t2 B: g% X  p+ q/ v3 J* s
│      46 - 如何找到处理请求的server指令块.mp4* y! n5 m* n. P! Z) g$ E) z. J9 z, c# i5 D
│      47 - 详解HTTP请求的11个阶段.mp4: o8 P5 Z9 l7 J; S' n. r' y
│      48 - 11个阶段的顺序处理.mp4
- Z: @' Q; k( j7 V│      49 - postread阶段:获取真实客户端地址的realip模块.mp46 {" a' \2 |: \: Z4 z
9 V1 K- h6 G7 J1 C( D) w% ^│      50 - rewrite阶段的rewrite模块:return指令.mp4+ i: v- a# e, Q, k+ I, r! T* L
│      51 - rewrite阶段的rewrite模块:重写URL.mp41 L$ \2 I  C7 k8 J" K4 \: c
│      52 - rewrite阶段的rewrite模块:条件判断.mp49 J) p! s2 M. r/ p  l' d  [
+ m6 B# R: J2 X. f, k) m0 Y! R) Z│      53 - find_config阶段:找到处理请求的location指令块.mp4; o1 `7 M. D7 J
│      54 - find_config阶段:找到处理请求的location指令块.mp4- g& I0 K7 N' @5 M' q: [. h
* k% X! p& w  ^6 v2 I│      55 - preaccess阶段:对连接做限制的limit_conn模块.mp41 G  d2 V, M2 Z2 Q- s" D& o( A) T: H, p& W4 H+ k
│      56 - preaccess阶段:对请求做限制的limit_req模块.mp4  i( {+ R: z3 J; X+ v. j5 v( K7 N/ D/ L. H
│      57 - access阶段:对ip做限制的access模块.mp4% s' D. w5 P( J/ }9 {: {! o/ I
9 v; k+ c8 Y5 U* {│      58 - access阶段:对用户名密码做限制的auth_basic模块.mp4
2 E( H% H& l; R& a│      59 - access阶段:使用第三方做权限控制的auth_request模块.mp4
; p  C: ?7 W7 q" n4 g* ~│      60 - access阶段的satisfy指令.mp4* D' Y$ ]  a  f$ o" O
/ U- N! B1 P% o( v│      61 - precontent阶段:按序访问资源的try_files模块.mp4, o* e5 k! g  E5 C4 _# }+ I
│      62 - 实时拷贝流量:precontent阶段的mirror模块.mp46 f: C! I# ^) @% G: D) f: o3 u4 A' N/ R( D; ?$ n
│      63 - content阶段:详解root和alias指令.mp4
7 u* W7 B4 s  o, G% e│      64 - static模块提供的3个变量.mp4
8 o4 m! S; [( ^% l3 F4 Q│      65 - static模块对url不以斜杠结尾却访问目录的做法.mp4! \1 H* R) [' ~0 N7 O5 Z
3 c$ ~, T" T6 H- Q3 e3 N' D' W│      66 - index和autoindex模块的用法.mp49 V( N3 O" `& y+ c* K( p% ~+ ~' ]. l0 ]
│      67 - 提升多个小文件性能的concat模块.mp4# t  s( a, i3 E5 ?% D! b/ o) T8 Q9 [
: h9 s. D8 I4 [6 v% Z' E: t│      68 - access日志的详细用法.mp4
# ]* U  c7 Q3 A& s" J1 M8 N│      69 - HTTP过滤模块的调用流程.mp4* R9 ]* P0 }' w8 c0 W. v3 L6 o! f+ N2 R
3 L4 g" s$ X0 C7 Z6 G│      70 - 用过滤模块更改响应中的字符串:sub模块.mp4
( Z) U: }. y! G" l4 T$ `9 a/ Q│      71 - 用过滤模块在http响应的前后添加内容:addition模块.mp47 y0 i: s, r3 U8 d3 b, O2 B
4 Q# C! b/ M2 L, w. G( n3 e3 X│      72 - Nginx变量的运行原理.mp4
5 w+ p# c4 ~% U$ W; B3 c/ p6 Q│      73 - HTTP框架提供的请求相关的变量.mp41 M3 r* |6 |; Z/ e) X- d
│      74 - HTTP框架提供的其他变量.mp4) f/ t+ |$ F, _
│      75 - 使用变量防盗链的referer模块.mp4
1 j3 J+ q! a, Q$ ^# K9 K│      76 - 使用变量实现防盗链功能实践:secure_link模块.mp4
2 Q. N  P3 X' |/ D; W! A2 |│      77 - 为复杂的业务生成新的变量:map模块.mp46 u1 E7 I- c& R0 J, W  [* `6 i
│      78 - 通过变量指定少量用户实现AB测试:split_client模块.mp4- u' p: A2 k5 Z4 z$ S, ~! j: e' @8 H  P6 k9 _6 n- q6 Q) g
│      79 - 根据IP地址范围的匹配生成新变量:geo模块.mp4' A% N9 Q" x- l6 I' m. A( G" a
% I/ G* K5 A4 b  }" S│      80 - 使用变量获得用户的地理位置:geoip模块.mp4% N- _; x7 P5 g" _5 o/ X3 K+ U1 U$ M, i# k4 U" P- z% _& R* C
│      81 - 对客户端使用keepalive提升连接效率.mp4
- g3 N3 c1 m% h/ M: j, ~1 G│      ( r' U* s! U+ h# g' k
' P: F/ L* O$ s# s* W├─4 第四章 反向代理与负载均衡( g' p/ ?( H' a* T# e7 r
( y+ J6 T) n. b# p! M│      82 - 反向代理与负载均衡原理.mp4; l: [+ T! n$ X( j% ?! r
│      83 - 负载均衡策略:round-robin.mp4
* l. {% ~9 H5 V│      84 - 负载均衡哈希算法:ip_hash与hash模块.mp4+ l$ r" J! c( W' J% m) ]: b0 ]; r3 m
│      85 - 一致性哈希算法:hash模块.mp4$ I1 R+ M9 `! P- x" [3 P7 N# c6 D$ t
* v; z, v. v- N2 Y/ Q% r) L6 b3 M, _│      86 - 最少连接算法以及如何跨worker进程生效.mp4
# W% v+ s6 H+ p' N' |│      87 - http upstream模块提供的变量.mp4$ r% f4 H! P" c) N
│      88 - http反向代理proxy处理请求的流程.mp4( X* z; p4 |2 g) C% K2 d% m
; f7 M8 G' Y& S│      89 - proxy模块中的proxy_pass指令.mp47 V* N& x2 F' z$ |) U2 {0 x
│      90 - 根据指令修改发往上游的请求.mp46 |) N  W- }( e1 N  h6 K, x9 |
│      91 - 接收用户请求包体的方式.mp45 O8 ?7 |* [% E
' o- h9 A+ l* ?  e│      92 - 与上游服务建立连接.mp40 ~0 B: j% e' x/ {2 L# a' A, m% P4 n, y1 D- Q
│      93 - 接收上游的响应.mp4
6 `$ t! n5 D3 x- F/ u$ C& M│      94 - 处理上游的响应头部.mp4
5 q& P. K- D7 H( A" X6 E! `│      95 - 上游出现失败时的容错方案.mp4  c" D7 y& ]$ K1 G7 H
, _9 m7 J# r8 e" c5 T: m# ]│      96 - 对上游使用SSL连接.mp4: L6 ~6 G4 y( y6 z+ P
' S. }; I  s6 E7 z2 h: ]│      97 - 用好浏览器的缓存.mp40 B/ w* N# M/ K! F# A2 l9 X# G. T$ x6 M4 ~4 R
│      98 - Nginx决策浏览器过期缓存是否有效.mp4+ _8 i8 f4 g8 A
$ G* I! o5 ?" q$ S) |│      99 - 缓存的基本用法.mp45 ]- c. n- L& J; [7 L
│      100 - 对客户端请求的缓存处理流程.mp4+ V$ _* x+ Y) G' a& k" u6 n9 K6 d9 F0 w& @: x) t0 F3 x( V
│      101 - 接收上游响应的缓存处理流程.mp4
, F, |6 q0 F. c. ]! a8 q│      102 - 如何减轻缓存失效时上游服务的压力.mp4
3 l1 G1 X" [; }, k+ W0 ^, p$ s│      103 - 及时清除缓存.mp49 @' K5 F3 ~/ V7 T& }2 u* J
│      104 - uwsgi、fastcgi、scgi指令的对照表.mp4" F" _2 R& h4 C5 j5 R+ ?; ~" w( _
│      105 - memcached反向代理的用法.mp4: f& t1 G2 Y7 k# C3 m
; F4 M: Z: N* D9 R% c4 F│      106 - 搭建websocket反向代理.mp4
! h/ o4 e( A6 N& s) Q2 }│      107 - 用分片提升缓存效率.mp4
. x' c9 J: I8 A& b+ P! d- S0 \( A│      108 - open file cache提升系统性能.mp49 T% X# p( E* ^# z/ ~2 ?7 E$ X8 r/ u$ q- H2 H. W7 s
│      109 - http2协议介绍.mp4. a+ B# }4 p$ _' V& H. U7 z) Z; h2 i8 i& u8 F
│      110 - 搭建http2服务并推送资源.mp40 T$ C* g) P6 r  g. Y, N" g0 m! k( c' S
│      111 - grpc反向代理.mp4
& g2 z6 o2 h! I7 }5 @│      112 - stream四层反向代理的7个阶段及常用变量.mp40 b. y, M( V5 l0 ^: f, M- j  E; H
│      113 - proxy protocol协议与realip模块.mp48 Y! d2 [! F  F' R% Y6 H! q- x
+ u7 I! ~; |1 Z2 ~2 {│      114 - 限并发连接、限IP、记日志.mp4
0 R. _( a: ^! H4 Y( s0 B7 z. S│      115 - stream四层反向代理处理SSL下游流量.mp4
7 @4 Q, m0 W. C; Z│      116 - stream_preread模块取出SSL关键信息.mp4
* P( ]2 W1 s. b6 p! I' n3 |8 \6 |0 l, K│      117 - stream proxy四层反向代理的用法.mp4" \0 U( C" w: e& M5 u9 R7 n
& q- X! j* X& }2 F. S│      118 - UDP反向代理.mp48 j% j1 t/ k. ]5 j" S- o2 J' U9 L
$ A2 [, @: ^6 D; q  R& c│      119 - 透传IP地址的3个方案.mp4
8 w8 I7 ^; K3 S; S' I│      ' G3 r. C$ X! \5 P9 ~0 o+ b; U! L3 P0 m1 o9 s
├─5 第五章 Nginx的系统层性能优化9 x4 Q$ }. e$ i) p) q1 ?
, |1 J5 K" l1 R│      120 - 性能优化方法论.mp4" g/ n/ U/ V& T% f3 S7 O3 Z+ v4 ~
│      121 - 如何高效使用CPU.mp4" F3 o' {! z, l/ {. r3 d
) Q! I; [+ r. f│      122 - 多核间的负载均衡.mp4
' D/ [. `6 x+ E7 `9 n( E, A# [│      123 - 控制TCP三次握手参数.mp4& S0 [3 I( o5 U0 f4 _' p
│      124 - 建立TCP连接的优化.mp4, a0 n. g) M7 j6 a, [2 p
+ u4 y5 `8 N  G9 L│      125 - 滑动窗口与缓冲区.mp4
8 z0 }' z9 n  L2 p; P1 M! l│      126 - 优化缓冲区与传输效率.mp4
% L: K& O9 r& }: o9 A% D│      127 - 慢启动与拥塞窗口.mp4$ M  K' C# W' ]7 u6 ~% p' ]/ [# @
│      128 - TCP协议的keepalive功能.mp4
3 h% [/ h1 _3 F! B$ e│      129 - 减少关闭连接时的time_wait端口数量.mp4
6 U3 U3 [0 [3 k0 U5 _, c& E8 l│      130 - lingering_close延迟关闭TCP连接.mp4
1 e4 y+ a" e, A9 G- D7 Q) c+ Y│      131 - 应用层协议的优化.mp4) K& {- L2 ^1 K8 r8 n
$ D. F( W  i" [6 x) i! H8 w│      132 - 磁盘IO的优化.mp4. ?4 M3 X! v: u' E$ J6 Z6 G9 n4 G" Q: v4 C8 R+ v% ^# n3 v, M% }' U% F4 y
│      133 - 减少磁盘读写次数.mp4
7 i3 ?! {1 Y# v1 u7 Z6 x: l: m. D│      134 - 零拷贝与gzip_static模块.mp4- N5 h, J! E2 U' q# e
│      135 - 用tcmalloc优化内存分配.mp4. M  b7 e+ v( D4 n4 H  J5 Z9 w2 S( O# B0 m8 `* e$ u
│      136 - 使用Google PerfTools分析Nginx.mp4* L# Z& V2 @7 R% u; T* d$ I2 S
│      137 - 使用stub_status模块监控Nginx的状态.mp4
8 O7 x3 j: k# P│      % `, N' a' B7 x& v. I# {
└─6 第六章 从源码角度深入使用Nginx与OpenResty8 |8 E" ?) \$ _8 ]# Y  f9 ^, ^
0 c7 @+ b6 X6 A6 V& z5 t& `( y        138 - 第三方模块源码的阅读.mp4+ H. q$ I4 f" T" d7 ^1 C
        139 - Nginx的启动流程.mp4
8 x9 A0 t! g/ W+ o0 K# _; p# T        140 - HTTP第三方模块的初始化.mp4
0 d) w: ^$ D6 K% I# X! h: o        141 - if指令是邪恶的吗?.mp45 |6 S# e) R  Q6 {' J# v/ L" O
  y2 i8 a4 D3 P8 s* R8 T        142 - 解读Nginx的核心转储文件.mp4" C$ r! Q6 @: d+ w, A+ \$ [+ G- D1 ]7 H! }) M
        143 - 通过debug日志定位问题.mp48 z1 O9 b4 E- q
# ?. Q* B7 t/ j! W- n        144 - OpenResty概述.mp4
* Z+ d# p* {3 x% X- y3 G( [6 h        145 - OpenResty中的Nginx模块与Lua模块.mp4/ f3 M! |- @( G( u  W5 d& M, M7 c' P1 q+ W! T
        146 - 如何在Nginx中嵌入Lua代码.mp4
7 z& [! {/ [' J0 _* O        147 - OpenResty中Lua与C代码交互的原理.mp46 }" Y$ S5 r. d. D; B+ {
' t7 Y0 j* z( M+ E- D" R' C        148 - 获取、修改请求与响应的SDK.mp4+ b3 B) `, z) W
" E. \, i# {' L; g* [        149 - 工具类型的SDK.mp4! s0 [8 t6 I" ^; V- J" [3 r( i' m, V7 D
        150 - 同步且非阻塞的底层SDK:cosocket.mp4$ P  w! D) i  H. m- ?  S0 d8 m$ x  n$ ~& z# i, e4 v
        151 - 基于协程的并发编程SDK.mp4
  ?2 [/ h) R- s/ f0 s% ^' G2 ?% l        152 - 定时器及时间相关的SDK.mp48 g; _/ ]# p9 ~1 C0 u: Y4 Z; z% T4 d* F* K' N6 C$ t
        153 - share.DICT基于共享内存的字典.mp4
. l7 O/ Z/ a1 }6 L9 K' c6 ]; U        154 - 子请求的使用方法.mp49 l: k5 }& n, N- n( w+ S
        155 - 基于OpenResty的WAF防火墙.mp4
, i6 G  [" D0 h7 R
6 ^# H) L6 M# {下载地址:
/ D9 s  i( S0 o& o0 Q7 h8 u
! d* U8 b4 `+ b0 X9 U; o
+ g3 A% H$ h5 o* ]/ P" I
资源下载地址和密码(百度云盘):
游客,如果您要查看本帖隐藏内容请回复
[/hide] 百度网盘信息回帖可见% N8 M) S8 [6 r  B/ |" w, `

7 Z7 I( \2 @$ I
# R+ U1 {* e- v! B5 H. r& P
" C3 g% k! O4 b6 Y' V% j1 v本资源由Java自学网收集整理【www.javazx.com】
回复

使用道具 举报

该用户从未签到

6

主题

167

帖子

338

积分

普通会员

Rank: 2

积分
338
发表于 2022-6-3 05:21:46 | 显示全部楼层
如果您要查看本帖隐藏内容请回复
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

175

帖子

348

积分

普通会员

Rank: 2

积分
348
发表于 2022-6-3 05:33:42 | 显示全部楼层
132123123123
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

176

帖子

357

积分

普通会员

Rank: 2

积分
357
发表于 2022-6-3 05:37:31 | 显示全部楼层
感谢。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

159

帖子

269

积分

普通会员

Rank: 2

积分
269
发表于 2022-6-3 05:46:59 | 显示全部楼层
6666666666
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

160

帖子

320

积分

普通会员

Rank: 2

积分
320
发表于 2022-6-3 05:48:36 | 显示全部楼层
kankanhaovuhao1
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

169

帖子

340

积分

普通会员

Rank: 2

积分
340
发表于 2022-6-3 05:58:18 | 显示全部楼层
感谢分享!!!
回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

187

帖子

386

积分

普通会员

Rank: 2

积分
386
发表于 2022-6-3 06:04:54 | 显示全部楼层
好像是极客时间的。
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

172

帖子

338

积分

普通会员

Rank: 2

积分
338
发表于 2022-6-3 06:13:43 | 显示全部楼层
感谢分享谢谢了
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

151

帖子

309

积分

普通会员

Rank: 2

积分
309
发表于 2022-6-3 06:18:11 | 显示全部楼层
thansk a lot
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Java自学网

GMT+8, 2025-2-22 18:47 , Processed in 1.700942 second(s), 25 queries .

Powered by Javazx

Copyright © 2012-2022, Javazx Cloud.

快速回复 返回顶部 返回列表