当前位置: 首页 > news >正文

线性代数重要知识点和理论(下)

奇异值分解

奇异值分解非常重要且有趣。首先对于 n × n n\times n n×n对称矩阵 A A A,可以通过对角化得到其对角化形式 A = P D P − 1 A=PDP^{-1} A=PDP1,但是如果 A A A不是对称矩阵或者不是方阵,则不能进行对角化,但是可以通过奇异值分解得到类似形式。对于对角化,利用的重要性质是 A v 1 = λ v 1 A\bold{v_1}=\lambda \bold{v_1} Av1=λv1以及对称矩阵的特征向量互相正交。对于任意 m × n m\times n m×n矩阵,可以看做是 R m \Bbb R^m Rm R n \Bbb R^n Rn空间的一个映射,是否也存在一些 A v 1 = σ 1 u 1 A\bold{v_1}=\sigma_1\bold{u_1} Av1=σ1u1的形式呢?
定理:奇异值分解
A A A是秩为 r r r m × n m\times n m×n矩阵,那么存在一个 m × n m\times n m×n矩阵 Σ \Sigma Σ D D D是一个 r × r r\times r r×r非零对角矩阵,其对角线元素是A的前 r r r个奇异值, σ 1 ≥ σ 2 ≥ . . . ≥ σ r > 0 \sigma_1\ge\sigma_2\ge...\ge\sigma_r\gt0 σ1σ2...σr>0,并且存在一个 m × m m\times m m×m正交矩阵 U U U n × n n\times n n×n正交矩阵 V V V,满足 A = U Σ V T A=U\Sigma V^T A=UΣVT,这个分解叫做 A A A的一个奇异值分解,矩阵 U U U V V V不是由 A A A唯一确定的(只确定了部分 U 和 V U和V UV正交基,其余满足单位正交条件即可),但 Σ \Sigma Σ对角线必须是 A A A的奇异值。
Σ = [ D 0 0 0 ] \Sigma=\left[ \begin{aligned} D \ \ & 0\\ 0 \ \ & 0\\ \end{aligned} \right] Σ=[D  0  00]

引入的过程
奇异值分解基于一般的矩阵对角化性质可以被长方形矩阵模仿:一个对称矩阵 A A A的特征值的绝对值,表示度量 A A A拉长或者压缩一个向量(特征向量)的程度,如果 A x = λ x Ax=\lambda x Ax=λx,且 ∣ ∣ x ∣ ∣ = 1 ||x||=1 ∣∣x∣∣=1,那么 ∣ ∣ A x ∣ ∣ = ∣ ∣ λ x ∣ ∣ = ∣ λ ∣ ∣ ∣ x ∣ ∣ = ∣ λ ∣ ||Ax||=||\lambda x||=|\lambda|||x||=|\lambda| ∣∣Ax∣∣=∣∣λx∣∣=λ∣∣∣x∣∣=λ
如果 λ 1 \lambda_1 λ1是具有最大数值的特征值,那么对应的单位特征向量 v 1 \bold{v_1} v1,确定一个有 A A A拉长影响最大的方向,也就是 x = v 1 \bold{x}=\bold{v_1} x=v1时, ∣ ∣ A x ∣ ∣ ||A\bold{x}|| ∣∣Ax∣∣长度最大化, ∣ ∣ A v 1 ∣ ∣ = ∣ λ 1 ∣ ||A\bold{v_1}||=|\lambda_1| ∣∣Av1∣∣=λ1。其中的原因在特征值部分已经做了介绍,任何向量都可以分解成特征向量的线性组合,选取最大特征值对应的特征向量方向,对向量的拉长自然是最大的。这里为什么要通过研究拉长最大的方向来引入奇异值,后面会做分析。
以一个矩阵 A A A为例,求 ∣ ∣ x ∣ ∣ = 1 ||\bold{x}||=1 ∣∣x∣∣=1的条件下 ∣ ∣ A x ∣ ∣ ||A\bold{x}|| ∣∣Ax∣∣的最大长度和此时的 x \bold{x} x
A = [ 4 11 14 8 7 − 2 ] A=\left[ \begin{aligned} 4&&11&&14\\ 8&&7&&-2\\ \end{aligned} \right] A=[48117142]
∣ ∣ A x ∣ ∣ ||A\bold{x}|| ∣∣Ax∣∣的最大值,等价于求 ∣ ∣ A x ∣ ∣ 2 ||A\bold{x}||^2 ∣∣Ax2的最大值,
∣ ∣ A x ∣ ∣ 2 = ( A x ) T ( A x ) = x T A T A x = x T ( A T A ) x ||A\bold{x}||^2=(A\bold{x})^T(A\bold{x})=\bold{x}^TA^TA\bold{x}=\bold{x}^T(A^TA)\bold{x} ∣∣Ax2=(Ax)T(Ax)=xTATAx=xT(ATA)x
( A T A ) T = A T A T T = A T A (A^TA)^T=A^TA^{TT}=A^TA (ATA)T=ATATT=ATA A T A A^TA ATA转置等于自身,是对称矩阵。根据前面对二次型的介绍,最大值的模是 A T A A^TA ATA的最大特征值 λ 1 \lambda_1 λ1,此时 x \bold{x} x为最大特征值 λ 1 \lambda_1 λ1对应的特征向量 v 1 \bold{v_1} v1,令 σ i = λ i \sigma_i=\sqrt{\lambda_i} σi=λi ,叫做作矩阵 A A A的奇异值,故 ∣ ∣ A x ∣ ∣ ||A\bold{x}|| ∣∣Ax∣∣的最大值为 σ 1 = λ 1 \sigma_1=\sqrt{\lambda_1} σ1=λ1 .
考虑到 v 1 \bold{v_1} v1 m × 1 m\times 1 m×1,令 u 1 \bold{u_1} u1 R n \Bbb R^n Rn空间的单位基,则 A v 1 = σ 1 u 1 A\bold{v_1}=\sigma_1 \bold{u_1} Av1=σ1u1,进而推广 A v i = σ i u i A\bold{v_i}=\sigma_i \bold{u_i} Avi=σiui,这个推广是可行的,因为 A T A A^TA ATA是对称矩阵,所以 v i v_i vi之间相互正交(特征值一节已经证明,且证明比较简单)。幸运的是,在 R n \Bbb R^n Rn空间中, u i \bold{u_i} ui在奇异值不同的情况下也是相互正交的,因为:
u i \bold{u_i} ui u j \bold{u_j} uj对应不同奇异值 σ i \sigma_i σi σ j \sigma_j σj,则
σ i σ j u i ⋅ u j = ( σ i u i ) T ( σ j u j ) = ( A v i ) T ( A v j ) = v i T ( A T A ) v j = v i T λ j v j = 0 \sigma_i\sigma_j\bold{u_i}\cdot\bold{u_j}=(\sigma_i\bold{u_i})^T(\sigma_j\bold{u_j})\\ =(A\bold{v_i})^T(A\bold{v_j})=\bold{v_i}^T(A^TA)\bold{v_j}=\bold{v_i}^T\lambda_j\bold{v_j}=0 σiσjuiuj=(σiui)T(σjuj)=(Avi)T(Avj)=viT(ATA)vj=viTλjvj=0
下面来讨论,为什么要通过研究 ∣ ∣ A x ∣ ∣ ||A\bold{x}|| ∣∣Ax∣∣的最大值、次大值来引入奇异值的分析。首先当然是出于类比的原因,因为特征值和特征向量就是对单位向量拉长最大、次大。。的数值和方向。如果不加最大值这个限制,还能不能分解 A A A呢?此时仍旧可以分解 A = Q M V A=QMV A=QMV Q , V Q, V Q,V分别是 m × m , n × n m\times m, n\times n m×m,n×n的单位正交基,问题就在于,此时M就不是奇异值构成的对角阵了,且计算是比较复杂的,其实对称矩阵也可以写成非特征向量构成的P满足 A = P M P − 1 A=PMP^{-1} A=PMP1的形式,但是此时只是换了一组正交基,不能发现矩阵的本质特性,不能简化运算。按照这种分解方式,研究的是矩阵在椭圆的长轴、次长轴…一个分解的性质,具有明确的几何意义和物理意义。也正是因为奇异值分解有求取 ∣ ∣ A x ∣ ∣ ||A\bold{x}|| ∣∣Ax∣∣最大值的含义,使其可以用于主成分分析法,拉长最大的方向,是将原像数据映射到像空间导致差别最大的数据,含有最多的分类信息量。

举个例子
求取 A = [ 1 − 1 − 2 2 2 − 2 ] A=\left[ \begin{aligned} 1&&-1\\ -2&&2\\ 2&&-2 \end{aligned} \right] A= 122122
第一步:先求 A T A = [ 9 − 9 − 9 9 ] A^TA=\left[\begin{aligned}9&&-9\\-9&&9\end{aligned}\right] ATA=[9999]
第二步:求 A T A A^TA ATA的特征值 λ 1 = 18 , λ 2 = 0 \lambda_1=18,\lambda_2=0 λ1=18,λ2=0和特征向量
v 1 = [ 2 2 − 2 2 ] v 2 = [ 2 2 2 2 ] \bold{v_1}=\left[\begin{aligned}\frac{\sqrt{2}}{2} \\ -\frac{\sqrt{2}}{2}\end{aligned}\right] \bold{v_2}=\left[\begin{aligned}\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2}\end{aligned}\right] v1= 22 22 v2= 22 22
第三步:求 U U U. 只能求得一个非零向量 u 1 = 1 σ 1 A v 1 = [ 1 3 − 2 3 2 3 ] \bold{u_1}=\frac{1}{\sigma_1}A\bold{v_1}=\left[\begin{aligned} \frac{1}{3} \\ -\frac{2}{3} \\ \frac{2}{3} \\ \end{aligned}\right] u1=σ11Av1= 313232
使用格拉姆施密特方法补齐U的单位正交基。 x 1 − 2 x 2 + 2 x 3 = 0 x_1-2x_2+2x_3=0 x12x2+2x3=0,分别取 x 2 = 0 , x 3 = 1 , 则 x 1 = − 2 x_2=0,x_3=1, 则x_1=-2 x2=0,x3=1,x1=2 x 1 = 0 , x 2 = 1 , 则 x 3 = 1 x_1=0,x_2=1, 则x_3=1 x1=0,x2=1,x3=1,此时后两个向量都和 u 1 \bold{u_1} u1正交,有格拉姆施密特方法,求得 u 2 = [ − 2 2 3 − 2 6 2 6 ] u 3 = [ 0 2 2 2 2 ] \bold{u_2}=\left[\begin{aligned} -\frac{2\sqrt{2}}{3} \\ -\frac{\sqrt{2}}{6} \\ \frac{\sqrt{2}}{6} \\ \end{aligned}\right] \bold{u_3}=\left[\begin{aligned} 0 \\ \frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} \\ \end{aligned}\right] u2= 322 62 62 u3= 022 22
求得A的奇异值分解为 A = U Σ V T = [ 1 3 − 2 2 3 0 − 2 3 − 2 6 2 2 2 3 2 6 2 2 ] [ 3 2 0 0 0 0 0 ] [ 2 2 − 2 2 2 2 2 2 ] A=U\Sigma V^T=\left[ \begin{aligned} \frac{1}{3} &&-\frac{2\sqrt{2}}{3}&&0 \\ -\frac{2}{3} &&-\frac{\sqrt{2}}{6}&&\frac{\sqrt{2}}{2} \\ \frac{2}{3} &&\frac{\sqrt{2}}{6}&&\frac{\sqrt{2}}{2} \\ \end{aligned} \right] \left[ \begin{aligned} 3\sqrt{2} &&0 \\ 0&&0 \\ 0&&0 \\ \end{aligned} \right] \left[ \begin{aligned} \frac{\sqrt{2}}{2} &&-\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2}&&\frac{\sqrt{2}}{2} \\ \end{aligned} \right] A=UΣVT= 313232322 62 62 022 22 32 00000 22 22 22 22
对于非0奇异值 3 2 3\sqrt{2} 32 实际上只有一个非零向量 v 1 \bold{v_1} v1 u 1 \bold{u_1} u1 U , V U,V U,V其余的正交基是为了满秩补齐的,实际上,在分解和计算A的时候,完全可以使用0进行填充,对与计算A没有任何影响。另外,对于 U U U因为只有一个正交基,所以另外的两个单位正交基实际上并不是唯一的(补齐它们,实际对计算A没有任何影响,因为在计算矩阵的时候,他们将和 Σ \Sigma Σ里的0值相乘)
对于奇异值分解若 A = U Σ V T A=U\Sigma V^T A=UΣVT,则 A T = V Σ U T A^T=V\Sigma U^T AT=VΣUT。对于 A A A的奇异值分解,若 λ i , v i \lambda_i, \bold{v_i} λi,vi分别是 A T A A^TA ATA的一个特征值和特征向量, σ i = λ i \sigma_i=\sqrt{\lambda_i} σi=λi 是对应的奇异值,则有 A v i = σ i u i A\bold{v_i}=\sigma_i\bold{u_i} Avi=σiui σ i A T u i = A T A v i = λ i v i \sigma_iA^T\bold{u_i}=A^TA\bold{v_i}=\lambda_i\bold{v_i} σiATui=ATAvi=λivi,所以 A T u i = λ i σ i v i = σ i v i A^T\bold{u_i}=\frac{\lambda_i}{\sigma_i}\bold{v_i}=\sigma_i\bold{v_i} ATui=σiλivi=σivi,所以,如果 V V V的某一列是 A A A原像空间的单位正交基, U U U的对应列是 A A A的像空间的单位正交基,则 U U U的该列是 A T A^T AT原像空间的单位正交基, V V V的对应列是 A T A^T AT的像空间的单位正交基。所以 A T A^T AT的奇异值分解有上述形式。此处没有证明 A T A A^TA ATA A A T AA^T AAT具有相同的非零特征值。
基于这个原因对于求 A m × n A_{m\times n} Am×n的奇异值分解(m<<n),可以通过求 A T A^T AT的奇异值分解来实现,则计算复杂度降低:计算 A T A A^TA ATA复杂度从 2 m n 2 2mn^2 2mn2下降到 2 m n 2m^n 2mn,计算行列式的时间复杂度由 n ! n! n!下降到 m ! m! m!
因此,如果上面计算 A T A^T AT的奇异值分解,可以立即得到 A T = ( U Σ V T ) T = V Σ U T A^T=(U\Sigma V^T)^T=V\Sigma U^T AT=(UΣVT)T=VΣUT,而上述矩阵均为已知。

相关文章:

线性代数重要知识点和理论(下)

奇异值分解 奇异值分解非常重要且有趣。首先对于 n n n\times n nn对称矩阵 A A A&#xff0c;可以通过对角化得到其对角化形式 A P D P − 1 APDP^{-1} APDP−1&#xff0c;但是如果 A A A不是对称矩阵或者不是方阵&#xff0c;则不能进行对角化&#xff0c;但是可以通过奇…...

独立开发者系列(35)——python环境的理解

新手阶段&#xff0c;为了快速入门&#xff0c;基本都是直接开始写python代码实现自己想要的效果&#xff0c;类似搭建博客&#xff0c;写个web服务器&#xff0c;搭建简易聊天室&#xff0c;偶尔也写些爬虫&#xff0c;或者使用pygame写个简单小游戏&#xff0c;也有tk库做点简…...

中小企业常见的网络安全问题及防范措施

在数字化浪潮的推动下&#xff0c;我国中小企业的信息化建设取得了显著成就。然而&#xff0c;随着网络安全形势的日益严峻&#xff0c;中小企业在网络安全方面的短板逐渐暴露出来。本文将从中小企业网络安全现状出发&#xff0c;深入剖析其存在的问题&#xff0c;并提出针对性…...

Android 线程并发:线程通信:Handler机制

文章目录 API源码分析操作总结 API Handler相关 Handler对象.sendMessage(Message) 发送消息 Handler对象.handleMessage()空方法 自定义Handler重写handleMessage方法&#xff0c;处理Message Looper相关 Looper.getMainLooper() 获取App的UI线程的Looper对象 Looper…...

搭建自己的金融数据源和量化分析平台(三):读取深交所股票列表

深交所的股票信息读取比较简单&#xff1a; 看上图&#xff0c;爬虫读取到下载按钮的链接之后发起请求&#xff0c;得到XLS文件后直接解析就可以了。 这里放出深交所爬虫模块的代码&#xff1a; # -*- coding: utf-8 -*- # 深圳交易所爬虫 import osimport pandas as pd imp…...

企业级视频拍摄与编辑SDK的全面解决方案

视频已成为企业传播信息、展示品牌、连接用户的重要桥梁&#xff0c;如何高效、专业地制作高质量视频内容&#xff0c;成为众多企业面临的共同挑战。美摄科技&#xff0c;作为视音频技术领域的创新先锋&#xff0c;以其强大的视频拍摄与编辑SDK&#xff0c;为企业量身打造了一站…...

后端返回列表中包含图片id,如何将列表中的图片id转化成url

问题描述 如果我有一个列表数据&#xff0c;列表中每个对象都包含一个图片id&#xff0c;现在我需要将列表中的图片id转化成图片&#xff0c;然后再页面上显示出来 如果你有一个列表数据&#xff0c;列表中每个对象都包含一个图片 ID&#xff0c;并且你想将这些图片 ID 转化为…...

Python学习笔记44:游戏篇之外星人入侵(五)

前言 上一篇文章中&#xff0c;我们成功的设置好了游戏窗口的背景颜色&#xff0c;并且在窗口底部中间位置将飞船加载出来了。 今天&#xff0c;我们将通过代码让飞船移动。 移动飞船 想要移动飞船&#xff0c;先要明白飞船位置变化的本质是什么。 通过上一篇文章&#xff0…...

export在linux中的作用

在某些项目中常常使用export命令。该命令的作用是设置环境变量&#xff0c;并且该环境变量为当前shell进程与其启动的子进程共享。 export MODEL_NAME"stable-diffusion-v1-4"比如以上命令&#xff0c;如果不采用export&#xff0c;设置的变量仅在当前shell命令/进程…...

FFmpeg解复用器如何从封装格式中解析出不同的音视频数据

目录 1、ffmpeg介绍 2、FFMPEG的目录结构 3、FFmpeg的格式封装与分离 3.1、数据结构 3.2、封装和分离(muxer和demuxer) 3.2.1、Demuxer流程 3.2.2、Muxer流程 4、总结 4.1、播放器 4.2、转码器 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续…...

测试-常见问题

目录 1、测试报告中有哪些内容? 2、如何保证用例的覆盖度 3、测试用例和测试脚本的关系 4、Android和iOS测试的区别 5、小程序和App测试的区别 6、Web和App测试的区别 7、Alpha和Beta测试的区别 8、测试计划包括哪些? 9、Jmeter 、 monkey 10、设计用例的考虑点 …...

RSA非对称加密算法(Java实现)

废话不多说&#xff0c;直接上代码 public class RSAService {private static final String RSA "RSA";private static final String PUBLIC_KEY "xxx";private static final String PRIVATE_KEY "xxx";public static void main(String[] ar…...

netty构建http服务器

Netty 是一个高性能的异步事件驱动的网络应用框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。要使用 Netty 搭建一个支持 HTTP 方法&#xff08;GET, POST, PUT, DELETE&#xff09;的 HTTP 服务器&#xff0c;可以按照以下步骤进行操作。 准备工作 添加依赖…...

Docker中安装Kafka和Kafka UI管理界面

Kafka 简介 Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流应用。它最初由LinkedIn开发,并于2011年开源,之后成为Apache项目的一部分。Kafka的核心概念和功能包括: 发布与订阅消息系统:Kafka允许用户发布和订阅消息流。高吞吐量:Kafka能够处理大量数…...

防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份、还原和抓包

防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份、还原和抓包 &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&…...

C# 冒泡排序

栏目总目录 概念 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它通过重复遍历待排序的数列&#xff0c;比较每对相邻的项&#xff0c;并在顺序错误时交换它们的位置&#xff0c;直到没有需要交换的项为止。由于排序过程中小数逐渐“浮”到前…...

网络传输层——UDP与TCP

前言&#xff1a; 1.国际网络体系结构&#xff1a; OSI模型: open system interconnect 理论模型 1977 国际标准化组织 各种不同体系结构的计算机能在世界范围内互联成网。 应用层:要传输的数据信息&#xff0c;如文件传输&#xff0c;电子邮件等…...

Hype 4 Pro for Mac:专业级HTML5动画制作利器

Hype 4 Pro for Mac是一款专为Mac用户设计的专业级HTML5动画制作软件&#xff0c;它集动画制作、交互设计于一身&#xff0c;为用户提供了一种全新的、高效的动画制作体验。 该软件拥有直观易用的界面和强大的功能&#xff0c;支持多种设计元素&#xff0c;如滚动、旋转、缩放…...

C++ STL remove, remove_if 用法

一&#xff1a;功能 移除序列中&#xff08;满足给定条件&#xff09;的元素&#xff0c;该操作并不是真的将元素删除&#xff0c;而是序列的size不变&#xff0c;只是更新了迭代器&#xff0c;该函数会返回最后一个未删除元素的位置。 二&#xff1a;用法 #include <vect…...

HarmonyOS NEXT 开发之ArkTS基础入门

ArkTS 是 HarmonyOS NEXT 的开发语言&#xff0c;它基于 TypeScript 并进行了扩展和优化。以下是一些基础语法知识点、示例用法及注意事项。 一、ArkTS 简介 ArkTS 是一种基于 TypeScript 的编程语言&#xff0c;主要用于 HarmonyOS 应用的 UI 界面和业务逻辑开发。它在 Type…...

UE5 C++跑酷练习(Part2)

一.首先GameMode里有Actor数组&#xff0c;组装直线路&#xff0c;和左右路 #include "CoreMinimal.h" #include "GameFramework/GameModeBase.h" #include "RunGANGameMode.generated.h"UCLASS(minimalapi) class ARunGANGameMode : public AG…...

从0开始搭建vue + flask 旅游景点数据分析系统(二):搭建基础框架

这一期目标是把系统的布局给搭建起来&#xff0c;采用一个非常简单的后端管理风格&#xff0c;可以参考官方的页面 https://element.eleme.cn/#/zh-CN/component/container 下面我们开始搭建&#xff0c;首先&#xff0c;安装一下vue-router&#xff0c;element-ui npm insta…...

【过滤器 vs 拦截器】SpringBoot中过滤器与拦截器:明智选择的艺术(如何在项目中做出明智选择)

文章目录 SpringBoot 过滤器 vs 拦截器过滤器 (Filter)定义特点使用场景实现步骤创建过滤器类注册过滤器&#xff08;可选&#xff0c;如果不使用 WebFilter 注解&#xff09; 拦截器 (Interceptor)定义特点使用场景实现步骤创建拦截器类注册拦截器 过滤器与拦截器的比较实际项…...

2024-06学习笔记

1.事务与数据库链接的占用 如果用Transactional注解&#xff0c;那在第一次与数据库交互的时候&#xff0c;就会打开数据库链接&#xff0c;再整个方法执行完&#xff0c;才会关闭数据库链接。 即使后边用的事务传播是required_new,那之前的事务也是被挂起&#xff0c;不会被…...

【VUE】封装一个追随鼠标的漂浮组件框架

红色箭头代表鼠标位置&#xff0c;蓝色区域跟随鼠标出现&#xff0c;鼠标进行其他操作的时候&#xff0c;蓝色区域隐藏。 vue全码 <template><divmousemove"updatePosition"mouseleave"hideDiv"class"container":style"{ positi…...

mapstruct与lombok结合使用

问题 如果同时使用mapstruct与lombok&#xff0c;需要多添加一个lombok支持mapstruct的依赖库。 解决 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId> </dependency><dependency><groupId&…...

【SpringBoot】Web开发之URL映射

RequestMapping("/getDataById/{id}") public String getDataById(PathVariable("id") Long id){ return "getDataById:"id; }46 如果URL中的参数名称与方法中的参数名称一致&#xff0c;则可以简化为&#xff1a; RequestMapping("/get…...

对递归的一些理解。力扣206题:翻转链表

今天在刷力扣的时候&#xff0c;在写一道翻转链表的题目的过程中&#xff0c;在尝试使用递归解决该问题的时候&#xff0c;第一版代码却每次都返回的是null&#xff0c;这个错误让我尝试去debug了一下&#xff0c;最终找出了问题&#xff0c;并且让我对递归有了一些更深的理解&…...

Kafka面试三道题

针对Kafka的面试题&#xff0c;从简单到困难&#xff0c;我可以给出以下三道题目&#xff1a; 1. Kafka的基本概念与优势 问题&#xff1a;请简要介绍Kafka是什么&#xff0c;并说明它相比传统消息队列的优势有哪些&#xff1f; 答案&#xff1a; Kafka定义&#xff1a;Apa…...

C/C++编程-算法学习-数字滤波器

数字滤波器 一阶低通滤波器结论推导11. 基本公式推导2. 截止频率 和 采样频率 推导 实现 二阶低通滤波器实现1实现2 一阶低通滤波器 结论 其基本原理基于以下公式&#xff1a; o u t p u t [ n ] α ∗ i n p u t [ n ] ( 1 − α ) ∗ o u t p u t [ n − 1 ] output[n] …...

maven介绍 搭建Nexus3(maven私服搭建)

Maven是一个强大的项目管理工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff1a;Project Object Model&#xff09;的概念&#xff0c;通过XML格式的配置文件&#xff08;pom.xml&#xff09;来管理项目的构建 Maven确实可以被视为一种工程管理工具或项目自动化构…...

电商项目之如何判断线程池是否执行完所有任务

文章目录 1 问题背景2 前言3 4种常用的方法4 代码4.1 isTerminated()4.2 线程池的任务总数是否等于已执行的任务数4.3 CountDownLatch计数器4.4 CyclicBarrier计数器 1 问题背景 真实生产环境的电商项目&#xff0c;常使用线程池应用于执行大批量操作达到高性能的效果。应用场景…...

【前端 15】Vue生命周期

Vue生命周期 在Vue.js中&#xff0c;了解组件的生命周期对于开发者来说是至关重要的。Vue的生命周期指的是Vue实例从创建到销毁的一系列过程&#xff0c;每个阶段都对应着特定的生命周期钩子&#xff08;或称为生命周期方法&#xff09;&#xff0c;允许我们在不同的时间点加入…...

PCIe总线-Linux内核PCIe软件框架分析(十一)

1.简介 Linux内核PCIe软件框架如下图所示&#xff0c;按照PCIe的模式&#xff0c;可分为RC和EP软件框架。RC的软件框架分为五层&#xff0c;第一层为RC Controller Driver&#xff0c;和RC Controller硬件直接交互&#xff0c;不同的RC Controller&#xff0c;其驱动实现也不相…...

视觉SLAM第二讲

SLAM分为定位和建图两个问题。 定位问题 定位问题是通过传感器观测数据直接或间接求解位置和姿态。 通常可以分为两类&#xff1a;基于已知地图的定位和基于未知地图的定位。 基于已知地图的定位 利用预先构建的地图&#xff0c;结合传感器数据进行全局定位。SLAM中的全局…...

mysql1055报错解决方法

目录 一、mysql版本 二、 问题描述 三、解决方法 1.方法一&#xff08;临时&#xff09; 2.方法二&#xff08;永久&#xff09; 一、mysql版本 mysql版本&#xff1a;5.7.23 二、 问题描述 在查询时使用group by语句&#xff0c;出现错误代码&#xff1a;1055&#xf…...

Java的@DateTimeFormat注解与@JsonFormat注解的使用对比

Java的DateTimeFormat注解与JsonFormat注解的使用对比 在Java开发中&#xff0c;处理日期和时间格式时&#xff0c;我们经常会使用到DateTimeFormat和JsonFormat注解。这两个注解主要用于格式化日期和时间&#xff0c;但在使用场景和功能上有所不同。本文将详细介绍这两个注解…...

德国云手机:企业移动办公解决方案

在现代商业环境中&#xff0c;移动办公已经成为一种趋势。德国云手机作为一种高效的解决方案&#xff0c;为企业提供了强大的支持。本文将探讨德国云手机如何优化企业的移动办公环境。 一、德国云手机的主要优势 高灵活性 德国云手机具有高度的灵活性&#xff0c;能够根据用户需…...

【React】useState:状态管理的基石

文章目录 一、什么是 useState&#xff1f;二、useState 的基本用法三、useState 的工作原理四、高级用法五、最佳实践 在现代前端开发中&#xff0c;React 是一个非常流行的库&#xff0c;而 useState 是 React 中最重要的 Hook 之一。useState 使得函数组件能够拥有自己的状态…...

商品中心关于缓存热key的解决方案

缓存热key一旦被击穿&#xff0c;流量势必会打到数据库&#xff0c;如果数据库崩了&#xff0c;游戏直接结束。 从两点来讨论&#xff1a;如何监控、如何解决。 如何监控 通过业务评估&#xff1a;比如营销活动推出的商品或者热卖的商品。基于LRU的命令&#xff0c;redis-cl…...

【Python系列】Parquet 数据处理与合并:高效数据操作实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

大脑自组织神经网络通俗讲解

大脑自组织神经网络的核心概念 大脑自组织神经网络&#xff0c;是指大脑中的神经元通过自组织的方式形成复杂的网络结构&#xff0c;从而实现信息的处理和存储。这一过程涉及到神经元的生长、连接和重塑&#xff0c;是大脑学习和记忆的基础。其核心公式涉及神经网络的权重更新…...

org.springframework.context.annotation.DeferredImportSelector如何使用?

DeferredImportSelector 是 Spring 框架中一个比较高级的功能&#xff0c;主要用于在 Spring 应用上下文的配置阶段延迟导入某些组件或配置。这个功能特别有用&#xff0c;比如在处理依赖于其他自动配置的场景&#xff0c;或者当你想基于某些条件来决定是否导入特定的配置类时。…...

缓慢变化维

缓慢变化维 缓慢变化维&#xff08;Slowly Changing Dimensions&#xff0c;简称SCD&#xff09;是数据仓库中的一个重要概念&#xff0c;用于处理维度表中数据随时间发生的变化。以下是一个具体的例子来描述缓慢变化维&#xff1a; 假设我们有一个销售数据仓库&#xff0c;其…...

Vue常用的指令都有哪些?都有什么作用?什么是自定义指令?

常用指令&#xff1a; 1、v-model 多用于表单元素实现双向数据绑定 (同angular中的ng-model) 2、v-for格式&#xff1a; v-for"字段名in(of)数组json"循环数组或json(同angular中的ng repeat),需要注意从vue2开始取消了$index 3、v-show 4、v-hide 隐藏内容 (同a…...

kettle从入门到精通 第八十一课 ETL之kettle kettle中的json对象字段写入postgresql中的json字段正确姿势

1、上一节可讲解了如何将json数据写入pg数据库表中的json字段&#xff0c;虽然实现了效果&#xff0c;但若客户继续使用表输出步骤则仍然无法解决问题。 正确的的解决方式是设置数据库连接参数stringtypeunspecified 2、stringtypeunspecified 参数的作用&#xff1a; 当设置…...

计算机网络实验-RIP配置与分析

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、相关知识 路由信息协议&#xff08;Routing Information Protocol&#xff0c;RIP&#xff09;是一种基于距离向量&#xff08;Distance-Vector&…...

33.【C语言】实践扫雷游戏

预备知识&#xff1a; 第13篇 一维数组 第13.5篇 二维数组 第28篇 库函数 第29篇 自定义函数 第30篇 函数补充 0x1游戏的运行&#xff1a; 1.随机布置雷 2.排雷 基本规则&#xff1a; 点开一个格子后&#xff0c;显示1&#xff0c;对于9*9&#xff0c;代表以1为中心的去…...

git学习笔记(总结了常见命令与学习中遇到的问题和解决方法)

前言 最近学习完git&#xff0c;学习过程中也遇到了很多问题&#xff0c;这里给大家写一篇总结性的博客&#xff0c;主要大概讲述git命令和部分难点问题&#xff08;简单的知识点这里就不再重复讲解了&#xff09; 一.git概述 1.1什么是git Git是一个分布式的版本控制软件。…...

【计算机网络】TCP协议详解

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 1、引言2、udp和tcp协议的异同3、tcp服务器3.1、接口认识3.2、服务器设计 4、tcp客户端4.1、客户端设计4.2、说明 5、再研Tcp服务端5.1、多进程版5.2、多线程版 5、守护进程化5.1、什么是守护进程5.2…...