AMD SEV内存加密实战:从原理到云安全部署
1. 项目概述为什么我们需要关注TEE与内存加密最近几年云上数据安全问题越来越成为企业技术决策者的一块心病。你把应用和数据放到公有云上虽然省去了自建数据中心的麻烦但心里总有个疙瘩云服务商的管理员、同一物理主机上的其他租户他们有没有可能看到甚至篡改我的内存数据这种对底层基础设施的“不信任”催生了对硬件级安全技术的迫切需求。而可信执行环境TEE技术特别是像AMD SEVSecure Encrypted Virtualization这样的内存加密方案就是为了解决这个核心痛点而生的。简单来说TEE就像一个建立在CPU内部的“安全小黑屋”。你的敏感代码和数据在这个“小黑屋”里运行和处理即使拥有最高权限的系统软件如操作系统内核、Hypervisor或者云平台管理员也无法窥探或篡改其中的内容。AMD SEV则将这个“小黑屋”的概念扩展到了整个虚拟机VM级别它通过硬件对虚拟机的内存进行透明加密密钥由处理器内部的安全组件管理对Guest OS虚拟机内的操作系统和应用程序完全透明。这意味着你在云上租用的一台虚拟机其运行时的内存状态对宿主机Host和其他虚拟机来说就是一堆无法解读的密文。这不仅仅是理论上的安全增强。对于金融、医疗、政务以及涉及核心算法和模型的企业而言将业务迁移上云的最大障碍就是数据隐私和代码保护。传统软件加密方式在运行时总有一刻数据是明文的而SEV提供的硬件级内存加密从数据离开CPU起就处于加密状态实现了“可用不可见”的安全目标。接下来我将结合原理和实战带你一步步理解SEV并完成一个从零开始的云安全部署。2. SEV技术原理深度拆解加密是如何发生的要玩转SEV不能只停留在“它很安全”的概念上必须理解其背后的工作原理。这能帮助你在后续部署和问题排查时清楚地知道每个步骤的目的和可能的影响点。2.1 核心安全模型打破对Hypervisor的绝对信任传统的虚拟化安全模型基于一个前提你必须完全信任底层的虚拟化管理程序Hypervisor如KVM、VMware ESXi。Hypervisor拥有至高无上的权限可以访问和控制所有虚拟机的内存。如果Hypervisor被攻破那么其上所有的虚拟机都将门户大开。SEV引入了一种新的安全模型称为“计算保护”Confidential Computing。在这个模型里对Hypervisor的信任被大幅降低。Hypervisor仍然负责虚拟机的资源调度、设备模拟等管理工作但它无法访问受保护虚拟机的明文内存内容。内存加密的密钥称为VM加密密钥VEK是在AMD安全处理器AMD-SP一个独立于主CPU的安全协处理器内部生成并管理的且每个虚拟机拥有独一无二的密钥。注意SEV保护的是虚拟机内存的机密性Confidentiality和完整性Integrity防止被窃取和篡改。但它不保护虚拟机的可用性AvailabilityHypervisor仍然可以强行关闭或重启虚拟机。2.2 内存加密引擎与密钥管理 hierarchySEV的加密动作是由集成在CPU内存控制器中的专用硬件——内存加密引擎Memory Encryption Engine来完成的。整个过程对软件透明性能损耗相对可控。其密钥体系是一个层次结构芯片密钥CEK出厂时熔断在AMD-SP中的唯一根密钥是信任的根源。平台密钥PEK由AMD-SP使用CEK生成代表该特定物理平台的身份。虚拟机加密密钥VEK为每个需要加密的虚拟机动态生成的密钥。它由AMD-SP生成并使用PEK加密后交给Hypervisor保管。Hypervisor只能存储这个被加密的VEK但无法解密它。当虚拟机启动时Hypervisor将加密的VEK传递给AMD-SP。AMD-SP使用本地的PEK将其解密然后配置给内存加密引擎。从此所有从该虚拟机CPU核心写入到内存的数据都会在离开CPU芯片前被自动加密所有从内存读入CPU的数据也会在进入芯片后被自动解密。加密范围通常涵盖整个客户机物理地址空间。2.3 SEV-ES与SEV-SNP安全性的演进SEV技术本身也在迭代主要经历了三个阶段SEV基础版本仅提供内存机密性加密。SEV-ESEncrypted State在SEV基础上增加了对虚拟机CPU寄存器状态的加密保护。当虚拟机被Hypervisor调度出去发生VM Exit时其CPU寄存器状态会被自动加密后再保存到内存中防止Hypervisor窥探。这保护了虚拟机执行流的上下文。SEV-SNPSecure Nested Paging这是当前最强大的版本。它在SEV-ES的基础上进一步增加了内存完整性和防回滚攻击保护。完整性使用哈希树类似Merkle Tree来确保内存页面不被Hypervisor恶意篡改。防回滚防止Hypervisor将内存页面替换成旧的版本回滚攻击。安全嵌套分页强化了页表保护使Hypervisor无法任意操纵虚拟机的页表来窃取数据。SNP通过“反向映射”表RMP等机制实现了硬件强制的内存访问策略将Hypervisor的权限进一步限制在“管家”而非“主人”的范畴。对于新建的机密计算项目应优先考虑支持SEV-SNP的平台。3. 实战环境准备与前置检查理论清楚了我们开始动手。部署一个SEV虚拟机首先需要确保你的硬件、固件、内核和虚拟化堆栈全部就位。3.1 硬件与固件要求这不是一个纯软件功能硬件支持是门槛。CPU必须使用AMD EPYC系列处理器 Naples [一代] 及以后版本。消费级的Ryzen处理器不支持SEV。具体来说需要EPYC 7001Naples、7002Rome、7003Milan或更新型号。RomeEPYC 7002开始支持SEV-ESMilanEPYC 7003开始支持SEV-SNP。BIOS/UEFI 固件必须在BIOS设置中明确启用SEV功能。不同主板厂商的设置位置不同通常位于Advanced或Security菜单下可能被称为AMD SEV、Memory Encryption、SMESystem Management EncryptionSEV的基础等。务必启用它。确认方法在Linux宿主机上可以通过以下命令检查# 检查CPU是否支持SEV grep -c sev /proc/cpuinfo # 如果输出大于0则表示支持。更详细的检查可以使用amd_sev工具或查看内核信息。 # 检查内核是否识别到SEV设备 ls -l /dev/sev # 如果存在这个字符设备说明内核驱动已加载。3.2 宿主机操作系统与内核配置宿主机通常运行Linux并使用KVM作为Hypervisor。内核版本需要较新的内核以提供完善的SEV支持。建议使用Linux 5.10或更高版本。对于SEV-SNP可能需要5.15。内核编译选项以下关键选项必须启用y或mCONFIG_KVM_AMD_SEVy CONFIG_CRYPTO_DEV_CCPy CONFIG_CRYPTO_DEV_SP_PSPy # 如果使用SEV-SNP CONFIG_KVM_AMD_SEV_SNPy你可以通过检查/boot/config-$(uname -r)文件来确认。QEMU与Libvirt这是创建和管理虚拟机的用户态工具链。QEMU需要 ≥ 5.0.0 版本且编译时启用了SEV支持--enable-sev。Libvirt需要 ≥ 6.0.0 版本它提供了对QEMU SEV参数的管理接口。OVMF固件虚拟机需要使用支持SEV的UEFI固件。标准的是OVMFOpen Virtual Machine Firmware你需要一个包含SEV功能的特殊构建版本通常包名如edk2-ovmf.sev。3.3 安装与验证步骤假设你使用的是Ubuntu 22.04 LTS或类似的新版发行版。更新系统并安装必要组件sudo apt update sudo apt upgrade -y sudo apt install -y qemu-system-x86 libvirt-daemon-system libvirt-clients virt-manager ovmf确保安装的QEMU版本足够新。加载内核模块并检查# 加载SEV相关内核模块 sudo modprobe kvm-amd sudo modprobe sev # 检查/dev/sev设备 if [ -c /dev/sev ]; then echo SEV设备已就绪。 # 获取平台信息确认SEV状态 sudo sevctl --platform_status else echo SEV设备未找到请检查硬件支持和内核配置。 fisevctl是管理SEV平台和证书的工具可能需要单独安装如从apt install sevctl或源码编译。验证QEMU支持qemu-system-x86_64 -machine help | grep sev如果输出中包含q35,accelkvm,memory-encryptionsev或类似字样说明QEMU已支持。4. 创建并启动一个SEV加密虚拟机环境准备好后我们来创建第一个受SEV保护的虚拟机。这里我们使用virt-install命令行工具它比图形界面更清晰可控。4.1 准备虚拟机镜像与OVMF固件首先你需要一个操作系统的安装镜像如Ubuntu Server ISO和一个用于存储的磁盘镜像文件。# 创建一个空的qcow2格式磁盘镜像 qemu-img create -f qcow2 /var/lib/libvirt/images/sev-vm-disk.qcow2 20G接下来找到OVMF的SEV专用固件文件。在Ubuntu上安装edk2-ovmf包后它们通常位于/usr/share/OVMF/。你需要两个文件OVMF_CODE.fd代码镜像和OVMF_VARS.fd变量存储。SEV版本可能带有sev或secboot后缀例如OVMF_CODE.secboot.fd。请根据你的发行版文档确认正确路径。4.2 使用virt-install命令行部署以下是一个创建SEV虚拟机的示例命令。请注意这是一条复杂的命令参数需要根据你的环境调整。sudo virt-install \ --name sev-ubuntu-test \ --memory 4096 \ --vcpus 2 \ --disk path/var/lib/libvirt/images/sev-vm-disk.qcow2,formatqcow2 \ --cdrom /path/to/ubuntu-22.04-live-server-amd64.iso \ --os-variant ubuntu22.04 \ --network networkdefault \ --graphics none \ --console pty,target_typeserial \ --machine q35,memory-encryptionsev \ --boot uefi,loader/usr/share/OVMF/OVMF_CODE.secboot.fd,loader_typepflash,nvram/usr/share/OVMF/OVMF_VARS.secboot.fd \ --launchSecurity sev,policy0x03关键参数解析--machine q35,memory-encryptionsev指定使用Q35芯片组并启用SEV内存加密。--boot uefi,loader...,nvram...指定使用UEFI启动并指向SEV兼容的OVMF固件文件。nvram文件是变量存储的模板libvirt会为其创建一个副本供虚拟机独享。--launchSecurity sev,policy0x03这是核心。它告诉libvirt为此虚拟机启用SEV启动安全。policy0x03这是SEV的策略位掩码。0x03是一个常用值表示0x01(Bit 0)禁用调试。虚拟机启动后不允许通过硬件调试接口访问其内存。生产环境必须启用。0x02(Bit 1)禁用密钥共享。禁止该虚拟机与其它虚拟机共享密钥。生产环境必须启用。 其他策略位还包括是否允许从加密状态迁移等。你可以根据安全需求调整。4.3 启动过程与证书链验证当你执行上述命令后虚拟机会开始启动。在支持SEV的系统上启动过程会涉及一个关键的“认证”环节称为“可验证的启动”Attestation。初始测量虚拟机启动初期AMD-SP会对初始的虚拟机固件OVMF和启动组件进行哈希计算生成一个唯一的“测量值”Measurement。生成证书AMD-SP会使用平台密钥PEK对该测量值进行签名生成一个“启动证书”Launch Digest。验证可选但关键一个外部的“验证服务”Attestation Service可以获取这个签名后的测量值并使用AMD的证书链包括ARK、ASK、PEK证书来验证其真实性。这证明了虚拟机确实是在一个真实的AMD SEV平台上启动的并且初始状态是可信的。注入密钥验证通过后验证服务或经过授权的管理工具会提供一个“密钥”给AMD-SPAMD-SP使用这个密钥来“解封”虚拟机使其继续启动。如果没有正确的密钥注入虚拟机将无法启动。这实现了远程认证和控制。在简单的本地测试环境中我们可能跳过远程验证使用sevctl工具在本地完成“自签名”式的启动。但对于生产部署建立完整的远程认证流程是必须的。4.4 在虚拟机内部验证加密状态虚拟机启动并安装好操作系统后你可以登录进去验证内存加密是否生效。在基于AMD SEV的虚拟机内部可以通过检查CPU标志位来确认# 在Guest虚拟机内部执行 grep sev /proc/cpuinfo # 或者使用更详细的工具 sudo apt install cpuid cpuid -1 | grep -i sev如果看到sev或sev_es、sev_snp标志说明虚拟机感知到了自己运行在SEV环境中。不过更直接的证据来自宿主机。在宿主机上使用virsh命令查看虚拟机域XML确认配置已生效sudo virsh dumpxml sev-ubuntu-test | grep -A5 -B5 sev你应该能看到类似launchSecurity typesev的配置块。5. 生产级云安全部署考量与架构设计在实验室里跑通一个SEV虚拟机只是第一步。要将它用于生产环境尤其是集成到云平台如OpenStack或Kubernetes中需要考虑一整套架构和流程。5.1 密钥管理与生命周期这是生产部署中最复杂的一环。每个SEV虚拟机都有自己唯一的VEK而这个VEK的“包装密钥”被PEK加密后的版本由云平台管理。你需要一个安全、可靠且高可用的密钥管理系统KMS来安全存储存储大量虚拟机的包装密钥。访问控制严格控制哪些组件如计算节点的Libvirt可以获取特定虚拟机的密钥。密钥轮换支持虚拟机迁移或安全事件后的密钥更新这通常需要虚拟机重启。审计日志记录所有密钥的创建、使用和销毁操作。开源方案如HashiCorp Vault、OpenStack Barbican可以用于此目的但它们与SEV的集成需要额外的开发工作。5.2 远程认证Attestation集成如前所述可验证的启动是SEV安全模型的核心。在生产云中你需要部署一个或多个“认证服务”Attestation Service。其工作流程如下计算节点在启动SEV虚拟机时暂停在初始阶段并将AMD-SP签名的启动测量值发送给认证服务。认证服务使用预置的AMD根证书ARK验证签名链确认测量值来自合法的AMD平台。认证服务将收到的测量值与策略数据库中的预期值进行比对。这个预期值可以是已知好的OVMF镜像哈希也可以由用户在上传虚拟机镜像时提供。如果验证通过认证服务生成一个临时的“启动密钥”Launch Key通过安全通道发送给计算节点的AMD-SP。AMD-SP使用该密钥解封虚拟机启动过程继续。这个流程确保了只有经过认证的、未被篡改的镜像才能在受信任的硬件上启动。OpenStack的Cyborg项目、机密计算联盟CCC的API都在尝试标准化这一过程。5.3 与编排系统集成以Kubernetes为例如何在K8s中运行一个机密计算工作负载这需要多个组件协同Runtime支持容器运行时如containerd或CRI-O需要支持在创建虚拟机时传递SEV参数。这通常通过Kata Containers或Cloud Hypervisor这样的虚拟机容器运行时来实现。它们会在后台创建轻量级VM来运行每个Pod并可以配置SEV保护。Device PluginKubernetes需要知道集群中有哪些节点支持SEV以及可用资源如同时可运行的SEV虚拟机数量上限。这可以通过开发一个SEV Device Plugin来实现它向Kubelet报告amd.com/sev这样的扩展资源。Pod Annotation用户需要在Pod的YAML文件中通过注解Annotation来申请SEV资源并指定策略例如apiVersion: v1 kind: Pod metadata: name: confidential-pod annotations: k8s.v1.cni.cncf.io/networks: ... confidentialcomputing.kubernetes.io/launchSecurity: sev confidentialcomputing.kubernetes.io/policy: 0x03 spec: containers: - name: app image: your-confidential-app:latest resources: limits: amd.com/sev: 1 # 申请一个SEV实例资源调度器Kubernetes调度器会根据Pod的amd.com/sev资源请求将其调度到具有该资源的节点上。5.4 网络与存储的加密考量SEV只加密内存不加密网络流量和持久化存储。网络虚拟机内部的应用程序仍需使用TLS/SSL等协议来加密网络通信以防止同一宿主机网络上的嗅探尽管在云环境中这种风险较低但纵深防御原则要求如此。存储虚拟机的磁盘如上面的qcow2文件存储在宿主机上默认是未加密的。虽然Hypervisor看不到虚拟机运行时的内存明文但它能访问磁盘文件。因此必须结合静态加密技术Guest内部加密在虚拟机内部使用LUKS等工具加密根文件系统或数据盘。密钥由虚拟机内的密钥管理服务或来自外部的认证注入提供。这是最安全的方式但需要Guest OS支持。Host层加密在宿主机层对存储卷进行加密如使用dm-crypt。这可以防止物理磁盘被盗导致的数据泄露但云服务商的管理员仍有访问权限。一个完整的方案通常是组合内存使用SEV加密网络使用TLS存储使用Guest内部加密。6. 常见问题、性能调优与排查实录在实际操作中你肯定会遇到各种问题。这里记录一些典型的坑和解决思路。6.1 启动失败与错误排查问题virt-install或virsh start失败报错cannot find sev device或SEV is not enabled in KVM。排查确认硬件支持grep -c sev /proc/cpuinfo。确认BIOS中SEV已启用。确认内核模块已加载lsmod | grep kvm_amdlsmod | grep sev。如果没有用sudo modprobe sev加载。检查/dev/sev设备是否存在。检查当前用户是否在kvm组中是否有权限访问/dev/kvm和/dev/sev。问题虚拟机启动卡住在QEMU日志中看到SEV: failed to create encryption context。排查内存不足SEV加密会占用额外的内存开销用于存储加密元数据。尝试减少虚拟机内存或增加宿主机内存。SEV平台状态异常运行sudo sevctl --platform_status查看平台状态。如果state不是working可能需要重启主机或重置SEV平台sudo sevctl --platform_reset警告这会中断所有正在运行的SEV虚拟机。策略不兼容检查--launchSecurity中的policy值。某些策略组合可能不被当前硬件或固件支持。尝试使用最基本的策略0x01仅禁用调试。问题使用图形界面Virt-Manager创建时找不到SEV选项。解决Virt-Manager对SEV的支持可能不完善。强烈建议使用virsh edit vm-name手动编辑虚拟机XML配置或直接使用virt-install命令行。在XML中你需要手动添加以下部分到domain标签内launchSecurity typesev policy0x03/policy cbitpos51/cbitpos !-- 通常由libvirt自动计算 -- reducedPhysBits1/reducedPhysBits !-- 通常由libvirt自动计算 -- /launchSecurity6.2 性能影响分析与调优启用SEV会带来性能开销主要来自内存加密/解密的延迟和带宽损耗以及SEV-SNP中完整性保护带来的额外内存访问。根据AMD官方数据和社区测试典型开销在5%到15%之间具体取决于工作负载对内存带宽的敏感度。调优建议选择合适的内存使用更高带宽的内存条如DDR4-3200 vs DDR4-2666可以部分抵消加密带来的带宽损失。NUMA亲和性对于多路EPYC服务器确保虚拟机的vCPU和内存分配在同一个NUMA节点内可以减少跨节点访问的延迟这对加密环境尤为重要。在libvirt XML中配置numatune和cpu的NUMA亲和性。工作负载适配计算密集型CPU-bound应用受影响较小而内存密集型Memory-bound或延迟敏感型应用受影响较大。在迁移关键应用前务必进行性能基准测试。权衡安全与性能SEV-SNP提供了最强的安全性但开销也最大。如果威胁模型主要针对云服务商管理员而非同驻的其他恶意虚拟机SEV-ES可能是一个性能和安全的平衡点。6.3 迁移、快照与备份的限制这是机密计算当前的主要限制之一。实时迁移Live Migration传统虚拟机的实时迁移需要Hypervisor访问虚拟机内存来传输页面。在SEV下内存是加密的Hypervisor无法读取。因此标准实时迁移无法工作。AMD提供了SEV-ES和SEV-SNP下的安全迁移方案但这需要目标主机平台也支持SEV并且迁移过程涉及复杂的密钥传输和远程认证目前主流云平台和工具链的支持仍在完善中。快照Snapshot同理创建快照需要保存虚拟机内存状态。由于内存被加密且密钥在AMD-SP内Hypervisor无法创建有意义的快照。磁盘快照仍然可以但恢复后虚拟机状态会丢失。备份完整的系统备份变得复杂。你只能备份磁盘镜像建议配合Guest内部加密而运行状态无法备份。这要求应用设计必须是无状态或状态外置的例如将状态存储在外部加密数据库或对象存储中。6.4 调试与监控的挑战由于内存被加密传统的基于Hypervisor的调试和性能监控工具如读取虚拟机内存进行分析将失效。调试你只能在Guest操作系统内部进行调试例如使用gdb调试用户态应用。内核崩溃转储kdump可能也会受到影响需要确保崩溃转储机制在Guest内部配置正确。监控云平台无法再通过读取虚拟机内存来监控其内部活动如进程列表、资源使用详情。监控必须依赖于Guest内部代理在虚拟机内部安装监控代理如Prometheus Node Exporter将指标数据通过加密通道如HTTPS推送到外部的监控系统。硬件性能计数器一些平台级的性能计数器如CPU使用率、内存带宽仍然可用但无法细化到Guest内部的进程级别。 这迫使运维模式向更现代化的“可观测性”Observability转变依赖日志Logs、指标Metrics和链路追踪Traces三大支柱且数据源需来自Guest内部。部署SEV不仅仅是打开一个开关它代表着从基础设施安全模型到应用架构、运维流程的一次全面升级。从最初的原理理解到硬软件环境的精心准备再到生产级架构的深思熟虑每一步都需要扎实的技术功底和严谨的安全思维。虽然目前工具链和生态还在不断成熟但对于那些将数据隐私和代码保护视为生命线的业务来说投入SEV这类机密计算技术无疑是构建下一代云原生安全架构的必经之路。我自己的体会是早期采用者虽然会面临更多的集成挑战但也能更早地构建起竞争对手难以逾越的安全护城河。

相关新闻

网卡队列数量配置:服务器网络性能调优的关键开关

网卡队列数量配置:服务器网络性能调优的关键开关

1. 项目概述:网卡队列数量,一个被低估的性能调优开关 如果你在服务器运维、网络性能调优或者高并发应用开发领域摸爬滚打过,大概率遇到过这样的场景:服务器CPU明明没跑满,但网络吞吐量就是上不去,应用延迟莫…

2026/10/10 14:10:48 阅读更多 →
如何5分钟掌握音频分离:Demucs完整使用教程与实战技巧

如何5分钟掌握音频分离:Demucs完整使用教程与实战技巧

如何5分钟掌握音频分离:Demucs完整使用教程与实战技巧 【免费下载链接】demucs Code for the paper Hybrid Spectrogram and Waveform Source Separation 项目地址: https://gitcode.com/gh_mirrors/de/demucs 音频分离技术正改变着音乐制作、内容创作和音频…

2026/10/10 14:56:05 阅读更多 →
OpenCV图像几何变换实战:缩放、翻转、旋转原理与最佳实践

OpenCV图像几何变换实战:缩放、翻转、旋转原理与最佳实践

1. 项目概述:图像几何变换的核心操作在计算机视觉和图像处理的实际项目中,图像的几何变换是最基础、最高频的操作,没有之一。无论是做数据增强、UI适配、内容识别还是简单的图片预览,你几乎都绕不开对图像进行缩放、翻转和旋转。很…

2026/10/10 14:56:03 阅读更多 →

最新新闻

华为无线解决方案报告书:从设计到交付的WLAN避坑指南

华为无线解决方案报告书:从设计到交付的WLAN避坑指南

简介:这是一份华为无线解决方案报告书,以某集团无线覆盖项目为背景,系统讲解无线局域网从设计到落地的完整思路,适合网络工程师、方案架构师及高校通信相关专业学生参考。报告重点涵盖网络设计原则、无线信号质量分析、总体架构、…

2026/10/11 15:03:52 阅读更多 →
从零实现 C++ AI 大模型接入 SDK(九):LLMManager 统一模型管理与请求路由

从零实现 C++ AI 大模型接入 SDK(九):LLMManager 统一模型管理与请求路由

目录 前言 一、Provider 已经统一,为什么还需要 LLMManager 1.1 统一接口不等于统一管理 1.2 LLMManager 的职责边界 二、先看 LLMManager 的接口和内部结构 2.1 头文件提供哪些能力 2.2 为什么需要两张 map 三、注册 Provider:为什么使用 uniqu…

2026/10/11 15:03:52 阅读更多 →
鸿蒙化Flutter插件适配实战:从MissingPlugin到链接预览卡片

鸿蒙化Flutter插件适配实战:从MissingPlugin到链接预览卡片

前阵子接到一个需求:鸿蒙版应用里,聊天窗口和内容信息流都要支持粘贴链接后自动生成富媒体摘要卡片。Flutter 侧主工程之前用了 simple_link_preview 这个三方库,在 Android 和 iOS 上跑得很顺,换到鸿蒙后却直接报 MissingPluginE…

2026/10/11 15:03:52 阅读更多 →
鸿蒙 Flutter 适配 lorem_gen:纯 Dart 库移植实战与 UI 效率提升

鸿蒙 Flutter 适配 lorem_gen:纯 Dart 库移植实战与 UI 效率提升

鸿蒙上用 Flutter 做界面,最折腾我的往往不是业务逻辑,反而是那些不起眼的填充数据。界面都排好了,但页面里全是空壳子和“TODO”,截图给产品看,对方回一句“这页面还没做完吧”,直接噎住。我前阵子就因为这…

2026/10/11 15:03:52 阅读更多 →
FIFO页面置换算法详解:从缺页计算到Belady异常

FIFO页面置换算法详解:从缺页计算到Belady异常

2009年408统考的第26题,操作系统,内存管理。这道题我在复习时第一次做就栽了——不是不会算,而是把“缺页次数”和“置换次数”混在了一起,最后对答案时发现整道题的思路就偏了。后来我拿格子法在草稿纸上重新推了一遍&#xff0c…

2026/10/11 15:03:52 阅读更多 →
Oracle 第二模型审查实战指南:用 agent-scripts 打包仓库上下文并交给 GPT-5.5 Pro 等外部模型

Oracle 第二模型审查实战指南:用 agent-scripts 打包仓库上下文并交给 GPT-5.5 Pro 等外部模型

【免费下载链接】agent-scripts Scripts for agents, shared between my repositories. 项目地址: https://gitcode.com/gh_mirrors/ag/agent-scripts 点击查看 免费下载 本文面向在 agent-scripts 仓库(AGENTS.MD)管理的多 Agent 工作流中运…

2026/10/11 15:02:52 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →