一、动态编译 vs. 静态编译:一场关于“依赖”的战争
要理解静态编译,我们首先要明白它的对立面——动态编译,这也是 C、C++ 以及 Java、Python、C#、Ruby 等大多数主流语言所采用的方式。
1. 动态编译:运行时“借”东西
想象一下你要写一篇论文,你需要引用很多书籍和资料。
- 你的代码:就是你自己写的论文正文。
- 标准库/第三方库:就是你要引用的那些书籍和资料(比如 C 语言的
printf
函数,或者 Python 的requests
库)。
在动态编译模型下,编译器(比如 C 的 gcc
)在编译你的程序时,并不会把那些“书籍”的全部内容都抄录到你的“论文”里。它只是在你的论文里做了一个标记:“这里引用了《XXX》第 Y 页的 Z 段落”。
- 链接过程:编译完成后,会生成一个可执行文件(比如
my_app
)和一系列动态链接库(在 Linux 上是.so
文件,Windows 上是.dll
文件,macOS 上是.dylib
文件)。这些.so
文件就像一个公共图书馆。 - 运行时:当你运行
./my_app
时,操作系统的动态链接器 会介入。它读取你程序里的那些“引用标记”,然后去系统的“公共图书馆”(比如/usr/lib
,/lib
目录)里找到对应的.so
文件,把它们加载到内存中,让你的程序调用。
动态编译的优缺点:
- 优点:
- 节省磁盘和内存空间:多个程序可以共享同一个库文件。比如,10 个程序都用到了
libc.so.6
,内存里只需要加载一份这个库。 - 便于更新:如果库发现了一个安全漏洞,只需要更新这个
.so
文件,所有依赖它的程序都不需要重新编译,就能用上修复后的库。
- 节省磁盘和内存空间:多个程序可以共享同一个库文件。比如,10 个程序都用到了
- 缺点:
- “依赖地狱” (Dependency Hell):这是它最大的问题。你要运行程序,目标机器上必须安装了所有正确的库,并且版本要兼容。你经常会遇到
libxxx.so.1: cannot open shared object file: No such file or directory
或者version 'GLIBC_2.29' not found
这样的错误。为了解决依赖,你需要用包管理器(apt
,yum
)安装,但这又可能引入新的依赖冲突。 - 部署复杂:你不能只复制一个可执行文件就完事,你还需要确保目标环境的“图书馆”是齐全的。
- “依赖地狱” (Dependency Hell):这是它最大的问题。你要运行程序,目标机器上必须安装了所有正确的库,并且版本要兼容。你经常会遇到
2. 静态编译:自给自足的“孤岛”
现在,我们换一种写论文的方式。
在静态编译模型下,编译器在编译你的程序时,会把你用到的所有库函数的实际代码,像“抄书”一样,全部复制并嵌入到你最终生成的可执行文件中。
- 链接过程:编译器会找到你需要的所有库(无论是标准库还是第三方库)的静态库版本(Linux 上是
.a
文件),把用到的代码片段直接打包进最终的可执行文件。 - 运行时:当你运行
./my_app
时,这个文件是完全自包含的。它不需要去外部的“图书馆”找任何东西。它自带了所有需要的功能。操作系统只需要加载它,并从它的入口点开始执行即可。
静态编译的优缺点:
- 优点:
- 部署极其简单:只有一个可执行文件。把它复制到任何兼容的操作系统上,它就能运行。没有依赖,没有版本冲突。这就是所谓的“零依赖”部署。
- 性能略高:省去了运行时动态查找和加载库的开销,程序启动速度可能更快。
- 环境一致性:因为它自带了所有依赖,所以它的行为在任何地方都是完全一致的,不会因为目标系统库的版本不同而产生差异。
- 缺点:
- 体积庞大:因为每个程序都把依赖的库代码复制了一份,所以磁盘空间占用会比较大。如果 10 个程序都用到了同一个库,那么这个库的代码在磁盘上就会有 10 个副本。
- 更新困难:如果库发现了一个安全漏洞,你必须重新编译所有使用了这个库的程序,然后用新版本替换旧的可执行文件。
二、Go 和 Rust 如何实现静态编译?
Go 和 Rust 从设计之初就优先考虑了静态编译,以解决部署和依赖问题。
1. Go 语言:天生为静态编译而生
Go 的设计哲学之一就是简化构建和部署过程。
- 标准库:Go 的标准库非常强大,包含了网络、加密、I/O 等几乎所有常用功能,并且这些库的代码在编译时都会被静态链接到你的程序中。
- 第三方库:通过
go get
获取的第三方库,其源代码也会被下载到你的项目中,并在编译时被静态链接。 - 运行时:Go 语言有自己的运行时,包括垃圾回收器、调度器等。这个运行时也被编译进了最终的可执行文件里。所以,一个 Go 程序不需要外部的 Go 运行时环境(不像 Java 需要 JVM)。
一个重要的细节:Cgo
Go 代码可以调用 C 语言的代码(通过 cgo
)。如果你的 Go 程序使用了 cgo
,那么它就会依赖外部的 C 库(比如 libc
),默认情况下,编译器会尝试动态链接这些 C 库,这就破坏了“纯静态”的特性。
如何强制 Go 进行纯静态编译?
在交叉编译或构建容器镜像时,我们通常使用以下标志来确保生成一个完全静态链接、不依赖任何外部 C 库(包括 glibc
)的可执行文件:
# CGO_ENABLED=0: 禁用 cgo,告诉编译器不要链接任何 C 库。
# -ldflags "-s -w -extldflags -static":
# -s -w: 去掉调试信息,减小二进制体积。
# -extldflags -static: 将这个标志传递给外部链接器(通常是 gcc 或 clang),要求它进行静态链接。
CGO_ENABLED=0 go build -ldflags "-s -w -extldflags -static" -o my_app .
执行后,你得到的 my_app
就是一个真正的“孤岛”文件。你可以用 file
命令验证:
file my_app
输出中应该包含 statically linked
字样。
2. Rust 语言:同样强大,同样静态
Rust 和 Go 有着类似的目标,它也默认倾向于静态链接。
- 包管理器
Cargo
:Cargo
会处理所有依赖(crates
),并在编译时将它们静态链接。 - 标准库:Rust 的标准库也是静态链接的。
如何强制 Rust 进行纯静态编译?
Rust 的情况稍微复杂一点,因为它默认可能依赖系统的 libc
。要实现纯静态链接,通常需要安装一个特定的目标,比如 musl
目标(musl
是一个轻量级的、标准的 C 库实现,非常适合静态编译)。
# 1. 安装 musl 目标
rustup target add x86_64-unknown-linux-musl# 2. 安装 musl 工具链 (在 Ubuntu/Debian 上)
sudo apt-get install musl-tools# 3. 进行静态编译
# --target x86_64-unknown-linux-musl: 指定编译目标为 musl 环境
cargo build --release --target x86_64-unknown-linux-musl
编译出的可执行文件在 target/x86_64-unknown-linux-musl/release/
目录下,它也是一个完全静态链接的文件。
三、静态编译与 Docker 容器的“天作之合”
现在,我们把静态编译和 Docker 容器结合起来,你会发现它们简直是绝配。
目标: 部署一个用 Go 编写的 Web 服务器。
传统方式(动态编译语言,如 Python)
你需要一个 Dockerfile
,它看起来会是这样:
# 步骤 1: 选择一个基础镜像,这个镜像必须包含 Python 运行时和所有可能的依赖库
FROM python:3.9-slim# 步骤 2: 设置工作目录
WORKDIR /app# 步骤 3: 复制依赖文件
COPY requirements.txt .# 步骤 4: 安装 Python 依赖。这一步会连接网络,下载并安装很多 .whl 文件,它们可能又依赖系统库
RUN pip install --no-cache-dir -r requirements.txt# 步骤 5: 复制应用程序代码
COPY . .# 步骤 6: 声明端口
EXPOSE 8000# 步骤 7: 定义启动命令,需要调用 python 解释器来运行你的脚本
CMD ["python", "app.py"]
分析:这个镜像的体积至少几十 MB。它包含了 Python 解释器、pip
工具、你安装的第三方库以及它们的系统依赖。部署的复杂性被转移到了 Dockerfile
的构建过程中。
现代方式(静态编译语言,如 Go)
假设你已经用 CGO_ENABLED=0 go build ...
编译好了一个名为 web-server
的静态链接二进制文件。
方案A:使用常规基础镜像(已经很好了)
# 步骤 1: 选择一个基础镜像。它只需要一个能运行二进制文件的 Linux 内核环境即可。
# 我们甚至可以用最精简的 scratch 镜像,但 alpine 提供了一些基础工具(如 ca-certificates)更方便。
FROM alpine:latest# 步骤 2: (可选) 如果你的程序需要 HTTPS,可能需要 CA 证书
RUN apk --no-cache add ca-certificates# 步骤 3: 复制已经编译好的二进制文件到容器里
COPY web-server /app/web-server# 步骤 4: 声明端口
EXPOSE 8000# 步骤 5: 定义启动命令,直接执行二进制文件
CMD ["/app/web-server"]
分析:这个镜像非常小!alpine:latest
本身只有 5MB 左右,加上你的二进制文件和证书,最终镜像可能只有 10MB 左右。构建速度极快,因为不需要安装任何依赖。
方案B:使用 scratch
镜像(极致)
scratch
是 Docker 官方提供的一个空镜像。它里面没有任何东西,甚至连一个 shell、没有 /bin
目录,没有 libc
,什么都没有。它就是一个纯净的、空的文件系统层。
# 步骤 1: 从空镜像开始
FROM scratch# 步骤 2: 复制编译好的二进制文件
COPY web-server /# 步骤 3: 声明端口
EXPOSE 8000# 步骤 4: 定义启动命令
CMD ["/web-server"]
分析:这是最纯粹、最小的 Docker 镜像。它的体积几乎等于你的二进制文件本身的大小。因为它不包含任何多余的东西,所以它的攻击面最小,安全性最高。启动速度也是最快的。
为什么 scratch
能工作?
因为你的 web-server
是静态编译的!它不依赖 scratch
镜像里的任何东西。它自带了所有需要的功能,包括与操作系统内核交互的必要代码。操作系统内核负责管理进程、网络、文件系统,而你的应用程序只需要在用户空间运行即可,scratch
正好提供了这个最基础的用户空间环境。
总结
特性 | 动态编译 (Python/Java/Node.js) | 静态编译 (Go/Rust) |
---|---|---|
最终产物 | 可执行文件 + 一堆动态库 (.so/.dll) | 单一、自包含的可执行文件 |
部署方式 | 需要复杂的依赖管理 (apt , pip , npm ) |
复制文件即可 |
Docker 镜像 | 较大 (几十MB到GB),需包含运行时和依赖 | 极小 (几MB到十几MB),甚至可用 scratch |
启动速度 | 较慢 (需加载解释器/JVM和库) | 极快 (毫秒级) |
环境一致性 | 好 (但仍有底层库版本风险) | 完美 (行为在任何地方都一样) |
安全性 | 攻击面较大 (包含运行时和库) | 攻击面极小 (尤其是 scratch 镜像) |
核心理念 | 运行时共享,按需加载 | 编译时打包,自给自足 |
结论:
静态编译是云原生时代的一大福音。它将“环境一致性”和“部署简单性”这两个软件开发中的老大难问题,从运行时转移到了编译时,并通过编译器技术完美解决。当它与 Docker 容器结合时,能够创造出最小、最快、最安全、最可靠的应用部署单元。这正是 Go 和 Rust 语言在构建微服务、无服务器函数、CLI 工具等场景下备受青睐的根本原因。
相关文章:
动态编译 vs. 静态编译,容器时代那个更有优势?
动态编译 vs. 静态编译,容器时代那个更有优势?一、动态编译 vs. 静态编译:一场关于“依赖”的战争 要理解静态编译,我们首先要明白它的对立面——动态编译,这也是 C、C++ 以及 Java、Python、C#、Ruby 等大多数主流语言所采用的方式。 1. 动态编译:运行时“借”东西 想象…...
实用指南:操作系统类型全解析:从批处理到嵌入式
实用指南:操作系统类型全解析:从批处理到嵌入式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace…...
【C++ 类和对象・高阶深化(下)】再探构造函数(含初始化列表),吃透 static 成员、友元、内部类及对象拷贝编译器优化 - 指南
【C++ 类和对象・高阶深化(下)】再探构造函数(含初始化列表),吃透 static 成员、友元、内部类及对象拷贝编译器优化 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…...
2
C++ 数据结构数组 链表 队列 堆 树 map/set hashmysql 索引 索引就像是数据的目录。索引的好处就是可以提高查询速度,但是会占用物理空间,而且创建和维护索引要耗费时间,每次进行增删改操作都需要动态维护。索引的分类数据结构:B+ 树索引,hash,full-text物理存储:聚簇索…...
VSCode 运行 C/C++ 程序
VSCode 安装插件:重点参考: https://blog.csdn.net/icacxygh001/article/details/120981354 https://code.visualstudio.com/docs/cpp/config-linux#_running-the-build...
3 字节
进程与线程的区别 线程是轻量级进程,每个进程中都有唯一的主线程,主线程和进程是相互依存的关系。进程是资源分配和拥有的基本单位;线程是系统调度的基本单位进程拥有CPU 资源,内存资源,文件资源,句柄等;线程拥有程序计数器,寄存器,栈和状态字切换情况:进程由操作系统…...
Springcloud Alibaba(一)
一、什么是Springcloud Alibaba它是微服务概念的一种实现,解决了如下问题N个服务,如何管理?(服务治理 注册中心【服务的注册、发现、删除】)nacos N个服务,如何通信?feign N个服务,客户端如何访问?gateway N个服务,一旦出现问题了,怎么处理?(容错)sentinel N个服…...
111111111
1111111111...
202204_DASCTF_SimpleFlow
流量分析,DASCTF,WebShell,蚁剑AntSwordTags:流量分析,DASCTF,WebShell,蚁剑AntSword 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202204_DASCTF_SimpleFlow.zip 0x01. WP 1. 分析http协议,找到附件数据 …...
使用 Winscope 跟踪窗口转换
Winscope 是一款 Web 工具,可以让用户在动画和转换期间和之后记录、重放和分析多个系统服务的状态。Winscope 将所有相关的系统服务状态记录在一个跟踪文件中。使用带有跟踪文件的 Winscope 界面,您可以通过重放、单步执行和调试过渡来针对每个动画帧检查这些服务的状态(无论…...
25/9/12(补)
做了下19csps初试,60多分,记不清了,反正能过,写完后改一道暑假没过的题,没改完就下课了...
深入解析:“纳米总管”——Arduino Nano 的趣味生活
深入解析:“纳米总管”——Arduino Nano 的趣味生活pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monosp…...
洛谷题目难度系统优化
以下为优化后的难度系统:优化后难度 对应KaTex数学公式\(\color{FE4C61}{{入门}}\) \color{FE4C61}{{入门}}\(\color{F39C11}{{普及-}}\) \color{F39C11}{{普及-}}\(\color{FFC116}{{普及}}\) \color{FFC116}{{普及}}\(\color{FFD700}{{普及+}}\) \color{FFD700}{{普及+}}\(\c…...
202112_摆烂杯_WhatAHack!
流量分析Tags:流量分析,CTFSHOW 0x00. 题目 这是你沐师傅的站的流量,最近你沐师傅去跟着某讯搭了一个WP平台后发了一篇文章再测试了一下自己的网站就再也没去管过平台了。结果被某位名字貌似大概可能叫g4_simon的大黑阔给hack掉了网站,并进行了一些操作拿到了沐师傅放在平台里…...
少儿 500 常用汉字 字帖
500 常用汉字 每个字加入拼音 每个字加入笔画笔顺 少儿楷书练习下载链接如下 1-4画 5画 6画 7画 8画 9画 10画 11-16画...
Ubuntu 安装 gcc
命令 gcc --version 或者 gcc -v 能查看 gcc 版本。 未安装:安装命令: sudo apt update # 更新软件包源 sudo apt-get install build-essential gdb这样,GCC 就安装完成了。...
Redis常见性能问题
常见性能问题和解决方案?Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。 如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。 为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。 尽量避…...
3 线性模型
目录P22 P22 复习一下: 假设同类别之间的数据是比较相似的,所以在空间里,同类别的数据是挨在一起的。那么假设现在有一个超平面去进行二分类,由于一个类别的数量多得多而且两个类别的权重是一样的,于是超平面就可以把很多少数类分为正数类而且损失函数的值要下降(看P12,…...
详细介绍:七彩喜智慧养老:用科技温暖晚年,让关爱永不掉线
详细介绍:七彩喜智慧养老:用科技温暖晚年,让关爱永不掉线pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...
P3522 [POI 2011] TEM-Temperature
题目描述 给出 \(n\) 个数所在区间,求最长可能不降区间。 思路 首先,我们要解决不降的问题,如何才能保证两个相邻区间选数可能不降,不难发现,只要前一个数的最大值大于等于后一个数的最小值即可,即 \(r_{i-1} \ge l_i\)。 然后,因为我们要求的是一段一段连续的区间,所以…...
202105_风二西_SQL基于时间盲注
流量分析,SQL注入,基于时间盲注,蚁剑AntSwordTags:流量分析,SQL注入,基于时间盲注,蚁剑AntSword 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202105_风二西_SQL基于时间盲注.zip 0x01. WP 1. 浏览流量包,…...
实用指南:【C++】list容器的模拟实现
实用指南:【C++】list容器的模拟实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important…...
windows系统缺失DLL库文件下载方法
https://cn.dll-files.com/ windows系统缺失DLL文件下载方法_dll文件下载官网-CSDN博客...
更为通用的决策单调性
学习自 在线决策单调性地皮还能单老哥分治做? - 洛谷专栏 决策单调性最为常用的为分治和二分队列,前者要求离线,后者必须快速处理两个位置的转移,都有一定的局限性,其他算法大部分码量较长,很难应用。 但我们还有一种好写且能维护复杂转移的写法, 简易版 LARSCH 算法,一…...
一文读懂 PHP PSR 接口 PSR-3、PSR-7、PSR-11、PSR-15 完整指南
一文读懂 PHP PSR 接口 PSR-3、PSR-7、PSR-11、PSR-15 完整指南 现代 PHP 的选择很多。这本来是好事,但一到升级框架、替换 Logger,或在团队间统一服务时,你会发现:看不见的耦合(类型、方法签名、约定)会把小改动变成大手术。 本文用通俗的话讲清四个关键标准——PSR-3(…...
2025模拟赛Round9
T1 T2 T3 T4 T5 T6\({\color{#F39C11} 普及− }\) \({\color{#FFC116} 普及/提高− }\) \({\color{#3498DB} 提高+/省选− }\) \({\color{#3498DB} 提高+/省选− }\) \({\color{#3498DB} 提高+/省选− }\) \({\color{#3498DB} 提高+/省选− }\)参赛网址:https://boyacoding.cn…...
NOIP2025模拟赛19
T1 T2 T3 T4\({\color{#3498DB} 提高+/省选− }\) \({\color{#3498DB} 提高+/省选− }\) \({\color{#9D3DCF} 省选/NOI− }\) \({\color{#3498DB} 提高+/省选− }\)参赛网址:https://oj.33dai.cn/d/TYOI/contest/68919c89c5d9c2f14c1a537f T2,T4搭建未完成 T1 人才计数【NOIP2…...
Qt/C++开发监控GB28181系统/公网对讲/代码实现28181语音对讲/采集本地麦克风数据/支持udp和tcp模式
一、前言说明 按照国标的文档,语音对讲这块,并没有强制要求支持公网对讲,所以当初设备厂家做的都是支持的udp对讲,而且按照国标协议要求,对讲是先发一个语音对讲广播到设备,设备收到后,主动发起对讲到服务端,和视频点播是反着来的,这样的话数据的传输模式只能设备控制…...
P3195 [HNOI2008] 玩具装箱 (斜率优化)
题目描述 一道不限段数的分段问题,要求给出 \(n\) 个元素,求出分任意组所产生的最小代价。 思路 我们可以分为两步来求解这个问题,暴力转移与优化。 The First Step 暴力转移 考虑暴力DP,根据题目描述,每个容器之中玩具的编号都是连续的,并且不限容器数量,状态就很好定义…...
DBeaver使用指南
概述 由于众所周知的原因,公司不容许使用非授权正版软件。datagrip本身挺不错的,但是要倒腾激活码之类的,比较麻烦。只能从开源社区寻找好用的DBMS GUI工具。 发现DBeaver挺不错,功能很全,但是默认的配置不够好用、字体、样式等都不友好,需要打磨一番才行。 下文重点关注…...
sh-2025模拟赛
CSP-J 模拟(九)题目解答 一、单项选择题(每题2分,共30分) 1. 进制转换计算 答案:C 解析:先将八进制数\((2025)_8\)转换为十进制: \(2\times8^3 + 0\times8^2 + 2\times8^1 + 5\times8^0 = 2\times512 + 0 + 16 + 5 = 1024 + 21 = 1045\)。 将十六进制数\((2025)_{16}\)…...
C++ day7 - 指南
C++ day7 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !i…...
读人形机器人11娱乐领域
读人形机器人11娱乐领域1. 机器人表演者与艺术家 1.1. 在人类历史的宏大画卷中,艺术与娱乐一直是我们内心欲望、恐惧和抱负的映照 1.2. 音乐、舞蹈和戏剧表演中的机器人不再是科幻的虚构,而是正在重塑艺术表现形式的崭新现实 1.3. 机器人表演者和艺术家正在通过引入新的表现形…...
Java 注解机制全解析:原理、用途与框架中的实战
注解(Annotation)作为 Java 语言自 JDK5 引入以来的一项重要元编程特性,已经成为现代 Java 开发不可或缺的一部分。无论是 Spring 框架中的依赖注入、事务控制,还是 Hibernate 的对象关系映射,抑或是 Lombok 对代码生成的辅助,注解几乎贯穿于 Java 的开发全过程。 本文将…...
模板集
考虑到作为一名 Oier 有很多需要掌握的模板,所以整合了一下以前的专栏,就变成现在这样了! 有问题请加 qq 3848603482。可以帮你讲解。 给萌新的代码建议 尽量不要写全局变量,容易弄混不方便调试,要用了再创建。没有必要手写栈之类的,STL要了解多一点。不要写#define int …...
暑假
P2569 https://www.luogu.com.cn/problem/P2569 参考这篇。 /*单调队列优化dp买入股票的转移方程j是顺序枚举的,因为是买入股票,手中的股票应该是越来越多的, 当前的决策有可能在后面(j更大)的时候用到,所以你需要先求出来, 同理,卖出股票时,你手中的股票是越来越少的…...
做题记录
P1248 加工生产调度 比较妙的一道题,这里我们可以直接把 A 与 B 的最小值碾一遍,注意 B 操作时间要与 A 操作时间取最大值。...
课程助教工作总结
在上学期,我有幸担任了《数字电路与逻辑设计》课程的助教。这是一次极其宝贵和充实的经历,不仅巩固和深化了我的专业知识,更锻炼了我的沟通、组织和解决问题的能力。现将本学期的工作情况总结如下: 一、 助教工作的具体职责和任务 我的工作核心是成为连接主讲教师与学生的桥…...
6G 驱动的智慧城市新格局
引言随着科技的不断进步,6G 驱动的智慧城市新格局 正逐渐走向应用前沿。它不仅推动了相关产业的发展,也在改变人类社会的运作方式。本文将从背景、核心技术、应用案例、挑战与趋势、总结几个方面对其进行系统分析。 背景 📊6G 驱动的智慧城市新格局 的出现,是社会需求、政…...
SHA-1 证书淘汰警告:网站管理员需紧急验证TLS安全性
微软宣布自2017年5月9日起,Edge和IE11浏览器将逐步阻止SHA-1签名的TLS服务器证书。本文详细解析三阶段淘汰计划、受影响证书类型验证方法及企业应对方案,涉及证书链验证和弱签名日志收集技术。こんにちは、村木ゆりかです。 以前よりマイクロソフト セキュリティ アドバイザリ…...
数字孪生在制造业中的应用
引言在当前快速发展的科技环境中,数字孪生在制造业中的应用 已经成为学术界与产业界广泛关注的主题。本文将通过背景、核心技术、应用案例、挑战与趋势、总结六个部分进行系统性分析。 背景 📊数字孪生在制造业中的应用 的兴起与社会发展需求密切相关。随着数字化转型的加速…...
device第一周个人作业
一. 自我介绍 回顾我的学习经历,虽然没有什么惊天动地的大成就,但也没有一些值得骄傲的小闪光点。兴趣爱好是科幻和军事读物,以前喜欢跟朋友一起打比赛,现在发现朋友在打假赛…… 二.现状、经验与计划 (1)当前技能树与技术偏好 当前技能树: 我可以使用基础的C语言和java…...
Java 在移动开发与跨平台应用中的应用
随着智能手机的普及,移动应用已经成为数字化转型的重要载体。移动端承载着用户的核心交互,而跨平台开发趋势也不断兴起, 旨在减少多端重复开发成本。在这一过程中,Java 一直是移动开发的核心语言, 尤其在 Android 生态中占据主导地位,并通过跨平台技术、移动后端服务、混…...
5G 技术与远程教育
引言在当前快速发展的科技环境中,5G 技术与远程教育 已经成为学术界与产业界广泛关注的主题。本文将通过背景、核心技术、应用案例、挑战与趋势、总结六个部分进行系统性分析。 背景 📊5G 技术与远程教育 的兴起与社会发展需求密切相关。随着数字化转型的加速,全球化的扩展…...
5G 技术在工业互联网的应用
引言在当前社会与科技的双重推动下,5G 技术在工业互联网的应用 已成为一个举世瞩目的议题。它不仅仅是技术层面的创新,更代表着社会运行模式的转型。本文将从背景、核心技术、应用案例、挑战与趋势、总结几个方面进行深入探讨。 背景 📊5G 技术在工业互联网的应用 的发展源…...
一键部署ftp脚本
在 Ubuntu(root) 上搭建标准 FTP(vsftpd)服务器,带被动模式端口、用户创建、目录与权限配置,可直接落地执行。一、部署脚本(保存为 setup_ftp.sh,root 执行) #!/usr/bin/env bash set -euo pipefail### ====== 可按需修改的变量 ====== FTP_USER="ftpuser" …...
PySimpleGUI安装4.60.5老版本安装教程!
PySimpleGUI安装4.60.5老版本安装教程! ━━━━━━━━━━━━━━━━━━━━━━ https://download.csdn.net/download/mzl_18353516147/89506033?utm_medium=distribute.pc_relevant_download.none-task-download-2defaultBlogCommendFromBaiduRate-2-89506033-downlo…...
PySimpleGUI-免注册版本
PySimpleGUI 开始注册了,怎样能免注册使用早期版本? 若需免注册使用 PySimpleGUI 早期版本,可通过以下两种方法实现,具体操作及原理如下: 方法一:通过 pip 指定版本安装(推荐) 操作步骤:卸载现有版本(若已安装新版):pip uninstall PySimpleGUI安装指定旧版本(如 4…...
高三闲话 #1
APJ 三个银牌高考 699,我一个银牌考个 233 不过分吧高三生活还是如期而至了,写点高三闲话感觉太有道理了。不过我得先说明这篇文章的目的不是传播负能量,事实上我最近还是蛮积极的,只不过我无法回避这些我内心里的真实想法,而且感觉写出来很有意思,所以写一写。如果让我用…...
三大免费CDN推荐:安全防护强、稳定性卓越、加载飞速,长期使用超安心
三大免费CDN推荐:安全防护强、稳定性卓越、加载飞速,长期使用超安心1. 将盾CDN:防御与速度双卓越,建站首选利器 将盾CDN是一款专注于安全与性能的CDN服务,其免费版本在防御强度、国内访问速度及功能实用性上表现亮眼,无论是企业官网还是个人站点,都能提供可靠保障,是当…...