Docker底层原理浅析 | namespace+cgroups+文件系统
本文目录
- 1. Linux Namespace
- Linux系统里是否只能有一个pid为1的进程?
- namespace机制
- 查看namespace
- namespace机制测试
- 使用Docker验证namespace机制
- 2. Dcoerk网络模式
- 3.Control groups
- 4.文件系统(联合文件系统)
- 5. 容器格式
1. Linux Namespace
Linux系统里是否只能有一个pid为1的进程?
先来考虑个问题,linux中pid为1的进程就是init进程,也就是系统的创始进程,如果创建了新的进程,那么这个pid就会向上增长。比如下面这张图的结构示意。
但是这样理解是不全面的,因为linux中有一个namespace机制,所以这个时候架构变成了四层。不同namespace中的进程列表是独立的,每个namespace中的pid都是从1开始的。
所以有namespace时候,应该讨论的是某某namespace中pid为1的进程。
在一般情况下正常使用linux的时候,一般都会说pid为1的进程,这个时候的pid为1的进程是在一个默认的namespace下的。
namespace机制
namespace机制提供一种资源隔离和虚拟化特性,基于这些特性,PID、IPC、Network等系统资源不再是全局性的,而是某个特定的namespace下面,每个namespace下面的资源对于其他的namespace是不可见的。因此操作系统的角度来看,就会有多个pid进程。但是从用户的角度来看,只能看到属于自己的namespace下的资源,这个时候使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去就像一个单独的linux系统。
k8s底层用了docker技术、docker底层又使用了namespace机制,来实现docker和docker之间的隔离。
namespace有7种类型,分别是下面7种。
UTS表示是主机名和域名,所以在系统里面,启动docker之后,每个docker都有一个独立的hostname,说明docker之间、docker和主机之间的UTS是隔离的。也就是属于不同namespace的。
PID是进程编号,也就是上面提到的pid是独立的,都可以有pid为1的进程。
network类型的namespace导致网络、端口这些是独立的。
7种类型的namespace描述的都是系统资源,有了namespace,这些系统资源就不是全局的了。
查看namespace
通过 lsns
命令可以查看 系统里面所有namespace的类型。
可以看到有两种不同类型的net,所以这两个net下面的namespace是隔离的。
使用命令 lsns | grep init
可以看到init进程所属的namespace,有7种不同的namespace。
init进程是系统启动后的第一个进程,它的进程ID(PID)通常是1。init进程负责启动用户空间的初始化和系统服务的管理。在现代Linux系统中,init进程可能会创建多个命名空间(namespaces),以实现进程隔离和资源管理。
namespace机制测试
通过命令 unshare --frok --pid --mount-proc bash
可以验证namespace机制。
unshare 是一个 Linux 命令,它允许你启动一个新的进程,这个进程在某些方面与当前进程(通常是你的 shell)是隔离的。
这个命令的作用是在一个新的、独立的命名空间中启动一个新的 bash shell。这个新的 bash shell 将拥有自己的 PID 空间,并且可以看到该命名空间内进程的 /proc 信息。这种隔离可以用于测试、调试或创建一个隔离的环境,而不影响宿主机的其他进程。
如果两个进程所属的某一类型的namespace是一样的,那么会共享该资源,否则就是隔离的。
比如说Network的namespace是一样的,那么两个进程是可以直接通信的。
docker就是基于这种linux namespace机制去隔离的。
使用Docker验证namespace机制
首先输入命令 lsns > /tftpboot/lsns
把当前的namespace的输出保存到文件中。
运行命令 docker run -it ubuntu:18.04 /bin/bash
,启动一个docker,运行这个命令时,Docker 会启动一个新的 Ubuntu 18.04 容器,并打开一个交互式的 Bash shell,允许你输入命令并立即看到结果。
然后通过 docker ps
查看是否启动成功。
通过命令 lsns > /tftpboot/lsns-ubuntu
来把容器的输出存到文件中。
然后通过命令 sudo meld /tftpboot/lsns /tftpboot/lsns-ubuntu
命令对比查看启动docker前后的文件是否有哪些不一样。
可以发现新创了5个namespace,并且这5个namespace都是docker里面的bash命令创建的,mnt、uts、ipc、pid、net这五种类型的namespace,所以跟主机在上面5个类型是自成一套的。
2. Dcoerk网络模式
使用命令 docker run创建容器的时候,可以用 --net 选项指定容器的网络模式,有以下4种网络模式可以选定:
1、host模式:和宿主机共用一个network namespace,容器中的网络环境,比方说ip地址、路由等,和宿主机的网络环境一模一样。直接通过 --net=host指定。
2、none模式:关闭了docker的网络功能。通过 --net =none指定。
3、bridge模式:默认设置,使用独立的network的 namespace,并连接到docker0虚拟网桥,通过iptables nat表配置和宿主机进行通信。通过命令–net=bridge指定。
在 Docker 中,虚拟网桥(如 docker0)用于连接容器和宿主机的网络。每个容器都会被分配一个虚拟网络接口(如 veth 接口),这个接口的一端连接到容器的网络命名空间,另一端连接到虚拟网桥。这样,容器就可以通过虚拟网桥与宿主机和其他容器进行通信。
Docker 中,iptables NAT 表配置用于实现容器与宿主机之间的网络通信。具体来说,iptables 会在宿主机上设置 NAT 规则,将发往容器 IP 地址的数据包转发到容器的虚拟网络接口上。这样,容器就可以通过宿主机的网络接口访问外部网络。
所以总的来说就是:在 Docker 中,bridge 模式是默认的网络模式。在这种模式下,Docker 会为每个容器创建一个独立的网络命名空间,并将其连接到一个虚拟网桥(如 docker0)。这样,容器就可以通过虚拟网桥与宿主机和其他容器进行通信。
同时,Docker 还会在宿主机上配置 iptables NAT 规则,使得容器可以通过宿主机的网络接口访问外部网络。具体来说,iptables 会在 POSTROUTING 链上设置 SNAT(Source Network Address Translation,源网络地址转换)规则,将容器发出的数据包的源地址转换为宿主机的 IP 地址。这样,外部网络就无法直接访问容器的 IP 地址,而是通过宿主机的 IP 地址进行通信。
4、container模式:指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和宿主机进行共享,新创建的容器不会创建自己的网卡,配置自己的ip,而是和指定的一个容器共享ip+端口范围等。通过 --net=container:NAME_OR_ID指定。
3.Control groups
Docker 引擎在 Linux 上还依赖另一种称为控制组(cgroups)的技术。控制组将应用程序限制在一组特定的资源上。控制组允许 Docker 引擎将可用的硬件资源分配给容器,并可选地强制执行限制和约束。比如可以限制特定容器可用的内存。
控制组(cgroups)是 Linux 内核提供的一种特性,用于限制、记录和隔离进程组(process groups)使用的物理资源(如 CPU、内存、磁盘 I/O 等)。cgroups 允许系统管理员定义资源分配策略,以优化系统资源的使用和提高系统性能。
在 Docker 中,cgroups 用于实现以下几个关键功能:
资源限制:cgroups 可以限制容器可以使用的资源量,例如 CPU 时间、内存、磁盘 I/O 等。这有助于防止单个容器占用过多资源,从而影响其他容器或宿主机的性能。
资源分配:cgroups 允许 Docker 引擎将硬件资源公平地分配给所有容器,确保每个容器都能获得所需的资源。
隔离性:cgroups 提供了资源隔离,使得容器之间的资源使用不会相互影响。这意味着一个容器的资源使用不会影响其他容器的运行。
监控和记录:cgroups 还可以记录容器的资源使用情况,这对于监控和分析容器的性能非常有用。
所以一句话解释就是说,合理分配系统的资源(内存、cpu、网卡、块设备的读写等),能够将服务器的资源发挥到极致。
4.文件系统(联合文件系统)
联合文件系统,也可以称为 UnionFS,是一种通过创建层来运作的文件系统,这使得它们非常轻量级和快速。Docker 引擎使用 UnionFS 来提供容器的构建模块。Docker 引擎可以使用多种 UnionFS 变体,包括 AUFS(最开始docker用的文件系统,最开始叫做another,后面改成adavance,linus觉得这个代码写的很烂,就没有合到内核里边)、btrfs、vfs (虚拟文件系统)和 DeviceMapper。
可以先理解一下文件系统是什么,比如输入ll
的时候,会展示当前路径下的文件,文件系统就是通过一种形式,把文件和文件信息展示出来,比如文件目录、文件展示关系等。
联合文件系统(UnionFS)是一种允许将多个文件系统联合挂载到同一个挂载点的文件系统服务。它通过层(layers)的概念来工作,这些层可以看作是文件系统的快照或版本。UnionFS 的关键特性是可以将不同的层叠加在一起,形成一个统一的文件系统视图,而不需要实际地将所有层的内容合并到一个物理位置。
在Docker中,UnionFS 用于实现容器的文件系统层叠:
层叠文件系统:Docker 容器的文件系统是由多个只读层和一个可写层组成的。这些层可以是基础镜像层、用户添加的层以及容器运行时产生的层。
节省存储空间:由于多个容器可以共享相同的只读层,这大大减少了存储空间的消耗。只有当容器需要修改某个文件时,才会在可写层中创建一个副本。
提高构建速度:当构建 Docker 镜像时,每一层的更改都会作为新的层添加,这样可以快速地构建和更新镜像,而不需要重新构建整个文件系统。
支持多种变体:Docker 支持多种 UnionFS 的实现,包括 AUFS(Another UnionFS)、btrfs(一种支持快照功能的文件系统)、vfs(虚拟文件系统)和 DeviceMapper(一种基于块设备的存储映射技术)。这些变体各有优缺点,适用于不同的场景。
5. 容器格式
Docker 引擎利用 Linux 内核的特性(如命名空间、控制组和 UnionFS)来创建和管理容器, Docker 默认使用的容器格式是 libcontainer,未来可能会支持其他容器格式。
包装器Wrapper指的是 Docker 引擎将命名空间、控制组和 UnionFS 这些技术组合在一起,形成一个完整的容器运行环境。
相关文章:
Docker底层原理浅析 | namespace+cgroups+文件系统
本文目录 1. Linux NamespaceLinux系统里是否只能有一个pid为1的进程?namespace机制查看namespacenamespace机制测试使用Docker验证namespace机制 2. Dcoerk网络模式3.Control groups4.文件系统(联合文件系统)5. 容器格式 1. Linux Namespace…...
【无人机】使用扩展卡尔曼滤波 (EKF) 算法来处理传感器测量,各传感器的参数设置,高度数据融合、不同传感器融合模式
目录 #1、IMU #2、磁力计 #3、高度 #典型配置 #4、气压计 #静压位置误差修正 #气压计偏置补偿 #5、全球导航系统/全球定位系统--GNSS/GPS #位置和速度测量 #偏航测量 #GPS 速度的偏航 #双接收器 #GNSS 性能要求 #6、测距 #条件范围辅助-Conditional range aidin…...
常见的raid有哪些,使用场景是什么?
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种将多个物理硬盘组合成一个逻辑硬盘的技术,目的是通过数据冗余和/或并行访问提高性能、容错能力和存储容量。不同的 RAID 级别有不同的实现方式和应用场景。以下…...
《 C++ 点滴漫谈: 三十四 》从重复到泛型,C++ 函数模板的诞生之路
一、引言 在 C 编程的世界里,类型是一切的基础。我们为 int 写一个求最大值的函数,为 double 写一个相似的函数,为 std::string 又写一个……看似合理的行为,逐渐堆积成了难以维护的 “函数墙”。这些函数逻辑几乎一致࿰…...
EasyRTC打造无人机低延迟高清实时通信监控全场景解决方案
一、方案背景 随着无人机技术的飞速发展,其在航拍、物流配送、农业监测、应急救援等多个领域的应用日益广泛。然而,无人机在实际作业过程中面临着诸多挑战,如通信延迟、数据传输不稳定、监控范围有限等。EasyRTC作为一种高效、低延迟的实时通…...
【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出)
【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出) 引言 本文使用状态空间模型实现失业率递归预测,状态空间模型(State Space Model, SSM)是一种用于描述动态系统行为的…...
关于大数据的基础知识(三)——数据安全与合规
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(三&a…...
从信息泄露到内网控制
0x01 背景 之前常见用rce、文件上传等漏洞获取webshell,偶然遇到一次敏感信息泄露获取权限的渗透,简单记录一下过程。 0x02 信息泄露 发现系统某端口部署了minio服务,经过探测发现存在minio存储桶遍历 使用利用工具把泄露的文件全部整理一…...
【Qt】QDialog类
🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 对话框 - QDialog 🦋 基本介绍🦋 对话框分类🦋 Qt 内置对话框🎀 QMessageBox -消息对话框🎀 QColo…...
【Spring Boot基础】MyBatis的基础操作:增删查改、列名和属性名匹配 -- XML实现
MyBatis的基础操作 1. MyBatis XML配置文件1.1 简单介绍1.2 配置连接字符串和MyBatis1.3 XMl文件实现--分层1.4 XMl文件实现--举例 2.增删改查操作2.1 增(insert)2.1.1 不使用Param2.1.2 用Param2.1.3 返回自增键 2.2 删(delete)2…...
谷歌推出探索型推荐新范式:双LLM架构重塑用户兴趣挖掘
文章目录 1. 背景1.1 闭环困境1.2 谷歌的两次失败尝试1.2.1 尝试一:轻量微调1.2.2 尝试二:RLHF 强化学习微调 1.3 双LLM范式的提出1.3.1 模型1:Novelty LLM — 负责生成“探索方向”1.3.2 模型2:Alignment LLM — 负责评估“相关性…...
Linux kernel signal原理(下)- aarch64架构sigreturn流程
一、前言 在上篇中写到了linux中signal的处理流程,在do_signal信号处理的流程最后,会通过sigreturn再次回到线程现场,上篇文章中介绍了在X86_64架构下的实现,本篇中介绍下在aarch64架构下的实现原理。 二、sigaction系统调用 #i…...
使用 LangChain + Higress + Elasticsearch 构建 RAG 应用
RAG(Retrieval Augmented Generation,检索增强生成) 是一种结合了信息检索与生成式大语言模型(LLM)的技术。它的核心思想是:在生成模型输出内容之前,先从外部知识库或数据源中检索相关信息&…...
【Linux】46.网络基础(3.3)
文章目录 5. 其他重要协议或技术5.1 DNS(Domain Name System)5.1.1 DNS背景5.1.2 域名简介 5.2 ICMP协议5.2.1 ICMP功能5.2.2 ICMP的报文格式5.2.3 ping命令5.2.4 一个值得注意的坑5.2.5 traceroute命令 5.3 NAT技术5.3.1 NAT技术背景5.3.2 NAT IP转换过程5.3.3 NAPT5.3.4 NAT技…...
【Unity笔记】Unity + OpenXR项目无法启动SteamVR的排查与解决全指南
图片为AI生成 一、前言 随着Unity在XR领域全面转向OpenXR标准,越来越多的开发者选择使用OpenXR来构建跨平台的VR应用。但在项目实际部署中发现:打包成的EXE程序无法正常启动SteamVR,或者SteamVR未能识别到该应用。本文将以“Unity OpenXR …...
【sylar-webserver】重构 增加内存池
文章目录 内存池设定结构ThreadCacheCentralCachePageCache allocatedeallocate测试 参考 https://github.com/youngyangyang04/memory-pool 我的代码实现见 https://github.com/star-cs/webserver 内存池 ThreadCache(线程本地缓存) 每个线程独立的内存…...
云账号安全事件分析:黑客利用RAM子账户发起ECS命令执行攻击
事件背景 某企业云监控系统触发高危告警,提示API请求中包含黑客工具特征(cf_framework),攻击者试图通过泄露的RAM子账户凭据调用ECS高危API。以下是攻击关键信息整理: 字段详情告警原因API请求包含黑客工具特征(cf_framework)攻击实体RAM子账户 mq泄露凭证AccessKey ID…...
Node.js 模块导入的基本流程
Node.js 模块导入的基本流程,主要是 CommonJS 模块加载机制(即使用 require())的内部执行步骤。下面我用清晰的结构给你梳理一下这个过程: ✅ Node.js 模块导入的基本流程(使用 require()) const someModu…...
Unitest和pytest使用方法
unittest 是 Python 自带的单元测试框架,用于编写和运行可重复的测试用例。它的核心思想是通过断言(assertions)验证代码的行为是否符合预期。以下是 unittest 的基本使用方法: 1. 基本结构 1.1 创建测试类 继承 unittest.TestC…...
wps批量修改字体
选择这个小箭头 找到需要修改的字体如正文,右击修改选择合适的字体确定即可...
【Linux网络】各版本TCP服务器构建 - 从理解到实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
航电系统多模态融合技术要点
一、技术要点 1. 多模态数据特性分析 异构数据对齐:需处理不同传感器(如雷达、摄像头、IMU、ADS-B等)在时间、空间、精度和采样率上的差异,需设计同步机制(如硬件时钟同步、软件插值对齐)。 数据预处…...
【Git】branch合并分支
在 Git 中,将分支合并到 main 分支是一个常见的操作。以下是详细的步骤和说明,帮助你完成这个过程。 1. 确保你在正确的分支上 首先,你需要确保当前所在的分支是 main 分支(或者你要合并到的目标分支)。 检查当前分支…...
uniapp-商城-33-shop 布局搜索页面以及u-search
shop页面上有一个搜索,可以进行商品搜索,这里我们先做一个页面布局,后面再来进行数据i联动。 1、shop页面的搜索 2、搜索的页面代码 <navigator class"searchView" url"/pagesub/pageshop/search/search"> …...
蓝桥杯常考的找规律题
目录 灵感来源: B站视频链接: 找规律题具有什么样的特点: 报数游戏(Java组): 题目描述: 题目链接: 思路详解: 代码详解: 阶乘求和(Java组…...
全球化2.0 | 云轴科技ZStack亮相2025香港国际创科展
4月13-16日,由香港特别行政区政府、香港贸发局主办的2025香港国际创科展(InnoEX)在香港会议展览中心举办,作为亚洲最具影响力的科技盛会之一,本届展会吸引了来自17个国家和地区的500余家顶尖科技企业、科研机构及行业先…...
【Python进阶】数据可视化:Matplotlib从入门到实战
Python数据可视化:Matplotlib完全指南 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:折线图(股票趋势&#…...
操作系统——堆与栈详解:内存结构全面科普
文章目录 堆与栈详解:内存结构全面科普一、程序内存结构总览二、各段介绍及特点1. 代码段 .text2. 数据段 .data3. BSS段 .bss4. 堆区 Heap5. 栈区 Stack 三、C语言实例分析四、深入理解:为什么堆空间可能不连续?1. 堆内部结构:链…...
Mysql面试知识点详解
Mysql面试知识点详解 Mysql 是 Java 开发领域中常用的持久层框架,在面试和实际开发中都占据重要地位。本文将深入剖析 Mysql的核心知识点,并结合实战案例,帮助读者全面掌握相关技能。 一、慢查询定位与分析 (一)定位…...
数智读书笔记系列030《曲折的职业道路:在终身工作时代找准定位》与《做自己的教练:战胜工作挑战掌控职业生涯》
书籍简介 《曲折的职业道路:在终身工作时代找准定位》由英国职业发展专家海伦塔珀(Helen Tupper)和莎拉埃利斯(Sarah Ellis)合著,旨在帮助读者应对现代职场中日益普遍的“非直线型”职业路径。两位作者是“神奇的如果”(Amazing If)公司的联合创始人,曾为李维斯、沃达…...
Linux内核之文件驱动随笔
前言 近期需要实现linux系统文件防护功能,故此调研了些许知识,如何实现文件防护功能从而实现针对文件目录防护功能。当被保护的目录,禁止增删改操作。通过内核层面实现相关功能,另外在通过跟应用层面交互从而实现具体的业务功能。…...
【python】如何将文件夹及其子文件夹下的所有word文件汇总导出到一个excel文件里?
根据你的需求,这里提供一套完整的Python解决方案,支持递归遍历子文件夹、提取Word文档内容(段落+表格),并整合到Excel中。以下是代码实现及详细说明: 一个单元格一个word的全部内容 完整代码 # -*- coding: utf-8 -*- import os from docx import Document import pand…...
IDEA中如何统一项目名称/复制的项目如何修改根目录名称
1、问题概述? 在开发中,有时候为了方便,我们会复制一个新的项目,结果出现如下提示: 会在工程的后面提示工程原来的名字。 这种情况就是复制之后名字修改不彻底造成的。 2、彻底的修改工程的名字 2.1、修改pom.xml中…...
Ubuntu-Linux中vi / vim编辑文件,保存并退出
1.打开文件 vi / vim 文件名(例: vim word.txt )。 若权限不够,则在前方添加 sudo (例:sudo vim word.txt )来增加权限; 2.进入文件,按 i 键进入编辑模式。 3.编辑结…...
如何在idea里创建注释模版
✅ 步骤:创建一个类注释的 Live Template(缩写为 cls) ① 打开设置 IDEA 菜单栏点击:File > Settings(或按快捷键 Ctrl Alt S) ② 进入 Live Templates 设置 在左侧菜单找到:Editor > …...
IntelliJ IDEA 新版本中 Maven 子模块不显示的解决方案
一、问题现象与背景 在使用 IntelliJ IDEA 2024 版本开发 Maven 多模块项目时,我发现一个令人困惑的现象:父模块的子模块未在右侧 Maven 工具窗口中显示,仅显示父模块名称(且无 (root) 标识)。而此前在 IntelliJ IDEA…...
day48—双指针-通过删除字母匹配到字典最长单词(LeetCode-524)
题目描述 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字…...
美乐迪电玩大厅加载机制与 RoomList 配置结构分析
本篇为《美乐迪电玩全套系统搭建》系列的第三篇,聚焦大厅与子游戏的动态加载机制,深入解析 roomlist.json 的数据结构、解析流程、入口配置方式与自定义接入扩展技巧。通过本篇内容,开发者可实现自由控制子游戏接入与分发策略。 一、RoomList…...
局域网内,将linux(Ubuntu)的硬盘映射成Windows上,像本地磁盘一样使用
如何把同处一个局域网内的Ubuntu硬盘,映射到Windows上,使得Windows就像使用本地磁盘一样使用Ubuntu的磁盘? 要在同一局域网内的Windows上像本地磁盘一样使用Ubuntu硬盘,可以按照以下步骤操作: 1. 在Ubuntu上设置Samba…...
界面控件DevExpress WPF v25.1预览 - 支持Windows 11系统强调色
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
【Hive入门】Hive架构与组件深度解析:从核心组件到生态协同
目录 1 Hive架构全景图 2 核心组件运维职责详解 2.1 Metastore元数据中心 2.2 Driver驱动组件 2.3 Executor执行引擎 3 与HDFS/YARN的协同关系 3.1 HDFS协同架构 3.2 YARN资源调度 4 运维实战案例 4.1 Metastore连接泄露 4.2 小文件合并 5 最佳实践总结 5.1 性能优…...
【图像识别改名】如何批量识别多个图片的区域内容给图片改名,批量图片区域文字识别改名,基于WPF和腾讯OCR的实现方案和步骤
基于WPF和腾讯OCR的批量图像区域文字识别改名方案 本方案适用于以下场景: 大量扫描文档需要根据文档中的特定区域内容(如编号、标题等)进行重命名证件照片需要根据证件号码或姓名进行整理归档企业档案管理需要根据文件上的编号自动分类教育机构需要根据学生试卷上的学号自动…...
从ChatGPT到GPT-4:大模型如何重塑人类认知边界?
从ChatGPT到GPT-4:大模型如何重塑人类认知边界? 在人工智能(AI)领域,近年来最引人注目的进展之一是大型语言模型的发展。从最初的GPT-1到现在的GPT-4,这些模型不仅在技术上取得了显著的进步,而…...
QEMU源码全解析 —— 块设备虚拟化(21)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(20) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回开始解析blockdev_init函数,讲到了其中调用的blk_new_open函数,该函数的作用…...
vue2练习项目 家乡特色网站—前端静态网站模板
最近一直在学习前端 vue2 开发,基础知识已经学习的差不多了,那肯定需要写几个项目来练习一下自己学习到的知识点。今天就分享一个使用 vue2 开发的一个前端静态网站,【家乡特色网站】 先给大家看一下网站的样式: 这里就只简单的…...
CFIS-YOLO:面向边缘设备的木材缺陷检测轻量级网络解析
论文地址:https://arxiv.org/pdf/2504.11305 目录 一、论文核心贡献 二、创新点详解 2.1 CARAFE动态上采样 工作原理 优势对比 2.2 C2f_FNB轻量模块 计算效率 2.3 Inner-SIoU损失函数 三、实验验证 3.1 消融实验 3.2 对比实验 四、应用部署 4.1 边缘设备部署流程…...
vue3 + element-plus中el-dialog对话框滚动条回到顶部
对话框滚动条回到顶部 1、需要对话框显示后 2、使用 nextTick 等待 Dom 更新完毕 3、通过开发者工具追查到滚动条对应的标签及class“el-overlay-dialog”。追查方法: 4、设置属性 scrollTop 0 或者 执行方法 scrollTo(0, 0) // 对话框显示标识 const dialogVi…...
赛灵思Xilinx FPGa XCKU15P‑2FFVA1156I AMD Kintex UltraScale+
XCKU15P‑2FFVA1156I 是 AMD Kintex UltraScale 系列中的高性能 FPGA,基于 16 nm FinFET UltraScale 架构 制造,兼顾卓越的性能与功耗比,该器件集成 1,143,450 个逻辑单元和 82,329,600 位片上 RAM,配备 1,968 个 DSP 切片&#…...
力扣2492:并查集/dfs
方法一:并查集。如果不仔细读题,可能会想着把每一个一维数组下标为2的位置进行排序即可。但这是不行的。因为有可能有一些节点在其它集合当中。如果这些节点之间存在一个边权值比节点1所在集合的最小边权值还要小,那么求出来的答案就是错的。…...
宝塔面板引发的血案:onlyoffice协作空间无法正常安装的案例分享
今天和客户一起解决:onlyoffice协作空间的安装问题,本来已经发现由于客户用的机械硬盘,某些安装步骤等待的时间不够,已经加了处理。但是安装成功后,登录系统一直提示报错如下 检查docker容器都是正常的,并且health也是正确的,登录就一直报错。后面发现用免费版的安装程序可以正…...