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

ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器

1.安装vsftpd

1.1.安装命令

sudo apt update
sudo apt install vsftpd

1.2.备份原始配置文件

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

1.3.配置 vsftpd

编辑配置文件 /etc/vsftpd.conf

sudo vim /etc/vsftpd.conf

将以下参数修改为对应值:

# 基本设置
anonymous_enable=NO           # 禁用匿名登录
local_enable=YES              # 允许本地用户登录
write_enable=YES              # 启用写入权限
local_umask=022               # 设置文件创建掩码
dirmessage_enable=YES         # 启用目录消息
use_localtime=YES             # 使用本地时间
xferlog_enable=YES            # 启用传输日志
connect_from_port_20=YES      # 启用端口 20 用于数据传输# 增强安全性
chroot_local_user=YES         # 限制用户在其主目录内
allow_writeable_chroot=YES    # 允许可写的 chroot 目录
pasv_enable=YES               # 启用被动模式
pasv_min_port=40000           # 被动模式最小端口
pasv_max_port=40100           # 被动模式最大端口
ssl_enable=YES                # 启用 SSL/TLS
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

1.4.创建 FTP 用户

# 创建用户并设置密码
sudo adduser ftpuser
# 按照提示设置密码和其他信息# 创建 FTP 目录
sudo mkdir -p /home/ftpuser/ftp/files
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp
sudo chmod -R 755 /home/ftpuser/ftp

1.5. 配置防火墙

# 开放 FTP 端口
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:40100/tcp  # 被动模式端口范围
sudo ufw allow OpenSSH          # 确保 SSH 仍可访问
sudo ufw enable                  # 启用防火墙

1.6. 重启 vsftpd 服务

sudo systemctl restart vsftpd
sudo systemctl enable vsftpd    # 设置开机自启

1.7.验证安装

可以使用命令行工具或图形化客户端验证 FTP 服务器是否正常工作:

 2.常见问题及处理

2.1.限制FTP账户只能访问当前主目录及其下级目录

2.1.1. 启用 chroot 限制

编辑 /etc/vsftpd.conf,确保以下参数设置正确:

sudo vim /etc/vsftpd.conf

修改下面的配置 

chroot_local_user=YES        # 限制所有本地用户在其主目录内
allow_writeable_chroot=YES   # 允许主目录可写(需 vsftpd 3.0.2+ 版本)

说明

  • chroot_local_user=YES:将所有本地用户限制在其主目录中(类似沙盒环境)。
  • allow_writeable_chroot=YES:若用户主目录可写(如 755 或 775 权限),需启用此选项,否则 FTP 连接会被拒绝。

2.1.2. 配置用户主目录权限

确保用户主目录不可写(父目录权限为 755),但子目录可写(如 775

# 假设用户主目录为 /home/ftpuser
sudo chmod 755 /home/ftpuser        # 主目录不可写(防止跳出)
sudo mkdir /home/ftpuser/files      # 创建可写子目录
sudo chmod 775 /home/ftpuser/files  # 赋予用户组写权限
sudo chown ftpuser:ftpuser /home/ftpuser/files  # 设置归属

2.1.3.重启 vsftpd 服务

sudo systemctl restart vsftpd

2.2.chroot_local_user=YES设置这个后xftp无法连接

当设置 chroot_local_user=YES 后无法使用 Xftp 连接,通常是由于 vsftpd 的 chroot 限制与用户主目录权限配置冲突导致的。

2.2.1. 核心问题分析

vsftpd 默认要求被 chroot 的用户主目录不可写(权限 755),否则会拒绝连接(错误码 500)。若你的用户主目录需要可写(如上传文件),需额外配置:

# 编辑 /etc/vsftpd.conf
allow_writeable_chroot=YES  # 允许被 chroot 的目录可写(需 vsftpd 3.0.2+ 版本)

2.2.2. 检查 vsftpd 版本

确认你的 vsftpd 版本是否支持 allow_writeable_chroot

vsftpd -v
# 若版本 < 3.0.2,需升级 vsftpd 或调整目录结构

2.2.3. 重启服务

sudo systemctl restart vsftpd

3.部标机上报历史音视频到服务器

3.1.上报音视频命令0x9206

 指令示例解释:

7E
9206
006A
018026966027
1835
0E --服务器长度,14个字节
3132342E3232332E36302E323334 --服务器的地址124.223.60.234
0015 --服务器端口号21
08 --用户名长度,8个字节
FFFFFFFFFFFFFFFF --这里我用FF替代了,注意要输入自己实际的FTP用户名
08 --密码长度,8个字节
FFFFFFFFFFFFFFFF --这里我用FF替代了,注意要输入自己实际的FTP密码
2D --文件上传目录长度,45个字节
2F31383032363936363032372F3231453937313632363544413439383342313131373145424235314339363339 --/18026966027/21E9716265DA4983B11171EBB51C9639,注意这是在你的FTP主目录上追加的
01 --视频通道号,01
250521141359 --视频的开始时间
250521151644 --视频的结束时间
0000000000000000 --报警标志
00 --默认音视频
00 --默认主码流或者子码流
00 --默认主存储器或者灾备存储器
07 --任务执行条件,默认全开
AB
7E

3.2.音视频控制命令0x9207

因为比较简单,这里就不进行拆包分析了。

3.3.上报完毕,设备主动发送命令0x1206

4.系统呈现

查看历史操作记录以及正在执行中的任务

远程查看已经上报到服务器上的音视频文件,并支持预览与下载

相关文章:

ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器

1.安装vsftpd 1.1.安装命令 sudo apt update sudo apt install vsftpd 1.2.备份原始配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 1.3.配置 vsftpd 编辑配置文件 /etc/vsftpd.conf&#xff1a; sudo vim /etc/vsftpd.conf 将以下参数修改为对应值&#xff…...

在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南

当然可以&#xff01;以下是一篇结构清晰、语言通俗易懂的技术博客草稿&#xff0c;供你参考和使用&#xff1a; 在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南 背景介绍 最近在对一台内网的 OpenEuler-22.03 服务器进行安全扫描时&#xff0c;发现其 SSH 版本存在…...

用java实现内网通讯,可多开客户端链接同一个服务器

创建一个客户端&#xff1a;package Socket;import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Scanner;/* 聊天案例客户端 */ public class Client {private Socket socket;/**…...

蓝耘服务器部署ppocr-gpu项目

一、存在的问题。 conda install 总是访问失败。 二、云服务器选择 三、安装Anaconda3 进入云服务器后删除minconda文件夹 官网&#xff1a; https://repo.anaconda.com/archive/ 在里面找到自己系统的安装包&#xff0c;然后右击复制链接安装。 一定要选择Anaconda,因为…...

离线服务器算法部署环境配置

本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境&#xff0c;包括基础编译工具、NVIDIA显卡驱动以及NVIDIA-Docker&#xff0c;以便顺利部署深度学习算法。 前提条件&#xff1a; 目标离线服务器已安装操作系统&#xff08;本文以Ubuntu 18.04为例&#xff09…...

现代人工智能系统的实用设计模式

关键要点 AI设计模式是为现代AI驱动的软件中常见问题提供的可复用解决方案&#xff0c;帮助团队避免重复造轮子。我们将其分为五类&#xff1a;提示与上下文&#xff08;Prompting & Context&#xff09;、负责任的AI&#xff08;Responsible AI&#xff09;、用户体验&…...

数据集下载并保存本地进行加载

一、huggingface 1、下载数据集 #数据集下载 from datasets import load_datasetds load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", "zh",cache_dir ./dir)输出测试 2、保存数据集 #数据保存 ds.save_to_disk("./local_datase…...

物流项目第六期(短信微服务——对接阿里云第三方短信服务JAVA代码实现、策略模式 + 工厂模式的应用)

前五期&#xff1a; 物流项目第一期&#xff08;登录业务&#xff09;-CSDN博客 物流项目第二期&#xff08;用户端登录与双token三验证&#xff09;-CSDN博客 物流项目第三期&#xff08;统一网关、工厂模式运用&#xff09;-CSDN博客 物流项目第四期&#xff08;运费模板列…...

嵌入式学习的第二十五天-系统编程-文件相关函数-标准I0+文件IO

一、文件的读和写 1.fwrite&#xff08;读&#xff09; size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能&#xff1a;从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr所在的本地内存中。 参数&#xff1a;ptr 要存储数据的本地…...

MySQL 8.0 OCP 1Z0-908 171-180题

Q171.Examine this MySQL client command to connect to a remote database: mysql-h remote-example.org-u root–protocolTCP–ssl-mode Which two–ss1-mode values will ensure that an X.509-compliant certificate will be used to establish the SSL/TLS connection to …...

实现动态增QuartzJob,通过自定义注解调用相应方法

:::tip 动态增加Quartz定时任务&#xff0c;通过自定义注解来实现具体的定时任务方法调用。 ::: 相关依赖如下 <!-- 用来动态创建 Quartz 定时任务 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…...

Linux网络 网络基础一

1. 计算机网络背景 1.1 网络发展 独立模式&#xff1a;计算机之间相互独立。 网络互联&#xff1a;多台计算机连接在一起&#xff0c;完成数据共享。 局域网LAN&#xff1a;计算机数量更多了&#xff0c;通过交换机和路由器连接在一起。 广域网WAN&#xff1a;将远隔千里的…...

auto关键字解析

前言 在11标准之前&#xff0c;auto在c中是声明存储器类型的关键字。而在11标准中它的功能变为了类型推导。 对此&#xff0c; 在这里引入Cprimer中的原句&#xff1a; 编程时常常需要把表达式的值赋给变量&#xff0c;这就要求在声明变量的时候清楚的知道表达式的类型。然而…...

[实战]用户系统-1-基础功能完善

[实战]用户系统-1 目标响应格式化新建lib-interceptor增加res拦截器新建lib-filter完善异常处理日志处理新建lib-logger新增mongodb的model代码进度目标 我们的用户系统实战,将会实现以下功能,登录,注册,登出,修改用户信息,上传头像,响应的格式化,请求拦截,vip标识。…...

C#SQLServer数据库通用访问类

using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace thinger.cn.ADO.NETTeach { /// /// 数据库的通用类 /// public class SQLHelperBase…...

Linux中进程控制(上)

目录 进程创建 写时拷贝 fork常用场景 fork调用失败的原因 进程终止 进程退出场景 退出码 _exit函数 exit函数 进程等待 进程等待必要性 进程等待方法 wait方法 ​编辑 waitpid方法 获取⼦进程status 阻塞和非阻塞等待 进程创建 在linux中fork函数是⾮常重要的…...

为什么服务器突然变慢?从硬件到软件的排查方法

服务器突然变慢是许多系统管理员和网站运维人员经常遇到的问题。这种情况可能会影响网站性能、用户体验以及整个业务流程。了解服务器变慢的原因并采取相应的排查措施是至关重要的。本文将介绍服务器突然变慢的可能原因&#xff0c;从硬件到软件方面逐一排查&#xff0c;并提供…...

碳交易系统九大构成

碳交易系统九大构成 碳排放权交易系统的核心要素包括覆盖范围、配额总量、配额分配、排放监测、报送与核查&#xff0c;履约考核、抵消机制、交易机制、市场监管及配套的法律法规体系。 图源《中国碳排放权交易市场&#xff1a;从原理到实践》 1、覆盖范围 碳排放权交易体系…...

第9.2讲、Tiny Decoder(带 Mask)详解与实战

自己搭建一个 Tiny Decoder&#xff08;带 Mask&#xff09;&#xff0c;参考 Transformer Encoder 的结构&#xff0c;并添加 Masked Multi-Head Self-Attention&#xff0c;它是 Decoder 的核心特征之一。 1. 背景与动机 Transformer 架构已成为自然语言处理&#xff08;NLP…...

Java接口P99含义解析

假设你开了一家奶茶店&#xff08;接口就是你的奶茶制作流水线&#xff09;&#xff0c;每天要处理100杯订单&#xff1a; &#x1f680; P99是什么&#xff1f; 平均响应时间&#xff1a;就像说"平均每杯奶茶2分钟做好"&#xff0c;但可能有10杯让客人等10分钟P99…...

【Oracle 专栏】清理用户及表空间

Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 今天需要清理一台服务器中之前的库&#xff0c;目前不再使用&#xff0c;以便释放空间。 如&#xff1a;清理 NH_MCRO_COLLECT 用户 2. 实验清理 2.1 查询&#xff1a;清…...

Qt功能区:Ribbon控件

控件 1. 按钮1.1 多选按钮1.2 2. 下拉列表框SARibbonComboBox2.1 简介2.2 代码实现 1. 按钮 1.1 多选按钮 软件功能&#xff1a;用于实现Category的名称居中。 SARibbonCheckBox继承于QCheckBox&#xff0c;使用方法完全相同。 SARibbonCheckBox* checkBox new SARibbonChe…...

eclipse 生成函数说明注释

在Eclipse中生成函数说明注释&#xff08;JavaDoc风格&#xff09;可以通过以下方法实现&#xff1a; 快捷键方式&#xff1a; 将光标放在函数上方输入/**后按回车键Eclipse会自动生成包含参数和返回值的注释模板 菜单方式&#xff1a; 选中函数点击菜单栏 Source > Gen…...

【Qt】QImage实战

QImage::Format_Mono, QImage::Format_RGB32, QImage::Format_ARGB32, QImage::Format_ARGB32_Premultiplied, 和 QImage::Format_RGB555 是 Qt 中不同的图像像素格式&#xff0c;它们在存储方式、颜色深度、是否支持透明通道以及适用场景上各有不同。下面是它们的详细对比&…...

tomcat知识点

1. JDK JDK是 Java 语言的软件开发工具包,JDK是整个java开发的核心,它包含JAVA工具还包括完整的 JRE(Java Runtime Environment)Java运行环境,包括了用于产品环境的各种库类,以及给开发人员使用的补充库。 JDK包含了一批用于Java开发的组件,其中包括: javac:编译器,将…...

Linux虚拟文件系统(2)

2.3 目录项-dentry 目录项&#xff0c;即 dentry&#xff0c;用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项&#xff0c;就构成了文件系统的目录结构。和上一章中超级块和索引节点不同&#xff0c;目录项并不是实际存在于磁盘上的&#xff0c…...

遥感影像-语义分割数据集:光伏数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;数据集包括504张亚米级卫星图片的农业光伏数据集&#xff0c;该数据集用于亚米级影像中的农业光伏提取任务。 KeyValue卫星类型亚米级卫星覆盖区域未知场景未知分辨率0.5m数量504张单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通…...

【Java高阶面经:微服务篇】4.大促生存法则:微服务降级实战与高可用架构设计

一、降级决策的核心逻辑:资源博弈下的生存选择 1.1 大促场景的资源极限挑战 在电商大促等极端流量场景下,系统面临的资源瓶颈呈现指数级增长: 流量特征: 峰值QPS可达日常的50倍以上(如某电商大促下单QPS从1万突增至50万)流量毛刺持续时间短(通常2-4小时),但对系统稳…...

工业物联网网关在变电站远程监控中的安全传输解决方案

一、项目背景 随着智能电网的快速发展&#xff0c;对变电站的智能化监控需求日益迫切。传统变电站采用人工巡检和就地监控的方式&#xff0c;存在效率低、实时性差、数据不准确等问题&#xff0c;难以满足现代电力系统对变电站安全、稳定、高效运行的要求。而智能变电站通过引…...

车载诊断架构 --- LIN 节点 ECU 故障设计原则

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

编程技能:字符串函数09,strncmp

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;字符串函数08&#xff0c;strcmp 回到目录…...

UML 时序图 使用案例

UML 时序图 UML 时序图 (Sequence Diagram)时序图的主要元素消息类型详解时序图示例时序图绘制步骤时序图的应用场景 UML 时序图 (Sequence Diagram) 时序图是UML(统一建模语言)中用于展示对象之间交互行为的动态视图&#xff0c;它特别强调消息的时间顺序。 时序图的主要元素…...

业务逻辑篇水平越权垂直越权未授权访问检测插件SRC 项目

# 逻辑越权 - 检测原理 - 水平 & 垂直 & 未授权 1 、水平越权&#xff1a;同级别的用户之间权限的跨越 2 、垂直越权&#xff1a;低级别用户到高级别用户权限的跨越 3 、未授权访问&#xff1a;通过无级别用户能访问到需验证应用 PHPStudy Metinfo4.0 会员后台中…...

Android开发——不同布局的定位属性 与 通用属性

目录 不同布局的定位属性1. 线性布局&#xff08;LinearLayout&#xff09;2. 相对布局&#xff08;RelativeLayout&#xff09;3. 约束布局&#xff08;ConstraintLayout&#xff09;4. 表格布局&#xff08;TableLayout&#xff09;5. 网格布局&#xff08;GridLayout&#x…...

【DB2】SQL1639N 处理

背景 测试环境21套DB2需要创建只读用户并赋予权限&#xff0c;在20套都成功的情况下&#xff0c;有一套报错了&#xff0c;具体细节为&#xff0c;赋权成功&#xff0c;但是使用被赋权的账户连接失败&#xff0c;报错如下 SQL1639N The database server was unable to perfor…...

禾纳EAT3152AP MOS电源芯片PIN TO PIN替代泰德TDM3307/2307方案

AET3152AP特性 VDS-30V,ID-40A RDS (ON)11mΩ (TYP.)VGS-10V, ID-10A RDS (ON)15mΩ (TYP.)VGS-4.5V, ID-5A 快速切换 l 低电阻 不含卤素和锑&#xff0c;符合Rohs标准 温度范围&#xff1a;-55℃~125℃ 封装&#xff1a;PDFN3030 AET3152AP应用 交换机切换 便携式/台式机中的…...

Python Day28 学习

继续聚类算法的学习 浙大疏锦行 DBSCAN聚类 Q1. 该算法的原理是什么&#xff1f; 总体而言&#xff0c;DBSCAN聚类是一种基于密度的聚类算法&#xff0c;适合发现任意形状的簇和检测噪声点 Q2. 代码实现 import numpy as np import pandas as pd from sklearn.cluster impo…...

企业网站架构部署与优化-Nginx核心功能

目录 #1.1正向代理 1.1.1编译安装Nginx 1.1.2配置正向代理 #2.1反向代理 2.1.1配置nginx七层代理 2.1.2配置nginx四层代理 1.1正向代理 正向代理&#xff08;Forward Proxy&#xff09;是一种位于客户端和目标服务器之间的服务器&#xff0c;用于代表客户端向服务器发送请求并…...

Java 多态

文章目录 多态向上转型和向下转型向上转型和重写重写和重载的区别动态绑定和静态绑定用代码来解释什么是多态向下转型 多态的优点 总结 多态 什么是多态&#xff1f;为什么要使用多态&#xff1f; 简单来说是多种形态&#xff0c;具体来说是去完成某个事情&#xff0c;当不同对…...

机器学习中的泛化能力

我们常常提到模型的泛化能力&#xff0c;什么是泛化能力呢&#xff1f; 百度百科这样解释&#xff1a;是指机器学习算法对新鲜样本的适应能力。 学习的目的是学到隐含在数据背后的规律&#xff0c;对具有同一规律的学习集以外的数据&#xff0c;经过训练的网络也能给出合适的输…...

第七章:数据存储策略与状态恢复机制实录

经过状态机、UI交互、逻辑驱动等章节的打磨&#xff0c;前端体系已经具备较强的调度与展示能力。但真正能决定组件在异常情况下能否“满血复活”的关键&#xff0c;落在了“状态恢复”这一关卡。尤其在安卓端环境复杂、网络波动频繁的前提下&#xff0c;若没有稳定的本地数据存…...

digitalworld.local: FALL靶场

digitalworld.local: FALL 来自 <digitalworld.local: FALL ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.4 3&…...

Java Collection(集合) 接口

Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一组接口和类&#xff0c;以实现各种数据结构和算法。 以下是关于 Java 集合的核心内容说明&#xff1a; /*** Java Collection Framework 说明&#xff1a;** 在 Java 中&#xff0c;集合&#xff08;Collec…...

直线型绝对值位移传感器:精准测量的科技利刃

在科技飞速发展的今天&#xff0c;精确测量成为了众多领域不可或缺的关键环节。无论是工业自动化生产线上的精细操作&#xff0c;还是航空航天领域中对零部件位移的严苛把控&#xff0c;亦或是科研实验中对微小位移变化的精准捕捉&#xff0c;都离不开一款高性能的测量设备——…...

Kotlin 极简小炒 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)

Kotlin 概述 Kotlin 由 JetBrains 开发&#xff0c;是一种在 JVM&#xff08;Java 虚拟机&#xff09;上运行的静态类型编程语言 Kotlin 旨在提高开发者的编码效率和安全性&#xff0c;同时保持与 Java 的高度互操作性 Kotlin 是 Android 应用开发的首选语言&#xff0c;也可…...

Server-Driven UI:Kotlin 如何重塑动态化 Android 应用开发

以下是一篇整合详细代码示例的完整博客&#xff0c;深入探讨Kotlin在Server-Driven UI&#xff08;SDUI&#xff09;中的核心作用&#xff1a; Server-Driven UI&#xff1a;Kotlin 如何重塑动态化 Android 应用开发 1. Server-Driven UI 的核心价值 SDUI通过将UI描述与业务逻…...

基于多传感器融合的智能驾驶环境感知系统

摘要 随着自动驾驶技术的发展,单一传感器的局限性日益凸显。本文提出了一种基于多传感器(摄像头、毫米波雷达、激光雷达)融合的环境感知系统,通过深度学习算法实现车辆周围环境的精确感知。文章详细介绍了传感器标定、数据融合、目标检测与跟踪等关键技术,并提供了Python…...

JC/T 2848-2024 玻璃纤维增强石膏(GRG)装饰制品检测

玻璃纤维增强石膏装饰制品是指以玻璃纤维为主要增强材料&#xff0c;高强石膏为主要胶凝材料&#xff0c;适当掺入集料&#xff0c;外加剂的石膏装饰制品&#xff0c;GRG具有防火&#xff0c;隔音&#xff0c;被广泛应用于&#xff0c;墙板&#xff0c;装饰构件等。 JC/T 2848…...

每日算法 -【Swift 算法】寻找字符串中最长回文子串(三种经典解法全解析)

&#x1f9e9; 最长回文子串问题&#xff1a;三种经典解法全解析&#xff08;含代码注释&#xff09; 本文将系统讲解“最长回文子串”问题的三种常见解法&#xff1a;中心扩展法、动态规划、马拉车算法&#xff08;Manacher’s Algorithm&#xff09;&#xff0c;并进行对比与…...

【Java高阶面经:数据库篇】13. MySQL 并发控制秘籍:MVCC 协议与隔离级别深度解析

一、MVCC核心原理:多版本并发控制的基石 1.1 为什么需要MVCC? 在传统锁机制中,读写操作会互相阻塞,导致高并发场景下性能下降。MVCC通过多版本数据快照避免读写阻塞,实现: 读不加锁:快照读(普通SELECT)不阻塞写操作写不阻塞读:写操作生成新版本,读操作访问历史版本…...