大Op和小op的含义及理解

news2025/1/11 2:33:27

大Op和小op的含义及理解

Stochastic order notation(随机有序符号)

大Op(big oh-pee),或者用代数术语记为 O p O_p Op,是用来表示随机变量序列的概率收敛的一种速记方法。

O p O_p Op意味着,某些给定的随机变量是随机有界的。若 X n X_n Xn为某个随机变量, a n a_n an表示某些常数,其中n表示序列的索引符号,则
X n = O p ( a n ) X_n=O_p(a_n) Xn=Op(an)
等同于说,
P ( ∣ X n a n ∣ > δ ) < ϵ , ∀ n > N P(|\frac{X_n}{a_n}|>\delta)<\epsilon, \forall n>N P(anXn>δ)<ϵ,n>N.

其中 δ \delta δ N N N是有限的数, ϵ \epsilon ϵ是某个任意(小)的数。 O p O_p Op意味着当 n n n足够大时,存在某个数( δ \delta δ)使得随机变量 X n a n \frac{X_n}{a_n} anXn大于 δ \delta δ的概率基本为0.它是“bounded in probability”(可能翻译为:依概率有界)(Vaart 1998, sec.2.2).

o p o_p op(little oh_pee)是指依概率收敛到0。
X n = o p ( 1 ) X_n=o_p(1) Xn=op(1)
等同于说,
lim ⁡ n → ∞ P ( ∣ X n ∣ ≥ ϵ ) = 0 , ∀ ϵ > 0. \lim_{n\rightarrow \infty} P(|X_n|\geq\epsilon)=0,\forall \epsilon>0. nlimP(Xnϵ)=0,ϵ>0.

根据 o p o_p op的定义,如果 X n = o p ( a n ) X_n=o_p(a_n) Xn=op(an),则 X n a n = o p ( 1 ) . \frac{X_n}{a_n}=o_p(1). anXn=op(1).反过来,我们可以将 X n = o p ( a n ) X_n=o_p(a_n) Xn=op(an)表示为
lim ⁡ n → ∞ P ( ∣ X n a n ∣ ≥ ϵ ) = 0 , ∀ ϵ > 0. \lim_{n\rightarrow\infty}P(|\frac{X_n}{a_n}|\geq\epsilon)=0, \forall\epsilon>0. nlimP(anXnϵ)=0,ϵ>0.
换句话说, X n = o p ( a n ) X_n=o_p(a_n) Xn=op(an)当且仅当 X n a n ⟶ p 0. \frac{X_{n}}{a_n} \stackrel{p}{\longrightarrow}0. anXnp0.

6.1.1 O p O_p Op o p o_p op之间的关系

看上去 O p O_p Op o p o_p op很像,那是因为它们确实很像!
另一种表达 X n = O p ( a n ) X_n=O_p(a_n) Xn=Op(an)的方式是通过数学语言,即
∀ ϵ > 0 , ∃ N ϵ , δ ϵ , s . t . ∀ n > N ϵ , P ( ∣ X n a n ∣ ≥ δ ϵ ) ≤ ϵ . \forall \epsilon>0,\exists N_{\epsilon},\delta_{\epsilon}, s.t. \forall n>N_\epsilon, P(|\frac{X_n}{a_n}|\geq\delta_\epsilon)\leq\epsilon. ϵ>0,Nϵ,δϵ,s.t.∀n>Nϵ,P(anXnδϵ)ϵ.

上述这种数学语言表达形式清楚地表明, N N N δ \delta δ的选择与 ϵ \epsilon ϵ有关,即对于每个 ϵ \epsilon ϵ,可以在该 ϵ \epsilon ϵ下,找到满足上述不等式的 N N N δ \delta δ。不同的 ϵ \epsilon ϵ下, N N N δ \delta δ值可以是不同的。

同样,我们可以使用相同的数学语言表示 X n = o p ( a n ) X_n=o_p(a_n) Xn=op(an),即
∀ ϵ , δ , ∃ N ϵ , δ , s . t . ∀ n > N ϵ , δ , P ( ∣ X n a n ∣ ≥ δ ) ≤ ϵ . \forall \epsilon, \delta, \exists N_{\epsilon, \delta}, s.t. \forall n>N_{\epsilon,\delta}, P(|\frac{X_n}{a_n}|\geq\delta)\leq \epsilon. ϵ,δ,Nϵ,δ,s.t.∀n>Nϵ,δ,P(anXnδ)ϵ.

因此,从上述关于 O p O_p Op o p o_p op的数学语言表达可以看出, o p o_p op是一个更general的说法,因为 o p o_p op涵盖了(1) ϵ \epsilon ϵ δ \delta δ所有值,以及(2) ϵ \epsilon ϵ δ \delta δ的任意组合。此外,通过上述数学语言表达可以看出, o p ( a n ) o_p(a_n) opan)蕴含着 O p ( a n ) O_p(a_n) Op(an),即如果 X n = o p ( a n ) X_n=o_p(a_n) Xn=op(an),那么一定有 X n = O p ( a n ) X_n=O_p(a_n) Xn=Op(an)。因为,根据 o p o_p op的数学语言表达,对于任意的 ϵ \epsilon ϵ δ \delta δ都可以找到满足上述不等式的 N N N,那么对任意的 ϵ \epsilon ϵ,可以从上述任意的 δ \delta δ中找到要给 δ \delta δ以及 N N N,使得有不等式成立。但是,仅仅对某个 δ \delta δ有不等式成立,这不意味着对所有的 δ \delta δ,不等式都成立。

6.2 符号速记及其算数性质

X n = o p ( 1 ( n ) ) X_n=o_p(\frac{1}{\sqrt(n)}) Xn=op(( n)1)的表达不包含任意的文字。 O p O_p Op o p o_p op只是用来表达随机变量序列如何收敛(要么收敛到一个bound,要么收敛到0)。

例如,假设 X n = o p ( 1 n ) X_n=o_p(\frac{1}{n}) Xn=op(n1),因此我们也直到 X n = o p ( 1 n 0.5 ) X_n=o_p(\frac{1}{n^{0.5}}) Xn=op(n0.51).类似的,想象一个物体以至少10 m s − 2 ms^{-2} ms2的速度加速,那辆车也在以至少 5 m s − 2 5ms^{-2} 5ms2.但是,并不是说 o p 1 n = o p ( 1 n 0.5 ) o_p{\frac{1}{n}}=o_p(\frac{1}{n^{0.5}}) opn1=op(n0.51).例如,加速至少5 m s − 2 ms^{-2} ms2的汽车不一定加速至少10 m s − 2 ms^{-2} ms2

因此,当我们使用这些随机顺序符号时(stochastic order notation,准确的翻译没有查),我们应该认为这些 o p o_p op O p O_p Op意味着什么,而不是说随机变量序列或者包含随机变量的表达式等于某个 o p o_p op O p O_p Op.

下面给出 O p O_p Op o p o_p op组合项的含义:

  • o p ( 1 ) + o p ( 1 ) = o p ( 1 ) o_p(1)+o_p(1)=o_p(1) op(1)+op(1)=op(1):这两项都是以相同的速率收敛到0,那么其和以该速率收敛到0. 注意到,这是连续映射定理(continuous mapping theorem)的一个简单应用。因为,如果 X n = o p ( 1 ) , Y n = o p ( 1 ) X_n=o_p(1),Y_n=o_p(1) Xn=op(1),Yn=op(1),则 X n ⟶ 0 p , Y n ⟶ 0 p X_n\stackrel{p}{\longrightarrow 0},Y_n\stackrel{p}{\longrightarrow 0} Xn0p,Yn0p,则由两项的相加是一个连续映射函数,因此, X n + Y n ⟶ p 0 X_n+Y_n\stackrel{p}{\longrightarrow}0 Xn+Ynp0,所以 X n + Y n = o p ( 1 ) . X_n+Y_n=o_p(1). Xn+Yn=op(1).
  • O p ( 1 ) + o p ( 1 ) = O p ( 1 ) O_p(1)+o_p(1)=O_p(1) Op(1)+op(1)=Op(1):一个依概率有界的项 加上 依概率收敛到0的项,等于依概率有界。
  • O p ( 1 ) o p ( 1 ) = o p ( 1 ) O_p(1)o_p(1)=o_p(1) Op(1)op(1)=op(1):一个依概率有界的项 乘以 (以相同顺序)依概率收敛到0的项等于依概率收敛到0.
  • o p ( R ) = R × o p ( 1 ) o_p(R)=R\times o_{p}(1) op(R)=R×op(1):这很容易看出,因为如果 X n = o p ( R ) X_n=o_{p}(R) Xn=op(R),则 X n / R = o p ( 1 ) X_n/R=o_p(1) Xn/R=op(1),因此, X n = R o p ( 1 ) X_{n}=Ro_{p}(1) Xn=Rop(1).

进一步的规则和对其有效性的直观解释可以在Vaart (1998)的第2.2节中找到。

然而,上述最后一条规则值得简单的讨论以下,因为它清楚的说明了,为什么我们在 o p o_{p} op算子中使用不同的速度rate项R。

考虑两个速度rate R ( 1 ) = 1 ( n ) R^{(1)}=\frac{1}{\sqrt(n)} R(1)=( n)1, R ( 2 ) = 1 2 1 3 R^{(2)}=\frac{1}{2^{\frac{1}{3}}} R(2)=2311,随机变量序列 Y n ⟶ 0 p Y_n\stackrel{p}{\longrightarrow 0} Yn0p,即 Y n = o p ( 1 ) Y_n=o_p(1) Yn=op(1).

根据上述最后一条性质,并且我们要时刻记住,其中等号不应该按照字面意思来理解。

X n ( 1 ) = o p ( R ( 1 ) ) X_n^{(1)}=o_p(R^{(1)}) Xn(1)=op(R(1)),则
X n ( 1 ) = 1 n × Y n , X_{n}^{(1)}=\frac{1}{\sqrt{n}}\times Y_n, Xn(1)=n 1×Yn,

X n ( 2 ) = o p ( R ( 2 ) ) X_n^{(2)}=o_p(R^{(2)}) Xn(2)=op(R(2)),则
X n ( 2 ) = 1 n 1 3 × Y n , X_{n}^{(2)}=\frac{1}{n^{\frac{1}{3}}}\times Y_n, Xn(2)=n311×Yn,

n n n趋于无穷时,对于 Y n Y_n Yn的每个值, X n ( 1 ) X_n^{(1)} Xn(1) X n ( 2 ) X_n^{(2)} Xn(2)小,换句话说, X n ( 1 ) X_n^{(1)} Xn(1)收敛于0的速度更快。

6.3 为什么 o p o_p op O p O_p Op符号很有用?

这里我们通过一个简单的例子对此进行说明。考虑一个随机变量序列 X n X_n Xn,其期望为 E ( X n ) = X E(X_n)=X E(Xn)=X,因此 X n = X + o p ( 1 ) X_n=X+o_p(1) Xn=X+op(1),根据弱大数定律(weak law of large numbers)知 X n ⟶ X p X_n\stackrel{p}{\longrightarrow X} XnXp。这是非常有用的,因为我们不必在方程中引入明确的极限,在 X n = X + o p ( 1 ) X_n=X+o_p(1) Xn=X+op(1)中的第二项收敛于零,因此我们可以忽略它。

考虑一个更有意义的例子。若 X n ∼ N ( 0 , n ) X_n\sim N(0,n) XnN(0,n)。根据正态分布的性质知,
X n ( n ) ∼ N ( 0 , 1 ) \frac{X_n}{\sqrt(n)}\sim N(0,1) ( n)XnN(0,1)

存在某个 M M M使得从 N ( 0 , 1 ) N(0,1) N(0,1)中生成的某个数超过 M M M的概率小于 ϵ > 0 \epsilon>0 ϵ>0,因此
X n = O p ( ( n ) ) X_n=O_p(\sqrt(n)) Xn=Op(( n))

同时 X n = o p ( n ) X_n=o_p(n) Xn=op(n)

下面我们证明 X n = o p ( n ) X_n=o_p(n) Xn=op(n)

由于
X n n ∼ N ( 0 , n n 2 ) = N ( 0 , 1 n ) \frac{X_n}{n}\sim N(0,\frac{n}{n^2})=N(0,\frac{1}{n}) nXnN(0,n2n)=N(0,n1)

我们只需要证明 N ( 0 , 1 n ) = o p ( 1 ) N(0,\frac{1}{n})=o_{p}(1) N(0,n1)=op(1)即可,这样有 X n n = o p ( 1 ) \frac{X_n}{n}=o_p(1) nXn=op(1),进而 X n = n o p ( 1 ) = o p ( n ) X_n=no_p(1)=o_p(n) Xn=nop(1)=op(n)

注意到
P ( ∣ N ( 0 , 1 n ) ∣ > ϵ ) = P ( 1 ( n ) ∣ N ( 0 , 1 ) ∣ > ϵ ) = P ( ∣ N ( 0 , 1 ) ∣ > ( n ) ϵ ) ⟶ 0 p P(|N(0,\frac{1}{n})|>\epsilon)=P(\frac{1}{\sqrt(n)}|N(0,1)|>\epsilon)=P(|N(0,1)|>\sqrt(n)\epsilon)\stackrel{p}{\longrightarrow 0} P(N(0,n1)>ϵ)=P(( n)1N(0,1)>ϵ)=P(N(0,1)>( n)ϵ)0p

最后一项成立,是因为 ( n ) → ∞ \sqrt(n)\rightarrow \infty ( n),故来自标准正态分布的数大于∞的概率降低到0,因此 X n = o p ( n ) X_n=o_p(n) Xn=op(n)

使用大O和小o表示,捕捉了方程的复杂性,或者等价地捕捉了方程收敛的速度。一种理解 X n = o p ( a n ) X_n=o_p(a_n) Xn=op(an)的方式是, X n X_n Xn通过由 a n a_n an确定的速度收敛到0。例如, o p ( a n 2 ) o_p(a_n^2) op(an2)的收敛速度比 o p ( a n ) o_p(a_n) op(an)快,因为对随机变量序列 X n X_n Xn X n a n 2 < X n a n , n > 1 \frac{X_n}{a_n^2}<\frac{X_n}{a_n},n>1 an2Xn<anXn,n>1.

当我们想要计算一个更复杂的方程的渐近极限时,其中多个项受到观测个数(即样本量)的影响。如果我们有一个项比其他项更快的依概率收敛到0,那么我们完全可以忽略这个项。

6.4例子:均值估计的相合性

如果一个参数的估计量,随着样本量n的增加,参数的估计量依概率收敛到一个参数,则该估计量是“相合的”(consistent)。更正式的表示为,一个参数估计 θ ^ \hat{\theta} θ^是相合估计,若
P ( ∣ θ ^ − θ ∣ ≥ ϵ ) ⟶ 0 p P(|\hat{\theta}-\theta|\geq\epsilon)\stackrel{p}{\longrightarrow 0} P(θ^θϵ)0p
其中 θ \theta θ是参数真值。

一个感兴趣的问题:我们的这个相合估计向参数真值收敛的速度如何。这个一个“应用”方法的问题,为寻求对参数真值进行推断,对这个参数,我们可能得到许多不同的估计量,我么希望从中挑选一个有效的估计量,即一个能最快达到参数真值的估计量。

假如我们想要估计 X X X的总体均值,即 X ˉ \bar{X} Xˉ。此时我们有两个潜在的估计量,样本均值 1 N ∑ i = 1 N X i \frac{1}{N}\sum_{i=1}^{N}X_{i} N1i=1NXi,中位数 X ( N + 1 ) / 2 X_{(N+1)/2} X(N+1)/2,其中 N = 2 n + 1 N=2n+1 N=2n+1.(为了便于计算,我们假设样本量N为奇数),X是从小到大的有序序列。

由中心极限定理知,样本均值
X ˉ N ∼ N ( 0 , δ 2 N ) \bar{X}_N\sim N(0,\frac{\delta^2}{N}) XˉNN(0,Nδ2)

不需要证明可以给出,中位数估计量的大样本分布可以近似地表示为:
M e d ( X 1 , X 2 , ⋯   , X N ) ∼ N ( θ , π δ 2 2 N ) Med(X_{1},X_{2},\cdots,X_{N})\sim N(\theta,\frac{\pi\delta^2}{2N}) Med(X1,X2,,XN)N(θ,2Nπδ2).

这些估计量在实践中表现如何?我们通过蒙特卡洛模拟来进行说明。通过模拟,我们可以绘制上述两个估计量的最终分布。

在这里插入图片描述
从图中我们可以看到,这两个估计量都是服从正态分布,样本均值分布的方差比样本中位数估计量的方差收缩的快,也就是说,样本中位数估计量的方差比样本均值的方差大,从图中我们可以看到,绿色(表示中位数估计量)图像是扁平的,红色(均值估计量)是瘦长的,红色取值相对较集中,绿色取值相对较分散,说明绿色的方差大。换句话说,红色的估计更有效。这里的有效性体现了我们在数学上提到的,样本均值收敛到参数真值的收敛速度比中位数估计量收敛到参数真值的收敛速度快!

值得注意的是,上述两个估计量都是无偏估计,都是服从正态分布,并且都是相合估计(随着样本量的增加,估计量向参数真值收敛),但是方差缩小的速度略有不同。

我们可以使用 o p o_p op符号在大样本下,对这些估计量进行刻画。

首先,我们定义均值估计的估计误差和中位数估计的估计误差,即
ψ M e a n = θ ^ − θ = N ( 0 , δ 2 N ) − N ( θ , 0 ) = N ( 0 , δ 2 N ) . \psi_{Mean}=\hat{\theta}-\theta=N(0,\frac{\delta^2}{N})-N(\theta,0)=N(0,\frac{\delta^2}{N}). ψMean=θ^θ=N(0,Nδ2)N(θ,0)=N(0,Nδ2).

ψ M e d = N ( θ , π δ 2 2 N ) − N ( θ , 0 ) = N ( 0 , π δ 2 2 N ) . \psi_{Med}=N(\theta,\frac{\pi\delta^2}{2N})-N(\theta,0)=N(0,\frac{\pi\delta^2}{2N}). ψMed=N(θ,2Nπδ2)N(θ,0)=N(0,2Nπδ2).

从上面的表达式中,我们可以看到,估计量的估计误差以0为中心,估计量是无偏的。

根据本章前面的讨论,我们可以对上述两个估计量重新进行改写,以找出这两个估计量的收敛到参数真值的速度。

ψ M e a n = 1 ( N ) N ( 0 , δ 2 ) \psi_{Mean}=\frac{1}{\sqrt(N)}N(0,\delta^2) ψMean=( N)1N(0,δ2)
ψ M e a n N − 0.5 = N ( 0 , δ 2 ) . \frac{\psi_{Mean}}{N^{-0.5}}=N(0,\delta^{2}). N0.5ψMean=N(0,δ2).

我们知道,对于一个正态分布,存在某个 M ϵ M_{\epsilon} Mϵ N ϵ N_{\epsilon} Nϵ,使得
P ( ∣ N ( 0 , δ 2 ) ∣ ≥ M ϵ < ϵ ) P(|N(0,\delta^2)|\geq M_{\epsilon}<\epsilon) P(N(0,δ2)Mϵ<ϵ),
因此, ψ M e a n = O p ( 1 ( N ) ) . \psi_{Mean}=O_{p}(\frac{1}{\sqrt(N)}). ψMean=Op(( N)1).

类似的,对于样本中位数:
在这里插入图片描述
因此,我们可以看到 ψ M e d \psi_{Med} ψMed ψ M e a n \psi_{Mean} ψMean要慢,意味着Mean比Med需要更少的样本量就可以收敛到参数真值。

参考:

https://bookdown.org/ts_robinson1994/10_fundamental_theorems_for_econometrics/big-op-and-little-op.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于大模型GPT,如何提炼出优质的Prompt

基于大模型实现优质Prompt开发 1. 引言1.1 大规模预训练模型 2. Prompt开发2.1 Prompt基本定义&#xff1a;2.2 为什么优质Prompt才能生成优质的内容2.3 如何定义优质的Prompt 3. Prompt优化技巧3.1 迭代法3.1.1 创作评估3.1.2 基础创作3.1.3 多轮次交互 3.2 Trick法3.2.1 戴高…

【MySQL入门实战4】-发行版本及安装概述

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

python+django基于爬虫系统的世界历史时间轴历史事件大事记6ouj9

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

chatgpt赋能Python-python_pyuserinput

介绍 Python是一种极其流行的编程语言&#xff0c;可以用于多种任务&#xff0c;例如数据分析、机器学习、Web开发等等。 Python社区非常活跃&#xff0c;因此有许多模块和库可以用于各种任务&#xff0c;包括用户输入和自动化。 PyUserInput是一个Python库&#xff0c;它提供…

C#,码海拾贝(22)——线性方程组求解的全选主元高斯-约当消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> …

小航编程题库机器人等级考试理论一级(2022年9月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:C 第1题使用下列工具不能省力的是&#xff1f;&#xff08; &#xff09; A、斜面B、动滑轮C、定滑轮D…

深度学习笔记之循环神经网络(五)循环神经网络的反向传播过程

深度学习笔记之循环神经网络——循环神经网络的反向传播过程 引言回顾&#xff1a;循环神经网络的前馈计算过程场景构建前馈计算描述 反向传播过程各参数的梯度计算各时刻损失函数梯度计算损失函数对各时刻神经元输出的梯度计算 Softmax \text{Softmax} Softmax回归的梯度计算关…

chatgpt赋能Python-python_pyzmq

Python和pyzmq&#xff1a;高效的分布式计算 Python是一种高级的、面向对象的编程语言&#xff0c;因其易学易用以及可扩展性而备受青睐。其中&#xff0c;用于消息传递和异步I/O操作的pyzmq库&#xff0c;使Python成为一个高效的分布式计算平台。 Pyzmq的概述 Pyyzmq是Pyth…

chatgpt赋能Python-python_peak

Python Peak - 程序员必备技能 Python Peak 指的是 Python 的高峰和巅峰。Python 是一种高级编程语言&#xff0c;已成为数据科学和软件开发领域中最流行的语言之一。在 Python Peak 中&#xff0c;程序员能够利用 Python 的最佳实践和工具&#xff0c;最大化地发挥出 Python …

Java——JDK1.8新特性

目录 一、Lambda 表达式 &#xff08;一&#xff09;Lambda 表达式语法 &#xff08;二&#xff09;类型推断 二、函数式接口 &#xff08;一&#xff09;自定义函数式接口 &#xff08;二&#xff09;作为参数传递Lambda 表达式 &#xff08;三&#xff09;Java 内置四…

随身WIFI恢复日记

引言 因为折腾WIFI棒子的过程中&#xff0c;不小心砖了。现在需要重新刷一下机&#xff0c;所以把之前的过程的细节给梳理一下 1 、恢复 使用备份镜像文件恢复随身WIFI&#xff0c;使用MIKO软件将文件刷写到EMMC中。等待一会就好了 2 、原始分区 既然已经恢复成原始镜像了&…

chatgpt赋能Python-python_qrcode解码

Python QR码解码&#xff1a;了解QR码及其在Python中的使用 QR码&#xff08;Quick Response Code&#xff09;也被称为二维条码&#xff0c;是一种可以储存文本、链接等信息的矩阵条码。QR码已广泛应用于各个行业&#xff0c;例如商业广告、政府宣传、电子票据等领域。Python…

python+django+vue医院门诊挂号预约管理系统57wsx

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 主要功能有&#xff1a;管理员功能&#xff1a;系统首页、个人中心、用户管理、医生管理…

RK3568平台开发系列讲解(环境篇)10min带你获取、了解与编译U-Boot源代码

🚀返回专栏总目录 文章目录 一、U-Boot获取二、U-Boot根目录2.1 api/2.2 arch/2.3 board/2.4 cmd/2.5 common/2.6 config/2.7 disk/2.8 drivers/2.9 dts/2.10 env/2.11 fs/2.12 Makefile、Kbuild、Kconfig、config.mk2.13 mak

Redis+LUA脚本结合AOP实现限流

文章目录 1、demo结构2、自定义接口3、编写写LUA脚本4、通过AOP切面识别需要限流的接口编写切面AOP通知类型 5、Redis限流自定义异常构建Redis限流自定义异常声明这个类为全局异常处理器专属日志 6、流量限制器RateLimiterRateLimitAlgApiLimitRateLimitRuleRuleConfig 7、Guav…

消息hook

一、消息hook的定义 消息 Hook&#xff08;Message Hook&#xff09;是一种编程技术&#xff0c;用于拦截、监视和处理计算机程序中传递的消息或事件。它通常用于操作系统、图形界面框架、应用程序框架等软件系统中&#xff0c;允许开发人员在特定的事件发生时执行自定义代码。…

chatgpt赋能Python-python_pubsub

Python PubSub - 一个高效的事件通知机制 在软件开发中&#xff0c;事件驱动编程是一种广泛使用的编程模型。在该模型中&#xff0c;应用程序中的各个组件通过发布和订阅事件来进行通信。Python PubSub是Python中一个有用的事件通知机制&#xff0c;它允许应用程序中不同部分通…

volatile是线程安全的吗?它的底层原理如何实现的?

目录 一、线程安全三要素 二、可见性&#xff08;强制刷新主内存&#xff09; 三、有序性&#xff08;禁止指令重排序&#xff09; 四、总结 一、线程安全三要素 1&#xff09;原子性&#xff1a; 一个操作或者多个操作&#xff0c;要么全部执行成功&#xff0c;要么全部执…

Kali-linux使用NVIDIA计算机统一设备架构(CUDA)

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使用GPU能够解决复杂的计算问题。它包含了CUDA指令集架构&#xff08;ISA&#xff09;及GPU内部的并行计算引擎。用户可以使用NVIDIA CUDA攻击使用哈希…

chatgpt赋能Python-python_pyusb

了解Python pyusb Python pyusb是Python的USB库&#xff0c;用于与USB设备进行通信。它提供了一个Pythonic的API&#xff0c;使得与USB设备进行通信变得非常简单。 什么是Python pyusb Python pyusb是一个Python的USB库&#xff0c;用于与USB设备进行通信。它是基于libusb的…