离线服务器算法部署环境配置
本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境,包括基础编译工具、NVIDIA显卡驱动以及NVIDIA-Docker,以便顺利部署深度学习算法。
前提条件:
- 目标离线服务器已安装操作系统(本文以Ubuntu 18.04为例)。
- Docker 服务已安装并运行。
- Docker-Compose 已安装。
核心思路:
利用一台有网络的服务器(与目标服务器操作系统一致或兼容)下载所有需要的软件包和驱动,然后将这些文件拷贝到离线服务器进行安装。
阶段一:在线服务器资源下载
在有网络的服务器上,我们需要下载以下几类关键文件:
- 基础编译环境和依赖库的
.deb
包。 - NVIDIA 显卡驱动的
.run
安装包。 - NVIDIA-Docker (或
nvidia-container-toolkit
) 的.deb
包。
1.1 准备基础编译环境和依赖库
为了确保离线环境的纯净与一致性,我选择使用Docker容器(基于ubuntu:18.04
)来下载基础依赖包。这样做的好处是可以模拟目标服务器的操作系统环境,减少兼容性问题。
以下是我使用的命令序列:
首先,拉取官方的Ubuntu 18.04镜像:
docker pull ubuntu:18.04
然后,运行一个容器,并将宿主机的一个目录(例如 /path/on/host/for_debs)挂载到容器的 /downloaded_debs 目录,用于存放下载的 .deb 包:
docker run -it --rm \-v /path/on/host/for_debs:/downloaded_debs \ubuntu:18.04 /bin/bash
进入容器后,执行以下命令更新apt缓存,安装一些下载工具,然后仅下载我们需要的包到本地缓存,最后再拷贝出来:
# 在容器内部执行:
apt-get update
apt-get install -y apt-utils ca-certificates # ca-certificates 用于HTTPS下载# 清理旧的缓存(可选,但推荐)
apt-get clean# 仅下载指定的依赖包及其所有依赖项,不进行安装
# 注意:这里的包列表非常详细,是根据项目需求和驱动编译可能需要的依赖梳理的
# 实际操作中,您可能需要根据自己的需求调整这个列表
apt-get --reinstall install --download-only \build-essential \gcc \g++ \g++-7 \make \dpkg-dev \libdpkg-perl=1.19.0.5ubuntu2.4 \binutils=2.30-21ubuntu1~18.04.9 \binutils-common=2.30-21ubuntu1~18.04.9 \libbinutils=2.30-21ubuntu1~18.04.9 \binutils-x86-64-linux-gnu=2.30-21ubuntu1~18.04.9 \gcc-7 \libgcc-7-dev=7.5.0-3ubuntu1~18.04 \cpp-7 \libstdc++-7-dev=7.5.0-3ubuntu1~18.04 \libitm1 \libatomic1 \libasan4 \liblsan0 \libtsan0 \libubsan0 \libcilkrts5 \libmpx2 \libquadmath0 \libc6-dev=2.27-3ubuntu1.6 \libc6=2.27-3ubuntu1.6 \libc-dev-bin=2.27-3ubuntu1.6 \linux-libc-dev \linux-headers-5.4.0-150-generic \linux-hwe-5.4-headers-5.4.0-150 \perl=5.26.1-6ubuntu0.7 \perl-base=5.26.1-6ubuntu0.7 \libperl5.26=5.26.1-6ubuntu0.7 \perl-modules-5.26# 将下载的 .deb 文件从apt缓存复制到我们挂载的目录
cp /var/cache/apt/archives/*.deb /downloaded_debs/# 退出容器
exit
执行完毕后,所有必需的 .deb 包都已保存在宿主机的 /path/on/host/for_debs 目录中。
注意:linux-headers-5.4.0-150-generic 和 linux-hwe-5.4-headers-5.4.0-150 是特定内核版本的头文件。你需要根据你离线服务器的内核版本 (uname -r) 下载对应的头文件。如果在线服务器的内核版本与离线服务器不同,你可能需要临时下载对应版本的头文件包,或者在Docker容器内通过修改源的方式尝试获取特定版本的内核头文件包。最稳妥的方式是确保在线下载环境的内核或可获取的包版本与离线目标一致。
1.2 下载 NVIDIA 显卡驱动 📦
访问 NVIDIA官方驱动下载页面,根据你服务器的显卡型号和操作系统(Linux 64-bit)选择合适的驱动版本,并下载 .run
文件。例如 NVIDIA-Linux-x86_64-xxx.xx.xx.run
。将其保存在之前准备的 /path/on/host/for_debs
目录(或者一个专门存放驱动的目录)中。
1.3 下载 NVIDIA-Docker 相关包 🐳
NVIDIA-Docker 允许 Docker 容器直接访问宿主机的 GPU。现在推荐使用 nvidia-container-toolkit
。
在有网络的Ubuntu 18.04服务器上执行以下步骤来下载 nvidia-docker2
(或 nvidia-container-toolkit
) 及其依赖:
# 添加 NVIDIA Docker 的软件源 (在有网络的机器上)
curl -s -L [https://nvidia.github.io/nvidia-docker/gpgkey](https://nvidia.github.io/nvidia-docker/gpgkey) | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L [https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list](https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list) | sudo tee /etc/apt/sources.list.d/nvidia-docker.listsudo apt-get update# 仅下载 nvidia-docker2 及其依赖 (旧版,但有些环境可能仍需)
# sudo apt-get install --download-only -y nvidia-docker2# 推荐下载 nvidia-container-toolkit (新版)
sudo apt-get install --download-only -y nvidia-container-toolkit
下载完成后,相关的 .deb 文件会存放在 /var/cache/apt/archives/ 目录下。将这些 nvidia-docker2 或 nvidia-container-toolkit 相关的 .deb 包也复制到你的 /path/on/host/for_debs 目录中。
至此,所有需要的离线安装包都已准备就绪。
阶段二:离线服务器安装
现在,将在线服务器上 /path/on/host/for_debs
目录(或其他你存放所有下载文件的目录)中的所有内容(包括基础依赖的 .deb
文件夹、NVIDIA驱动 .run
文件、nvidia-docker
的 .deb
包)通过U盘、移动硬盘或其他方式传输到目标离线服务器上。假设我们把所有文件都放在了离线服务器的 /opt/offline_packages
目录下。
2.1 安装基础编译环境和依赖库
进入存放 .deb
包的目录,并使用 dpkg
进行安装:
cd /opt/offline_packages/debs_from_ubuntu_container # 这是之前下载的基础依赖
sudo dpkg -i *.deb
如果在执行 dpkg -i 时遇到依赖问题,可以尝试执行以下命令,它会尝试使用当前目录下已有的包来解决这些依赖关系:
sudo apt-get -f install
由于是离线环境,apt-get -f install 只有在所有必需的依赖包都已经被 dpkg -i “知晓”(即尝试安装过或已解包)并且这些包确实存在于本地时才可能成功解决问题。如果依然报错,说明你下载的包不全,需要回到阶段一补充下载缺失的依赖。
2.2 安装 NVIDIA 显卡驱动
-
禁用 Nouveau 驱动:Nouveau 是开源的 NVIDIA 驱动,与官方驱动冲突。
创建一个文件/etc/modprobe.d/blacklist-nouveau.conf
:sudo nano /etc/modprobe.d/blacklist-nouveau.conf
添加以下内容:
blacklist nouveau options nouveau modeset=0
更新 initramfs 并重启:
sudo update-initramfs -u sudo reboot
重启后,验证 Nouveau 是否已禁用:
lsmod | grep nouveau
如果没有任何输出,则表示禁用成功。
-
安装驱动:
给驱动文件执行权限,并运行安装程序。cd /opt/offline_packages # 假设 .run 文件在此 sudo chmod +x NVIDIA-Linux-x86_64-xxx.xx.xx.run sudo ./NVIDIA-Linux-x86_64-xxx.xx.xx.run --no-x-check --no-nouveau-check --no-opengl-files
--no-x-check
: 不检查X服务状态(服务器通常没有X)。--no-nouveau-check
: 再次确认不检查nouveau(我们已经禁用了)。--no-opengl-files
: 仅安装驱动,不安装OpenGL库(服务器通常不需要,且可能与现有mesa库冲突)。
按照提示完成安装。通常需要接受许可协议,可能会询问是否注册DKMS(推荐选择是,这样内核更新后驱动会自动重新编译)。
-
验证驱动安装:
nvidia-smi
如果成功安装,此命令会显示显卡信息和驱动版本。
2.3 安装和配置 NVIDIA-Docker
-
安装
nvidia-docker2
/nvidia-container-toolkit
包:
进入存放nvidia-docker
相关.deb
包的目录:cd /opt/offline_packages/nvidia_docker_debs # 假设你把nvidia-docker的deb包放在这里 sudo dpkg -i *.deb
同样,如果遇到依赖问题,可以尝试
sudo apt-get -f install
,前提是相关依赖也已拷贝过来。 -
重启 Docker 服务:
为了让 Docker 识别新的 NVIDIA runtime,需要重启 Docker 服务。sudo systemctl restart docker
或者在没有
systemctl
的旧系统上:sudo service docker restart
-
测试 NVIDIA-Docker:
运行一个基于 CUDA 的 Docker 镜像来测试 GPU 是否能在容器内被访问:docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu18.04 nvidia-smi
(请根据你安装的驱动版本,选择一个兼容的
nvidia/cuda
镜像标签。例如,如果你的驱动是 470.xx,CUDA 11.4 可能是一个好选择,对应的镜像是nvidia/cuda:11.4.0-base-ubuntu18.04
等。)如果此命令在容器内成功输出了
nvidia-smi
的信息,那么恭喜你,NVIDIA-Docker 配置成功!
总结 🏁
通过以上步骤,我们成功地在一台无网络服务器上配置了基础编译环境、安装了 NVIDIA 显卡驱动,并配置好了 NVIDIA-Docker。现在,这台服务器已经准备就绪,可以开始部署和运行需要 GPU 加速的算法应用了。虽然离线环境的配置过程相对繁琐,但只要细心准备,按部就班地操作,就能顺利完成。希望这篇记录能为有类似需求的人提供一些参考。
相关文章:
离线服务器算法部署环境配置
本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境,包括基础编译工具、NVIDIA显卡驱动以及NVIDIA-Docker,以便顺利部署深度学习算法。 前提条件: 目标离线服务器已安装操作系统(本文以Ubuntu 18.04为例)…...
现代人工智能系统的实用设计模式
关键要点 AI设计模式是为现代AI驱动的软件中常见问题提供的可复用解决方案,帮助团队避免重复造轮子。我们将其分为五类:提示与上下文(Prompting & Context)、负责任的AI(Responsible AI)、用户体验&…...
数据集下载并保存本地进行加载
一、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代码实现、策略模式 + 工厂模式的应用)
前五期: 物流项目第一期(登录业务)-CSDN博客 物流项目第二期(用户端登录与双token三验证)-CSDN博客 物流项目第三期(统一网关、工厂模式运用)-CSDN博客 物流项目第四期(运费模板列…...
嵌入式学习的第二十五天-系统编程-文件相关函数-标准I0+文件IO
一、文件的读和写 1.fwrite(读) size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能:从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr所在的本地内存中。 参数: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定时任务,通过自定义注解来实现具体的定时任务方法调用。 ::: 相关依赖如下 <!-- 用来动态创建 Quartz 定时任务 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…...
Linux网络 网络基础一
1. 计算机网络背景 1.1 网络发展 独立模式:计算机之间相互独立。 网络互联:多台计算机连接在一起,完成数据共享。 局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起。 广域网WAN:将远隔千里的…...
auto关键字解析
前言 在11标准之前,auto在c中是声明存储器类型的关键字。而在11标准中它的功能变为了类型推导。 对此, 在这里引入Cprimer中的原句: 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚的知道表达式的类型。然而…...
[实战]用户系统-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函数是⾮常重要的…...
为什么服务器突然变慢?从硬件到软件的排查方法
服务器突然变慢是许多系统管理员和网站运维人员经常遇到的问题。这种情况可能会影响网站性能、用户体验以及整个业务流程。了解服务器变慢的原因并采取相应的排查措施是至关重要的。本文将介绍服务器突然变慢的可能原因,从硬件到软件方面逐一排查,并提供…...
碳交易系统九大构成
碳交易系统九大构成 碳排放权交易系统的核心要素包括覆盖范围、配额总量、配额分配、排放监测、报送与核查,履约考核、抵消机制、交易机制、市场监管及配套的法律法规体系。 图源《中国碳排放权交易市场:从原理到实践》 1、覆盖范围 碳排放权交易体系…...
第9.2讲、Tiny Decoder(带 Mask)详解与实战
自己搭建一个 Tiny Decoder(带 Mask),参考 Transformer Encoder 的结构,并添加 Masked Multi-Head Self-Attention,它是 Decoder 的核心特征之一。 1. 背景与动机 Transformer 架构已成为自然语言处理(NLP…...
Java接口P99含义解析
假设你开了一家奶茶店(接口就是你的奶茶制作流水线),每天要处理100杯订单: 🚀 P99是什么? 平均响应时间:就像说"平均每杯奶茶2分钟做好",但可能有10杯让客人等10分钟P99…...
【Oracle 专栏】清理用户及表空间
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 今天需要清理一台服务器中之前的库,目前不再使用,以便释放空间。 如:清理 NH_MCRO_COLLECT 用户 2. 实验清理 2.1 查询:清…...
Qt功能区:Ribbon控件
控件 1. 按钮1.1 多选按钮1.2 2. 下拉列表框SARibbonComboBox2.1 简介2.2 代码实现 1. 按钮 1.1 多选按钮 软件功能:用于实现Category的名称居中。 SARibbonCheckBox继承于QCheckBox,使用方法完全相同。 SARibbonCheckBox* checkBox new SARibbonChe…...
eclipse 生成函数说明注释
在Eclipse中生成函数说明注释(JavaDoc风格)可以通过以下方法实现: 快捷键方式: 将光标放在函数上方输入/**后按回车键Eclipse会自动生成包含参数和返回值的注释模板 菜单方式: 选中函数点击菜单栏 Source > Gen…...
【Qt】QImage实战
QImage::Format_Mono, QImage::Format_RGB32, QImage::Format_ARGB32, QImage::Format_ARGB32_Premultiplied, 和 QImage::Format_RGB555 是 Qt 中不同的图像像素格式,它们在存储方式、颜色深度、是否支持透明通道以及适用场景上各有不同。下面是它们的详细对比&…...
tomcat知识点
1. JDK JDK是 Java 语言的软件开发工具包,JDK是整个java开发的核心,它包含JAVA工具还包括完整的 JRE(Java Runtime Environment)Java运行环境,包括了用于产品环境的各种库类,以及给开发人员使用的补充库。 JDK包含了一批用于Java开发的组件,其中包括: javac:编译器,将…...
Linux虚拟文件系统(2)
2.3 目录项-dentry 目录项,即 dentry,用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项,就构成了文件系统的目录结构。和上一章中超级块和索引节点不同,目录项并不是实际存在于磁盘上的,…...
遥感影像-语义分割数据集:光伏数据集详细介绍及训练样本处理流程
原始数据集详情 简介:数据集包括504张亚米级卫星图片的农业光伏数据集,该数据集用于亚米级影像中的农业光伏提取任务。 KeyValue卫星类型亚米级卫星覆盖区域未知场景未知分辨率0.5m数量504张单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通…...
【Java高阶面经:微服务篇】4.大促生存法则:微服务降级实战与高可用架构设计
一、降级决策的核心逻辑:资源博弈下的生存选择 1.1 大促场景的资源极限挑战 在电商大促等极端流量场景下,系统面临的资源瓶颈呈现指数级增长: 流量特征: 峰值QPS可达日常的50倍以上(如某电商大促下单QPS从1万突增至50万)流量毛刺持续时间短(通常2-4小时),但对系统稳…...
工业物联网网关在变电站远程监控中的安全传输解决方案
一、项目背景 随着智能电网的快速发展,对变电站的智能化监控需求日益迫切。传统变电站采用人工巡检和就地监控的方式,存在效率低、实时性差、数据不准确等问题,难以满足现代电力系统对变电站安全、稳定、高效运行的要求。而智能变电站通过引…...
车载诊断架构 --- LIN 节点 ECU 故障设计原则
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
编程技能:字符串函数09,strncmp
专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:字符串函数08,strcmp 回到目录…...
UML 时序图 使用案例
UML 时序图 UML 时序图 (Sequence Diagram)时序图的主要元素消息类型详解时序图示例时序图绘制步骤时序图的应用场景 UML 时序图 (Sequence Diagram) 时序图是UML(统一建模语言)中用于展示对象之间交互行为的动态视图,它特别强调消息的时间顺序。 时序图的主要元素…...
业务逻辑篇水平越权垂直越权未授权访问检测插件SRC 项目
# 逻辑越权 - 检测原理 - 水平 & 垂直 & 未授权 1 、水平越权:同级别的用户之间权限的跨越 2 、垂直越权:低级别用户到高级别用户权限的跨越 3 、未授权访问:通过无级别用户能访问到需验证应用 PHPStudy Metinfo4.0 会员后台中…...
Android开发——不同布局的定位属性 与 通用属性
目录 不同布局的定位属性1. 线性布局(LinearLayout)2. 相对布局(RelativeLayout)3. 约束布局(ConstraintLayout)4. 表格布局(TableLayout)5. 网格布局(GridLayout&#x…...
【DB2】SQL1639N 处理
背景 测试环境21套DB2需要创建只读用户并赋予权限,在20套都成功的情况下,有一套报错了,具体细节为,赋权成功,但是使用被赋权的账户连接失败,报错如下 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 低电阻 不含卤素和锑,符合Rohs标准 温度范围:-55℃~125℃ 封装:PDFN3030 AET3152AP应用 交换机切换 便携式/台式机中的…...
Python Day28 学习
继续聚类算法的学习 浙大疏锦行 DBSCAN聚类 Q1. 该算法的原理是什么? 总体而言,DBSCAN聚类是一种基于密度的聚类算法,适合发现任意形状的簇和检测噪声点 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正向代理 正向代理(Forward Proxy)是一种位于客户端和目标服务器之间的服务器,用于代表客户端向服务器发送请求并…...
Java 多态
文章目录 多态向上转型和向下转型向上转型和重写重写和重载的区别动态绑定和静态绑定用代码来解释什么是多态向下转型 多态的优点 总结 多态 什么是多态?为什么要使用多态? 简单来说是多种形态,具体来说是去完成某个事情,当不同对…...
机器学习中的泛化能力
我们常常提到模型的泛化能力,什么是泛化能力呢? 百度百科这样解释:是指机器学习算法对新鲜样本的适应能力。 学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输…...
第七章:数据存储策略与状态恢复机制实录
经过状态机、UI交互、逻辑驱动等章节的打磨,前端体系已经具备较强的调度与展示能力。但真正能决定组件在异常情况下能否“满血复活”的关键,落在了“状态恢复”这一关卡。尤其在安卓端环境复杂、网络波动频繁的前提下,若没有稳定的本地数据存…...
digitalworld.local: FALL靶场
digitalworld.local: FALL 来自 <digitalworld.local: FALL ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.4 3&…...
Java Collection(集合) 接口
Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一组接口和类,以实现各种数据结构和算法。 以下是关于 Java 集合的核心内容说明: /*** Java Collection Framework 说明:** 在 Java 中,集合(Collec…...
直线型绝对值位移传感器:精准测量的科技利刃
在科技飞速发展的今天,精确测量成为了众多领域不可或缺的关键环节。无论是工业自动化生产线上的精细操作,还是航空航天领域中对零部件位移的严苛把控,亦或是科研实验中对微小位移变化的精准捕捉,都离不开一款高性能的测量设备——…...
Kotlin 极简小炒 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)
Kotlin 概述 Kotlin 由 JetBrains 开发,是一种在 JVM(Java 虚拟机)上运行的静态类型编程语言 Kotlin 旨在提高开发者的编码效率和安全性,同时保持与 Java 的高度互操作性 Kotlin 是 Android 应用开发的首选语言,也可…...
Server-Driven UI:Kotlin 如何重塑动态化 Android 应用开发
以下是一篇整合详细代码示例的完整博客,深入探讨Kotlin在Server-Driven UI(SDUI)中的核心作用: Server-Driven UI:Kotlin 如何重塑动态化 Android 应用开发 1. Server-Driven UI 的核心价值 SDUI通过将UI描述与业务逻…...
基于多传感器融合的智能驾驶环境感知系统
摘要 随着自动驾驶技术的发展,单一传感器的局限性日益凸显。本文提出了一种基于多传感器(摄像头、毫米波雷达、激光雷达)融合的环境感知系统,通过深度学习算法实现车辆周围环境的精确感知。文章详细介绍了传感器标定、数据融合、目标检测与跟踪等关键技术,并提供了Python…...
JC/T 2848-2024 玻璃纤维增强石膏(GRG)装饰制品检测
玻璃纤维增强石膏装饰制品是指以玻璃纤维为主要增强材料,高强石膏为主要胶凝材料,适当掺入集料,外加剂的石膏装饰制品,GRG具有防火,隔音,被广泛应用于,墙板,装饰构件等。 JC/T 2848…...
每日算法 -【Swift 算法】寻找字符串中最长回文子串(三种经典解法全解析)
🧩 最长回文子串问题:三种经典解法全解析(含代码注释) 本文将系统讲解“最长回文子串”问题的三种常见解法:中心扩展法、动态规划、马拉车算法(Manacher’s Algorithm),并进行对比与…...
【Java高阶面经:数据库篇】13. MySQL 并发控制秘籍:MVCC 协议与隔离级别深度解析
一、MVCC核心原理:多版本并发控制的基石 1.1 为什么需要MVCC? 在传统锁机制中,读写操作会互相阻塞,导致高并发场景下性能下降。MVCC通过多版本数据快照避免读写阻塞,实现: 读不加锁:快照读(普通SELECT)不阻塞写操作写不阻塞读:写操作生成新版本,读操作访问历史版本…...
分布式集群中的共识算法及其在时序数据库IoTDB中的应用
一、引言 在分布式集群环境中,为了实现海量数据的横向扩展,数据通常被划分为多个子集并分散存储在集群的各个节点上。为了确保数据的高可用性,每个数据子集都会在多个物理节点上存储副本。然而,这种多副本机制也带来了新的挑战&a…...
Java面试实录:从JVM调优到Spring Cloud实践
Java大厂面试:当严肃面试官遇上搞笑程序员 场景设定 面试官:拥有多年行业经验的技术专家,对Java及相关技术栈有着深入的理解。明哥:一位自认为是“水货”的程序员,擅长用幽默化解紧张气氛,但面对复杂问题…...
自定义协议与序列反序列化
目录 引子: 一、再谈 "协议" 二、自定义协议与网络版计算器 1.约定方案一: 2.约定方案二: 3.我们采用的协议 三、网络计算器代码 Log.hpp 日志 Makefile Socket.hpp 套接字封装 Protocol.hpp 协议 序列化反序列化 结构化数据格式规定 TcpSe…...
SAP-ABAP:ABAP异常处理与SAP现代技术融合—— 面向云原生、微服务与低代码场景的创新实践
专题三:ABAP异常处理与SAP现代技术融合 —— 面向云原生、微服务与低代码场景的创新实践 一、SAP技术演进与异常处理的挑战 随着SAP技术栈向云端、微服务化和低代码方向演进,异常处理面临新场景: Fiori UX敏感度:用户期望前端友…...