为什么样本方差(sample variance)的分母是 n-1?

样本均值与样本方差的定义

首先来看一下均值,方差,样本均值与样本方差的定义
总体均值的定义:
μ = 1 n ∑ i = 1 n X i \mu=\frac{1}{n}\sum_{i=1}^{n} X_i μ=n1i=1nXi
也就是将总体中所有的样本值加总除以个数,也可以叫做总体的数学期望或简称期望

总体方差的定义:
σ 2 = 1 n ∑ i = 1 n ( X i − μ ) 2 \sigma ^2=\frac {1}{n}\sum_{i=1}^{n} (X_i-\mu)^2 σ2=n1i=1n(Xiμ)2
总体中全部样本各数值与总体均值差的平方和的平均数,用来衡量随机变量或一组数据离散程度的度量。

在实际应用中,我们一般是拿不到总体的均值与总体的方差,只能通过抽样得到的样本均值与样本方差来估计总体的均值与方差。于是我们就得到了样本均值和样本方差:
样本均值的定义
X ˉ = 1 n ∑ i = 1 n X i \bar {X}=\frac{1}{n}\sum_{i=1}^{n} X_i Xˉ=n1i=1nXi

样本方差的定义
S 2 = 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) 2 S^2=\frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar X)^2 S2=n11i=1n(XiXˉ)2

对比总体方差的公式,样本方差的公式的系数为什么变为了 1 n − 1 \frac{1}{n-1} n11

通俗理解-自由度

一个比较通俗的的理解就是自由度,可以理解为对应的独立信息量。样本均值和样本方差就是抽样后把所有的独立的信息量(这里的独立的信息量就是数值,包含了均值和方差的信息)平均得到,在计算样本方差时用 X ˉ \bar X Xˉ替代了总体均值 μ \mu μ,自由度减少了一个。

假设只采样了两个样本 X 1 , X 2 X_1,X_2 X1X2,这其中的信息量是多少呢?方差是计算样本之间的偏离程度,所以一个独立有效的信息量就是这个数值减去均值。在计算方差时分子有两项: ( X 1 − X ˉ ) 2 (X_1-\bar X)^2 (X1Xˉ)2 ( X 2 − X ˉ ) 2 (X_2-\bar X)^2 (X2Xˉ)2 . 要算第一个样本的偏离程度,毋庸置疑只能老老实实算 ( X 1 − X ˉ ) (X_1-\bar X) (X1Xˉ);但是,第二个样本呢?计算 ( X 2 − X ˉ ) (X_2-\bar X) (X2Xˉ) 吗?其实还有另外一种方法,因为 X ˉ = X 1 + X 2 2 \bar X=\frac{X_1+X_2}{2} Xˉ=2X1+X2 X 1 X_1 X1 X 2 X_2 X2 其实是对于 X ˉ \bar X Xˉ对称的。所以其实 ( X 2 − X ˉ ) = ( 2 X ˉ − X 1 − X ˉ ) = − ( X 1 − X ˉ ) (X_2-\bar X)=(2\bar X-X_1-\bar X)=-(X_1-\bar X) (X2Xˉ)=(2XˉX1Xˉ)=(X1Xˉ)。也就是我们在用样本均值 X ˉ \bar X Xˉ替代总体均值后,只要 X 1 X_1 X1确定了之后, X 2 X_2 X2是可以根据 X 1 X_1 X1推出来具体数值的,实际能够有效提供样本到 X ˉ \bar X Xˉ的偏移量的信息数只有一条 X 1 X_1 X1

我们对这种现象可以有一个表述:就是 ( X 2 − X ˉ ) (X_2-\bar X) (X2Xˉ) 是不自由的,因为从之前的式子可以推出它。当然,对称地,我们也可以说 ( X 1 − X ˉ ) (X_1-\bar X) (X1Xˉ)是不自由的。总之,这两个式子当中,只有一个是自由的,所以我们称这两个式子的自由度为 1.所以在两个样本求方差的时候要除1,应为实际应用到方差计算种的只有 ( X 1 − X ˉ ) (X_1-\bar X) (X1Xˉ)这一个有效信息。

同样,将样本数增加至三个,当有两个样本 X 1 , X 2 X_1,X_2 X1X2并且知道 X ˉ \bar X Xˉ的情况下,我们就可以推出第三个样本 X 3 X_3 X3的值,对应的自由度为 2.

以此类推,当我们有 n n n个样本的时候,其自由度为 n − 1 n - 1 n1.也就是说,当我们有 n n n 个样本的时候,我们虽然看起来在分子上做了 n n n 个减法,但实际上我们只算出了 n − 1 n - 1 n1 个偏差量。因此,做平均的时候,要除以的分母就是 n − 1 n - 1 n1

但是,为什么 n 个减法做完,自由度只有 n - 1?是谁从中搞鬼,偷走了一个自由度?答案很简单,是 X ˉ \bar X Xˉ 。注意在总体方差中,隐含的分布均值是 μ \mu μ ,这个均值是知道了总体的分布后计算出来的,而在样本方差中 μ \mu μ 是未知的,所以在估计方差之前,我们会需要先找一个 μ \mu μ 的代替,也就是 X ˉ \bar X Xˉ ,而 X ˉ \bar X Xˉ是根据样本算出来的. 也就是说,在用 X ˉ \bar X Xˉ 代替 μ \mu μ 的过程中,我们损失了一个自由度。

那么,如果问题的背景变了,我们知道隐含的分布均值 μ \mu μ ,只是不知道 σ 2 \sigma^2 σ2 ,那我们该如何估计 σ 2 \sigma^2 σ2?这种情况下求方差就变成了符合直觉的 ( X 1 − μ ) 2 + ( X 2 − μ ) 2 + ⋯ + ( X n − μ ) 2 n \frac{(X_1-\mu)^2+(X_2-\mu)^2+\dots+(X_n-\mu)^2}{n} n(X1μ)2+(X2μ)2++(Xnμ)2

严密推导过程

估计量的评选标准

当我们用抽样的方法去估计总体时,总是希望每次抽样的结果尽可能的靠近实际的总体评估量,同时抽取的样本越多时越接近实际的总体评估量。对于评估量的好坏有如下三个评价指标

无偏性

θ \theta θ是总体的未知参数, X 1 , X 2 , . . . . . X n X_1,X_2,.....X_n X1,X2,.....Xn是总体的一个样本, θ ^ \widehat \theta θ 是参数的一个估计量,若
E ( θ ^ ) = θ E(\widehat \theta)=\theta E(θ )=θ
则称 θ ^ \widehat \theta θ θ \theta θ的一个无偏估计量
无偏性简单来说就是取样后得到的估计量 θ ^ \widehat \theta θ 的期望就等于总体的估计量。

考虑如下一个打靶的例子。如果有一个射击高手打靶,那么结果总会在靶心附近(总体期望 θ \theta θ),那么我们一般会通过打靶结果(也就是样本 θ ^ \widehat \theta θ )认为这是一个熟练的射击手,对于多次的打靶结果我们对其打靶结果的期望是靶心( E ( θ ^ ) = θ E(\widehat \theta)=\theta E(θ )=θ),也就是无偏的。
在这里插入图片描述

但如果出现了如下这种结果,通过这些样本我们就会猜测集中在一点附近可能是一个射击高手,这个偏差可能是由于瞄准镜歪了这种导致的呢
在这里插入图片描述

对于这种稳定影响结果的因素导致的偏差称为系统偏差,也就是 E ( θ ^ ) − θ E(\widehat \theta)-\theta E(θ )θ。无偏估计的实际意义就是无系统偏差。很明显无偏估计更接近实际的总体统计量

有效性

θ ^ 1 {\widehat \theta}_1 θ 1 θ ^ 2 {\widehat \theta}_2 θ 2都是样本 X 1 , X 2 , . . . . . X n X_1,X_2,.....X_n X1,X2,.....Xn的无偏估计量,若对于任意取值范围里有 D ( θ ^ 1 ) ≤ D ( θ ^ 2 ) D({\widehat \theta}_1) \le D({\widehat \theta}_2) D(θ 1)D(θ 2),
θ ^ 1 {\widehat \theta}_1 θ 1 θ ^ 2 {\widehat \theta}_2 θ 2更加有效。
有效性就是同样无偏的估计量,更集中,方差更小的估计量更好
接着考虑如下打靶结果,虽然期望都是靶心,但是很明显后面的结果更加集中,相应的评估效果也会更好
在这里插入图片描述

相合性

之前的无偏性和一致性都是在样本容量固定为n的情况下讨论的,而如果样本容量越来越多时,一个估计量能稳定于待估的参数真值
相合性大样本条件下,估计值等于实际值.对于任意 θ > 0 \theta >0 θ>0,有
lim ⁡ n → ∞ P ( ∣ θ ^ − θ ∣ < ε ) = 1. \lim\limits_{n\to\infty}P\left(|\hat\theta-\theta| < \varepsilon\right)=1. nlimP(θ^θ<ε)=1.

推导

首先来看一下在分母为n的情况下样本方差是不是总体方差的无偏估计量:
E ( S 2 ) = E [ 1 n ∑ i = 1 n ( X i − X ˉ ) 2 ] = E [ 1 n ∑ i = 1 n ( ( X i − μ ) − ( X ˉ − μ ) ) 2 ] = E [ 1 n ∑ i = 1 n ( ( X i − μ ) 2 − 2 ( X i − μ ) ( X ˉ − μ ) + ( X ˉ − μ ) 2 ) ] = E [ 1 n ∑ i = 1 n ( X i − μ ) 2 − 2 n ( X ˉ − μ ) ∑ i = 1 n ( X i − μ ) + 1 n ( X ˉ − μ ) 2 ∑ i = 1 n 1 ] = E [ 1 n ∑ i = 1 n ( X i − μ ) 2 − 2 n ( X ˉ − μ ) ∑ i = 1 n ( X i − μ ) + ( X ˉ − μ ) 2 ] \begin{aligned} E(S^2) &= E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \bar X)^2 \right ] \\ &= E \left [ \frac{1}{n} \sum_{i=1}^{n} \Bigg( (X_i - \mu)-(\bar X - \mu) \Bigg)^2 \right ] \\ &= E \left [ \frac{1}{n} \sum_{i=1}^{n} \Bigg( (X_i - \mu)^2-2(X_i - \mu)(\bar X - \mu)+(\bar X - \mu)^2 \Bigg) \right ] \\ &= E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \mu)^2- \frac{2}{n} (\bar X - \mu) \sum_{i=1}^{n}(X_i - \mu)+ \frac{1}{n} (\bar X - \mu)^2 \sum_{i=1}^{n} 1 \right ] \\ &= E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \mu)^2- \frac{2}{n} (\bar X - \mu) \sum_{i=1}^{n}(X_i - \mu)+ (\bar X - \mu)^2 \right ] \end{aligned} E(S2)=E[n1i=1n(XiXˉ)2]=E n1i=1n((Xiμ)(Xˉμ))2 =E[n1i=1n((Xiμ)22(Xiμ)(Xˉμ)+(Xˉμ)2)]=E[n1i=1n(Xiμ)2n2(Xˉμ)i=1n(Xiμ)+n1(Xˉμ)2i=1n1]=E[n1i=1n(Xiμ)2n2(Xˉμ)i=1n(Xiμ)+(Xˉμ)2]

其中
X ˉ − μ = 1 n ∑ i = 1 n X i − 1 n ∑ i = 1 n μ = 1 n ∑ i = 1 n ( X i − μ ) \bar X - \mu=\frac{1}{n}\sum_{i=1}^{n} X_i-\frac{1}{n}\sum_{i=1}^{n} \mu=\frac{1}{n}\sum_{i=1}^{n} (X_i-\mu) Xˉμ=n1i=1nXin1i=1nμ=n1i=1n(Xiμ)

接着计算有:
E ( S 2 ) = E [ 1 n ∑ i = 1 n ( X i − μ ) 2 − 2 n ( X ˉ − μ ) ∑ i = 1 n ( X i − μ ) + ( X ˉ − μ ) 2 ] = E [ 1 n ∑ i = 1 n ( X i − μ ) 2 − 2 n ( X ˉ − μ ) ⋅ n ⋅ ( X ˉ − μ ) + ( X ˉ − μ ) 2 ] = E [ 1 n ∑ i = 1 n ( X i − μ ) 2 − ( X ˉ − μ ) 2 ] = E [ 1 n ∑ i = 1 n ( X i − μ ) 2 ] − E [ ( X ˉ − μ ) 2 ] = σ 2 − E [ ( X ˉ − μ ) 2 ] \begin{aligned} E(S^2) &= E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \mu)^2- \frac{2}{n} (\bar X - \mu) \sum_{i=1}^{n}(X_i - \mu)+ (\bar X - \mu)^2 \right ] \\ &= E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \mu)^2- \frac{2}{n} (\bar X - \mu) \cdot n \cdot (\bar X - \mu)+ (\bar X - \mu)^2 \right ] \\ &= E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \mu)^2- (\bar X - \mu)^2 \right ] \\ &= E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \mu)^2 \right ]- E \bigg [(\bar X - \mu)^2 \bigg ] \\ &= \sigma^2-E \bigg [(\bar X - \mu)^2 \bigg ] \end{aligned} E(S2)=E[n1i=1n(Xiμ)2n2(Xˉμ)i=1n(Xiμ)+(Xˉμ)2]=E[n1i=1n(Xiμ)2n2(Xˉμ)n(Xˉμ)+(Xˉμ)2]=E[n1i=1n(Xiμ)2(Xˉμ)2]=E[n1i=1n(Xiμ)2]E[(Xˉμ)2]=σ2E[(Xˉμ)2]
可以看到同样在除以 n n n的情况下只有当 X ˉ = μ \bar X = \mu Xˉ=μ时才有 E ( S 2 ) = σ 2 E(S^2)= \sigma^2 E(S2)=σ2,在其他情况下 E ( S 2 ) E(S^2) E(S2)都是小于 σ 2 \sigma^2 σ2的。这一个结果也很好理解,只要样本均值 X ˉ \bar X Xˉ越偏离总体均值 μ \mu μ,样本也就越偏离总体均值。

请添加图片描述
接下来就是要计算出差异 E [ ( X ˉ − μ ) 2 ] E \bigg [(\bar X - \mu)^2 \bigg ] E[(Xˉμ)2]是多少

E ( X ˉ ) = E ( 1 n ∑ i = 1 n X i ) = 1 n ∑ i = 1 n E ( X i ) = 1 n ∑ i = 1 n μ = μ E(\bar{X}) = E\bigg(\frac{1}{n} \sum_{i=1}^{n} X_i\bigg) = \frac{1}{n}\sum_{i=1}^nE(X_i) = \frac{1}{n}\sum_{i=1}^n \mu = \mu E(Xˉ)=E(n1i=1nXi)=n1i=1nE(Xi)=n1i=1nμ=μ
D ( a X i ) = a 2 D ( X i ) D(aX_i) = a^2 D(X_i) D(aXi)=a2D(Xi)
代入有:
E [ ( X ˉ − μ ) 2 ] = E [ ( X ˉ − E ( X ˉ ) ) 2 ] = D ( X ˉ ) = D ( 1 n ∑ i = 1 n X i ) = 1 n 2 ∑ i = 1 n D ( X i ) = 1 n 2 ⋅ n σ 2 = σ 2 n \begin{aligned} E \bigg [(\bar X - \mu)^2 \bigg ] &= E \bigg [(\bar X - E(\bar{X}))^2 \bigg ] \\ &=D(\bar{X})\\ &=D\bigg(\frac{1}{n} \sum_{i=1}^{n} X_i\bigg)\\ &=\frac{1}{n^2} \sum_{i=1}^{n} D(X_i) \\ &=\frac{1}{n^2} \cdot n \sigma^2 \\ &=\frac{\sigma^2}{n} \end{aligned} E[(Xˉμ)2]=E[(XˉE(Xˉ))2]=D(Xˉ)=D(n1i=1nXi)=n21i=1nD(Xi)=n21nσ2=nσ2
所以
E ( S 2 ) = σ 2 − E [ ( X ˉ − μ ) 2 ] = n − 1 n σ 2 E(S^2) = \sigma^2-E \bigg [(\bar X - \mu)^2 \bigg ] =\frac{n-1}{n}\sigma^2 E(S2)=σ2E[(Xˉμ)2]=nn1σ2

进行一下调整,即有
n n − 1 E ( S 2 ) = n n − 1 E [ 1 n ∑ i = 1 n ( X i − X ˉ ) 2 ] = E [ 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) 2 ] = σ 2 \frac{n}{n-1}E(S^2)=\frac{n}{n-1} E \left [ \frac{1}{n} \sum_{i=1}^{n} (X_i - \bar X)^2 \right ]=E \left [ \frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar X)^2 \right ]=\sigma^2 n1nE(S2)=n1nE[n1i=1n(XiXˉ)2]=E[n11i=1n(XiXˉ)2]=σ2

这样得到的就是无偏的估计

https://www.zhihu.com/question/20099757
https://www.zhihu.com/question/22983179

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/870160.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PHP】系统的登录和注册

一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞&#xff0c;这些漏洞可能被恶意攻击者利用&#xff0c;从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…

学习小型gpt源码(自用)

数据集构建_哔哩哔哩_bilibili &#xff08;b站上有一系列课&#xff0c;从数据处理到模型构建和训练使用&#xff09; 什么是batch&#xff1f; 为什么一个batch内的句子要一样长&#xff1f; 不同batch的长度可以不一样&#xff0c;但是同一个batch内长度一样&#xff01;…

DBeaver Ultimate 22.1.0 连接数据库(MySQL+Mongo+Clickhouse)

前言 继续书接上文 Docker Compose V2 安装常用数据库MySQLMongo&#xff0c;部署安装好之后我本来是找了一个web端的在线连接数据库的工具&#xff0c;但是使用过程中并不丝滑&#xff0c;最终还是选择了使用 DBeaver &#xff0c;然后发现 mongo 还需要许可&#xff0c;又折…

pdf格式过大怎么样变小 pdf文件过大如何缩小上传 超实用的简单方法

面对体积庞大的 PDF 文件&#xff0c;我们常常需要寻找有效的方法来缩减其大小。这不仅能够优化存储空间&#xff0c;还能提升文件的传输和打开速度。PDF文件以其稳定性和跨平台兼容性成为工作和学习中的重要文件格式。然而&#xff0c;当我们需要通过邮件发送或上传大文件时&a…

vue3 动态el-table表格 动态数据 新增修改删除的简单判断

<template><div class"app-container"><el-form:model"queryParams"ref"queryRef":inline"true"v-show"showSearch"label-width"68px"><el-form-item label"年份选择" prop"…

DevExpress中文教程 - 如何在.NET MAUI应用中实现Material Design 3?

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件&#xff0c;该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 获取DevExpress v24.1正式版下载 Material Design是一个由Google开发的跨平台指南系统…

iOS ------ Block的相关问题

Block的定义 Block可以截获局部变量的匿名函数&#xff0c; 是将函数及其执行上下文封装起来的对象。 Block的实现 通过Clang将以下的OC代码转化为C代码 // Clang xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m//main.m #import <Foundation/Foundation.…

60个常见的 Linux 指令

1.ssh 登录到计算机主机 ssh -p port usernamehostnameusername&#xff1a; 远程计算机上的用户账户名。 hostname&#xff1a; 远程计算机的 IP 地址或主机名。 -p 选项指定端口号。 2.ls 列出目录内容 ls ls -l # 显示详细列表 ls -a # 显示包括隐藏文件在内的所有内…

封装和桥接Unity 协程体系

简介 协程&#xff08;Coroutine&#xff09;在C#中是一种特殊的函数&#xff0c;它允许开发者编写可以暂停执行并在未来某个时刻恢复执行的代码块。协程通常用于实现异步操作&#xff0c;如延时执行、等待某个事件发生、或者分段执行复杂的任务。在Unity游戏引擎中&#xff0c…

Conda和Pip有什么区别?

conda和pip是Python中两种常用的包管理工具&#xff0c;它们在用途、包来源以及环境管理等方面存在区别。以下是具体分析&#xff1a; 用途 conda&#xff1a;conda是Anaconda发行版中的包管理工具&#xff0c;可以管理包括非Python软件包在内的各种包。它是一个全面的环境管理…

【数据结构】建堆算法复杂度分析及TOP-K问题

【数据结构】建堆算法复杂度分析及TOP-K问题 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】建堆算法复杂度分析及TOP-K问题前言一.复杂度分析1.1向下建堆复杂度1.2向上建堆复杂度1.3堆排序复杂度 二.TOP-K问…

Leetcode—769. 最多能完成排序的块【中等】

2024每日刷题&#xff08;149&#xff09; Leetcode—769. 最多能完成排序的块 实现代码 class Solution { public:int maxChunksToSorted(vector<int>& arr) {int ans 0;int mx INT_MIN;for(int i 0; i < arr.size(); i) {mx max(arr[i], mx);if(mx i) {a…

数据库安全:MySQL安全配置,MySQL安全基线检查加固

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这一章节我们需要知道MySQL的安全基线标准和加固方式。 MySQL基线检查 1、更新…

Cannot access org.springframework.context.ConfigurableApplicationContext

Cannot access org.springframework.context.ConfigurableApplicationContext SpringApplication.run曝红 解决方案&#xff1a; File -> Invalidate Cache and Restart 如果对你有用就点个赞&#xff01;

项目实战——外挂开发(30小时精通C++和外挂实战)

项目实战——外挂开发&#xff08;30小时精通C和外挂实战&#xff09; 外挂开发1-监控游戏外挂开发2-秒杀僵尸外挂开发3-阳光地址分析外挂开发4-模拟阳光外挂开发5-无限阳光 外挂开发1-监控游戏 外挂的本质 有两种方式 1&#xff0c;修改内存中的数据 2&#xff0c;更改内存中…

【Stable Diffusion】AI生成新玩法:图像风格迁移

【Stable Diffusion】 AI生成新玩法&#xff1a;图像风格迁移 1 背景导入 你是否曾梦想过让自己融入梵高的星空之中 或是将一幅风景画赋予毕加索的立体主义之魂 还是把人物送进宫崎骏的动画世界&#xff1f; 下面让我们来看看如何通过 Stable Diffusion 实现在图像中玩…

Java面试八股之什么是声明式事务管理,spring怎么实现声明式事务管理?

什么是声明式事务管理&#xff0c;spring怎么实现声明式事务管理&#xff1f; 声明式事务管理是一种编程范式&#xff0c;它允许开发人员通过声明性的配置或注解&#xff0c;而不是硬编码事务处理逻辑&#xff0c;来指定哪些方法或类应该在其上下文中执行事务。这种方法将事务…

【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(上)

【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(上) 大家好 我是寸铁&#x1f44a; 【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(上)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分&#xf…

学习React(描述 UI)

React 是一个用于构建用户界面&#xff08;UI&#xff09;的 JavaScript 库&#xff0c;用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用&#xff0c;屏幕上的所有内容都可以被分解成组件。在本章…

MongoDB教程(二十一):MongoDB大文件存储GridFS

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、GridFS…