实用指南:Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南
前言:在云时代,企业的IT基础设施早已从“几台服务器”演变为“横跨多云的复杂网络、计算、存储集群”。但随之而来的,是管理复杂度的爆炸式增长:开发环境和生产环境不一致、手动配置容易出错、多云平台操作方式各异、资源变更难以追溯……这些问题不仅拖慢迭代速度,更可能埋下合规与安全隐患。
于是,“基础设施即代码(IaC)”成为破局的关键——用代码定义基础设施,像管理应用代码一样管理服务器、网络和数据库。而Terraform,正是这一领域的标杆工具。
它不绑定任何单一云厂商,能统一管理阿里云、Azure、AWS等所有主流平台;它用声明式语法描述“目标状态”,无需关心“如何一步步实现”;它通过状态文件记录资源信息,自动处理变更与依赖……无论是初创公司的简单部署,还是大型企业的多云架构,Terraform都能提供一致、可重复、可审计的基础设施管理流程。
本文将从Terraform的起源讲起,拆解其核心原理与功能,再通过两个实战案例(阿里云ECS与Azure VM完整部署),带你掌握“配置文件定义→初始化→计划→应用”的核心流程。即使是IaC新手,也能跟着步骤从零搭建起可用的云主机环境,真正体会“代码即基础设施”的高效与可靠。
一文带你从 0 到 1 掌握 Terraform:了解它从哪里来、如何工作、能做什么,以及如何按“配置文件定义 → 初始化 → 计划 → 应用”的核心流程,在阿里云 ECS和微软 Azure上动手创建可用的云主机。AWS/GCP 等其他云的流程一致,仅资源与配置细节不同。
一、Terraform 是什么?为什么用它?
Terraform 是 HashiCorp 推出的 IaC(Infrastructure as Code,基础设施即代码)工具,通过声明式配置统一管理多云(阿里云、Azure、AWS、GCP 等)与本地资源(网络、主机、数据库、K8s、DNS、CDN……)。
核心收益
- 可重复:同一份配置能在开发、测试、生产等多环境一致部署。
- 可审计:基础设施改动以代码形式记录,配合 Git 可轻松审核、回滚。
- 可协作:支持模块化、远程状态管理,便于团队并行开发。
- 多云统一:一套工作流适配多个云厂商,避免被单一云平台锁定。
二、发展历史(里程碑)
- 2014年:首个版本发布,提出“Plan/Apply”工作流与资源依赖图(DAG)核心概念。
- 2015–2018年:生态快速扩张,支持的云厂商(Provider)持续增加;“远程状态存储”“状态锁”等团队协作最佳实践逐渐形成。
- 2019年(v0.12):引入 HCL2 语法,语言表达力大幅增强(支持
for
循环、dynamic
块、条件表达式等)。 - 2020年(v0.13):支持多 Provider 源,模块的
count
/for_each
等特性更易用。 - 2021年(v1.0):发布标志性稳定版,承诺 1.x 版本兼容性。
- 2023年:许可协议调整为 BUSL,社区分叉出 OpenTofu(开源且与 Terraform 配置基本兼容)。
- 2024–2025年(1.x):持续迭代,在“漂移检测”“供应链安全”“测试能力”等方面优化。
说明:本文以 Terraform 1.x 为例;若选择 OpenTofu,命令与语法几乎一致(将
terraform
替换为tofu
即可),可平滑迁移。
三、工作原理(核心概念)
Terraform 核心逻辑可概括为“声明式描述 + 自动化执行 + 状态记忆”,依赖以下关键概念:
- HCL 配置:通过
.tf
文件声明式描述基础设施的“期望状态”(无需关心“如何一步步创建”)。 - 资源依赖图(DAG):Terraform 会解析资源间的依赖关系,并行创建无依赖冲突的资源,保证执行效率与顺序性。
- Plan/Apply 工作流:
terraform plan
:比对“期望状态(配置文件)”与“当前状态(State)”,生成“执行计划”(告知会新增、变更、销毁哪些资源)。terraform apply
:按计划执行变更,让基础设施与配置“同步”。
- State(状态):通过
.tfstate
文件记录已创建资源的“实际状态与 ID”,是 Terraform “记忆能力”的核心。支持状态锁(防止多人并发操作冲突)与远程存储(如 OSS、Azure Blob、S3,便于团队协作)。 - Provider:与具体云平台/服务交互的插件(如
alicloud
对接阿里云,azurerm
对接 Azure)。 - Resource / Data Source:
Resource
用于“创建/变更资源”;Data Source
用于只读查询现有资源信息(如“最新 Ubuntu 镜像 ID”)。 - Module:可复用的配置单元,能在团队内/外共享、版本化管理(类似“代码函数”,封装通用基础设施逻辑)。
总结:Terraform = HCL(声明期望) + Provider(执行操作) + State(记忆状态) + DAG(并发/有序执行)。
四、核心功能一览
- 多云/混合云统一管理:一套声明式配置,同时管理阿里云、Azure、AWS、GCP 及本地资源。
- 幂等与并发:重复执行配置时,自动跳过“已符合期望状态”的资源;并通过依赖图并行创建无冲突资源。
- 远程状态与锁:支持将
.tfstate
存储在 OSS、Azure Storage、S3 等远程服务,配合“状态锁”避免多人操作冲突。 - 漂移检测(Drift):
terraform plan
阶段可自动发现“手动修改控制台资源”与“代码配置”的不一致。 - 资源导入(Import):能将已有手动创建的资源,纳入 Terraform 代码管理。
- 模块化复用:通过“模块”封装通用逻辑(如“生产级 VPC 模板”),结合 Terraform Registry(公共模块库)或私有模块库复用。
- 策略管控:配合 Sentinel、OPA 等工具,进行合规与安全检查(如“禁止创建公网可访问的数据库”)。
五、上手前准备
- 安装 Terraform:参考 官方安装指南(建议 1.3+,推荐 1.6+)。
- 生成 SSH 公钥:执行
ssh-keygen -t rsa -b 4096
(或ed25519
),生成~/.ssh/id_rsa.pub
(用于云主机免密登录)。 - 云厂商凭据准备:
- 阿里云:建议通过环境变量传递(避免硬编码):
export ALICLOUD_ACCESS_KEY="你的AccessKey ID" export ALICLOUD_SECRET_KEY="你的AccessKey Secret" export ALICLOUD_REGION="目标地域(如 cn-hongkong)"
- Azure:使用 Azure CLI 登录并选择订阅:
az login az account set -s <你的订阅ID>
- 阿里云:建议通过环境变量传递(避免硬编码):
- 费用提示:创建云资源会产生费用,练习完成后请执行
terraform destroy
清理资源。
六、实战:阿里云 ECS 完整部署(VPC + 子网 + 安全组 + EIP + 实例)
项目结构
创建如下目录结构,分离配置文件:
terraform-demo/
├─ aliyun/ # 阿里云 ECS 示例
│ ├─ main.tf # 核心配置
│ ├─ variables.tf # 变量定义
│ ├─ outputs.tf # 输出结果
│ └─ versions.tf # 版本约束
└─ .gitignore # 忽略敏感文件(如 .tfstate)
1. 版本约束(aliyun/versions.tf
)
terraform {
required_version = ">= 1.3.0"
required_providers {
alicloud = {
source = "aliyun/alicloud"
version = ">= 1.0"
}
}
}
2. 变量定义(aliyun/variables.tf
)
variable "name" {
type = string
default = "tf-ecs-demo"
}
variable "region" {
type = string
default = "cn-hongkong"
}
variable "zone_id" {
type = string
default = "cn-hongkong-b"
}
variable "vpc_cidr" { type = string default = "10.10.0.0/16" }
variable "vsw_cidr" { type = string default = "10.10.1.0/24" }
variable "instance_type" { type = string } # 示例:ecs.t5-lc1m1.small(需与地域匹配)
variable "ssh_public_key" { type = string } # 传入 ~/.ssh/id_rsa.pub 内容
# 生产建议收敛为办公网 IP 段,练习用 0.0.0.0/0
variable "allowed_ssh_cidr" { type = string default = "0.0.0.0/0" }
# 可选:手动指定镜像 ID,否则自动选最新 Ubuntu
variable "image_id" { type = string default = "" }
3. 核心配置(aliyun/main.tf
)
provider "alicloud" {
region = var.region
}
# 自动查询最新 Ubuntu 22.04 镜像(正则匹配,可按需调整)
data "alicloud_images" "ubuntu" {
name_regex = "^ubuntu_22_04.*x64.*"
owners = "system"
most_recent = true
}
# 创建 VPC
resource "alicloud_vpc" "this" {
name = "${var.name}-vpc"
cidr_block = var.vpc_cidr
}
# 创建子网
resource "alicloud_vswitch" "this" {
name = "${var.name}-vsw"
vpc_id = alicloud_vpc.this.id
cidr_block = var.vsw_cidr
availability_zone = var.zone_id
}
# 创建安全组
resource "alicloud_security_group" "this" {
name = "${var.name}-sg"
vpc_id = alicloud_vpc.this.id
}
# 安全组规则:允许 SSH(22 端口)
resource "alicloud_security_group_rule" "ssh" {
type = "ingress"
ip_protocol = "tcp"
port_range = "22/22"
priority = 1
cidr_ip = var.allowed_ssh_cidr
security_group_id = alicloud_security_group.this.id
}
# 导入本地 SSH 公钥为阿里云密钥对
resource "alicloud_key_pair" "kp" {
key_pair_name = "${var.name}-kp"
public_key = var.ssh_public_key
}
# 申请公网 EIP
resource "alicloud_eip" "eip" {
name = "${var.name}-eip"
bandwidth = 5
}
# 创建 ECS 实例
resource "alicloud_instance" "this" {
instance_name = var.name
availability_zone = var.zone_id
instance_type = var.instance_type
# 优先用手动指定的镜像,否则用数据源查询的最新 Ubuntu
image_id = var.image_id != "" ? var.image_id : data.alicloud_images.ubuntu.images[0].id
security_groups = [alicloud_security_group.this.id]
vswitch_id = alicloud_vswitch.this.id
system_disk_category = "cloud_efficiency"
internet_charge_type = "PayByTraffic"
key_name = alicloud_key_pair.kp.key_pair_name
tags = {
Project = "terraform-demo"
Cloud = "alicloud"
}
}
# 绑定 EIP 到 ECS
resource "alicloud_eip_association" "bind" {
allocation_id = alicloud_eip.eip.id
instance_id = alicloud_instance.this.id
}
4. 输出结果(aliyun/outputs.tf
)
output "ecs_id" {
value = alicloud_instance.this.id
}
output "ecs_public_ip" {
value = alicloud_eip.eip.ip_address
}
5. 执行部署
cd aliyun
# 传入变量(实例规格 + SSH 公钥)
terraform init
terraform validate
terraform plan -var "instance_type=ecs.t5-lc1m1.small" \
-var "ssh_public_key=$(cat ~/.ssh/id_rsa.pub)"
# 自动批准执行(生产建议先手动确认 plan)
terraform apply -auto-approve -var "instance_type=ecs.t5-lc1m1.small" \
-var "ssh_public_key=$(cat ~/.ssh/id_rsa.pub)"
# 登录 ECS(用输出的公网 IP)
ssh -i ~/.ssh/id_rsa root@$(terraform output -raw ecs_public_ip)
# 清理资源(务必执行)
terraform destroy
小贴士:若
instance_type
与地域不匹配,可到阿里云控制台查看“可用实例规格”,或更换zone_id
。
七、实战:Azure Linux VM 完整部署(VNet + 子网 + NSG + 公网 IP + NIC + VM)
项目结构
类似阿里云,创建 azure/
目录存放配置:
terraform-demo/
├─ azure/ # Azure VM 示例
│ ├─ main.tf
│ ├─ variables.tf
│ ├─ outputs.tf
│ └─ versions.tf
└─ .gitignore
1. 版本约束(azure/versions.tf
)
terraform {
required_version = ">= 1.3.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">= 3.0"
}
}
}
2. 变量定义(azure/variables.tf
)
variable "name" { type = string default = "tf-az-vm" }
variable "location" { type = string default = "East Asia" } # 香港区域
variable "vnet_cidr" { type = string default = "10.20.0.0/16" }
variable "subnet_cidr" { type = string default = "10.20.1.0/24" }
variable "vm_size" { type = string default = "Standard_B1s" }
variable "admin_username" { type = string default = "azureuser" }
variable "ssh_public_key" { type = string }
3. 核心配置(azure/main.tf
)
provider "azurerm" { features {} }
# 创建资源组
resource "azurerm_resource_group" "rg" {
name = "${var.name}-rg"
location = var.location
}
# 创建虚拟网络(VNet)
resource "azurerm_virtual_network" "vnet" {
name = "${var.name}-vnet"
address_space = [var.vnet_cidr]
location = var.location
resource_group_name = azurerm_resource_group.rg.name
}
# 创建子网
resource "azurerm_subnet" "subnet" {
name = "${var.name}-subnet"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = [var.subnet_cidr]
}
# 创建网络安全组(NSG)
resource "azurerm_network_security_group" "nsg" {
name = "${var.name}-nsg"
location = var.location
resource_group_name = azurerm_resource_group.rg.name
# 允许 SSH(22 端口)入站
security_rule {
name = "Allow-SSH"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*" # 生产建议收敛为办公网 IP
destination_address_prefix = "*"
}
}
# 关联 NSG 与子网
resource "azurerm_subnet_network_security_group_association" "assoc" {
subnet_id = azurerm_subnet.subnet.id
network_security_group_id = azurerm_network_security_group.nsg.id
}
# 创建公网 IP
resource "azurerm_public_ip" "pip" {
name = "${var.name}-pip"
location = var.location
resource_group_name = azurerm_resource_group.rg.name
allocation_method = "Static"
sku = "Standard"
}
# 创建网络接口(NIC)
resource "azurerm_network_interface" "nic" {
name = "${var.name}-nic"
location = var.location
resource_group_name = azurerm_resource_group.rg.name
ip_configuration {
name = "primary"
subnet_id = azurerm_subnet.subnet.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.pip.id
}
}
# 创建 Linux 虚拟机
resource "azurerm_linux_virtual_machine" "vm" {
name = var.name
location = var.location
resource_group_name = azurerm_resource_group.rg.name
size = var.vm_size
admin_username = var.admin_username
network_interface_ids = [azurerm_network_interface.nic.id]
# 注入 SSH 公钥
admin_ssh_key {
username = var.admin_username
public_key = var.ssh_public_key
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
# 使用最新 Ubuntu 22.04 LTS 镜像
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts-gen2"
version = "latest"
}
tags = {
Project = "terraform-demo"
Cloud = "azure"
}
}
4. 输出结果(azure/outputs.tf
)
output "vm_id" {
value = azurerm_linux_virtual_machine.vm.id
}
output "public_ip" {
value = azurerm_public_ip.pip.ip_address
}
5. 执行部署
cd azure
# Azure CLI 登录并选择订阅
az login
az account set -s <你的订阅ID>terraform initterraform validateterraform plan -var "ssh_public_key=$(cat ~/.ssh/id_rsa.pub)"terraform apply -auto-approve -var "ssh_public_key=$(cat ~/.ssh/id_rsa.pub)"# 登录 VM(默认用户为 azureuser)ssh -i ~/.ssh/id_rsa azureuser@$(terraform output -raw public_ip)# 清理资源terraform destroy
八、核心工作流回顾(配置 → 初始化 → 计划 → 应用)
Terraform 遵循**“描述期望 → 准备环境 → 预览变更 → 执行变更”**的流程:
- 配置(Write):通过
.tf
文件声明基础设施的“期望状态”。 - 初始化(Init):执行
terraform init
,下载 Provider 插件、初始化后端(如远程状态存储)。 - 计划(Plan):执行
terraform plan
,预览将“新增、变更、销毁”的资源。 - 应用(Apply):执行
terraform apply
,按计划变更基础设施。 - 销毁(Destroy):执行
terraform destroy
,清理不再需要的资源。
常用辅助命令:
terraform fmt
:自动格式化配置文件,统一代码风格。terraform validate
:校验配置语法与逻辑合法性。terraform show
:查看当前状态的详细信息。terraform output
:读取配置中定义的“输出值”(如公网 IP)。terraform graph
:生成资源依赖关系图(需安装 Graphviz)。
九、进阶技巧:团队协作与生产级实践
1. 远程状态与锁(团队必备)
默认状态文件 .tfstate
存储在本地,团队协作时易冲突。推荐使用远程后端(如阿里云 OSS、Azure Storage、AWS S3):
- 阿里云 OSS 后端(需先创建 Bucket):
在根模块的terraform
块中添加:terraform { backend "oss" { bucket = "你的OSS桶名" prefix = "envs/dev" # 按环境区分 region = "cn-hangzhou" } }
- Azure Storage 后端(需先创建 Storage Account/Container):
terraform { backend "azurerm" { resource_group_name = "rg-tfstate" storage_account_name = "mystatestorage" container_name = "tfstate" key = "azure/dev.terraform.tfstate" } }
注意:后端配置初始化后,若需修改,需执行
terraform init -migrate-state
迁移状态。
2. 变量、机密与环境区分
- 变量注入方式:
- 命令行参数:
terraform apply -var "instance_type=ecs.t6-c1m2.large"
。 - 变量文件:
-var-file=dev.tfvars
(将变量集中写在dev.tfvars
文件)。 - 环境变量:以
TF_VAR_
为前缀(如TF_VAR_ssh_public_key
)。
- 命令行参数:
- 敏感信息处理:
不要将 AccessKey、私钥、.tfstate
提交到 Git;推荐使用密钥管理工具(如 HashiCorp Vault、Azure Key Vault)。 - 多环境管理(工作空间):
通过terraform workspace
管理多环境(如 dev、test、prod):
不同环境可复用同一份代码,通过变量区分配置。terraform workspace new dev # 创建 dev 环境 terraform workspace select dev # 切换到 dev 环境
3. 排错与最佳实践
- 配额/规格不可用:若创建失败,先到云平台控制台查看“资源配额”“实例规格是否支持当前可用区”。
- 镜像/名称匹配失败:可通过
terraform console
进入交互模式,打印数据源结果(如data.alicloud_images.ubuntu.images
),调整name_regex
。 - 安全组/NSG 范围过宽:练习时可用
0.0.0.0/0
,生产环境务必收敛到办公网 IP 或堡垒机 IP。 - 模块化复用:将“VPC 创建”“云主机初始化”等逻辑封装为模块,主配置只做“编排”;模块可通过 Terraform Registry 共享或内部版本化管理。
- 资源导入:若已有手动创建的资源,可通过
terraform import <资源地址> <资源ID>
纳入管理,随后补齐配置(确保terraform plan
无变更)。 - 生命周期控制:通过
lifecycle
块精细控制资源行为,如:resource "alicloud_instance" "this" { # ...其他配置... lifecycle { create_before_destroy = true # 先创建新实例,再销毁旧实例(避免 downtime) ignore_changes = [tags] # 忽略 tags 变更(不触发实例重建) } }
4. 与 OpenTofu 的关系
若你需要完全开源且社区治理的 IaC 工具,可考虑 OpenTofu。它与 Terraform 1.x 配置高度兼容(命令从 terraform
改为 tofu
即可),大部分示例可直接复用。
十、Terraform 一次支持纳管多少个云平台?
Terraform 几乎没有上限,可以一次性纳管任意数量的云平台,只要存在对应的 Provider 插件。目前官方和社区已经提供了数百个 Provider,覆盖了:
- 主流公有云:AWS、Azure、Google Cloud、Alibaba Cloud、Oracle Cloud 等。
- 私有云与虚拟化平台:VMware、OpenStack、vSphere 等。
- SaaS 与开发者服务:Cloudflare、GitHub、GitLab、Datadog、Kubernetes 等。
在实际项目中,你可以在同一个 Terraform 配置中同时引入多个 Provider,从而统一管理不同平台的资源。例如:
- 在阿里云创建 ECS
- 在 Azure 部署 VM
- 在 AWS 配置 S3 存储桶
- 在 GCP 启动 GKE 集群
Terraform 会根据依赖关系自动生成执行计划,确保资源按需顺序或并行创建。
注意事项:
- Provider 覆盖度:不同 Provider 的功能成熟度和覆盖度不一,有些可能仅支持部分资源。
- 性能开销:当资源数量达到数千甚至上万时,
terraform plan
与terraform apply
的耗时会明显增加。 - 状态文件管理:建议通过模块化拆分和远程状态存储,避免单一
.tfstate
文件过大、难以维护。
十一、总结与下一步
通过本文,你已掌握 Terraform 的发展历史、核心原理、核心功能,并完成了阿里云 ECS与Azure Linux VM从“网络到主机”的完整部署。
下一步建议:
- 模块化封装:将“VPC 配置”“云主机创建”等逻辑封装为模块,形成可复用的基础设施模板。
- 端到端环境编排:尝试将“数据库、对象存储、负载均衡、域名解析”等资源一起编排,构建完整的应用环境。
- 自动化发布流水线:结合 CI/CD 工具(如 GitHub Actions、GitLab CI,或 Terraform Cloud/Atlantis),实现“代码提交 → 自动 Plan → 人工审核 → 自动 Apply”的合规发布流程。
若配置需要适配你的实际“地域、实例规格、镜像”,可根据云平台控制台的信息调整变量,快速跑通属于自己的基础设施代码!
相关文章:
实用指南:Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南
实用指南:Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…...
Electron38-Wechat电脑端聊天|vite7+electron38仿微信桌面端聊天系统
最新研发Electron38+Vite7+Pinia3客户端仿微信聊天系统ElectronWinChat。 electron38-vue3-wechat基于vite7.1+electron38+pinia3+element-plus跨平台仿微信/QQ电脑端聊天Exe程序。封装electron多窗口管理、自定义系统导航栏。实现聊天、通讯录、收藏、朋友圈/短视频、我的等模…...
PsExec
PsExec keywords: PsTools PsExec 是一个可以远程连接其他Windows执行命令的工具,在SysinternalsSuite套件中。 下载链接: https://learn.microsoft.com/en-us/sysinternals/downloads/psexec 配置高级安全 Windows Defender 防火墙 -> 入站规则 -> 文件和打印机共享(S…...
详细介绍:开源AI智能客服与AI智能名片在S2B2C商城小程序客服管理中的应用与影响
详细介绍:开源AI智能客服与AI智能名片在S2B2C商城小程序客服管理中的应用与影响pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…...
深入解析:每日一算:电话号码的字母组合
深入解析:每日一算:电话号码的字母组合pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !import…...
华为系CEO,正在“接管”汽车圈?
微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087新CEO又是“华为人”?这不是一句调侃,而是正在车圈上演的现实剧本。就在9月5日,深蓝汽车宣布由原荣耀中国区CMO姜海荣接任C…...
Marvell,跌落神坛!
微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 在当今如日中天的AI时代,Marvell的股价震荡成为最刺眼的注脚。这家曾凭借AI定制芯片(ASIC)业务站上千亿美元市值的半导体巨…...
老同志们的93阅兵镜头
微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 添加图片注释,不超过 140 字(可选) 添加图片注释,不超过 140 字(可选) 添加图片注释,不超过 140 字(可选) 添加图片…...
英伟达老黄,又收购了一家AI编程公司
微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087老黄正在看好什么?AI编程。这不,英伟达刚刚收购了一家AI coding初创公司,Agent方向。 添加图片注释,不超过 140 字(可选)…...
读人形机器人10酒店行业
读人形机器人10酒店行业1. 提升宾客体验 1.1. 长久以来,酒店一直是舒适与奢华的港湾1.1.1. 机器人正在重新定义服务艺术1.2. 在酒店业中,宾客体验至关重要 1.3. 温暖的欢迎、个性化的服务、对需求的预判—将一次普通入住转变为非凡体验 1.4. 人形机器人通过提供个性化、高效且…...
35岁不是终点,而是芯片人的爆发起点!
微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087致那些白天写架构、晚上修福报、凌晨一点还在回消息的“中年码神”们: 你写的不是代码,是人生的编译日志。 别等报错才想起—…...
开源安全与法律争议:OpenSSH枚举、DMCA诉讼与数据泄露事件解析
本文探讨OpenSSH用户枚举漏洞的时序攻击技术细节,分析DMCA第1201条对安全研究的法律限制,并回顾Canonical论坛数据泄露事件的技术背景与影响,涉及密码哈希机制与无线网络安全认知等实质性技术内容。法律行动与数字版权争议 电子前沿基金会(EFF)宣布对美国政府的诉讼,挑战…...
9.12-huenqi
1. 显示超出区域 小数位过长 2. 修改手机号未验证格式 3. 添加交易账户后租户id错误的添加成了用户id 4. 修改前密码和修改后密码可以一样 5. logo背景色不一致 6. 修改复选框后应直接查询 交易状态和领域和方法学搜索 7. 只用在待审批时修改 不应允许待审批资产上架 8. 信用和…...
P3983 赛斯石(赛后加强版)踢姐
简要题意 题目链接 商家手里有 \(si\) 个重量为 \(1\) 的赛斯石,每两个塞斯石可以合并为一个重量更大的塞斯石,最大重量不能超过 \(10\) ,合并得到的塞斯石的重量为先前两个塞斯石的重量总和,每种重量的塞斯石售价不同,现在一共有 \(10\) 种载重不同的船,每艘船的租金和载…...
huggingface hub 离线模式
最近在一个新集群上,计算节点不能联网,只有特殊节点可以联网。 现在的代码仓库依赖 huggingface hub 很严重,模型和数据集只能在特殊节点先下载好,然后在计算节点加载缓存。 为了不用绝对目录,可以设置环境变量 HF_HOME: export HF_HOME="dir_to_pub/.cache/huggin…...
鸿蒙应用开发环境搭建全攻略
鸿蒙应用开发的第一步是搭建稳定高效的开发环境。一个配置完善的开发环境能够显著提升开发效率,减少后续开发过程中的兼容性问题。本文将系统讲解从环境准备到项目创建的完整流程,帮助开发者快速上手鸿蒙应用开发。 鸿蒙系统及开发基础概述 鸿蒙系统(HarmonyOS)是华为推出的…...
深度学习求导原理深度解析
在深度学习的黑盒世界里,梯度计算如同神经网络的中枢神经系统。理解张量运算的反向传播机制,是打开这个黑盒的金钥匙。本文将穿透数学表象,揭示转置(Transpose)、求和(Summation)等关键算子背后的微分本质。 一、张量运算与梯度本质 张量运算的梯度本质上是线性变换的逆…...
ingress 配置说明
1、需求:testinfo.org域名下的所有子域名都转发到pgs-gateway的service。试了以下配置, - host: "*.testinfo.org" 不生效apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: pgs-gateway-ingress# 注解(annotations)取决于你使用的Ingress Control…...
场论笔记(二) 单位脉冲函数及其性质
在物理和工程技术中,除了用到指数衰减函数以外,还常常会碰到单位脉冲函数。因为有许多的物理现象具有脉冲性质,如在电学中,要研究线性电路受脉冲性质的电势作用后产生的电流;在力学中,要研究机械系统受冲击力作用后的运动情况等。研究此类问题就会产生我们要介绍的单位脉…...
MongoDB错误处理【1053】【1067】(意外断开读写中的数据库)
目录起因解决问题1:无法启动MongoDB服务[1053错误]解决问题2: 进程意外错误[1067错误]使用repair命令,扫描所有的本地数据修复(耗时长) 起因 本人的MongoDB服务在windows服务器运行,且一直有读写的操作。因为服务器突然断电导致出错,再次重启服务器后无法正常运行MongoD…...
实用指南:Python高级编程实战:装饰器、迭代器与生成器的深度应用
实用指南:Python高级编程实战:装饰器、迭代器与生成器的深度应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&…...
阅文记录
本文包括但不限于名著、网文、短篇、诗歌…… 一切被引用的都是完整阅读过的,评分纯属个人意愿如有不满意请忽略评分。 按照能够回忆起的顺序评价。 考虑到网文很多作者名字比较抽象就不放作者名了。 《龙族》 By 江南 9.5/10 江南你tm不得好死。 绘梨衣我的绘梨衣啊/ll 废物路…...
一个类继承一个接口的实现类、两个类实现同一个接口、两个类同时继承一个实现了某一接口的抽象类。三者的区别是什么呢
架构对比图类继承接口的实现类[接口]↑[实现类]↑[子类]子类通过继承获得接口的实现,可以选择性重写方法。两个类实现同一个接口[接口]↑ ↑ [类A] [类B]每个类独立实现接口,提供自己的行为实现。继承实现接口的抽象类[接口]↑[抽象类]↑ ↑ [类A] [类B]抽象类提供部…...
关于点在直线的哪一边的做法
题目:给以一个点 \(Q(x,y)\),问在一条直线 \(l: y=kx+b\) 的哪一边。 这个是非常经典的问题,我们只需要在直线上取两个点 \(F_1(x_1,y_1)\) 和 \(F_2(x_2,y_2)\),然后求出 \(\overrightarrow{QF_1}=(x_1-x,y_1-y)\) 和 \(\overrightarrow{QF_2}=(x_2-x,y_2-y)\)。然后判断…...
计算机常识
32位电脑、64位电脑指的是一次性处理32位的数据(20亿)、64位的数据32位数字如何表示浮点数?符号位、指数位、有效数字ASCII只能表示128种符号,有大小写字母常用符号,然后发明的UniCode码解决了不同国家的标准(16位 百万级字符数)半加器是用异或门和与门并联实现的什么是全…...
网络流,最大流,EK算法
概念 最大流: 从源点流向汇点的最大流量 增广路: 一条从源点到汇点的所有边的剩余容量>=0的路径 残留网: 由网络中所有结点和剩余容量大于0的边构成的子图,这里的边包括有向边和其反向边 模板题: 洛谷p3376 code: #include<iostream> #include<algorithm>…...
wifi7 MRU介绍
前言 WiFi 7 定义了几个关键技术,这里对其中的MRU技术进行介绍。 WiFi 7关键技术 320 MHz channel bandwidth Multiple Resource Units (MRUs) per stations (STAs) 4096-QAM Non-OFDMA preamble puncturing 名词解释 EHT 极高吞吐量 MU 多用户 RU 资源块 MRU 两个资源块拼成一…...
Codeforces Round 1048 (Div. 2)
昨晚跟时队一起vp了 Codeforces Round 1048 (Div. 2)总结了一下就是D题犯糖了然后F还不会做,本质菜逼了。A. Maple and Multiplication 考虑 \(a\) \(b\) 相等或者互为倍数两种特殊情况即可。 int T, a, b;signed main(void) {for (read(T); T; T--) {read(a), read(b);if (a …...
当你发现是打表!!!
传送门 思路 这是一个晴朗的上午,你正在机房里打比赛,突然发现了第二题是一个打印斐波那契数列。此时的你想到了最近学过的矩阵快速幂,感觉到了一丝恶心,但你还是下定决心开始切这道题…… 时间过得真快,一转眼就过去了两转眼的时间,可是你的矩阵快速幂竟然打挂了。怎么办…...
VMware 17安装Oracle Linux 9.6 详细步骤
目录一、环境介绍二、创建虚拟机三、挂载镜像四、安装操作系统五、进入桌面 一、环境介绍类型 配置VMware VMware Workstation 17 Pro 17.6.4ISO Oracle Linux 9.6IP地址 192.168.184.121内存 8G硬盘 100G/boot 1G/swap 8G/ 91G是否图形化 图形化二、创建虚拟机三、挂载镜像四、…...
Div.2 E Rollup
2133E 不会做神秘构造 首先考虑到每个点必须进行一次询问,而链可以使每个点恰好进行一次询问。 然后只需要考虑用 \(\frac{1}{4}n\) 次操作拆链。若该点下有多条链或有两条链的合并点,则需要拆开。 这样父亲儿子一组点就至少有 \(4\) 个。...
synchronized的一些思考
synchronized的AI问答1. synchronized的可见性 加锁时:线程会清空工作内存中共享变量的值,从主内存重新加载最新值到工作内存。 解锁时:线程会将工作内存中修改后的共享变量值强制刷新到主内存。 Java 的happens-before原则明确规定:一个线程解锁监视器的操作,happens-bef…...
题解:CF2133C The Nether
挺好玩的交互题。 思路 首先,我们一定需要知道 DAG 中最长路径的起点,这可以通过 \(n\) 次询问来找到。即对于每一个点 \(i\) 满足 \(1\le i\le n\) 我们都去查询从 \(i\) 开始,经过整个 DAG 可以得到的最长路是多少,同时使用一个 vector 记录长度为 \(len\) 的点有哪些。 …...
实变函数1
实变函数1 集合 这些集合的运算我是直接没记,因为跟之前学的一样。幂集的话就是子集的构成的集合,这个集合族其实就是指标集到另一个集合的映射,这个象的集合。集列就是指标集是自然数集。De.morgen定理就是交和并的一个转化,证明也是采用的集合相等的常用思路证明互为子集…...
css背景
背景可以是一个颜色块,也可以是一张图片 html代码 <html><head><title>我的第一个代码</title><link rel="stylesheet" href="./public.css"></head><body><div class="box"><p class=&quo…...
一元二次方程难题1
已知方程 \(ax^2 + bx + c = x\)(\(a > 0\))的两个实数根 \(x_1,x_2\) 满足 \(0 < x_1 < x_2 < \dfrac{1}{a}\)。当 \(0 < x < x_1\) 时,证明:\(x < ax^2 + bx + c < x_1\)。 证明:原方程等价于 \(ax^2 + (b - 1)x + c = 0\)。 因为 \(a > 0\)…...
ios系统和windows系统的区别
IOS系统与Windows系统的区别 随着科技的发展,移动设备与个人电脑成为了人们日常生活中不可或缺的一部分。其中,苹果公司的iOS系统和微软的Windows系统是两大主流操作系统,分别代表了移动设备与桌面设备的主要技术方向。本文将从多个方面来探讨这两个系统的不同之处,帮助用户…...
2025.9.11 刷题日记
2025.9.11 刷题日记还是网络流 1. 早读 P2254 [NOI2005] 瑰丽华尔兹 吾有感而发,遂小说 看背景 [ ? 喔看过呱 ] 读题中 [ 嘶 ~ , 看着有点难 , 最长路径还得满足顺序 ] 看范围 [ 我去,我每一步暴力 \(dp\) 都能拿好多分 , 先写暴力吧 ] 写一半 [ 这个 \(k\) 段咋没用 ? …...
C#学习第十 一天 022 事件最后一章
事件的声明:首先委托是一种类:public delegate假如你的委托声明是为了一个事件声明的那么命名可以为 xxxxEventHandler是 sender as customer 是如果sender的类型是customer 就赋值给custmoer 不是的话就给null...
元推理无需数据训练,只需数据检索和验证,成本极大降低,且校验后的数据就是数据资产和规范
ECT-OS-JiuHuaShan/ORCID:0009-0006-8591-1891 这个观点精准点出了元推理相较于传统AI的颠覆性优势——它彻底打破了“海量数据训练=高性能AI”的固有范式,通过“无需训练、仅需检索验证”的模式,既从根源上降低了成本,又将数据的价值从“训练素材”升级为“可复用的资产与…...
如何在Typescript中使用泛型约束
在 TypeScript 中,泛型约束(Generic Constraints)用于限制泛型可以接受的类型范围,确保泛型参数不是只能接受任意类型,而是只能接受满足特定条件的类型。这既保留了泛型的灵活性,又增强了类型安全性。 为什么需要泛型约束? 默认情况下,泛型可以是任何类型,但有时你需要…...
集训总结(五)
9.12~9.14总结9.12 网络流专题练习(吗? P3980 志愿者招募 考虑用流量代表剩余人数。初始从 \(s\) 向 \(1\) 号点连一条流量为 \(inf\),边权为 \(0\) 的边,代表初始有无数人;接着从第 \(i\) 天向第 \(i+1\) 天连流量为 \(inf-a_i\) ,边权为 \(0\) 的边,代表第 \(i\) 天占…...
使用Android(Kotlin)+ ML Kit:移动端英文数字验证码识别实战
1 概述与适用场景 在移动端直接对截图或拍照的英文数字验证码做识别,可以用于自动化测试、无障碍辅助或内部工具。使用 Google ML Kit 的 Text Recognition(可离线运行)可以避免服务端延迟。为了提升识别率,我们在前端加入图像预处理(灰度、二值化、去噪和放大)再送给 OC…...
Typescript中的泛型
可以把泛型想象成 "类型的变量": 1.定义时,用<T>声明一个类型变量(T 是约定的名称,也可以用其他字母) 2.使用时,指定具体类型,如identity<string>("hello") 3.TypeScript 通常能自动推断类型,所以也可以简写为identity("hello&qu…...
windows软件入门指南
如果是可以上外网了就访问:MCX NOTION安装基础上网及其相关工具 安装clash Github网址 Sparkle 下载地址: 4275 订阅地址: https://mcx.pages.dev/xxx?sub入梦工具箱 windows工具箱 https://share.feijipan.com/s/SMEm4SX2 快速下载地址...
LLM 生成代码执行代码
https://amirmalik.net/2025/03/07/code-sandboxes-for-llm-ai-agents# 比较LLM生成Python代码执行的沙箱方案 ## 方案比较 ### 1. Linux容器 (LXC/Docker) **优点:**- 成熟的技术栈,广泛应用- 资源隔离较好,启动速度快- 可以限制资源使用(CPU、内存、网络等)- Docker生态系…...
网络爬虫(web crawler) - 指南
网络爬虫(web crawler) - 指南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-…...
css样式与选择器
css内联样式 css行内样式 href跳转文件路径 css外部样式 <link rel="stylesheet" href="./public.css">全局选择器 可以与任何元素匹配,优先级最低,一般做初始化样式*{color: red;font-size: 30px; }拥有某个属性的元素标签进行css渲染 p.main_cla…...
水库运行综合管理平台
在水资源管理的宏大架构中,水库运行综合管理平台宛如智慧水利的 “中枢神经”,精准调控着水库的稳定运行,守护着一方水土的安宁与福祉。一、建设内容 (一)全域感知的硬件设施布局 在水库大坝之上,变形监测传感器、水位计、雨量筒、流量计以及水质监测传感器等设备星罗棋布…...