机器学习笔记之优化算法(十一)凸函数铺垫:梯度与方向导数

news2024/11/28 4:44:01

机器学习笔记之优化算法——凸函数铺垫:梯度与方向导数

引言

本节作为介绍凸函数的铺垫,简单介绍方向导数与梯度

回顾:偏导数

二元函数 f ( x , y ) f(x,y) f(x,y)为例,其关于变量的偏导数表示:三维空间中,曲面上某一点沿着 x x x轴方向或 y y y轴方向变化的速率。也就是说:
梯度下降法——铺垫中解释过,下图中描述斜率的红色切线不是方向;真正描述方向的是红色箭头。

  • ∂ f ( x , y ) ∂ x = f x ( x , y ) \begin{aligned}\frac{\partial f(x,y)}{\partial x} = f_x(x,y)\end{aligned} xf(x,y)=fx(x,y)表示函数 f ( x , y ) f(x,y) f(x,y)沿着 x x x轴方向的斜率
    下图中 P \mathcal P P沿着 x x x轴方向的红色直线所描述的斜率
  • 同理, ∂ f ( x , y ) ∂ y = f y ( x , y ) \begin{aligned}\frac{\partial f(x,y)}{\partial y} = f_y(x,y)\end{aligned} yf(x,y)=fy(x,y)表示函数 f ( x , y ) f(x,y) f(x,y)沿着 y y y轴方向的斜率。
    下图中 P \mathcal P P沿着 y y y轴方向的红色直线所描述的斜率
    偏导数图像示例

f ( x , y ) f(x,y) f(x,y)在点 P ( x 0 , y 0 ) \mathcal P(x_0,y_0) P(x0,y0)关于 x , y x,y x,y的偏导数分别表示如下:
第一个公式即: y = y 0 y=y_0 y=y0不变,观察变量 x x x的斜率; x x x同理。
{ f x ( x 0 , y 0 ) = lim ⁡ Δ x ⇒ 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x f y ( x 0 , y 0 ) = lim ⁡ Δ y ⇒ 0 f ( x 0 , y + Δ y ) − f ( x 0 , y 0 ) Δ y \begin{cases} \begin{aligned} & f_x(x_0,y_0) = \mathop{\lim}\limits_{\Delta x \Rightarrow 0} \frac{f(x_0 + \Delta x,y_0) - f(x_0,y_0)}{\Delta x} \\ & f_y(x_0,y_0) = \mathop{\lim}\limits_{\Delta y \Rightarrow 0} \frac{f(x_0,y+\Delta y) - f(x_0,y_0)}{\Delta y} \end{aligned} \end{cases} fx(x0,y0)=Δx0limΔxf(x0+Δx,y0)f(x0,y0)fy(x0,y0)=Δy0limΔyf(x0,y+Δy)f(x0,y0)
观察上图中的 P \mathcal P P点,它仅仅在 x , y x,y x,y两个方向(红色箭头)上有导数吗 ? ? ?并不是,在其他方向同样可以存在导数。由此,引出方向导数 ( Directional Derivative ) (\text{Directional Derivative}) (Directional Derivative)的概念。
例如下图中 P \mathcal P P点,其导数方向可以有很多。例如黄色箭头描述的方向。
其他方向-方向导数示例

方向余弦

关于某向量 l ⃗ \vec l l 在坐标系中表示如下:
向量l在坐标系中的表示
在坐标系中记作 l ⃗ = ( a , b ) \vec l =(a,b) l =(a,b);如果要将 l ⃗ \vec l l 单位化,得到单位向量 l ⃗ o \vec l^{o} l o,则执行:
l ⃗ o = 1 a 2 + b 2 ( a , b ) = ( a a 2 + b 2 , b a 2 + b 2 ) \begin{aligned} \vec l^{o} & = \frac{1}{\sqrt{a^2 + b^2}} (a,b) \\ & = \left(\frac{a}{\sqrt{a^2 + b^2}},\frac{b}{\sqrt{a^2 + b^2}}\right) \end{aligned} l o=a2+b2 1(a,b)=(a2+b2 a,a2+b2 b)
观察上图,可以将 a a 2 + b 2 = cos ⁡ α , b a 2 + b 2 = sin ⁡ α = cos ⁡ β \begin{aligned}\frac{a}{\sqrt{a^2 + b^2}} = \cos \alpha,\frac{b}{\sqrt{a^2 + b^2}} = \sin \alpha = \cos \beta\end{aligned} a2+b2 a=cosα,a2+b2 b=sinα=cosβ,最终 l ⃗ o \vec l^{o} l o可表示为: ( cos ⁡ α , cos ⁡ β ) (\cos \alpha,\cos \beta) (cosα,cosβ)
也就是说,单位向量可以表示成这种方向余弦的形式。

方向导数

方向导数的几何意义

依然以上述图形示例:可能存在各种各样(黄色箭头)的方向,这里以黄色直线箭头为例,该方向的在函数图像中的投影会呈现一条轨迹(黄色实线):
实际上这条轨迹就是 P \mathcal P P点,在该方向朝向的、与坐标平面 X O Y \mathcal X\mathcal O\mathcal Y XOY垂直的平面把 f ( x , y ) f(x,y) f(x,y)截断产生的图像
方向与投影
去掉其他多余的箭头,过 P ( x 0 , y 0 ) \mathcal P(x_0,y_0) P(x0,y0)对应的函数结果位置做一条切线,而切线的斜率即函数在 P \mathcal P P点处的斜率(黑色直线):
其中黄色菱形表示截断平面中间由实线与虚线组成的类似梯形的区域表示截面,只不过虚线部分的轨迹并不是当前方向对应的轨迹,不是我们我们关注的对象。
P在某方向上的切线斜率
由此可见: P \mathcal P P点的 36 0 o 360^o 360o方向上,每一个方向都存在一个截面,随着方向的变化,对应的函数结果 f ( x 0 , y 0 ) f(x_0,y_0) f(x0,y0)在截面上的位置得到不同的切线(斜率)结果
准确来说是截线而不是截面,因为函数 f ( ⋅ ) f(\cdot) f()空心

方向导数的定义

如何定义方向导数 ? ? ?见下图:
方向导数的定义

上述图像描述 X O Y \mathcal X\mathcal O\mathcal Y XOY平面上, P ( x 0 , y 0 ) \mathcal P(x_0,y_0) P(x0,y0)点沿着 l ⃗ \vec l l 方向前进了一个极小的长度 t t t并到达 A \mathcal A A点,对应 P \mathcal P P在函数上的映射结果 z 0 = f ( x 0 , y 0 ) z_0= f(x_0,y_0) z0=f(x0,y0)也会沿着对应的轨迹移动一个距离,并达到新的位置 z 0 ′ z_0' z0;假设 Δ Z = ∣ z 0 − z 0 ′ ∣ \Delta \mathcal Z = |z_0 - z_0'| ΔZ=z0z0,对应的方向导数可表示为:
lim ⁡ t ⇒ 0 Δ Z t \mathop{\lim}\limits_{t \Rightarrow 0} \frac{\Delta \mathcal Z}{t} t0limtΔZ
已知 P \mathcal P P点坐标是 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),并且已知距离 t t t以及对应的 α , β \alpha,\beta α,β夹角,因而可以得到 A \mathcal A A的坐标: A ( x 0 + t ⋅ cos ⁡ α , y 0 + t ⋅ cos ⁡ β ) \mathcal A (x_0 + t \cdot \cos \alpha,y_0 + t \cdot \cos \beta) A(x0+tcosα,y0+tcosβ)。最终可以将 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处关于向量 l ⃗ \vec l l 的方向导数 ∂ Z ∂ l ⃗ ∣ ( x 0 , y 0 ) \begin{aligned}\frac{\partial \mathcal Z}{\partial {\vec l}}|_{(x_0,y_0)}\end{aligned} l Z(x0,y0)表达为如下形式:
∂ Z ∂ l ⃗ ∣ ( x 0 , y 0 ) = lim ⁡ t ⇒ 0 f ( x 0 + t ⋅ cos ⁡ α , y 0 + t ⋅ cos ⁡ β ) − f ( x 0 , y 0 ) t \frac{\partial \mathcal Z}{\partial {\vec l}}|_{(x_0,y_0)} = \mathop{\lim}\limits_{t \Rightarrow 0} \frac{f(x_0 + t \cdot \cos \alpha,y_0 + t \cdot \cos \beta) - f(x_0,y_0)}{t} l Z(x0,y0)=t0limtf(x0+tcosα,y0+tcosβ)f(x0,y0)

基于方向导数重新观察偏导数,可以发现:方向导数就是偏导数的一种特例。以 ∂ f ( x , y ) ∂ x \begin{aligned}\frac{\partial f(x,y)}{\partial x}\end{aligned} xf(x,y)为例。它等价于: l ⃗ \vec l l 的方向是 x x x轴的正方向
偏导数与方向导数
此时: α = 0 , β = π 2 ⇒ cos ⁡ α = 1 , cos ⁡ β = 0 \begin{aligned}\alpha = 0,\beta = \frac{\pi}{2} \Rightarrow \cos \alpha = 1,\cos \beta = 0\end{aligned} α=0,β=2πcosα=1,cosβ=0从而有:
此时的方向导数退化成了偏导数, ∂ f ( x , y ) ∂ y \begin{aligned}\frac{\partial f(x,y)}{\partial y}\end{aligned} yf(x,y)同理,这里不再赘述。
∂ Z ∂ l ⃗ = lim ⁡ t ⇒ 0 f ( x 0 + t , y 0 ) − f ( x 0 , y 0 ) t = f x ( x 0 , y 0 ) = ∂ f ( x , y ) ∂ x ∣ ( x 0 , y 0 ) \begin{aligned} \frac{\partial \mathcal Z}{\partial \vec l} = \mathop{\lim}\limits_{t \Rightarrow 0} \frac{f(x_0 + t,y_0) - f(x_0,y_0)}{t} = f_x(x_0,y_0) = \frac{\partial f(x,y)}{\partial x}|_{(x_0,y_0)} \end{aligned} l Z=t0limtf(x0+t,y0)f(x0,y0)=fx(x0,y0)=xf(x,y)(x0,y0)

方向导数与偏导数之间的关联关系

在函数 f ( ⋅ ) f(\cdot) f()在其定义域内可微的条件下,该函数在 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处关于方向向量 l ⃗ \vec l l 方向导数 ∂ Z ∂ l ⃗ ∣ ( x 0 , y 0 ) \begin{aligned}\frac{\partial \mathcal Z}{\partial {\vec l}}|_{(x_0,y_0)}\end{aligned} l Z(x0,y0)与该函数在 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处的偏导数 f x ( x 0 , y 0 ) , f y ( x 0 , y 0 ) f_x(x_0,y_0),f_y(x_0,y_0) fx(x0,y0),fy(x0,y0)之间的关联关系表示如下:
∂ Z ∂ l ⃗ ∣ ( x 0 , y 0 ) = f x ( x 0 , y 0 ) ⋅ cos ⁡ α + f y ( x 0 , y 0 ) ⋅ cos ⁡ β \begin{aligned}\frac{\partial \mathcal Z}{\partial {\vec l}}|_{(x_0,y_0)} = f_x(x_0,y_0) \cdot \cos \alpha + f_y(x_0,y_0) \cdot \cos \beta\end{aligned} l Z(x0,y0)=fx(x0,y0)cosα+fy(x0,y0)cosβ

证明过程

  • 在函数 f ( ⋅ ) f(\cdot) f()可微的条件下,在 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)点关于 Z \mathcal Z Z的变化量 Δ Z \Delta \mathcal Z ΔZ可表示为:
    其中 O [ ( Δ x ) 2 + ( Δ y ) 2 ] \mathcal O\left[\sqrt{({\Delta x})^2 + (\Delta y)^2}\right] O[(Δx)2+(Δy)2 ]表示关于 ( Δ x ) 2 + ( Δ y ) 2 \sqrt{({\Delta x})^2 + (\Delta y)^2} (Δx)2+(Δy)2 的高阶无穷小。
    Δ Z = f x ( x 0 , y 0 ) ⋅ Δ x + f y ( x 0 , y 0 ) ⋅ Δ y + O [ ( Δ x ) 2 + ( Δ y ) 2 ] \Delta \mathcal Z = f_x(x_0,y_0) \cdot \Delta x + f_y(x_0,y_0) \cdot \Delta y + \mathcal O\left[\sqrt{({\Delta x})^2 + (\Delta y)^2}\right] ΔZ=fx(x0,y0)Δx+fy(x0,y0)Δy+O[(Δx)2+(Δy)2 ]
  • 由于全微分在任意方向上均成立。
    全微分方程
    因而有:
    { Δ x = t ⋅ cos ⁡ α Δ y = t ⋅ cos ⁡ β ( Δ x ) 2 + ( Δ y ) 2 = t 2 ⋅ ( cos ⁡ 2 α + cos ⁡ 2 β ) = t 2 α + β = π 2 \begin{cases} \begin{aligned} & \Delta x = t \cdot \cos \alpha \\ & \Delta y = t \cdot \cos \beta \\ & (\Delta x)^2 + (\Delta y)^2 = t^2 \cdot (\cos^2 \alpha + \cos^2 \beta) = t^2 \quad \alpha +\beta = \frac{\pi}{2} \end{aligned} \end{cases} Δx=tcosαΔy=tcosβ(Δx)2+(Δy)2=t2(cos2α+cos2β)=t2α+β=2π
  • 观察等式左侧:
    Δ Z \Delta \mathcal Z ΔZ表示 P ( x 0 , y 0 ) \mathcal P(x_0,y_0) P(x0,y0)沿着 l ⃗ \vec l l 移动 t t t到达 A \mathcal A A点前后函数结果的变化量。
    I left = Δ Z = f ( x 0 + t ⋅ cos ⁡ α , y 0 + t ⋅ cos ⁡ β ) − f ( x 0 , y 0 ) \mathcal I_{\text{left}} = \Delta \mathcal Z = f(x_0 + t \cdot \cos \alpha,y_0 + t \cdot \cos \beta) - f(x_0,y_0) Ileft=ΔZ=f(x0+tcosα,y0+tcosβ)f(x0,y0)
    观察等式右侧:
    将上述公式代入。
    I right = f x ( x 0 , y 0 ) ⋅ t ⋅ cos ⁡ α + f y ( x 0 , y 0 ) ⋅ t ⋅ cos ⁡ β + O ( t ) \mathcal I_{\text{right}} = f_x(x_0,y_0) \cdot t \cdot \cos \alpha + f_y(x_0,y_0) \cdot t \cdot \cos \beta + \mathcal O(t) Iright=fx(x0,y0)tcosα+fy(x0,y0)tcosβ+O(t)
  • I left , I right \mathcal I_{\text{left}},\mathcal I_{\text{right}} Ileft,Iright同时除以 t t t,等式两端依然相等:
    并令 I left \mathcal I_{\text{left}} Ileft t ⇒ 0 t \Rightarrow 0 t0,因为 I Right \mathcal I_{\text{Right}} IRight中不含 t ( O ( t ) t = 0 ) t \left(\begin{aligned}\frac{\mathcal O(t)}{t} = 0\end{aligned} \right) t(tO(t)=0),因此不产生影响。
    { I right t = f x ( x 0 , y 0 ) ⋅ cos ⁡ α ⋅ t + f y ( x 0 , y 0 ) ⋅ cos ⁡ β ⋅ t + O ( t ) t = f x ( x 0 , y 0 ) ⋅ cos ⁡ α + f y ( x 0 , y 0 ) ⋅ cos ⁡ β lim ⁡ t ⇒ 0 I l e f t t = lim ⁡ t ⇒ 0 f ( x 0 + t ⋅ cos ⁡ α , y 0 + t ⋅ cos ⁡ β ) − f ( x 0 , y 0 ) t = ∂ Z ∂ l ⃗ ∣ ( x 0 , y 0 ) \begin{cases} \begin{aligned} \frac{\mathcal I_{\text{right}}}{t} & = \frac{f_x(x_0,y_0) \cdot \cos \alpha \cdot t + f_y(x_0,y_0) \cdot \cos \beta \cdot t + \mathcal O(t)}{t} \\ & = f_x(x_0,y_0) \cdot \cos \alpha + f_y(x_0,y_0) \cdot \cos \beta \\ \mathop{\lim}\limits_{t \Rightarrow 0} \frac{\mathcal I_{left}}{t} & = \mathop{\lim}\limits_{t \Rightarrow 0} \frac{f(x_0 + t \cdot \cos \alpha,y_0 + t \cdot \cos \beta) - f(x_0,y_0)}{t} \\ & = \frac{\partial \mathcal Z}{\partial \vec l}|_{(x_0,y_0)} \end{aligned} \end{cases} tIrightt0limtIleft=tfx(x0,y0)cosαt+fy(x0,y0)cosβt+O(t)=fx(x0,y0)cosα+fy(x0,y0)cosβ=t0limtf(x0+tcosα,y0+tcosβ)f(x0,y0)=l Z(x0,y0)
  • 最终有:
    ∂ Z ∂ l ⃗ ∣ ( x 0 , y 0 ) = f x ( x 0 , y 0 ) ⋅ cos ⁡ α + f y ( x 0 , y 0 ) ⋅ cos ⁡ β \frac{\partial \mathcal Z}{\partial \vec l}|_{(x_0,y_0)} = f_x(x_0,y_0) \cdot \cos \alpha + f_y(x_0,y_0) \cdot \cos \beta l Z(x0,y0)=fx(x0,y0)cosα+fy(x0,y0)cosβ
    证毕。

梯度 ( Gradient ) (\text{Gradient}) (Gradient)

关于梯度,它的返回结果是一个向量形式。关于函数 f ( x , y ) f(x,y) f(x,y),其梯度向量通常记作: grad  f ( x , y ) \text{grad } f(x,y) grad f(x,y)或者 ∇ f ( x , y ) \nabla f(x,y) f(x,y)
其具体表示为:
∇ f ( x , y ) = [ f x ( x , y ) , f y ( x , y ) ] \nabla f(x,y) = \left[f_x(x,y),f_y(x,y)\right] f(x,y)=[fx(x,y),fy(x,y)]
很明显:梯度向量中的元素就是 f ( x , y ) f(x,y) f(x,y)针对不同自变量 x , y x,y x,y的偏导数。因此它的计算并不麻烦,如何理解梯度向量 ? ? ?具体从方向大小两个角度对梯度向量进行认知。

回顾上面的方向导数 ∂ Z ∂ l ⃗ \begin{aligned}\frac{\partial \mathcal Z}{\partial \vec l}\end{aligned} l Z,它可以表示成如下形式:

  • 两向量之间的内积形式。
  • l ⃗ o \vec l^{o} l o l ⃗ \vec l l 的单位向量结果。
    ∂ Z ∂ l ⃗ = f x ( x , y ) ⋅ cos ⁡ α + f y ( x , y ) ⋅ cos ⁡ β = [ f x ( x , y ) , f y ( x , y ) ] ( cos ⁡ α cos ⁡ β ) = ∇ f ( x , y ) ⋅ l ⃗ o \begin{aligned} \frac{\partial \mathcal Z}{\partial \vec l} & = f_x(x,y) \cdot \cos \alpha + f_y(x,y) \cdot \cos \beta \\ & = \left[f_x(x,y),f_y(x,y)\right] \begin{pmatrix} \cos \alpha \\ \cos \beta \end{pmatrix} \\ & = \nabla f(x,y) \cdot \vec l^{o} \end{aligned} l Z=fx(x,y)cosα+fy(x,y)cosβ=[fx(x,y),fy(x,y)](cosαcosβ)=f(x,y)l o

首先,由于 x , y x,y x,y轴描述的方向是确定的,因而在某点 ( x , y ) (x,y) (x,y)处的梯度向量也同样是固定;但 l ⃗ o \vec l^{o} l o却不固定。由于是内积结果,我们可以将其展开:
∂ Z ∂ l ⃗ = ∇ f ( x , y ) ⋅ l ⃗ o = ∣ ∣ ∇ f ( x , y ) ∣ ∣ ⋅ ∣ ∣ l ⃗ o ∣ ∣ ⋅ cos ⁡ θ \begin{aligned}\frac{\partial \mathcal Z}{\partial \vec l} & = \nabla f(x,y) \cdot \vec l^{o} \\ & = ||\nabla f(x,y)|| \cdot ||\vec l^{o}|| \cdot \cos \theta \end{aligned} l Z=f(x,y)l o=∣∣∇f(x,y)∣∣∣∣l o∣∣cosθ
观察:由于 ∣ ∣ ∇ f ( x , y ) ∣ ∣ = [ f x ( x , y ) ] 2 + [ f y ( x , y ) ] 2 ||\nabla f(x,y)|| = [f_x(x,y)]^2 + [f_y(x,y)]^2 ∣∣∇f(x,y)∣∣=[fx(x,y)]2+[fy(x,y)]2,因而在函数 f ( ⋅ ) f(\cdot) f()某一点 ( x , y ) (x,y) (x,y)确定的条件下,其值也是固定的;并且 ∣ ∣ l ⃗ o ∣ ∣ = 1 ||\vec l^{o}|| = 1 ∣∣l o∣∣=1。因此:影响 ∂ Z ∂ l ⃗ \begin{aligned}\frac{\partial \mathcal Z}{\partial \vec l}\end{aligned} l Z大小的因素只有向量 ∇ f ( x , y ) \nabla f(x,y) f(x,y)与向量 l ⃗ o \vec l^{o} l o之间的夹角 cos ⁡ θ \cos \theta cosθ

由于 cos ⁡ θ ∈ [ − 1 , 1 ] \cos \theta \in [-1,1] cosθ[1,1],因此 θ = 0 \theta = 0 θ=0时,也就是 l ⃗ o \vec l^{o} l o ∇ f ( x , y ) \nabla f(x,y) f(x,y)方向重合时,方向导数取得最大值,最大值即:
∂ Z ∂ l ⃗ = ∣ ∣ ∇ f ( x , y ) ∣ ∣ \frac{\partial \mathcal Z}{\partial \vec l} = ||\nabla f(x,y)|| l Z=∣∣∇f(x,y)∣∣
也就是说:当前点 ( x , y ) (x,y) (x,y),选择梯度方向时,它的斜率(变化量)最大

相关参考:
【多元微分专题】第六期:方向导数和梯度的直观理解

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

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

相关文章

深度学习和OpenCV的对象检测(MobileNet SSD视频流实时识别)

上期文章,我们分享了如何使用opencv 与MobileNet SSD模型来检测给定的图片,有网友反馈能否提供一下视频流的实时检测代码,其实我们在分享人脸识别的时候,分享了如何使用cv2.videoCpature 类来从视频中实时提取视频中的图片,进行人脸的识别,视频流的对象检测跟opencv的人脸…

rhel7安装Oracle 19C RAC

一、安装环境准备 1.1./dev/shm作为tmpfs挂载 --查看大小 df -h /dev/shm/--写入/etc/fstab vi /etc/fstab tmpfs /dev/shm tmpfs defaults,size3.9G 0 01.2.关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service1.3.关闭s…

微服务——RestClient查询文档

快速入门 返回结果直接把json风格的结果封装为SearchReponse对象返回 public class HotelSearchTest {private RestHighLevelClient client;Testvoid testMatchAll() throws IOException {//1.准备requestSearchRequest request new SearchRequest("hotel");//2.准…

嵌入式基础知识-存储管理

上篇介绍了存储器的相关知识,偏重的是硬件结构,本篇介绍存储管理的相关知识,偏重的是软件管理。 1 存储管理概念 操作系统,包括嵌入式系统,通常利用存储管理单元MMU(Memory Management Unit)来…

OB数据库基础知识(学习记录)

目录 OB业务场景 公司使用理由: 常见 bootstrap 失败原因 常见OBD 部署 失败原因 Grafana 查看集群资源由各个节点的聚合情况 OB创建租户 表分组的场景 mysqldump到处数据库schema,数据库数据,表数据 数据同步框架 DATAX obdumper…

支付总架构解析

一、支付全局分层 一笔支付以用户为起点,经过众多支付参与者之后,到达央行的清算账户,完成最终的资金清算。那么我们研究支付宏观,可以站在央行清算账户位置,俯视整个支付金字塔,如图1所示: 图…

Java课题笔记~6个重要注解参数含义

1、[掌握]Before 前置通知-方法有 JoinPoint 参数 在目标方法执行之前执行。被注解为前置通知的方法,可以包含一个 JoinPoint 类型参数。 该类型的对象本身就是切入点表达式。通过该参数,可获取切入点表达式、方法签名、目标对象等。 不光前置通知的方…

乍得ECTN(BESC)申请流程

根据TCHAD/CHAD乍得法令,自2013年4月1日起,所有运至乍得的货物都必须申请ECTN(BESC)电子货物跟踪单。如果没有申请,将被视为触犯乍得的条例,并在目的地受到严厉惩罚。ECTN是英语ELECTRONIC CARGO TRACKING NOTE的简称;…

EFLFK——ELK日志分析系统+kafka+filebeat架构

环境准备 node1节点192.168.40.16elasticsearch2c/4Gnode2节点192.168.40.17elasticsearch2c/4GApache节点192.168.40.170logstash/Apache/kibana2c/4Gfilebeat节点192.168.40.20filebeat2c/4G https://blog.csdn.net/m0_57554344/article/details/132059066?spm1001.2014.30…

oracle的管道函数

Oracle管道函数(Pipelined Table Function)oracle管道函数 1、管道函数即是可以返回行集合(可以使嵌套表nested table 或数组 varray)的函数,我们可以像查询物理表一样查询它或者将其赋值给集合变量。 2、管道函数为并行执行,在…

【数据结构与算法】十大经典排序算法-冒泡排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌴掘金:HelloCode 🌞知乎:HelloCode ⚡如有问题,欢迎指正&#…

VSCode中如何修改代码字体

通过「File」→「Preferences」→「Settings」→「Text Editor」→「Font」→「Font Family」中,修改对应的字体即可。因为比较喜欢 JetBrains Mono,所以设置的字体是这个。 其中Jetbrains Mono字体需要自己在Jetbrains官网下载,然后中文字体…

09. Docker Compose

目录 1、前言 2、安装Docker Compose 2.1、Docker Compose版本 2.2、下载安装 3、初试Docker Compose 3.1、传统方案部署应用 3.2、使用编排部署应用 3.3、其他命令 3.3.1、ps 3.3.2、images 3.3.3、depends_on 3.3.4、scale 4、小结 1、前言 随着应用架构的不段…

Scala按天写入日志文件

如果希望把每天出错的信息写入日志文件,每天新建一个文件。 package test.scala import java.io.{File, FileWriter} import java.text.SimpleDateFormat import java.util.{Calendar, Date} import scala.concurrent.ExecutionContext.Implicits.global import sc…

Linux(CentOS7)系统磁盘分区及挂载

新购买的阿里云服务器,默认硬盘容量肯定不够用,需要额外购买硬盘,购买后需要对硬盘进行分区及挂载操作,下面是硬盘分区及挂载操作步骤: 1、查看未挂载的硬盘(名称为/dev/vdb), 执行命令 fdisk …

SpringBoot运行流程源码分析------阶段二(run方法核心流程)

run方法核心流程 在分析和学习整个run方法之前,我们可以通过以下流程图来看下SpringApplication调用的run方法处理的核心操作包含哪些。 从上面的流程图中可以看出,SpringApplication在run方法中重点做了以下几步操作 获取监听器和参数配置打印banner…

懒人的百宝箱,效率回归,工具库之美「GitHub 热点速览」

懒人的百宝箱,效率回归,工具库之美「GitHub 热点速览」。 刚开源就变成新星的 igl,不仅获得了 2k star,也能提高你开发游戏的效率,摆平一切和图形有关的问题。如果这个没有那么惊艳的话,还有 The-Art-of-L…

CTFshow web93-104关

这周要学习的是php代码审计 根据师兄的作业 来做web入门的93-104关 93关 看代码 进行分析 他的主函数 include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){ $num $_GET[num]; if($num4476){ die("no no no!"); …

nuxt脚手架创建项目

在初始化时遇到一个依赖找不到的问题,记录一下,如有遇到同样问题的小伙伴,希望能给你们一点指引。 从安装脚手架开始,首先 一:安装nuxt脚手架 1. C盘全局安装: npm i -g create-nuxt-app 安装后可creat…

云迁移解决方案

云迁移是指将应用程序和数据从一个位置(通常是公司自有的现场(“本地”服务器)迁移到公有云提供商的服务器的过程,但也指在不同的云之间进行迁移的过程。云迁移的主要优势包括降低 IT 成本和提高性能,但也存在安全性、…