1.向量

1.1 点积(Dot Product)

1.1.1 定义

点积是在求一个标量,点积结果没有方向。
对于两个向量u=(u1,u2,u3),v=(v1,v2,v3)\bold{u}=(u_1,u_2,u_3),\bold{v}=(v_1,v_2,v_3)u=(u1,u2,u3),v=(v1,v2,v3)
点积定义为:u⋅v=u1v1+u2v2+u3v3\bold{u} \cdot \bold{v}=u_1v_1+u_2v_2+u_3v_3uv=u1v1+u2v2+u3v3

1.1.2 几何意义

点积也可以写成:u⋅v=∥u∥∥v∥cosθ\bold{u} \cdot \bold{v}=\| \bold{u} \|\| \bold{v} \|cos \thetauv=u∥∥vcosθ
其中θ\thetaθ是向量u,vu,vu,v之间的夹角。

  • 如果θ<90∘:\theta<90^\circ:θ<90点积>0>0>0
  • 如果θ=90∘:\theta=90^\circ:θ=90点积=0=0=0(正交)
  • 如果θ>90∘:\theta>90^\circ:θ>90点积<0

直观:点积 = 一个向量在另一个向量方向上的投影 × 另一个向量的长度。

1.1.3 主要应用

  • 判断向量是否垂直(点积=0)
  • 机器学习里:相似度度量(余弦相似度)

1.2 叉积(Cross Product)

1.2.1 定义(仅在三维空间有意义)

对于两个三维向量u=(u1,u2,u3),v=(v1,v2,v3)\bold{u}=(u_1,u_2,u_3),\bold{v}=(v_1,v_2,v_3)u=(u1,u2,u3),v=(v1,v2,v3)
叉积定义为:
u×v=∣ijku1u2u3v1v2v3∣=(u2v3−u3v2,u3v1−u1v3,u1v2−u2v1)\bold{u} \times \bold{v} = \left| \begin{matrix} \bf{i} & \bf{j} & \bf{k} \\ u_1 & u_2 & u_3 \\ v_1 & v_2 & v_3 \end{matrix} \right| = (u_2v_3-u_3v_2,u_3v_1-u_1v_3,u_1v_2-u_2v_1)u×v=iu1v1ju2v2ku3v3=(u2v3u3v2,u3v1u1v3,u1v2u2v1)

1.2.2 几何意义

  • 方向:u×v\bold{u} \times \bold{v}u×v垂直于u\bold{u}uv\bold{v}v所在的平面(右手定则,四指并拢,拇指竖起,四指指向u\bold{u}u的方向,手掌旋转,从u\bold{u}u旋转到v\bold{v}v,拇指竖直指向叉积的方向。)
  • 长度:∥u×v∥=∥u∥∥v∥sinθ\|\bold{u} \times \bold{v} \|=\| \bold{u}\| \|\bold{v} \| sin \thetau×v=u∥∥vsinθ,等于“以u,v\bold{u},\bold{v}u,v为边的平行四边形面积”。
    在这里插入图片描述
    直观:叉积 = 给出“垂直方向 + 面积大小”的向量。

1.2.3 主要应用

  • 计算面积:∣u×v∣=| \bold{u} \times \bold{v}|=u×v=平行四边形面积
  • 计算体积:∣u⋅(v×w)∣=| \bold{u} \cdot (\bold{v} \times \bold{w})|=u(v×w)=平行六面体体积

1.3 向量减法

1.3.1 定义

给定两个向量:
a=(a1,a2,⋯ ,an),b=(b1,b2,⋯ ,bn)\bold{a}=(a_1,a_2,\cdots,a_n),\bold{b}=(b_1,b_2,\cdots,b_n)a=(a1,a2,,an)b=(b1,b2,,bn)
它们的差定义为:
a−b=(a1−b1,a2−b2,⋯ ,an−bn)\bold{a}-\bold{b}=(a_1-b_1,a_2-b_2,\cdots,a_n-b_n)ab=(a1b1,a2b2,,anbn)
逐分量相减。

1.3.2 几何意义

在平面/空间里,a−b\bold{a} − \bold{b}ab 表示从 点 b 指向点 a 的向量。
在这里插入图片描述
例子
在二维中:
a=(3,2),b=(1,4)\bold{a}=(3,2),\bold{b}=(1,4)a=(3,2)b=(1,4)
则:a−b=(3−1,2−4)=(2,−2)\bold{a}-\bold{b}=(3-1,2-4)=(2,-2)ab=(31,24)=(2,2)
几何上,这就是从点 (1,4) 指向点 (3,2) 的向量。

1.4 向量加法

1.4.1 定义

在这里插入图片描述

1.4.2

2.矩阵

2.1 基础内容

1.矩阵映射
A:Rp→RmA: \mathbb{R}^p \rightarrow \mathbb{R}^mA:RpRm代表矩阵AAAm×pm \times pm×p,它接受一个ppp维的向量,输出一个mmm维的向量,也可表示为:A∈Rm×pA \in \mathbb{R}^{m \times p}ARm×p
输入所需向量数为矩阵列数,输出向量数为矩阵行数。
2.各类表示
det(A):det(A):det(A)矩阵AAA的行列式(只有方阵,即接受的向量和输出的向量数一致。)
rank(A):rank(A):rank(A)矩阵AAA的秩

2.1 矩阵行列式

2.1.1 从二维出发(面积)

考虑二维矩阵:A=[abcd]A = \left[ \begin{matrix} a & b \\ c & d \end{matrix} \right]A=[acbd]
它把单位正方形的两个基向量:e1=[10],e2=[01]e_1 = \left[ \begin{matrix} 1 \\ 0 \end{matrix} \right],e_2 = \left[ \begin{matrix} 0 \\ 1 \end{matrix} \right]e1=[10],e2=[01]
变换为:Ae1=[ac],Ae2=[bd]Ae_1=\left[ \begin{matrix} a \\c \end{matrix} \right],Ae_2=\left[ \begin{matrix} b \\ d \end{matrix} \right]Ae1=[ac],Ae2=[bd]
所以正方形变成了一个平行四边形,它的面积是:Area=∣ad−bc∣Area=|ad-bc|Area=adbc,也就是Ae1,Ae2Ae_1,Ae_2Ae1Ae2两个向量做叉积的绝对值,即Area=∣Ae1×Ae2∣Area=|Ae_1 \times Ae_2|Area=Ae1×Ae2
这正好是∣det(A)∣,A|det(A)|,Adet(A),A的行列式的绝对值。
在二维,行列式就是单位正方形被矩阵变换后的面积缩放因子。

2.1.2 三维情况(体积)

三维矩阵:A=[abcdefghi]A=\left[ \begin{matrix} a & b & c \\ d & e & f \\ g & h & i\end{matrix}\right]A=adgbehcfi
把单位立方体的三个基向量映射到新的三个向量:v1=(a,d,g)T,v2=(b,e,h)T,v3=(c,f,i)Tv_1=(a,d,g)^T,v_2=(b,e,h)^T,v_3=(c,f,i)^Tv1=(a,d,g)T,v2=(b,e,h)T,v3=(c,f,i)T
这三个向量张成一个平行六面体,它的体积由三重积给出:
V=∣v1⋅(v2×v3)∣=∣(a,d,g)⋅((b,e,h)×(c,f,i))∣V=|v_1 \cdot (v_2 \times v_3)|=|(a,d,g)\cdot((b,e,h) \times (c,f,i))|V=v1(v2×v3)=(a,d,g)((b,e,h)×(c,f,i))
这个结果恰好就是∣det(A)∣|det(A)|det(A)

证明:
v2×v3=[ijkbehcfi]=(ei−hf,hc−bi,bf−ec)v_2\times v_3=\left[ \begin{matrix} \bf{i} & \bf{j} & \bf{k} \\ b & e & h \\ c & f & i \end{matrix} \right]=(ei-hf,hc-bi,bf-ec)v2×v3=ibcjefkhi=(eihf,hcbi,bfec)
v1⋅(v2×v3)=a(ei−hf)+d(hc−bi)+g(bf−ec)=aei−ahf+dhc−dbi+gbf−gec=a(ei−hf)−b(di−fg)+c(dh−eg)v_1 \cdot (v_2 \times v_3)=a(ei-hf)+d(hc-bi)+g(bf-ec)\\=aei-ahf+dhc-dbi+gbf-gec \\ =a(ei-hf)-b(di-fg)+c(dh-eg)v1(v2×v3)=a(eihf)+d(hcbi)+g(bfec)=aeiahf+dhcdbi+gbfgec=a(eihf)b(difg)+c(dheg)
∴∣v1⋅(v2×v3)∣=∣det(A)∣\therefore |v_1\cdot (v_2 \times v_3)|=|det(A)|v1(v2×v3)=det(A)
在三维,行列式就是体积的伸缩因子。

V=v2×v3V=v_2\times v_3V=v2×v3,其中VVV的长度为v2,v3v_2,v_3v2v3两个向量组成的平行四边形面积,这在叉积中有图作说明,而VVV的方向垂直于v2,v3v_2,v_3v2v3所构成的平面。
v1⋅V=∣v1∣∣V∣cosθ,∣v1∣cosθv_1 \cdot V=|v_1||V|cos\theta,|v_1|cos\thetav1V=v1∣∣Vcosθv1cosθ代表在向量VVV上的投影,即可看作以v2,v3v_2,v_3v2,v3构成平面为底的平行六面体的高,而|V|代表v2,v3v_2,v_3v2,v3为底的平行六面体的底面积。
∣v1⋅(v2×v3)∣|v_1 \cdot (v_2 \times v_3)|v1(v2×v3)为该平行六面体相对于三个基向量构成的基六面体变换的体积大小。

2.1.3 高维情况(推广)

在n维空间里,矩阵A把单位立方体(体积=1)映射到一个平行多面体。
行列式的绝对值∣det(A)∣|det(A)|det(A)就是这个新多面体的体积。
这是由行列式的代数性质决定的:
1.行列式在列向量线性相关时为 0(体积=0,空间被压扁,下一节细讲);
2.行列式在交换两列时变号(体积方向翻转);
证明:
A=[abcdefghi]det(A)=a(ei−fh)−b(di−fg)+c(dh−eg)B=[abcghidef]det(B)=a(fh−ei)−b(fg−di)+c(eg−dh)=−det(A)A=\left[ \begin{matrix} a & b & c \\ d & e & f \\ g & h & i\end{matrix}\right] det(A)=a(ei-fh)-b(di-fg)+c(dh-eg) \\ B=\left[ \begin{matrix} a & b & c \\ g & h & i \\ d & e & f\end{matrix}\right] det(B)=a(fh-ei)-b(fg-di)+c(eg-dh)=-det(A)A=adgbehcfidet(A)=a(eifh)b(difg)+c(dheg)B=agdbhecifdet(B)=a(fhei)b(fgdi)+c(egdh)=det(A)
3.行列式在一列乘以常数时,结果也乘以这个常数(体积缩放)。
证明:
A=[abcdefghi]det(A)=a(ei−fh)−b(di−fg)+c(dh−eg)B=[abckdkekfghi]det(B)=a(kei−kfh)−b(kdi−kfg)+c(kdh−keg)=ka(ei−fh)−kb(di−fg)+kc(dh−eg)=kdet(A)A=\left[ \begin{matrix} a & b & c \\ d & e & f \\ g & h & i\end{matrix}\right] det(A)=a(ei-fh)-b(di-fg)+c(dh-eg) \\ B=\left[ \begin{matrix} a & b & c \\ kd & ke & kf \\ g & h & i\end{matrix}\right] \\ det(B)=a(kei-kfh)-b(kdi-kfg)+c(kdh-keg) \\ =ka(ei-fh)-kb(di-fg)+kc(dh-eg)=kdet(A)A=adgbehcfidet(A)=a(eifh)b(difg)+c(dheg)B=akdgbkehckfidet(B)=a(keikfh)b(kdikfg)+c(kdhkeg)=ka(eifh)kb(difg)+kc(dheg)=kdet(A)
这些正好与体积的几何性质一致,于是行列式就是“体积缩放因子”的唯一合理定义。

只有方阵有行列式。
行列式det(A)det(A)det(A)的本质作用是:

  • 代数上:判断一个方阵是否可逆(det(A)≠0⇔det(A) \neq 0 \Leftrightarrowdet(A)=0可逆。
  • 几何上:描述线性变换对应的提及缩放因子(带方向)。

这些性质都要求“输入空间维数 = 输出空间维数”,也就是:
A:Rn→RnA:\mathbb{R} ^n \rightarrow \mathbb{R}^nARnRn
→\rightarrow这只有在 𝐴 是方阵时才成立。
如果是非方阵,比如3×4:3 \times 4:3×4:
A:R4→R3A:\mathbb{R}^4 \rightarrow \mathbb{R}^3AR4R3

  • 它把四维压到三维,体积一定被压成 0
  • 没有“体积缩放”这个说法
  • 所以行列式就没有定义

2.2 线性相关与线性无关

2.2.1 定义

设有一组向量v1,v2,⋯ ,vkv_1,v_2,\cdots,v_kv1,v2,,vk(在同一个向量空间里)
如果存在一组不全为零的系数a1,a2,⋯ ,aka_1,a_2,\cdots,a_ka1,a2,,ak,使得a1v1+a2v2+⋯+akvk=0a_1v_1+a_2v_2+\cdots+a_kv_k=0a1v1+a2v2++akvk=0
那么这组向量就叫做 线性相关。
否则(只有当所有系数都等于 0 时,上式才成立),就叫做 线性无关。

2.2.2 几何直观

二维空间

  • 如果两个向量在同一条直线上(共线),它们线性相关。
  • 如果不共线,就线性无关。

三维空间

  • 三个向量如果在同一个平面里(共面),它们线性相关。
  • 如果能撑起整个三维空间,就线性无关。

一句话:一个向量可以由其它向量“拼出来”(线性组合),那它们就是相关的。

2.2.3 代数上的判定

把向量作为矩阵的列:A=[v1v2⋯vk]A=\left[ \begin{matrix} v_1 & v_2 & \cdots & v_k \end{matrix} \right]A=[v1v2vk]

  • 如果det(A)=0det(A)=0det(A)=0(方阵情况),说明列向量线性相关
  • 一般情况:秩rank(A)<rank(A)<rank(A)<列数→\rightarrow列向量线性相关

rank(A)<rank(A)<rank(A)<列数的话对应det(A)=0det(A)=0det(A)=0,证明:
A=[abcdefa+2db+2ec+2f]A=\left[ \begin{matrix} a & b & c \\ d & e & f \\ a+2d & b+2e & c+2f \end{matrix} \right]A=ada+2dbeb+2ecfc+2f
这个AAA矩阵的列数就小于秩数,及
A=[abcdefa+2db+2ec+2f]→A=[abcdef000] A=\left[ \begin{matrix} a & b & c \\ d & e & f \\ a+2d & b+2e & c+2f \end{matrix} \right] \rightarrow A = \left[ \begin{matrix} a & b & c \\ d & e & f \\ 0 & 0 & 0 \end{matrix} \right] A=ada+2dbeb+2ecfc+2fA=ad0be0cf0
det(A)=a(e(c+2f)−f(b+2e))−b(d(c+2f)−f(a+2d))+c(d(b+2e)−e(a+2d))=aec+2aef−afb−2afe−bdc−2bdf+bfa+2bfd+cdb+2cde−cea−2ced=0det(A)=a(e(c+2f)-f(b+2e))-b(d(c+2f)-f(a+2d))+c(d(b+2e)-e(a+2d)) \\ =aec+2aef-afb-2afe-bdc-2bdf+bfa+2bfd+cdb+2cde-cea-2ced \\ =0det(A)=a(e(c+2f)f(b+2e))b(d(c+2f)f(a+2d))+c(d(b+2e)e(a+2d))=aec+2aefafb2afebdc2bdf+bfa+2bfd+cdb+2cdecea2ced=0

det(A)=0det(A)=0det(A)=0的几何体积说明:
det(A)=0det(A)=0det(A)=0说明在对应几维的空间里,体积为0。一般用每行代表特定维度(如第一行代表x轴),有多少行就有多少个维度。而有多少列说明有多少个向量。
比如如果两个二维列向量组成的矩阵AAA它的行列式det(A)=0det(A)=0det(A)=0,就说明其中一个列向量可以用另一个列向量表示出来。这两个列向量组成的平行四边形面积为0(面积相当于二维中的体积。);
三个三维列向量组成的矩阵BBB它的行列式det(B)=0det(B)=0det(B)=0,就说明至少其中一个列向量可以用其他两个列向量表示出来,这三个列向量组成的三维体积为0(但二维面积并不一定为0。);
类似的可以推广至四维,行列式为0,四维体积一定为0,但三维体积却不一定。因此有可以使用降维的方式获取线性不相关的向量,在机器学习中,或者叫获取线性不相关的特征。

2.2.4 线性相关和线性无关为什么重要?

  • 线性无关的向量:可以当作“基底”,张成一个空间。
  • 线性相关的向量:含有冗余信息,多余的那个能被其它的表示。

在机器学习/数据分析中:

  • 如果特征(变量)线性相关,就会出现多重共线性问题 → 回归系数不稳定。
  • 在 PCA(主成分分析)中,我们寻找线性无关的方向来表示数据。

总结:
线性相关 = 存在冗余,一个向量能用其它的拼出来。
线性无关 = 没冗余,它们是“独立的方向”,能作为基底。

2.3 矩阵的秩

2.3.1 定义

对于一个矩阵AAA,它的秩定义为:
rank(A)rank(A)rank(A)=列空间的维数=行空间的维数
常用同义表述:

  • rank(A)rank(A)rank(A) = 「最多能选出多少个线性无关的列向量」
  • rank(A)rank(A)rank(A) = 「最多能选出多少个线性无关的行向量」
  • 对方阵:rank(A)=n⇔Arank(A) = n ⇔ Arank(A)=nA可逆 ⇔det(A)≠0⇔\Leftrightarrow det(A) ≠ 0 \Leftrightarrowdet(A)=0 列/行向量线性无关 ⇔\Leftrightarrow 特征值≠0⇔\neq0 \Leftrightarrow=0所有特征值非零。

2.3.2 列空间/行空间是什么?

  • 列向量Col(A)Col(A)Col(A)AAA 的所有列向量的线性组合集合,位于 RmℝᵐRm 中。 维数 = rank(A)rank(A)rank(A)
  • 行空间 Row(A)Row(A)Row(A)AAA 的所有行向量的线性组合集合,位于 RnℝⁿRn 中。维数 = rank(A)rank(A)rank(A)

直观地说:列空间就是 AxAxAx 能到达的所有输出方向;行空间是 AtyAᵗyAty 能到达的所有方向。

2.3.3 秩的计算

最常用:行变换到行最简形(RREF)
变换到行最简形后就知道选出最大多少线性无关的行向量数,即秩的数量。

  • 用初等行变换把 A 化为 RREF,数主元个数即为 rank(A)。
  • 行变换不会改变秩。

小例子(行简化):
A=[123231477]①R2←R2−2R1A=[1230−15477]②R3←R3−4R1A=[1230−150−15]R2←R2−2R1A=[1230−15000]A= \left[ \begin{matrix} 1 & 2 & 3 \\ 2 & 3 & 1 \\ 4 & 7 & 7 \end{matrix} \right] \\ ①R2 \leftarrow R2 - 2R1 \quad A=\left[ \begin{matrix} 1 & 2 & 3 \\ 0 & -1 & 5 \\ 4 & 7 & 7 \end{matrix} \right] \\ ②R3 \leftarrow R3 - 4R1 \quad A=\left[ \begin{matrix} 1 & 2 & 3 \\ 0 & -1 & 5 \\ 0 & -1 & 5 \end{matrix} \right] \\ R2 \leftarrow R2 - 2R1 \quad A=\left[ \begin{matrix} 1 & 2 & 3 \\ 0 & -1 & 5 \\ 0 & 0 & 0 \end{matrix} \right]A=124237317R2R22R1A=104217357R3R34R1A=100211355R2R22R1A=100210350
∴rank(A)=2\therefore rank(A)=2rank(A)=2

2.3.4 常用不等式与不变性

1.rank(AB)≤min(rank(A),rank(B))rank(AB) \le min(rank(A),rank(B))rank(AB)min(rank(A),rank(B))

2.4 可逆与不可逆

2.4.1 可逆的定义

矩阵 𝐴 可逆(invertible),是指:存在一个矩阵 A−1A^{-1}A1,使得 AA−1=A−1A=IAA^{-1}=A^{-1}A=IAA1=A1A=I
其中 𝐼 是单位矩阵。

  • 如果存在这样的逆矩阵,称 可逆矩阵。
  • 如果不存在这样的逆矩阵,称 不可逆矩阵(奇异矩阵 singular matrix)。

可逆矩阵一定是方阵,证明:
如果AAAm×nm \times nm×nA−1A^{-1}A1n×mn \times mn×m,则AA−1AA^{-1}AA1m×mm \times mm×mA−1AA^{-1}AA1An×nn \times nn×nAA−1≠A−1AAA^{-1} \neq A^{-1}AAA1=A1A

2.4.2 代数意义

可逆矩阵:
线性方程组 Ax=bAx=bAx=b 有唯一解 xxx

不可逆矩阵:
线性方程组 Ax=bAx=bAx=b 没有解 或 有无穷多个解。
特别地,Ax=0Ax=0Ax=0 的唯一解不再是 x=0x=0x=0,还可能有非零解(这就是“非零解”的来源)。

为啥可逆矩阵有唯一解?不可逆矩阵没有解或者无穷多个解?
1.假设AAA为可逆矩阵,A∈Rn×nA \in \mathbb{R}^{n \times n}ARn×nx∈Rn×1x \in \mathbb{R}^{n \times 1}xRn×1AAA可以和xxx列出nnn个方程,方程的右边等于bbbnnn个方程解xxxnnn个未知数,确定唯一解。
2.假设AAA为不可逆矩阵,A∈Rn×nA \in \mathbb{R}^{n \times n}ARn×nx∈Rn×1x \in \mathbb{R}^{n \times 1}xRn×1rank(A)<nrank(A)<nrank(A)<n

在方程少于nnn个时,又分为两种情况。
bbb属于AAA的列空间。
bbb不属于AAA的列空间。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac安装nvm详细教程(超简单)

本章教程,主要介绍如何在Mac操作系统上安装nvm. 我们使用官方一键安装脚本,完成安装 一、安装步骤 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash配置环境变量,编辑.zshrc文件 vim .zshrcexport NVM_DIR="$(

【selenium】网页元素找不到?从$(‘[placeholder=“手机号“]‘)说起

网页元素找不到&#xff1f;从$(‘[placeholder“手机号”]’)说起总结&#xff1a;控制台不骗人&#xff0c;元素选不到&#xff0c;八成是写法、时机或环境的问题。我们在写网页自动化脚本或者调试页面的时候&#xff0c;经常遇到一个让人头疼的问题&#xff1a;明明元素就在…

SSE 模仿 GPT 响应

后端代码 const express require(express) const cors require(cors);const app express(); app.use(cors()); const port 3000;app.listen(port, () > {console.log(Server running at http://localhost:${port}/); });const msg 全国同胞们&#xff0c; 尊敬的各位国…

MAC 多个版本 JDK进行切换

1.查看本机所有的jdk/usr/libexec/java_home -V2、打开bash_profile文件。可以在终端vim ~/.bash_profile打开&#xff0c;也可以打开访达shiftcmdG然后输入/Users/mac/.bash_profile&#xff08;本机bash_profile的路径&#xff09;加入新的环境变量格式如下&#xff08;参考我…

shell 中 expect 详解

一、概述Expect是一个免费的编程工具语言&#xff0c;用来实现自动和交互式任务进行通信&#xff0c;而无需人的干预。Expect的作者DonLibes在1990年开始编写Expect时对Expect做有如下定义&#xff1a;Expect是一个用来实现自动交互功能的软件套件。通过expect系统管理员可以创…

第4讲 机器学习基础概念

机器学习作为人工智能的子领域&#xff0c;专注于训练计算机算法自动发现数据中的模式与关联关系。以下是其核心基础概念&#xff1a;4.1 数据数据是机器学习的基石。缺乏数据&#xff0c;算法将无从学习。数据可呈现为结构化数据&#xff08;如电子表格、数据库&#xff09;和…

Go组合式继承:灵活替代方案

Go 语言没有传统面向对象编程中的继承机制&#xff0c;但通过组合和接口实现类似功能。Go 更提倡组合优于继承的设计原则&#xff0c;这种设计方式更灵活且易于维护。结构体组合&#xff08;伪继承&#xff09;通过嵌套结构体实现类似继承的效果。子结构体可以直接访问父结构体…

Verilog三段式FSM,实现十字路口红绿灯

运行环境&#xff1a;VCS verdi状态说明&#xff1a;S0 &#xff1a; 初始状态 S1 &#xff1a; 东西方向绿灯亮&#xff0c;南北方向红灯亮&#xff1b;点亮30周期 S2 &#xff1a; 东西方向黄灯亮&#xff0c;南北方向红灯亮&#xff1b;点亮2 周期 S3 &#xff1a; 东西方向…

java 将pdf转图片

如何将pdf文件转为图片 import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class Pdf2Png {/**…

手搓Spring

目录 两种方法创建Spring容器 自定义Spring容器及前置操作 Spring扫描逻辑实现 createBean()方法 getBean()方法 依赖注入&#xff08;DI&#xff09; BeanNameAware接口 InitializingBean接口 BeanPostProcessor接口 AOP的实现 Spring 是一个轻量级的 Java 开发框架…

.NET 单文件程序详解:从原理到实践

C# 混淆加密大师在最新版本中, 提供了.NET单文件解包打包功能, 它可以快速解包官方打包的单文件程序&#xff0c;恢复为原始的多文件结构。也可以对解包后的程序集进行混淆与加密&#xff0c;有效提升逆向门槛。最后还能重新打包成单文件程序&#xff0c;保持对用户友好的分发形…

Spring面试题记录?

请简述 Spring 框架的核心是什么&#xff1f;它主要包含了哪些核心模块&#xff1f; spring的核心模块主要有spring-core&#xff08;工具类&#xff0c;资源加载&#xff09;&#xff0c;spring-bean&#xff08;bean的定义&#xff0c;创建&#xff0c;封装&#xff09;&…

一次缓存引发的文件系统数据不一致问题排查与深度解析

01 起因EFC&#xff08;Elastic File Client&#xff09;是 NAS 自研的分布式文件系统客户端&#xff0c;最近完成了对缓存架构的更新&#xff0c;现在支持多个客户端之间构成分布式缓存&#xff0c;底层支持 NAS、CPFS 和 OSS。由于开发时间较短&#xff0c;一直没有做 NAS 场…

Spring Boot Gateway 教程:从入门到精通

一、Spring Cloud Gateway 简介Spring Cloud Gateway 是基于 Spring 5、Project Reactor 和 Spring Boot 2 构建的 API 网关&#xff0c;旨在为微服务架构提供一种简单而有效的路由管理方式。它取代了 Netflix Zuul&#xff0c;提供了更高效和更强大的网关解决方案。核心特点&a…

防火墙 只允许信任的几台服务器访问

1. 首先&#xff0c;确保 firewalld 服务正在运行&#xff1a;systemctl start firewalld systemctl enable firewall2. 设置默认拒绝规则&#xff1a;设置默认拒绝所有流量&#xff08;拒绝所有的入站流量&#xff09;&#xff1a;firewall-cmd --zonepublic --add-rejectal…

十三,数据结构-树

定义树也是基于节点的数据结构&#xff0c;和链表不同的是&#xff0c;树的节点可以指向多个节点。首先对树的一些常用术语进行说明&#xff1a;最上面的节点叫做根节点&#xff0c;根位于树顶&#xff0c;如图中的节点A&#xff1b;和族谱一样&#xff0c;节点有后代和祖先&am…

JVM-默背版

1.JVM对sychronized的优化&#xff1a;锁膨胀、锁消除、锁粗化、自适应自旋锁 &#xff08;1&#xff09;锁膨胀&#xff1a;从无锁、偏向锁、轻量级锁、重量级锁的过程叫做锁膨胀。在JDK1.6以前&#xff0c;sychronized是由重量级锁实现的&#xff0c;加锁和解锁的过程需要从用…

Mac M 系列芯片 YOLOv8 部署教程(CPU/Metal 后端一键安装)

在 Mac M 系列芯片&#xff08;Apple Silicon/ARM 架构&#xff09;上部署 YOLOv8&#xff0c;有一些注意事项&#xff1a;PyTorch 需要安装 ARM 原生版本&#xff0c;推理可利用 Metal 后端加速 CPU。本文教你一步步完成环境配置、模型下载、依赖安装和验证推理。1️⃣ 环境准…

Python爬虫实战:研究Units模块,构建气象数据采集和分析系统

1. 引言 1.1 研究背景 随着信息技术的飞速发展,互联网已成为全球最大的信息库,涵盖气象、金融、医疗、农业等多个领域的海量数据。这些数据蕴含着巨大的潜在价值,如何有效获取并深入分析这些数据成为当下研究的热点。Python 作为一种功能强大的编程语言,凭借其丰富的库资…

网页设计模板 HTML源码网站模板下载

互联网已成为现代社会不可或缺的一部分&#xff0c;网站则是连接线上与线下世界的桥梁。无论是用于展示个人作品集、推广商业产品还是提供公共服务信息&#xff0c;一个设计精良且功能完善的网站都能发挥巨大作用。然而&#xff0c;传统的手工编码方式不仅耗时费力&#xff0c;…