rsync服务的搭建
目录
一、rsync介绍
rsync的安装
二、rsync的语法
三、rsync命令使用
1. 本机同步
2. 远程同步
四、rsync作为服务使用
1、尝试启动rsync程序
2、rsync的配置文件介绍
注意事项:
3. rsync+inotify实时同步
3.依赖服务托管xinetd(CentOS 6中rsync)
一、rsync介绍
- rsync的好姐妹
- sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
- async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
- rsync 远程同步:remote synchronous。
- rsync的特点
可以镜像保存整个目录树和文件系统
可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
传输效率高,使用同步算法,只比较变化的(增量备份)
file1.txt file2.txt file3.txt(A服务器)
file1.txt file2.txt(B服务器)
rsync实现数据同步 => 只同步file3.txt => 增量备份
支持匿名传输,方便网站镜像;也可以做验证,加强安全
rsync与scp区别?
两者都可以实现远程同步,但是相对比而言,rsync能力更强。表现在:① 支持增量备份;② 数据同步时保持文件的原有属性。
rsync的安装
yum install rsync -y
#在这里我比较推荐yum安装,比较方便
rsync认证方式
rsync有两种常用的认证方式,一种是rsync-daemon方式(客户端连接873端口,实现数据传输, 传输过程不加密),另外一种是ssh方式(走ssh加密通道)。在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议; 反之,如果使用两个冒号(::),则使用 rsync 协议。 在平时使用过程,我们使用最多的是rsync-daemon方式。 注意:(1)在使用rsync时,服务器和客户端都必须安装rsync程序。 (2)、rsync-daemon认证方式,需要服务器和客户端都安装rsync服务并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。 客户端启动不启动rsync服务,都不影响同步的正常进行。(3)ssh认证方式,不需要服务器和客户端配置rsync配置文件 只需要双方都安装rsync服务,并且也不需要双方启动rsync。
两种认证方式的本质区别:(1)、ssh 协议认证连接的两端是通过管道完成通信和数据传输的,当连接到远程主机时,将在远程主 机 fork 出 rsync 进程使其成为 rsync server;(2)、而 rsync 协议认证是事先在远程主机上运行 rsync 守护进 程,监听套接字等待客户端的连接,建立连接后所有通信方式都是通过套接字完成的。
二、rsync的语法
- man rsync
NAMErsync — a fast, versatile, remote (and local) file-copying tool//一种快速、通用、远程(和本地)的文件复制工具SYNOPSISLocal: rsync [OPTION...] SRC... [DEST]Access via remote shell://通过远程shell访问(命令)Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DESTAccess via rsync daemon://通过后台程序访问(作为服务)Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
- rsync命令参数
-v 详细模式输出-a 归档模式,递归的方式传输文件,并保持文件的属性,equals -rlptgoD-r 递归拷贝目录-l 保留软链接-p 保留原有权限-t 保留原有时间(修改)-g 保留属组权限-o 保留属主权限-D 等于--devices --specials 表示支持b,c,s,p类型的文件-R 保留相对路径-H 保留硬链接-A 保留ACL策略-e 指定要执行的远程shell命令-E 保留可执行权限-X 保留扩展属性信息 a属性
三、rsync命令使用
1. 本机同步
注意:
1. 本地数据同步的时候,源目录后面的“/”会影响同步的结果# rsync -av /dir1/ /dir3 //只同步dir1目录下面的文件到指定的路径# rsync -av /dir1 /dir2 //将当前目录dir1和目录下的所有文件一起同步2. -R:不管加不加"/",都会将源数据的绝对路径一起同步# rsync -avR /dir1/ /dir2/
3. --delete:删除目标目录里多余的文件# rsync -avR --delete /dir1/ /dir2/
2. 远程同步
pull: rsync -av user@host:/path local/path
# rsync -av root@10.1.1.1:/etc/hosts /dir1/
# rsync -av root@10.1.1.1:/backup /dir1
push: rsync -av local/path user@host:/path
# rsync -av /dir1/aa1 code@10.1.1.1:/home/code
思考:
rsync远程同步数据时,默认情况下为什么需要密码?如果不想要密码同步怎么实现?
因为两台Linux服务器在连接时,默认使用的还是SSH协议。由于没有做免密登录,所以还是需要输入对方服务器的密码。
如果不想输入密码,可以使用免密登录来实现。
# ssh-keygen
# ssh-copy-id root@10.1.1.250
四、rsync作为服务使用
思路:
对外提供服务——>端口监听——>启动服务——>启动脚本(没有)——>配置文件(修改需求)
1、尝试启动rsync程序
[root@jumper ~]# rsync --daemon
Failed to parse config file: /etc/rsyncd.conf
说明:先尝试以后台程序的方式启动它
原因:没有配置文件(默认没有)
解决:创建配置文件
[root@jumper ~]# touch /etc/rsyncd.conf
[root@jumper ~]# rsync --daemon
[root@jumper ~]# ps -ef|grep rsync
root 3814 1 0 11:43 ? 00:00:00 rsync --daemon
root 3817 2826 0 11:44 pts/0 00:00:00 grep rsync
[root@jumper ~]# netstat -nltup|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3814/rsync
tcp 0 0 :::873 :::* LISTEN 3814/rsync
结论:
1. rsync启动时必须要读取配置文件,如果没有报错
2. rsync默认情况下,端口是873,协议tcp#或者启动rsyncd服务(CentOS6中没有,CentOS7中有这个服务)
# systemctl start rsyncd
2、rsync的配置文件介绍
man 5 rsyncd.conf
全局的参数port = xxxpid file = xxx...
局部模块
[模块名1]path = /dir1uid = xxxgid = xxxlog file = xxxmax connections =4.....
[模块名2]path = /dir2uid =xxxgid = xxx.....# 以 rsync 用户启动进程
# 传输文件使用的用户和用户组,如果是从服务器=>客户端,要保证rsync用户对文件有读取的权限;如果是
从客户端=>服务端,要保证rsync对文件有写权限。
uid = rsync
gid = rsync
# uid和gid表明同步上来的文件写入的时候是使用哪个用户身份进行写入的。所以,这个用户必须要对
path 定义的目录有写入权限。否则会在客户端报:rsync: xxx failed: Permission denied (13)
fake super = yes
# 如果设置为yes,那么文件的所有者和所属组信息变成rsync虚拟用户的UID,GID,想要所有者和所属组信
息不变可以设置fake super
use chroot = yes
# 禁锢推送的数据至某个目录, 不允许跳出该目录
#允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下,chroot为yes时
必须使用root权限,且不能备份path路径外的链接文件max connections = 200 # 最大连接数
timeout = 300 # 超时时间
pid file = /var/run/rsyncd.pid # pid文件路径
lock file = /var/run/rsync.lock # 锁文件路径
exclude = lost+found/ # 剔除某些文件或目录,不同步
transfer logging = yes # 记录传输文件日志
log file = /var/log/rsyncd.log # 指定日志文件
log format = %t %a %m %f %b # 日志文件格式
ignore errors # 忽略错误信息
list = false # 不允许查看模块信息
hosts allow = 192.168.42.0/24 # 只允许192.168.42.0/24段ip连接
hosts deny = * # 不允许所有网段ip连接
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 设置不需要压缩的文件
path = /home/nebula/backup # 上传的文件存储的目录,下载文件的读目录
comment = nebula userdata backup #共享给客户端看到的名字,可以自己定义
read only = false # backup这个模块儿,是否可以被写入。
auth users = youyou # 虚拟用户名,即就是上传时rsync命令书写中写的。
secrets file = /etc/rsync.password #密码文件,服务端书写格式为虚拟用户名:密码 客户端的书写格式为 虚拟用户所对应的密码# 以下为安全配置,请按照具体的生产环境需求配置。如:上传到服务端上的文件,并不希望被客户端同步
删除refuse options = delete delete-delay delete-before delete-excluded deleteaftermax-delete force partial P
# pre-xfer 用于可以在rsync传送之前,执行一些操作,如建立锁定文件,保证每次只有一个链接进行
数据传输,
# post-xfer 可以保证数据传输完毕之后可以自动执行后续动作。
pre-xfer exec = sh /root/.rsync_pre.sh
post-xfer exec = rm -f /var/rsync.lock
日志文件格式补充:
注意事项:
- 不论是在服务端还是客户端,密码文件的权限都必须是600,否则就会报错。服务端rsync服务是以什么用户运行,则必须保证secrets file文件拥有者必须是同一个。假设root运行rsync --daemon,则secrets file的owner也必须是root;secrets file权限必须是600。
- 在服务器端端尽量将所同步的文件的属主和属组改为rsyncd.conf文件中对应的uid和gid对应的用户和用户组。避面上传和下载的时候发生不必要的错误。
- 要想给服务端的模块下上传文件,就必须要在服务端的配置文件中对相应的模块中添加 read only=false,否则上传文件就会失败。
- auter users中的用户是不用在服务端创建的(只是虚拟存在而已),而uid和gid对应的用户和用户组必须是存在的(一般我们把uid指定为useradd -r系统用户或useradd -M不创建家目录,并且会指定shell为/sbin/nologin);虽然我们在远程上传和本地下载的时候用的是对应的虚拟用户,但是在rsync在验证的是时候是这里uid和gid。
- 没有密码有好处也有坏处,好处是不需要密码方便写脚本做远程同步;坏处就是不安全,但你可以使用防火墙等来加强安全。
- 同步可能出现的问题:
- 如果同步报permission denied这种,可能是服务端selinux没有关闭
- 同步时间慢:解决方法——绑定对方主机名
- 如果你希望有密码,可以用rsyncd本身自带的secrets file来做用户验证
3. rsync+inotify实时同步
需求:app1-server服务器上的/app/java_project目录的文件和backup主机上的/backup目录实时同步
分析:rsync本身不可以做到数据的实时同步,需要借助第三方工具,intotify工具。实现线上环境目录发生改变立马同步到backup主机,是单向同步。参考-------备份端的rsyncd.conf的配置如下:
[my_java] path=/root/java comment=my_java.bak log file=/var/log/rsyncd.log uid=java_user gid=java_user auth users=xiaowang secrets file=/etc/rsyncd.secrets read only=false ignore errors
服务端得创建用户 useradd -s /sbin/nologin -M java_user 服务端的密码文件 echo "xiaowang:123456" >> /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets 客户端的密码文件 echo "123456" >> /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets
步骤:
1. 在服务器端上安装inotify工具
- 原码安装或者结合epel源使用yum 进行安装
- 安装完后,就会产生下面两个命令
/usr/local/bin/inotifywait 等待 、/usr/local/bin/inotifywatch 看守
2. 查看命令如何使用,然后编写脚本来实现目录的监控
- 注意:该脚本应该在备份服务器运行,该服务器是往备份服务器上进行推送
# inotifywait --help
- -m 保持监控状态
- -r 递归监控
- -q 只打印事件
- -e 指定事件
事件:
- move 移动、delete 删除、create 创建、modify 修改、attrib 属性信息
- 编写脚本-----实时监控要镜像备份的目录(脚本我们后面会讲到)
vim /root/inotify.sh#!/bin/bash /usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /root/java.bak | while read events dorsync -av --delete --password-file=/etc/rsyncd.secrets /root/java.bak/ xiaowang@192.168.17.3::my_java/ &> /dev/nullecho "`date +%F\ %T`出现事件$events" >> /var/log/rsyncd.log 2>&1 done# chmod +x inotify.sh 增加可执行权限 # ./inotify.sh & 将脚本放到后台去运行
注意:
如果单纯使用命令去推的话,正常情况下需要密码,不利于脚本编写,在这里提供2中解决方案:1)设置免密码登录;2)在backup服务器上将rsync作为后台程序运行3. 测试验证
[root@localhost java.bak]# touch file.c [root@localhost java.bak]# rm -rf file.c [root@localhost java.bak]# cat /var/log/rsyncd.log 2025-06-01 22:25:54出现事件/root/java.bak/ CREATE file.c 2025-06-01 22:25:55出现事件/root/java.bak/ ATTRIB file.c 2025-06-01 22:25:56出现事件/root/java.bak/ DELETE file.c
3.依赖服务托管xinetd(CentOS 6中rsync)
独立服务:独立启动脚本 ssh ftp nfs dns …
依赖服务: 没有独立的启动脚本 依赖xinetd服务(独立服务)
- 平时不占用系统的运行资源
- xinetd服务管理依赖服务
- 一些轻量级服务会托管给xinetd服务
如何将rsync托管给xinetd服务去管理?
1. 安装相应的软件
yum -y install xinetd
2. 查看软件类别
rpm -ql xinetd /etc/rc.d/init.d/xinetd /etc/xinetd.conf /etc/xinetd.d xinetd服务管理的所有轻量级服务的目录 /usr/sbin/xinetd /usr/share/man/man5/xinetd.conf.5.gz
3. 查看rsync软件列表
rpm -ql rsync /etc/xinetd.d/rsync /usr/bin/rsync
4. 了解配置文件
- 1)xinetd服务的配置文件
man 5 xinetd.conf only_from 只允许访问 no_access 拒绝访问 access_times 控制访问服务的时间段 log_type 指定日志类型 interface 并发连接数 per_source 每个IP的最大连接数
- 2)rsync配置文件 /etc/xinetd.d/rsync
service rsync {disable = no //开关;no表示开启该服务;yes表示关闭服务flags = IPv6socket_type = streamwait = nouser = rootserver = /usr/bin/rsyncserver_args = --daemonlog_on_failure += USERID }
5. 把rsync服务的开关打开
6. 启动xinetd服务service xinetd restart [root@jumper ~]# netstat -nltp|grep 873 tcp 0 0 :::873 :::* LISTEN 6209/xinetd
到此,rsync服务就托管给了xinetd服务管理;后续需要有些需求,修改配置文件:
/etc/rsyncd.conf、/etc/xinetd.d/rsync
本 篇 完 结 … …
持 续 更 新 中 … …
相关文章:

rsync服务的搭建
目录 一、rsync介绍 rsync的安装 二、rsync的语法 三、rsync命令使用 1. 本机同步 2. 远程同步 四、rsync作为服务使用 1、尝试启动rsync程序 2、rsync的配置文件介绍 注意事项: 3. rsyncinotify实时同步 3.依赖服务托管xinetd(CentOS 6中rs…...
JDK21深度解密 Day 8:Spring Boot 3与虚拟线程整合
【JDK21深度解密 Day 8】Spring Boot 3与虚拟线程整合 引言:Spring Boot 3遇上JDK21虚拟线程 在本系列的第8天,我们将聚焦于Spring Boot 3与JDK21虚拟线程的整合实践。作为全网首套完整的JDK21特性解析,我们不仅会探讨虚拟线程如何颠覆传统Java并发模型,还会通过完整的Sp…...

vscode 配置 QtCreat Cmake项目
1.vscode安装CmakeTool插件并配置QT中cmake的路径,不止这一处 2.cmake生成器使用Ninja(Ninja在安装QT时需要勾选),可以解决[build] cc1plus.exe: error: too many filenames given; type ‘cc1plus.exe --help’ for usage 编译时…...
排序算法-归并排序与快速排序
归并排序与快速排序 快速排序是利用的递归思想:选取一个基准数,把小于基准数的放左边 大于的放右边直到整个序列有序 。快排分割函数 O(lognn), 空间 :没有额外开辟新的数组但是递归树调用函数会占用栈内存 O(logn) 。 归并排序:在递归返回的…...

HTML实现端午节主题网站:龙舟争渡,凭吊祭江诵君赋。
名人说:龙舟争渡,助威呐喊,凭吊祭江诵君赋。——苏轼《六幺令天中节》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、项目概览:传统与现代的技术碰撞1. 核心特…...

uniapp uni-id 如果是正式项目,需自行实现发送邮件的相关功能
(3) 使用云对象sendEmailCode 发送邮箱验证码,报错送邮箱验证码失败 Error: 已启动测试模式,直接使用:123456作为邮箱验证码即可。 如果是正式项目,需自行实现发送邮件的相关功能 - DCloud问答 uni-id 没有实现邮箱验证码逻辑&am…...
Spring boot 策略模式
public abstract class Node {/*** 执行** param a* param b* return*/public abstract Integer execute(int a, int b); }package my.node;import org.springframework.stereotype.Component;Component("exec") public class ExecNode extends Node {Overridepublic…...
websocket在vue中的使用步骤,以及实现聊天
一、WebSocket集成步骤 连接初始化 在Vue组件中创建WebSocket实例,建议在mounted生命周期中执行: data() {return {socket: null,messages: []} }, mounted() {this.socket new WebSocket(wss://your-server-endpoint); }事件监听配置 连接成…...

C++学习-入门到精通【12】文件处理
C学习-入门到精通【12】文件处理 目录 C学习-入门到精通【12】文件处理一、文件和流二、创建顺序文件三、从顺序文件读取数据文件定位指针对之前的程序进行修改:贷款查询程序 四、更新顺序文件五、随机存取文件1.创建随机存取文件2.修改程序:贷款处理程序…...
第十一篇:MySQL 在分布式系统中的一致性保障与中间件实践
随着微服务和分布式架构的发展,单点数据库早已无法满足系统的横向扩展需求。本篇聚焦 MySQL 在分布式系统中的一致性保障机制,以及相关中间件的使用策略与实战经验。 一、一致性问题的由来 在 单机 MySQL 环境 中,事务具有原子性、隔离性&am…...
Java中如何枚举正则表达式捕获组的名字
在使用正则表达式在匹配文本时,除了可以通过表达式捕获命中的文本串外,还可以对捕获的文本串进行命名。尤其是在解析日志的场景中,经常会被用到。表达式如下: \<(?<pri>\d)\>(?<time>.*) (?<host>\S)…...
matlab实现图像压缩编码
一、基于DCT的JPEG压缩(有损) 1. 核心步骤 图像分块:将图像划分为88的小块。离散余弦变换(DCT):对每个块进行DCT变换。量化:对DCT系数进行量化以减少高频信息。熵编码:使用哈夫曼或…...
如何排查Redis单个Key命中率骤降?
问题现象 Redis整体命中率98%,但监控发现特定Key(如user:1000:profile)的命中率从99%骤降至40%,引发服务延迟上升。 排查步骤 1. 确认现象与定位Key // 通过Redis监控工具获取Key指标 public void monitorKey(String key) {Je…...

记一次 Starrocks be 内存异常宕机
突发性 be 内存飙高,直至被系统 kill 掉,be 内存如下:其中 starrocks_be_update_mem_bytes 指标打满,重启也是如此 [rootlocalhost bin]# curl -XGET -s http://192.168.1.49:8040/metrics | grep "^starrocks_be_.*_mem_b…...
Spring Boot 读取.env文件获取配置
Spring Boot 读取.env文件获取配置 在Resouce 目录下创建.env文件 # DEEP SEEK TOKEN DEEP_SEEK_TOKENyour_deep_seek_key # 阿里云百炼 TOKEN ALI_BAILIAN_TOKENyour_ali_bailian_keyyml引入.env文件 spring:config:import: optional:classpath:.env[.properties]使用.env文…...

LangChain-结合GLM+SQL+函数调用实现数据库查询(一)
业务流程 实现步骤 1. 加载数据库配置 在项目的根目录下创建.env 文件,设置文件内容: DB_HOSTxxx DB_PORT3306 DB_USERxxx DB_PASSWORDxxx DB_NAMExxx DB_CHARSETutf8mb4 加载环境变量,从 .env 文件中读取数据库配置信息 使用 os.getenv…...
python训练营打卡第41天
简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 → Batch…...
1.3HarmonyOS NEXT统一开发范式与跨端适配:开启高效跨设备应用开发新时代
HarmonyOS NEXT统一开发范式与跨端适配:开启高效跨设备应用开发新时代 在HarmonyOS NEXT的技术体系中,统一开发范式与跨端适配是两大关键特性,它们为开发者打破了设备边界,极大地提升了开发效率与应用体验。本章节将深入探讨方舟…...
麒麟v10,arm64架构,编译安装Qt5.12.8
Window和麒麟x86_64架构,官网提供安装包,麒麟arm64架构的,只能自己用编码编译安装。 注意,“桌面”路径是中文,所以不要把源码放在桌面上编译。 1. 下载源码 从官网下载源码:https://download.qt.io/arc…...
ArcGIS Pro 3.4 二次开发 - 布局
环境:ArcGIS Pro SDK 3.4 + .NET 8 文章目录 布局1 布局工程项1.1 引用布局工程项及其关联的布局1.2 在新视图中打开布局工程项1.3 激活已打开的布局视图1.4 引用活动布局视图1.5 将 pagx 导入工程1.6 移除布局工程项1.7 创建并打开一个新的基本布局1.8 使用修改后的CIM创建新…...
基于随机函数链接神经网络(RVFL)的锂电池健康状态(SOH)预测
基于随机函数链接神经网络(RVFL)的锂电池健康状态(SOH)预测 一、RVFL网络的基本原理与结构 随机向量功能链接(Random Vector Functional Link, RVFL)网络是一种单隐藏层前馈神经网络的随机化版本,其核心特征在于输入层到隐藏层的权重随机生成且固定,输出层权重通过最…...
爱其实很简单
初春时,元元买来两只芙蓉鸟。一只白色的,是雄鸟;另一只黄色的,是雌鸟。 每天清晨日出之前,雄鸟便开始“啁啾——啁啾”地啼鸣,鸣声清脆婉转,充满喜悦,仿佛在迎接日出,又…...

2025年渗透测试面试题总结-匿名[校招]安全工程师(甲方)(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 匿名[校招]安全工程师(甲方) 1. 介绍自己熟悉的渗透领域 2. 编程语言与开发能力 3. 实习工作内容与流程 …...

PySide6 GUI 学习笔记——常用类及控件使用方法(地址类QUrl)
文章目录 地址类QUrl主要功能URL 格式介绍常见 scheme(协议)类型QUrl 类常用方法常用方法示例典型应用场景 地址类QUrl QUrl 是 PySide6.QtCore 模块中的一个类,用于处理和操作 URL(统一资源定位符)。它可以解析、构建…...

任务23:创建天气信息大屏Django项目
任务描述 知识点: Django 重 点: Django创建项目Django视图函数Django路由Django静态文件Django渲染模板 内 容: 使用PyCharm创建大屏项目渲染大屏主页 任务指导 1. 使用PyCharm创建大屏项目。 创建weather项目配置虚拟环境创建ch…...
数学分析——一致性(均匀性)和收敛
目录 1. 连续函数 1.1 连续函数的定义 1.2 连续函数的性质 1.2.1 性质一 1.2.2 性质二 1.2.3 性质三 1.2.4 性质四 2. 一致连续函数 2.1 一致连续函数的定义 2.2 一致连续性定理(小间距定理)(一致连续函数的另一种定义) 2.3 一致连续性判定法 2.4 连…...

Flutter GridView网格组件
目录 常用属性 GridView使用配置 GridView.count使用 GridView.extent使用 GridView.count Container 实现列表 GridView.extent Container 实现列表 GridView.builder使用 GridView网格布局在实际项目中用的也是非常多的,当我们想让可以滚动的元素使用矩阵…...

【深度学习】18. 生成模型:Variational Auto-Encoder(VAE)详解
Variational Auto-Encoder(VAE)详解 本节内容完整介绍 VAE 的模型结构、优化目标、重参数化技巧及其生成机制。 回顾:Autoencoder(自编码器) Autoencoder 是一种无监督学习模型,旨在从未标注的数据中学习压…...
NodeJS全栈开发面试题讲解——P6安全与鉴权
✅ 6.1 如何防止 SQL 注入 / XSS / CSRF? 面试官您好,Web 安全三大经典问题分别从不同层面入手: 🔸 SQL 注入(Server端) 原理:恶意用户将 SQL 注入查询语句拼接,导致数据泄露或破坏…...
C# 密封类和密封方法
密封(sealed)是C#中用于限制继承和多态行为的关键字,它可以应用于类和方法,提供了一种控制继承层次的方式。 密封类 特点 使用 sealed 关键字修饰的类密封类不能被其他类继承,但可以继承其他类或接口主要用于防止派生所有结构(struct)都是…...