Linux_ELF文件
目录
前言:
一、ELF文件的类型
二、ELF文件的组成格式
1. ELF头部(ELF Header)
2. 节头表(Section Header Table)
3. 程序头表(Program Header Table)
4. 节(Sections)与段(Segments)
三、ELF文件从形成到加载轮廓
1、ELF可执行文件形成过程
2、 可执行文件从磁盘加载到内存section的变化
1、Section与Segment的基本关系
2、合并机制与内存优化
四、理解动静态库链接和加载
编辑
1. 动态链接核心原理
2. 程序启动与动态链接流程
动态链接器:
1. 位置无关代码(PIC)基础原理
前言:
ELF(Executable and Linkable Format):
是Unix/Linux系统下的标准可执行文件、目标文件和共享库格式。
是一种文件格式的名称
一、ELF文件的类型
ELF文件根据用途可分为以下几种主要类型:
-
可重定位文件(Relocatable File)
- 文件扩展名通常为
.o
- 由编译器生成,包含代码和数据但未指定绝对地址
- 用于与其他目标文件链接生成可执行文件或共享库
- 在Linux系统中通过
gcc -c
命令生成
- 文件扩展名通常为
-
可执行文件(Executable File)
- 通常没有特定扩展名(如Linux中的
a.out
) - 包含可直接执行的程序代码和数据
- 由链接器处理可重定位文件后生成
- 包含程序入口点,可直接被操作系统加载执行
- 通常没有特定扩展名(如Linux中的
-
共享目标文件(Shared Object File)
- 文件扩展名通常为
.so
- 包含可共享的代码和数据,用于动态链接
- 可在两种情况下使用:
- 链接时与其他文件链接生成新目标文件
- 运行时与可执行文件结合作为进程映像的一部分
- 文件扩展名通常为
-
核心转储文件(Core Dump File)
- 由操作系统在程序崩溃时生成
- 包含程序崩溃时的内存状态和寄存器信息
- 用于调试和故障排除
类型 | 扩展名 | 主要用途 | 生成方式 | 使用场景 |
---|---|---|---|---|
可重定位文件 | .o | 链接 | 编译器生成 | 链接阶段 |
可执行文件 | 无/.out | 执行 | 链接器生成 | 运行阶段 |
共享目标文件 | .so | 动态链接 | 链接器生成 | 链接和运行阶段 |
核心转储文件 | core | 调试 | 系统生成 | 调试阶段 |
二、ELF文件的组成格式
基本信息如图:
1. ELF头部(ELF Header)
- 位于文件起始位置,固定大小(32位系统52字节,64位系统64字节)
- 包含文件的基本信息:
- 魔数(Magic Number):
0x7f 0x45 0x4c 0x46
(ASCII为"ELF") - 文件类型(可执行/可重定位/共享库等)
- 目标体系结构(如x86、ARM)
- 程序入口地址(可执行文件)
- 节头表和程序头表的位置和大小信息
- 魔数(Magic Number):
2. 节头表(Section Header Table)
- 包含多个节头表条目,每个条目描述一个节(section)的信息
- 主要作用:
- 记录各节的名称、类型、文件偏移、大小、读写权限等
- 主要用于链接过程(链接视图)
- 对于可重定位文件是必须的,对于可执行文件是可选的
3. 程序头表(Program Header Table)
- 包含多个程序头表条目,每个条目描述一个段(segment)的信息
- 主要作用:
- 描述如何将文件中的段加载到内存
- 主要用于执行过程(执行视图)
- 对于可执行文件和共享库是必须的,对于可重定位文件可能为空
4. 节(Sections)与段(Segments)
-
节(Section):
- 链接视图的基本单位
- 常见节包括:
.text
:可执行代码.data
:已初始化的全局/静态变量.bss
:未初始化的全局/静态变量.rodata
:只读数据.symtab
:符号表.strtab
:字符串表.rel.text
/.rel.data
:重定位信息
-
段(Segment):
- 执行视图的基本单位
- 由多个具有相同权限的连续节组成
- 常见段类型:
LOAD
:需加载到内存的段(代码段、数据段)DYNAMIC
:动态链接信息INTERP
:指定动态链接器路径10
三、ELF文件从形成到加载轮廓
1、ELF可执行文件形成过程
- step-1:将多份 C/C++ 源代码,翻译成为⽬标 .o ⽂件
- step-2:将多份 .o ⽂件section进⾏合并
2、 可执行文件从磁盘加载到内存section的变化
1、Section与Segment的基本关系
ELF文件具有双重视图特性:
- 链接视图:以Section为基本单位,包含
.text
(代码)、.data
(已初始化数据)、.bss
(未初始化数据)等,主要用于链接阶段- 执行视图:以Segment为基本单位,由多个属性相同的Section合并而成,用于运行时加载
关键区别:
特性 Section Segment 用途 链接阶段 执行阶段 组织结构 独立功能单元 合并后的内存块 表结构 Section Header Table Program Header Table 必要性 可执行文件可选 可执行文件必须 2、合并机制与内存优化
合并过程的核心目的是减少内存碎片,提高页面使用效率:
为什么要合并
- 现代系统采用分页加载机制,典型页大小为4KB(4096字节)
- 示例:未合并时
.text
(4097B)和.data
(1B)占用3页(2+1),合并后仅需2页(4098B)合并规则:
- 相同内存属性(可读/可写/可执行)的Section会被合并8
- 必须具有相同的加载需求(需要运行时申请空间)8
- 典型合并模式:
- 代码段:合并
.text
、.rodata
等只读可执行Section- 数据段:合并
.data
、.bss
等可读写Section程序头表(Program Header Table)作用:
- 每个表项(Elf32_Phdr/Elf64_Phdr)描述一个Segment的:
- 类型(p_type):如PT_LOAD(需加载段)
- 标志位(p_flags):读写执行权限
- 文件偏移(p_offset)和大小(p_filesz)
- 内存地址(p_vaddr)和大小(p_memsz)
- 对齐要求(p_align)8
- 加载器根据这些信息建立进程内存映像
四、理解动静态库链接和加载
1、静态库
下面是样例代码
我们可以通过objdump -d 命令:将代码段(.text)进⾏反汇编查看,其中callq的加载到内存的机械码,而后面跟着的一串0代表访问的函数地址,在链接中才会填充地址,也叫做地址重定位
静态链接就是把库中的.o进⾏合并,和上述过程⼀样
所以链接其实就是将编译之后的所有⽬标⽂件连同⽤到的⼀些静态库运⾏时库组合,拼装成⼀个独⽴的可执⾏⽂件。其中就包括我们之前提到的地址修正,当所有模块组合在⼀起之后,链接器会根据我们的.o⽂件或者静态库中的重定位表找到那些需要被重定位的函数全局变量,从⽽修正它们的地址。这其实就是静态链接的过程
研究静态链接其实就是研究不同的.o文件是如何链接到一起的,.o类型文件也叫做可重定位目标文件
1. 动态链接核心原理
动态链接的本质是将链接过程推迟到程序加载时完成,这一机制实现了代码共享和内存优化。当执行一个程序时,操作系统会执行以下关键步骤:
- 程序加载:将程序的可执行代码和依赖的动态库加载到内存
- 地址分配:为每个动态库动态分配内存地址(ASLR技术确保地址随机化)
- 地址空间映射:将动态库映射到进程的地址空间
- 符号解析:解析程序对动态库中符号的引用
动态链接的两个关键阶段:
- 地址空间映射:通过
mmap
系统调用将动态库映射到进程地址空间 - 符号绑定:通过PLT/GOT机制实现函数调用跳转
2. 程序启动与动态链接流程
C/C++程序的执行并非直接从main函数开始,而是经历以下初始化过程
阶段 | 执行内容 | 负责组件 |
---|---|---|
_start | 设置堆栈、初始化数据段 | crt0.o |
动态链接 | 加载共享库、符号解析 | ld-linux.so |
__libc_start_main | 线程初始化、信号处理 | glibc |
main | 用户代码执行 | 用户程序 |
详细流程:
- 入口点_start:由C运行时库提供,建立基本执行环境
- 动态链接器调用:通过.interp段定位ld-linux.so
- 库加载与重定位:
- 解析DT_NEEDED条目加载依赖库
- 处理.rel.plt和.rel.dyn重定位表
- 控制权转移:通过__libc_start_main最终调用main函数
动态链接器:
◦ 动态链接器(如ld-linux.so)负责在程序运⾏时加载动态库。
◦ 当程序启动时,动态链接器会解析程序中的动态库依赖,并加载这些库到内存中。
环境变量和配置⽂件:
◦ Linux系统通过环境变量(如LD_LIBRARY_PATH)和配置⽂件(如/etc/ld.so.conf及其⼦配置⽂件)来指定动态库的搜索路径。
◦ 这些路径会被动态链接器在加载动态库时搜索。
缓存⽂件:
◦ 为了提⾼动态库的加载效率,Linux系统会维护⼀个名为/etc/ld.so.cache的缓存⽂件。
◦ 该⽂件包含了系统中所有已知动态库的路径和相关信息,动态链接器在加载动态库时会⾸先
搜索这个缓存⽂件
1. 位置无关代码(PIC)基础原理
位置无关代码(Position Independent Code)是动态库能够实现多进程共享的核心技术,其核心特性包括:
- 地址无关性:代码可以在内存任意位置加载执行,无需修改指令
- 相对寻址:所有地址引用都基于当前指令指针或全局偏移表(GOT)
- 重定位延迟:符号解析推迟到加载或运行时完成
PIC的实现主要通过两种机制:
- PC相对寻址:用于函数内部跳转和局部数据访问
- 全局偏移表(GOT):存储外部变量和函数的绝对地址,通过间接访问实现重定位
基本过程
- 通过mm_struct中的变量找到有关共享区的结构体,根据里面的成员指针变量找到路径
- 根据路径找到磁盘中的数据块加载到内存
- 发生映射关系关联起来
- 得到库的起始虚拟地址
- 数据区会有一个名为.GOT的表记录库函数的偏移量,映射过后,表会根据库的起始虚拟地址进行修改得到完整的访问共享区的地址
--------------------------------------------------------------------------------------------------------------------------
相关文章:
Linux_ELF文件
目录 前言: 一、ELF文件的类型 二、ELF文件的组成格式 1. ELF头部(ELF Header) 2. 节头表(Section Header Table) 3. 程序头表(Program Header Table) 4. 节(Sections)与段(Segments) 三、ELF文件从形成到加载轮廓 1、ELF可执行文件形成过程 2、 可执行文…...
磁盘I/O子系统
一、数据写入磁盘流程 当执行向磁盘写入数据操作的时候,会发生如下的一系列基本操作。假设文件数据存在于磁盘扇区上,并且已经被读入到页缓存中。 进程使用write()系统调用写入文件。内核更新映射到文件的page cache。内核线程pdflush负责把页缓存刷入…...
【2025 技术指南】如何创建和配置国际版 Apple ID
想要体验更丰富的应用生态、使用国际版专属服务,或访问更多开发者工具?一个国际版 Apple ID 能帮你实现这些需求。本教程将详细介绍如何注册国际版 Apple ID 并正确配置支付信息,全程操作简单,适合开发者和技术爱好者参考。 一、准…...
C++(20): 文件输入输出库 —— <fstream>
目录 一、 的核心功能 二、核心类及功能 三、核心操作示例 1. 文本文件写入(ofstream) 2. 文本文件读取(ifstream) 3. 二进制文件操作(fstream) 四、文件打开模式 五、文件指针操作 六、错误处理技巧…...
05、基础入门-SpringBoot-HelloWorld
05、基础入门-SpringBoot-HelloWorld ## 一、Spring Boot 简介 **Spring Boot** 是一个用于简化 **Spring** 应用初始搭建和开发的框架,旨在让开发者快速启动项目并减少配置文件。 ### 主要特点 - **简化配置**:采用“约定优于配置”的原则,减…...
深入理解指针(6)
目录 1 sizeof和strlen的对⽐ 1.1 sizeof 编辑1.2strlen 1.3 sizeof 和 strlen的对⽐ 2 数组和指针笔试题解析 2.1 ⼀维数组 编辑 2.2 字符数组 3 指针运算笔试题解析 3.1 题⽬1: 编辑3.2 题目2 3.3 题目3 3.4 题目4 3.5 题目5 3.6 题目6 3.7…...
力扣HOT100之二叉树:108. 将有序数组转换为二叉搜索树
这道题之前做过,思路又给忘了,这道题用递归做是最简单的。 由于得到的数组是有序的,我们只需要取出中间位置的元素medium作为根节点,然后medium左边的剩余元素组成根节点的左子树,medium右边的剩余元素组成根节点的右子…...
手撕I2C和SPI协议实现
手撕I2C和SPI协议实现 目录 I2C协议原理I2C位操作实现I2C驱动代码编写SPI协议原理SPI位操作实现SPI驱动代码编写 I2C协议原理 I2C(Inter-Integrated Circuit)是一种串行通信总线,使用两根线:SCL(时钟线)…...
452. Minimum Number of Arrows to Burst Balloons
题目描述 这道题用leetcode官方的解答反而搞复杂了。本题其实就是求重叠区间的交集。先按照区间左端点从小到大排序。然后拿出第一个区间作为【当前区间交集】的初始值。遍历后面的区间看那个区间和【当前交集】是否有重叠。如果有重叠则将【当前交集】和【当前区间】求交集并更…...
React 中,闭包陷阱
文章目录 前言1. 经典闭包陷阱示例过期状态问题 2. 解决方案2.1 正确声明依赖数组2.2 使用 useRef 捕获最新值**2.3 使用函数式更新(针对状态更新)****2.4 使用 useCallback 冻结闭包** **3. 异步操作中的闭包陷阱****事件监听示例** **4. 自定义 Hooks …...
代码复现5——VLMaps
项目地址 1 Setup # 拉取VLMaps仓库,成功运行后会在主目录生成文件夹vlmapsgit clone https://github.com/vlmaps/vlmaps.git#通过 conda 创建虚拟环境conda create -n vlmaps python=3.8 -yconda activate vlmaps #激活环境cd vlmaps # 切换到项目文件下bash install.ba…...
qt6 c++操作qtableview和yaml
保存qtableview数据到yaml文件从yaml文件读取数据到qtableview qtableview在UI界面拖放。 代码是问chat百度的深度探索。 - name: a1address: db1.dbw10type: int - name: a2address: db1.dbx1.0type: bool写到yaml,写前检查 bool plot1::isRowValid(const QStan…...
使用UniApi调用百度地图API的需要注意的地方
目录 前言 一、百度开放平台 1、功能简介 2、地点搜索服务 3、按行政区划检索API 二、Uniapi集成百度API 1、API集成流程 2、访问接口的定义 3、业务调用集成 三、可能遇到的问题 1、指定输出格式无效 2、返回数据的总数 四、总结 前言 在之前的系列博客中…...
(9)python开发经验
文章目录 1 os.path.join()拼接路径2 条件变量3 添加临时环境变量 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 👈 1 os.path.join()拼接路径 os.path.join() 是 Python 中处理文件路径拼接的核心函…...
windows 10 做服务器 其他电脑无法访问,怎么回事?
一般我们会先打开win10自己的防火墙策略,但是容易忽略 电脑之间 路由器上的防火墙,此时也需要查看一下,可以尝试先关闭路由器防火墙,如果可以了,再 设置路由器上的防火墙规则。 将路由器的上网设置 改成 路由模式 &a…...
mysql中limit深度分页详细剖析【爽文】
目录 一 mysql中limit深度分页 1.1 背景描述 1.2 mysql深度分页很慢原因 1.2.1 mysql的sql执行流程 1.2.2 mysql的深度分页很慢原因 1.3 解决办法 1.3.1 覆盖索引 1.3.2 子查询 1.3.3 标签查询 1.3.4 分区表 一 mysql中limit深度分页 1.1 背景描述 Limit深度分页造…...
【C++ Qt】布局管理器
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 🤔绪论: 在Qt开发中,界面布局的合理设计是提升用户体验的关键。早期,开发者常采用绝对定位的方式摆放控件,即通…...
Windows系统永久暂停更新操作步骤
目录 Windows系统永久暂停更新操作步骤 打开运行窗口进入注册表编辑器 导航路径图示 新建并配置DWORD值 新建值操作图示数值设置图示 在系统设置中应用暂停 暂停选项图示 注意事项 打开运行窗口 按下键盘上的 Win键 R 组合键,调出“运行”对话框。 进入组策略编…...
Java IO流进阶实战详解(含文件读写、拷贝、加密、字符集)
本文基于 Java 原生 IO 流,从最基础的字节流到字符流,再到实战案例(如文件夹拷贝、文件加密等)进行逐步深入讲解。适合有一定 Java 基础、希望掌握文件读写操作的。 一、前言 Java IO(输入输出)是我们日常…...
JavaScript【7】BOM模型
1.概述: BOM(Browser Object Model,浏览器对象模型)是 JavaScript 中的一个重要概念,它提供了一系列对象来访问和操作浏览器的功能和信息。与 DOM(Document Object Model)主要关注文档结构不同&…...
STM32F10xx 参考手册
6. 什么是寄存器 本章参考资料:《STM32F10xx 参考手册》、《STM32F10xx数据手册》、 学习本章时,配合《STM32F10xx 参考手册》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。…...
使用instance着色
本节我们学习使用instance着色器进行着色 //拾取var handler new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);handler.setInputAction(function(movement){console.log(movement);var pickedObject viewer.scene.pick(movement.position);if(Cesium.defined(picke…...
MySQL——4、表的约束
表的约束 1、空属性2、默认值3、列描述4、zerofill5、主键6、自增长7、唯一键8、外键9、综合案例 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性…...
Datawhale PyPOTS时间序列5月第3次笔记
下游任务的两阶段(two-stage) 处理 下载数据并预处理的程序: # ------------------------------- # 导入必要的库 # ------------------------------- import numpy as np import torch from benchpots.datasets import preprocess_physionet2012 from pypots.imp…...
初探Reforcement Learning强化学习【QLearning/Sarsa/DQN】
文章目录 一、Q-learning现实理解:举例:回顾: 二、Sarsa和Q-learning的区别 三、Deep Q-NetworkDeep Q-Network是如何工作的?前处理:Convolution NetworksExperience Replay 一、Q-learning 是RL中model-free、value-…...
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 12.曲面细分
1. 曲面细分 曲面细分着色器(Tessellation Shader)是OpenGL 4.0及以上版本引入的一种可编程着色器阶段,用于在GPU上对几何体进行细分,将粗糙的多边形网格自动细分为更平滑、更精细的曲面。它主要用于实现高质量的曲面渲染&#x…...
8天Python从入门到精通【itheima】-14~16
目录 第二章学习内容总体预览: 14节-字面量: 1.学习目标:编辑 2.Python中6大常用数据类型: 3.实现:整数、浮点数、字符串类型的数据输出 4.字面量的定义: 5.小节总结 15节-注释: 1.le…...
Spring Boot 项目的计算机专业论文参考文献
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
linux线程基础
1. 什么是线程 进程是承担系统资源分配的基本实体,而线程(Thread)是进程内的一个执行单元,是CPU调度的基本单位。一个进程可以包含多个线程,这些线程共享进程的地址空间和资源(如文件描述符、全局变量等&a…...
进阶-数据结构部分:3、常用查找算法
飞书文档https://x509p6c8to.feishu.cn/wiki/LRdnwfhNgihKeXka7DfcGuRPnZt 顺序查找 查找算法是指:从一些数据之中,找到一个特殊的数据的实现方法。查找算法与遍历有极高的相似性,唯一的不同就是查找算法可能并不一定会将每一个数据都进行访…...
JavaScript 中的 for...in 和 for...of 循环详解
在 JavaScript 中,for...in 和 for...of 是两种常用的循环结构,但它们有着不同的用途和行为。很多初学者容易混淆这两者,本文将详细解析它们的区别、适用场景以及注意事项。 目录 for…in 循环 基本用法遍历对象属性注意事项 for…of 循环 …...
【汇总】影视仓接口地址,影视仓最新配置接口【2025.5】
📦 TVBOX接口分类与制作加载指南 结合参考资料,整理TVBOX接口的核心分类、制作方法及加载技巧,助你快速上手! 🌐 一、接口分类 🌍 网络接口(远程URL) 特点:动态加载在线J…...
vue引用cesium,解决“Not allowed to load local resource”报错
vue引用cesium,解决“Not allowed to load local resource”报错TOC 工具 vscode node :v22.14.0npm :10.9.2vue:vue/cli 5.0.8 一、创建一个 Vue 3 项目 1.创建名为cesium_test的项目: vue create cesium_test2.…...
阿里云服务器跑模型教程
首先打开阿里云官网点击免费试用 选择250工时/月的免费仨月新人试用套餐 点击右上角主账号 选择人工智能平台PAI 然后选择交互式建模(DSW) 选择新建实例 起个名字 然后点击确定 点击打开 进入到命令行工具 下载MINIConda和对应的pytorch还有相关依赖库文件即可 然后上传…...
JavaScript入门【2】语法基础
1.JavaScript的引⼊⽅式(使用): 1.方式1:行内引用: 此种方式是将<font style"color:rgb(38,38,38);">JavaScript代码作为HTML标签的属性值使⽤,示例如下:</font><html lang"en"> <head><meta charset"UTF-8"><…...
调用DeepSeek系列模型问答时,输出只有</think>标签,而没有<think>标签
问题:调用DeepSeek系列模型问答时,输出结果缺少只有标签,而没有标签? DeepSeek官方有关说明 这里设置成这样是为了保证让模型的生成是以"<think>\n"开头的,然后开始思考过程,避免模型没…...
python:gimp 与 blender 两个软件如何协作?
GIMP(GNU Image Manipulation Program)和 Blender 是两个不同领域的开源工具,但它们在数字创作流程中常协同使用,以下是它们的主要联系和互补性: 1. 功能互补:2D 与 3D 的结合 GIMP 是专业的 2D 图像处理工…...
MMDetection环境安装配置
MMDetection 支持在 Linux,Windows 和 macOS 上运行。它需要 Python 3.7 以上,CUDA 9.2 以上和 PyTorch 1.8 及其以上。 MMDetection 至今也一直更新很多个版本了,但是对于最新的pytorch版本仍然不支持,我安装的时候仍然多次遇到m…...
【springboot+vue3的前后端分离项目实现支付宝的沙箱支付】
【springbootvue3的前后端分离项目实现支付宝的沙箱支付】 以下是基于SpringBoot Vue前后端分离项目实现支付宝沙箱支付的完整解决方案,包含关键代码和调试技巧 一、项目架构设计 二、后端实现(SpringBoot) 1. 添加依赖 <!-- pom.xml…...
基于Llama3的开发应用(二):大语言模型的工业部署
大语言模型的工业部署 0 前言1 ollama部署大模型1.1 ollama简介1.2 ollama的安装1.3 启动ollama服务1.4 下载模型1.5 通过API调用模型 2 vllm部署大模型2.1 vllm简介2.2 vllm的安装2.3 启动vllm模型服务2.4 API调用 3 LMDeploy部署大模型3.1 LMDeploy简介3.2 LMDeploy的安装3.3…...
MySQL只操作同一条记录也会死锁吗?
大家好,我是锋哥。今天分享关于【MySQL只操作同一条记录也会死锁吗?】面试题。希望对大家有帮助; MySQL里where条件的顺序影响索引使用吗? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中,死锁通常发生在多…...
Linux的静态库 共享库 进程 主函数的参数
1、库文件 库文件 库是一组预先编译好的方法的集合; Linux系统储存的位置一般在/lib和/usr/lib中 库的头文件放在/usr/include 库分类:静态库(libxxx.a)共享库(libxxx.so) 静态库 (1&#…...
软件设计师考试结构型设计模式考点全解析
结构型设计模式考点全解析 一、分值占比与考察趋势分析(75分制) 设计模式近5年平均分值考察频率趋势分析适配器模式3-5分高频保持稳定桥接模式2-3分中频略有上升组合模式4-6分高频持续重点装饰器模式3-4分高频稳定考察代理模式5-7分高频逐年增加外观模…...
Java-Objects类高效应用的全面指南
Java_Objects类高效应用的全面指南 前言一、Objects 类概述二、Objects 类的核心方法解析2.1 requireNonNull系列方法:空指针检查的利器2.2 equals方法:安全的对象比较2.3 hashCode方法:统一的哈希值生成2.4 toString方法:灵活的对…...
PostGIS实现栅格数据入库-raster2pgsql
raster2pgsql使用与最佳实践 一、工具概述 raster2pgsql是PostGIS提供的命令行工具,用于将GDAL支持的栅格格式(如GeoTIFF、JPEG、PNG等)导入PostgreSQL数据库,支持批量加载、分块切片、创建空间索引及金字塔概览,是栅格数据入库的核心工具。 二、核心功能与典型用法 1…...
专题四:综合练习(组合问题的决策树与回溯算法)
以leetode77题为例 题目分析: 给一个数字n,你可以在1到n中选k个数字进行组合,注意包括1和n,而且通过观察实例 1,2和2,1是一样的,所以我们画决策树的时候,只需要从当前位置往后列举…...
从神经架构到万物自动化的 AI 革命:解码深度学习驱动的智能自动化新范式
目录 一、深度学习与 AI 自动化概述 二、深度学习核心技术解析 2.1 常见深度学习架构 2.2 关键算法 三、AI 自动化实践案例 3.1 图像分类自动化 3.2 自然语言处理自动化 —— 文本情感分析 编辑 五、自动化系统设计与实现 5.1 端到端自动化框架 5.2 自动化测试框架…...
3.5/Q1,GBD数据库最新文章解读
文章题目:Burden, trends, projections, and spatial patterns of lip and oral cavity cancer in Iran: a time-series analysis from 1990 to 2040 DOI:10.1186/s12889-025-22202-8 中文标题:伊朗唇癌和口腔癌的负担、趋势、预测和空间模式…...
智慧校园(含实验室)智能化专项汇报方案
该方案聚焦智慧校园(含实验室)智能化建设,针对传统实验室在运营监管、环境监测、安全管控、排课考勤等方面的问题,依据《智慧校园总体框架》等标准,设计数字孪生平台、实验室综合管理平台、消安电一体化平台三大核心平台,涵盖通信、安防、建筑设备管理等设施,涉及 395 个…...
玩转 AI · 思考过程可视化
玩转 AI 思考过程可视化 我们在开发 AI 的思维链 / 处理流时,难免遇到耗时较长的流程,如果遇到处理过慢的,用户什么也看不到可能丧失使用兴趣,对于这种情况,一个巧妙的产品思维就是呈现处理进度。 示例 其实完成这个页…...