VMware(Omnissa) Horizon8部署流程及最佳实践-基础篇
前言
VMware Horizon 是一套比较典型的企业级虚拟桌面解决方案,在实际项目中经常用于集中交付 Windows 桌面、应用发布、统一运维以及终端替换等场景。相比传统 PC 办公模式,Horizon 可以将桌面运行环境集中在数据中心,通过瘦客户机、PC、笔记本等终端进行远程访问,从而提升桌面管理、数据安全和运维效率。
不过对于第一次接触 Horizon 的工程师来说,整套环境的搭建并不算特别简单。它并不是单独安装一个软件就能使用,而是需要依赖 vSphere 虚拟化平台、Active Directory 域环境、DNS、数据库、证书、桌面模板、桌面池等多个组件配合完成。任何一个基础环节配置不正确,后续都可能出现桌面发布失败、用户无法登录、证书告警、桌面连接异常等问题。
本文主要整理一套 VMware Horizon 8 基础环境的部署过程,重点记录从基础架构理解、环境准备、Connection Server 安装、事件数据库配置、证书替换、模板机优化,到完整克隆桌面和即时克隆桌面发布的完整流程。文章内容更偏向实际部署操作,尽量结合截图说明每一步配置的作用和注意事项。
需要说明的是,本文定位为 Horizon 基础部署篇,主要目标是帮助读者先把一套可用的 Horizon 环境搭建起来,并完成基础桌面发布。至于生产环境中常见的负载均衡、UAG 外网接入、DEM 用户配置管理、App Volumes 应用分层、多因素认证、GPU/vGPU、等内容,后续会单独整理到进阶篇中。
另外再补充说明下,严格来讲现在Horizon已经不姓V了,算是Omnissa的了,其中2406版本是最后一个支持永久授权(你懂的)的版本,后续都只能用Omnissa的订阅授权了,这个版本也算是能随便折腾的绝唱了,正好也纪念下
架构说明
Horizon基础架构
Horizon整体基础架构如下
| 组件名称 | 组件类型 | 是否必需 | 主要作用 | 说明 |
|---|---|---|---|---|
| Connection Server | Horizon 核心组件 | 必需 | 负责用户认证、桌面池分配、连接代理、会话管理和 Horizon 管理控制 | Connection Server 是 Horizon 环境的核心组件,管理员通过 Horizon Console 进行桌面池、用户授权、vCenter 对接、全局策略等配置。用户访问桌面时,也会先连接到 Connection Server,再由其分配对应的桌面资源。 |
| Domain Controller | 基础服务组件 | 必需 | 提供域用户认证、计算机加域、组策略和权限管理 | Horizon 强依赖 AD 域环境。Connection Server、桌面虚拟机、RDSH 服务器等通常都需要加入域,用户登录虚拟桌面时也需要通过域控完成身份认证。 |
| DNS | 基础服务组件 | 必需 | 提供域名解析,保证各组件之间可以通过主机名正常通信 | DNS 是 Horizon 部署中非常关键的基础服务。Connection Server、vCenter、域控、桌面虚拟机之间都建议使用 FQDN 通信。如果 DNS 解析异常,可能会导致加域失败、桌面发布失败、连接异常等问题。 |
| vCenter Server | 虚拟化管理组件 | 必需 | 负责管理 ESXi 主机、集群、模板、快照和虚拟机资源 | Horizon 需要对接 vCenter,通过 vCenter 完成桌面虚拟机的创建、删除、重组、刷新、开关机等操作。完整克隆和即时克隆桌面池都需要依赖 vCenter 进行虚拟机编排。 |
| CA 证书服务 | 安全服务组件 | 可选但推荐 | 为 Connection Server、UAG 等组件签发可信 SSL 证书 | 测试环境可以先使用自签名证书,但生产环境建议使用企业内部 CA 或公网可信证书。证书不规范时,客户端访问 Horizon Portal 或 Horizon Client 连接时会出现证书告警,影响用户体验和安全性。 |
| Event Database | 日志审计组件 | 可选但推荐 | 记录 Horizon 事件日志,包括用户登录、桌面连接、管理员操作和错误事件 | Event Database 通常使用 SQL Server 数据库。虽然不配置事件数据库也可以完成基础桌面发布,但在生产环境中建议配置,方便后续进行故障排查、运维审计和登录记录查询。 |
| DHCP | 基础服务组件 | 必需 | 为虚拟桌面、瘦客户机或其他终端自动分配 IP 地址 | 在大规模桌面池场景中,通常建议通过 DHCP 为虚拟桌面自动分配地址,减少人工配置工作量,并避免桌面批量创建时出现 IP 地址冲突或地址规划混乱。 |
| Golden Image | 桌面模板组件 | 必需 | 作为桌面池发布的基础镜像,包含操作系统、Horizon Agent、VMware Tools、常用软件和系统优化配置 | Golden Image 也可以理解为黄金模板。完整克隆和即时克隆桌面池都需要基于模板或快照进行发布。模板质量会直接影响后续虚拟桌面的稳定性、登录速度和用户体验。 |
| Client | 终端访问组件 | 必需 | 作为用户访问 Horizon 桌面和应用的入口 | Client 可以是 Horizon Client 软件,也可以是瘦客户机、普通 PC、笔记本或浏览器访问。实际项目中常见方式是瘦客户机或 PC 安装 Horizon Client 后连接 Connection Server 或 UAG。 |
| UAG | 安全接入组件 | 可选 | 为外部用户提供安全访问入口,将外网访问代理到内部 Horizon 环境 | UAG 全称 Unified Access Gateway,通常部署在 DMZ 或边界区域。如果 Horizon 只提供内网访问,可以不部署 UAG;如果需要互联网、专线外部访问或移动办公接入,建议通过 UAG 进行安全代理,而不是直接暴露 Connection Server。 |
Desktop发布方式
在 Horizon 中,常见的桌面发布方式主要包括完整克隆和即时克隆。两种方式都可以用于发布虚拟桌面,但它们在资源占用、创建速度、维护方式和适用场景上有明显区别。
| 对比项 | 完整克隆 Full Clone | 即时克隆 Instant Clone |
|---|---|---|
| 基本概念 | 从模板完整复制出一台独立虚拟机,每台桌面都有完整的系统盘和虚拟机文件 | 基于 Golden Image 和快照快速生成桌面虚拟机,通过克隆机制批量创建桌面 |
| 桌面独立性 | 独立性强,每台桌面类似一台普通虚拟机 | 依赖父镜像和快照统一发布,桌面更偏标准化 |
| 创建速度 | 创建速度较慢,尤其是批量创建时耗时较长 | 创建速度快,适合批量快速交付桌面 |
| 存储占用 | 占用存储空间较大,每台虚拟机都有完整系统盘 | 相对节省存储空间,适合大规模桌面池 |
| 维护方式 | 每台桌面相对独立,后期维护更接近普通虚拟机 | 通过更新 Golden Image 和快照统一维护,批量更新效率更高 |
| 系统更新 | 可以单独对某台桌面进行补丁、软件、配置修改 | 通常在模板中统一更新,然后重新发布或刷新桌面池 |
| 个性化能力 | 个性化能力强,适合用户长期保留系统状态和个性化配置 | 个性化能力相对弱,更适合标准化桌面;用户数据通常需要配合配置文件管理、文件重定向或独立数据盘 |
| 用户数据保留 | 可以直接保存在桌面虚拟机内部,但需要注意备份 | 不建议将重要数据保存在系统盘,通常结合用户配置文件、文件服务器、DEM、FSLogix 或独立数据盘使用 |
| 故障影响范围 | 单台桌面故障一般只影响该桌面 | 模板或快照存在问题时,可能影响整个桌面池 |
| 资源回收 | 资源回收相对依赖人工或常规虚拟机管理 | 桌面重建、刷新、回收更加方便,适合自动化管理 |
| 管理复杂度 | 初期理解简单,但大规模环境下维护成本较高 | 初期需要理解模板、快照、桌面池刷新等机制,但大规模管理效率更高 |
| 适合规模 | 小规模、少量特殊桌面、测试桌面 | 中大型标准化桌面环境 |
| 典型场景 | 管理员桌面、研发测试桌面、特殊软件桌面、需要长期保留状态的用户桌面 | 办公桌面、培训教室、呼叫中心、生产办公终端、大规模标准化 VDI 场景 |
| 主要优势 | 独立性强、灵活性高、兼容性好、便于单独维护 | 创建快、维护效率高、资源占用低、适合批量发布 |
| 主要劣势 | 创建慢、占用空间大、大规模维护成本高 | 对模板规范要求高,个性化和数据保留需要额外设计 |
选择建议
| 使用场景 | 推荐方式 | 原因 |
|---|---|---|
| 少量虚拟桌面,用户需要长期保留系统状态 | 完整克隆 | 每台桌面相互独立,便于单独维护和个性化配置 |
| 大规模标准化办公桌面 | 即时克隆 | 创建速度快,统一维护方便,适合批量交付 |
| 桌面中安装特殊软件,且每个用户配置差异较大 | 完整克隆 | 灵活性更高,不容易受到统一模板更新影响 |
| 培训教室、公共机房、临时桌面 | 即时克隆 | 可以快速创建、刷新和回收桌面 |
| 用户数据需要长期保留,但系统盘希望统一维护 | 即时克隆 + 用户数据重定向 | 系统通过模板统一管理,用户数据通过独立位置保存 |
| 测试环境或验证环境 | 完整克隆 / 即时克隆均可 | 如果只是少量测试,完整克隆更直观;如果测试批量发布能力,建议使用即时克隆 |
总体来看,完整克隆更适合少量、特殊、个性化较强的桌面场景;即时克隆更适合标准化、大规模、需要统一维护的桌面场景。在实际生产环境中,如果没有特殊需求,通常更推荐使用即时克隆作为主要桌面发布方式,再针对少量特殊用户或特殊应用场景单独使用完整克隆,还有一点,如果用户的运维能力不是太强或者想减轻运维压力,那也建议直接完成克隆!
扩展架构及组件
在完成 Horizon 基础环境部署后,如果需要进一步提升用户体验、应用交付能力、运维效率和日志分析能力,还可以引入一些高级组件。这些组件并不是 Horizon 基础部署的强制要求,但在中大型生产环境中比较常见,尤其适用于用户配置统一管理、应用分层交付、桌面体验优化、性能监控和日志集中分析等场景。
| 组件名称 | 组件类型 | 是否必需 | 主要作用 | 典型使用场景 | 说明 |
|---|---|---|---|---|---|
| RDSH 桌面 / 应用发布 | 应用与桌面发布组件 | 可选 | 基于 Windows Server 远程桌面会话主机发布桌面或单个应用 | 用户只需要访问某个业务系统、Office、浏览器、ERP、财务软件等应用,而不需要完整虚拟桌面 | RDSH 可以发布完整的会话桌面,也可以只发布单个应用。相比每个用户分配一台独立虚拟桌面,RDSH 的资源利用率更高,适合应用集中交付场景。 |
| DEM | 用户环境管理组件 | 可选但推荐 | 管理用户配置、个性化设置、登录脚本、快捷方式、打印机映射、驱动器映射等 | 即时克隆桌面、非持久桌面、用户配置需要漫游或统一管理的场景 | DEM 全称 Dynamic Environment Manager,可以将用户个性化配置从系统镜像中解耦出来。对于即时克隆桌面来说,DEM 可以解决用户配置保留、登录环境统一、策略灵活下发等问题。 |
| App Volumes | 应用分层交付组件 | 可选 | 将应用从操作系统镜像中剥离,通过应用卷方式动态挂载给用户或桌面 | 不同部门、不同用户需要使用不同软件,希望减少模板数量和应用维护成本 | App Volumes 可以避免在 Golden Image 中安装大量应用。管理员可以将应用封装成应用包,再根据用户、用户组或桌面池进行分配,从而实现应用的灵活交付和统一维护。 |
| GPO Bundle(组策略深度优化) | 系统优化与策略管理组件 | 可选但推荐 | 通过组策略对虚拟桌面进行深度优化,包括登录体验、系统服务、外设重定向、安全限制、协议体验等 | 大规模桌面池、登录速度优化、用户体验优化、安全加固和统一策略管控 | Horizon 环境中除了模板优化外,组策略也非常重要。通过 GPO 可以统一控制用户环境、桌面限制、Blast 协议、剪贴板、USB、打印、文件夹重定向等策略。合理的 GPO 优化可以明显改善登录速度和桌面体验。 |
| Aria Operations | 监控与容量分析组件 | 可选 | 对虚拟化平台、Horizon 桌面、连接会话、资源使用率和性能状态进行集中监控与分析 | 中大型 VDI 环境、需要监控桌面性能、会话体验、容量趋势和资源瓶颈的场景 | Aria Operations 可以帮助管理员从资源、性能、容量和告警角度分析 Horizon 环境。例如桌面 CPU、内存、延迟、登录耗时、主机负载、存储压力等指标,适合生产环境长期运维。 |
| Aria Logs | 日志集中分析组件 | 可选 | 集中收集和分析 Horizon、vCenter、ESXi、Windows 服务器等组件日志 | 需要统一日志查询、故障定位、安全审计和告警分析的场景 | Aria Logs 可以将分散在各组件上的日志集中收集,便于统一检索和关联分析。当 Horizon 出现登录失败、连接中断、桌面池异常、组件报错等问题时,可以通过集中日志平台提升排查效率。 |
从整体定位来看,基础组件主要解决“能不能搭建和发布桌面”的问题,而高级组件更多解决“好不好用、好不好管、好不好维护”的问题。
例如,RDSH 适合应用发布,DEM 适合用户环境和个性化配置管理,App Volumes 适合应用分层交付,GPO Bundle 适合桌面体验与策略深度优化,Aria Operations 和 Aria Logs 则主要面向生产环境的监控、告警、容量分析和日志排查。
在实际项目中,并不一定需要一次性部署所有高级组件。一般可以先完成 Horizon 基础平台、桌面池和客户端接入,再根据用户规模、应用复杂度、运维要求和安全要求,逐步引入 DEM、App Volumes、RDSH、Aria Operations、Aria Logs 等进阶能力。
部署流程
基础环境准备
以下是提前规划的一些Lab基础环境,基本的部署就不细讲了,要不然太多,后面会提一些需要注意的点
| 组件 | VM | IP | OS | 备注 |
|---|---|---|---|---|
| Connection Server | RSVCS01 | 10.102.102.181 | VMware-Horizon-Connection-Server-x86_64-8.13.0-10070698069 | |
| Connection Server | RSVCS02 | 10.102.102.182 | VMware-Horizon-Connection-Server-x86_64-8.13.0-10070698069 | |
| Domain controller | RSVDIDC | 10.102.102.180 | Windows Server 2025 Datacenter | 域名 vdilab.com |
| vCenter | RSVC | 10.101.101.200 | VMware-VCSA-all-8.0.3-25197330 | |
| UAG | RSUAG01 | 10.102.102.183 | euc-unified-access-gateway-fips-24.06.0.0-9963269370_OVF10 | VIP:10.102.102.185 |
| UAG | RSUAG02 | 10.102.102.184 | euc-unified-access-gateway-fips-24.06.0.0-9963269370_OVF10 | VIP:10.102.102.185 |
| Log DB Server | RSDB | 10.102.102.186 | chs_sql_server_2022_developer_edition_x64_dvd_9f1ac8d4 | |
| Desktop Template | win10-full-{n} | 172.16.21.0 | Win10 22H2 | |
| Desktop Template | win10-ins-{n} | 172.16.22.0 | Win10 22H2 | |
| DHCP | H3C SW | 配置于接入交换机 | ||
| RDSH | RSRDSH | 10.102.102.187 | Windows Server 2025 Datacenter | 可选,应用发布主机 |
| App Volume | RSAPPVOL | 10.102.102.188 | Windows Server 2025 Datacenter | 可选,应用交付组件 |
| Aria Operations | Aria-Operations | 10.101.101.211 | vRealize-Operations-Manager-Appliance-8.18.3.24521408 | 可选,VCF监控运维管理平台 |
| Aria Logs | Aria-LogInsight | 10.101.101.212 | VMware-vRealize-Log-Insight-8.18.3.0-24515748 | 可选,VCF日志管理平台 |
由于要部署多台Windows Server,建议通过vm转化为模板去进行统一部署,部署的时候记得通过虚拟机配置文件去重新生成SID,否则同样SID的VM后续无法正常加域
VDI桌面环境需要DHCP,可以部署Server的DHCP,我在Lab环境里就直接在交换机上进行创建了
dhcp server ip-pool VDI01 gateway-list172.16.21.254 network172.16.21.0 mask255.255.255.0 address range172.16.21.51172.16.21.99 dns-list10.102.102.180#dhcp server ip-pool VDI02 gateway-list172.16.22.254 network172.16.22.0 mask255.255.255.0 address range172.16.22.51172.16.22.99 dns-list10.102.102.180#DC环境准备
域环境是核心身份认证组件,直接角色安装域服务和DNS服务,CA证书服务在生产环境建议独立处理
添加新林并设置根域名
设置一个域管理员账户用于后续对接(生产环境不建议直接使用domain\administrator)
将设置的用户加入域管理员组
域组织架构中提前创建用户和计算机的相关OU,并创建测试用户
如果企业对安全审计要求较高,无法直接用域管理员权限,具体需要的权限可以参考以下链接
https://docs.omnissa.com/zh-CN/bundle/Horizon-Administration/page/BestPracticesforAdministratorUsersandGroups.html如果使用受限制的账户权限,需要进行委派控制(如果有域管理员权限这一块可以直接无视)
至此域控部署配置完成
VCS部署
VCS安装
第一台VCS服务器选择标准服务器
第二台以后的VCS安装时选择副本服务器
并指向主的VCS服务器
部署完成后登录VCS控制台,可以在任意一台VCS内的连接服务器看到所有正常工作的VCS
部署完成后登录VCS,添加域控信息
添加vCenter服务器信息
SQLDB安装机配置
Horizon的日志数据库需要指向外部的数据库,支持SQL,MySQL,Oracle,环境Linux,Windows都可以,以下以Windows为例,安装SQL2022实例及管理平台
正常只需要安装数据库引擎服务就行
命令实例
身份认证建议数据库sa账户独立出来使用
安装管理平台
实例中创建数据库
VCS中完成数据库的配置
特别注意:某些环境或者版本可能未启用TCP端口,需要手动进入配置管理控制台进入配置
CA部署及配置(可选)
Horizon平台对证书的要求比较高,自签名的证书不影响使用,但仪表盘会报错,建议:
- 使用公网证书,尤其是后期有公网访问需求的场景
- 使用内部CA服务器办法签名证书
CA服务器部署
如果选择自己部署CA服务器,直接添加角色,证书服务
配置凭据
至此证书服务器配置完毕
CA服务器配置
在本文中这一块不进行展开,一方面这一块内容比较多,都截图出来占用比例太大,另一方面这一块网上详细的文章也比较多,大家可以自行搜索,CSDN上也有不少优秀的文章
不过现在网上所有的文章都是基于企业CA的,在某些特殊环境下如果没有Enterprise Admin权限或者脱机使用需求的情况下,只能使用独立CA,后续我会单独写篇文章针对这个场景进行说明
模板机部署及优化
黄金目标制作的优劣很大程度上影响了实际的用户体验,首先安装Win10虚拟机,生产环境需要注意几点:
- CPU不宜超过4core,会导致大量的CPU征用
- 硬盘资源足够的情况下建议使用厚制备
- 显存至少改为16MB以获得高分辨率支持
虚拟机操作系统安装完成后先安装VMware Tools
更改Hostname(可选)
安装Horizon Agent
如果后期后USB重定向需求,提前进行安装
Agent安装完成后安装桌面所需的软件,这里有一天需要特别注意,有些软件默认装在用户下的,需要一律改到整个计算机层面,也就是Program File下
(重要)最后使用Optimization工具进行桌面优化
会自动扫描建议优化的项目,包括关闭不必要的系统服务、功能和视觉特效等
开始自动优化
完成后关机并将虚机克隆为模板(完整克隆场景使用)
拍摄快照(即时克隆场景使用)
至此黄金模板制作完成
桌面发布
根据前文的介绍,根据实际需要的场景进行模板部署
完整桌面
完整桌面需要使用自己创建的自定义规范,提前进行创建
在VCS中添加自动桌面池,新用户进入池后自动寻找空闲桌面
选择完整虚拟机
完整虚拟机只能选择专用分配,即初始分配后该桌面仅属于该用户
命名模式这边需要留意下,fixed为保留位数,如果未来计划有几百终端那么fixed就为3
选择之前创建的信息
AD容量修改为之前手动创建的OU,并使用自定义规范,勾选重复使用计算机账户
至此完整克隆桌面发布完成
即时克隆桌面
发布时选择即时克隆
这边要特别注意,即使克隆有两种典型场景:
- 不需要重定向用户配置文件:相当于用户的数据重启后就会丢失,每次重启都恢复原始状态,适用于公共电脑,生产电脑(只需要使用某些应用)等场景
- 需要重定向用户配置文件,标准使用场景,重定向方式主要有两种:
- 使用Horizon自己的永久磁盘,将用户个人配置文件打包成vmdk,在某些老版本中不是太好用,目前新版本基本不存在问题
- 使用FSLogix,通过软件形式打包成标砖的vhd虚拟磁盘并重定向到文件服务器,灵活性会更高
本文使用VMware自己的永久磁盘
即时克隆场景下可直接使用Horizon自带的ClonePrep
创建后vc里看到的cp开头的虚拟机文件即为克隆的快照文件
登录使用
终端使用主要包括Client客户端,网页浏览器及瘦客户机,首先将桌面池授权用户
Client内添加vcs服务器
输入自己的用户凭据进行连接
按照之前创建的域用户策略,第一次登录后需要修改密码
登录后即可看到有授权的池
至此基本的桌面已可正常使用
日常维护
以下简单讲下管理员的基本日常运维
桌面基本运维
登录VCS可以看到桌面池运行状况
当前桌面的运行使用情况
即使克隆的永久磁盘也可以看到,如果用户更改桌面,可以进行分离及附加操作
选中桌面可以进行注销,重启及常用操作
在技术支持中搜索用户,可以看到该用户当前使用的桌面情况,点击进入后可看到详细信息
这边可以对桌面进行发送消息,远程协助等
桌面更新
即时克隆桌面如果需要对模板进行更新,首先进入模板机安装更新的软件或相关操作,本案例中,我安装了Teamviewer,X-mind,并在公共桌面添加了说明文档快捷方式(其中X-mind默认安装在用户文件夹下,正好进行验证)
安装完成后重新拍快照
VCS中进入桌面池,选择计划
选择推送更新的模板
选择计划更新的方式,可以选择让用户自己注销或重启后进行更新,或者强制注销
强制注销用户桌面出现警告
等待更新完成
更新完成后可以看到,Teamviewer和快捷方式正常出现,安装于用户文件夹下的软件更换用户后无法正常使用
更进一步的维护会在后续的文章内更新
总结
本文主要整理了 VMware Horizon 8 基础部署过程中的核心内容,包括 Horizon 基础架构说明、桌面发布方式、基础组件与高级组件介绍、部署前环境准备、Connection Server 安装、事件数据库配置、CA 证书替换、模板机部署与优化,以及完整克隆和即时克隆桌面池的发布流程。
从整体部署思路来看,Horizon 并不是单独安装一个 Connection Server 就能完成桌面交付,而是需要依赖 AD 域控、DNS、DHCP、vCenter、ESXi 集群、存储、证书、数据库、Golden Image、客户端等多个组件协同工作。只有前期基础环境规划清楚,后续桌面池发布、用户登录、证书访问、模板更新和日常运维才会更加稳定。
对于基础部署来说,重点是先理清几个关键点:
- AD、DNS、DHCP 等基础服务要提前准备好;
- Connection Server 是 Horizon 的核心入口和控制组件;
- vCenter 负责后端虚拟机资源的编排和管理;
- Golden Image 的质量直接决定后续桌面池的稳定性;
- 完整克隆适合少量、个性化较强的桌面场景;
- 即时克隆更适合大规模、标准化、统一维护的 VDI 场景;
- 生产环境中建议进一步考虑证书、高可用、日志、监控和用户配置管理等内容。
本文定位为 Horizon 基础部署篇,主要目标是帮助大家先完成一套可用的 Horizon 8 基础环境,并理解从基础组件准备到桌面发布的完整流程。实际生产环境中,还需要结合项目规模、网络规划、安全要求、用户数据保留方式、桌面性能需求和运维体系进行进一步设计。
后续进阶篇会继续整理 Horizon 生产环境中更常见的内容,例如多台 Connection Server 高可用、UAG 外网接入、负载均衡、DEM 用户环境管理、App Volumes 应用分层、RDSH 应用发布、GPO 深度优化、Aria Operations 监控分析、Aria Logs 日志集中管理等。
以上内容基于实际部署过程整理,如果文章中有描述不准确、理解不到位,或者大家在实际部署 Horizon 时遇到过其他典型问题,也欢迎在评论区交流讨论,共同补充和完善。
