台州做网站电话/网上商城建设
前言
什么是架构?
通常情况下,人们对架构的认知仅限于在软件工程中的定义:架构主要指软件系统的结构设计,比如常见的SOLID准则、DDD架构。一个良好的软件架构可以帮助团队更有效地进行软件开发,降低维护成本,提高系统的可扩展性和可维护性。这里的架构定义有更多元化的理解:架构不仅是对软件开发设计和流程规范的定义,也包含了参与架构设计的人员、以及项目过程中和架构有关的活动,都可以称为架构。
从广义角度来理解架构,意味着更全面的思考和新的融合。
按这张图理解,架构是指架构师以商业价值为导向、以用户为核心,在所处的商业、文化、技术环境中,利用有限的资源和成本,设计架构方案、组织或参与研发活动,从而达到既定目标的一项复杂且持续的活动。
架构师面对实际问题,在复杂的环境中如何做出正确的选择,如何确保架构活动顺利进行,保障项目落地,可以从目标、资源、行为、趋势这四个层面来梳理。
架构
目标
明确目标:在开始新事物时,可能需要面对各种各样的选择和挑战。在这种情况下,明确具体的目标并非易事。
可实现:目标需要具有可实现性,过高或过低的目标都可能导致挫败感和疲惫。要在充分评估自己能力、资源和环境的基础上,设定合理的目标。
具体、明确:目标应该具体、明确,易于衡量,以便对自己的进展进行有效跟踪和调整。将目标细化为若干小目标,有助于更好地管理和实现目标。
有弹性:目标制定过程需要有一定弹性,能够应对不确定性和变化。当遇到挫折或不可预测的因素时,可以适时调整目标,以保持积极的心态和动力。
持续关注和调整:目标制定并非一劳永逸,需要根据实际情况进行持续关注和调整。通过定期评估进展、学习经验教训,可以保持目标与现实的一致性,并提高实现目标的可能性。
上面4条是指导原则,实际情况更为复杂,比如技术人员通常以技术驱动去探索目标,但是它不一定适合商业活动。拿MQ的对比Kafka和Pulsar,后者相较更新、更快,技术极客们通常会毫不犹豫的选择探索后者并将它应用到实际工作中。从普适性很强的成熟方案切换到新颖高性能的方案,除了考虑切换的成本外,还要考虑切换后带来的收益,以及团队成员掌握Pulsar的成本。从发展的角度上看,除非Kafka有致命的缺陷且不被修复,那么随着时间推移Kafka可以一直演进迭代也会变得更出色。所以单纯从短期的技术先进性上看并不可取,也要关注技术的生态,这也就是常说的对技术的生态有一定的前瞻性。
结合自身的情况,在线业务为什么要切GBF,是要基于领域建设提高复用度,达到降本增效。架构活动的所有目标都是为了降本增效。切框架短期内会使业务迭代成本变高,中期途中就会陷入一个悖论:当上下游环境协调成本高时,如果从自身妥协方案,会使得US短中期成本增高,且如果没有改进的情况下无论是从US自身还是纵观全局看长期收益降低,但是又不能影响进度,或者说可不可以等时机成熟再进行,我感受到过不小的压力。
这些原则说起来比较简单:确保长期目标不动摇,临时方案做取舍。做下来就会有犯难的时候:如果临时方案做得多了容易形成包袱,影响长期收益,最终会使定制的目标打折扣。阶段目标保障和长期收益并不是完全对立的,实际工作中也会存在需要做取舍的情况,当阶段目标和长期收益出现矛盾时,需要架构人员争取资源或做好取舍。纵使做完决定选择阶段目标临时放弃长期收益时,这也只是一个短期的决定,并不能代表将来,也就是说在时机成熟的时候(例如上下游在自身的演进中做了理想态的改造),那么作为部门自身也需要时刻关注并及时跟进。
谈到取舍,深有感触:作为决策者或有决策权限的角色,在决策范围内需要做好取舍。如果当事人不做取舍,那么就只能让别人来替他做取舍。执行者大都选择丢掉休息选择加班、或者跳过总结归纳改进的环节,长此以往这种决策低效且不科学。决策人员需要做好清晰的取舍,避免无限度的索求(全都要),因为很有可能无法被完全满足,导致取舍权分散给执行者。取舍权分散给执行者有什么不妥?个人认为取舍的决策权下放分散给执行者存在问题是:执行者接触到的信息有限、经验不足易导致决策过于片面,不容易有全局观,容易做出错误的决策,项目风险加大。
资源
资源,是有限的。
作为一个架构师,要在有限的资源下最大化商业价值。如何让技术人员站在商业的角度来理解这句话?
这里描述是一项架构师参与的商业活动,既然是商业活动那么必定要有商业价值。大部分技术人员并不关注商业的价值逻辑,通常只关注技术方案是否优越,容易忽略技术方案落地过程中客观存在的资源、环境以及协作等因素。如何让技术人员理解商业价值,可以从代码和设计的三个作用来阐述:
技术人员主要通过上面这三个途径为公司赚钱。员工的工资和各种收入,来自于公司的商业收入和融资。
结合自身的理解,从公司到组织到个人,都有属于自身层面的商业逻辑,科学合理可持续发展的商业逻辑也是支撑公司、组织和个人发展的基础,脱离了合理商业逻辑的事物,短期内看并不一定会有明显的结果,长期看会衍生出各种各样的问题,问题的原因不仅仅归咎于问题本身及产生的过程,更深层次上看是整个的商业逻辑是否合理、可持续。
那么作为个人来讲,如何做到利用手中的资源最大化商业价值,对公司、组织、个人都能受益?
a.理解你所在的企业或团队的商业模式
b.理解你在自己所处环境中创造的商业价值
c.保障架构活动的长期商业价值
d.在架构规划中寻找扩大收入的机会
e.在架构规划中寻找减少成本的机会
前两点商业模式和商业价值,每个人的认知不一样,通俗讲就是这个公司、这项业务是不是核心、有没有前景。对于公司业务前景经常会有不同的声音,常见于新兴业务,属于仁者见仁智者见智,不过也从侧面了印证了最近比较流行的一句话:人们通常赚不到认知以外的财富。行业、企业的发展作为自然人很难影响和撼动,历史和趋势中个人只有选择的空间。
那么第三条对我们来讲说是一个长期面对的事情:当做出选择后,如何在工作中确保自己和团队都能够有持续的、足量的、正向的价值和收益。和经济学一样,技术的边际效益也是递减的,因为技术一直在发展,个人的价值和优势主要体现在增量价值上,也就是说个人通过工作创造的价值,是在平均价值之上,才能说这个人具有一定的优势。然而这些优势并不是一成不变的,因为开源的解决方案也在源源不断的提升,越来越多的人掌握,那么个人的增量价值响应的就会减少,甚至不存在。这也就需要个人不断的学习、提升自己来持续提高竞争力。
文中提到的资源和经济学中的生产资料、生产成本类似,商业价值依赖资源,商业公司和组织对员工的期望是最小成本生产最大商业价值,这些无论是从短期还是长期来看都要关注,目标过于抽象时为了避免不同的人理解不一致,可以根据每个人的环境、岗位具象专属的目标,最好是根据时间粒度分散成阶段性的目标,也就是说于员工个人而言,更多的是对阶段性精确目标的最大化投入来取得收益。目标的定制依据这里已经介绍完了。
当目标确认完后,就要奔着目标,发挥自身的最大价值。也就是两个方面:发掘机会和减少成本。
机会需要发现,无论是来自于科学的数理统计、分析挖掘还是日常中的一些小Tips,都是在发掘机会。这一点我在业务侧会接触到比较多的机会,版本迭代中通常会和产品聊本次更新的动机是什么,收益在哪,作为C端的产品逻辑,除了这些收益,我们还要从用户体验出发,这些变化会给用户带来什么样的方便,以及我们会不会有额外的代价和成本。最常见的例子就是如何在有限的屏效中将活动信息、分享裂变、推荐合理的展示给用户、引导用户,以及每个模块能否让大部分用户心领神会设计的初衷,交互能否适应人群的习惯等等。但目前我还没有精力投入到指标的研究和跟踪中去分析验证,只是有兴趣,后面有机会需留意这块。
除了业务的机会,也有技术的机会。比如发现并抓住开发中遇到的痛点。很多同学在开发或推进过程中会遇到各种各样的痛点,非常多的情况就是考虑到时间、精力有限等因素后为了保障任务按期完成,选择性忽略这个痛点,当任务完成后又投入到其他事项中。这些痛点虽然造成了体感上的影响或者影响了一点点效率,但并没有被抓住解决掉,因为单论这一个问题不会被放大,也不影响KPI或OKR,痛点存在还会继续影响其他将要遇到的“幸运同学”,当忽略的次数变得多起来,量变易引发质变:框架不够好用。如何应对这种现象,个人觉得可以设计一种机制,强化痛点发现、上报、跟进、解决、反馈提升,也会从侧面提醒项目Owner除了关注任务的进度,也要关注任务完成的质量。
成本包括人力成本、时间成本、机会成本,也包括技术迁移的成本,作为架构师,需要从各类复杂成本中去衡量,按时间轴推演,保障中长期的收益。
行为
技术同学每天沉浸在逻辑中,容易陷入一个思维区域:世界由逻辑和数字主宰。合理的结构中商业活动需要和技术解耦,因为技术自身不会给企业和组织带来价值,而是大多数企业和组织作为一个平台,使用技术盈利。技术落地的过程鲜有单兵作战,大都是团队协作、组织协同。上面这句话推导的逻辑是:商业价值 --> 组织活动 --> 人在组织 --> 活动主体是人 --> 遵循人性。
提到人性,就会提马斯洛需求层次模型。尽管每个人所处的环境、接触的信息、个人的观念各有不同,需求层次模型也会有千差万别,但是从公司、组织和员工的角度来看,这一模型相对稳定清晰。动机的抢占模型也可以理解为需求的压制模型如下图:
有时候任务推进会感觉到超乎寻常的艰难,合适的沟通方式表面上可以避免一些矛盾,本质上是作为被推进方,或者当事人的资源不足(例如需求排不开),通常推进方并不了解合作方的需求优先级或依赖层次,和他要配合做这件事的成本,有些事只是在推进放看来比较简单,就会有一个求证的过程,这个过程有没有必要我自己也不太清楚。当这些需求得不到满足的情况下,合作方会自动诱发动机,主导的意识和行为通常让人难以理解,遇到这种事情的解决方式是分析他的需求优先级,是否存在动机压制,以及能否协调调整优先级,改变动机压制的重要性和次序。
在最近的工作中经常遇到的一个现象是:方案可行,但是协同方没资源。因为组织的资源不单单为我所在的一个项目提供,而是要支撑当下阶段的各个目标。如何在多样目标和复杂的组织资源协调中找到最优解,是非常困难的一件事情。作为参与方,尽量去解,临时做兜底。一次次兜底就是一个个小包袱,还要不忘提醒自己包袱不要太多。
动机优先级中每个人的认知和安排是不一样的,有一个可以参照的依据:设计思维的精髓在于深度理解和尊重用户,对技术人员来讲到底是被动地迭代方案,执着于填补设计的漏洞;还是从共情用户的角度出发,脱离现有技术方案的束缚。同时忘记现有的技术方案的优势, 把关注点放在深度理解用户、解决用户的痛点上,进而拓展技术设计空间,找到更完美的技术路径。答案不言自明。
上面提到的这些只是理论,也就是我们常说的理想态,能否很好的落地就变得复杂起来,因为单纯从理论上来看这些对每个人的要求非常高,无论是职业素养还是主观能动性上,做到的都是少数。同时伴随着边际效益递减、35岁危机、996等热门社会现象,底层逻辑是人们没有安全感导致行为偏重自保,这些能不能带来商业价值是值得分析和审视的。这里提到的安全感是指能够影响人做出科学决策的环境压力,并不和居安思危中的危机感对立。
结合自己在技改项目的过程中,有同学反馈担心会失去手里的业务和之前负责的一些方向,也有同学有需求压制导致参与度不高,有的会在交谈中表达,有些虽然不明说,但种种迹象表明团队协作或工作内容没有安全感。我给出的反馈和建议是:当前目标是降本增效,业务的前景很宽广,当下还在高速发展,完全没理由缩编,但是这并不意味着可以无限度的扩张。我们需要在思考如何在不扩编的情况下更高效的做更多的事情,花更短的时间,支撑更多的行业。消除危机感的同时,还需引导良好的设计思维,刚才提到的深度理解和尊重用户,很多同学是需要这种自我满足感的,但是当节奏变得紧张、感受到环境不宽松时,这些也就随之被抛诸脑后转而去满足更原始和低层次的动机,也就是面对源源不断的需求和迭代,将任务填满日程表,从而持续不断的投入到紧张的迭代中。
顺势—天时、地利、人和
如何看清行业的周期、把握新技术。
俗话讲,你永远叫不醒一个装睡的人。是这个人不愿意醒吗?我看未必。而是人性的一些弱点导致这个人不愿意接受现实、害怕变化、对过往的路径严重依赖、或者思维僵化,导致他不想醒。自我麻痹源自处于风险或者压力下的自我保护机制:当个体面临压力、困境或威胁时,为了保护自己的心理健康和自尊,会出现一些消极的应对策略。这些策略通常表现为对现实的否认、回避或者对问题的轻视,从而使个体在心理上暂时免受困境带来的痛苦。然而,长期的自我麻痹可能导致问题恶化,无法解决现实生活中的问题,不能全力探寻新的出路,甚至用勤奋弥补内心的不安,容易陷入于目标无用的布朗运动——目标不清晰、动作不连续。
畏惧变化:当人感受到压力时,对变化感知异常慎重。在繁忙的事务中如何保持专注,历史的包袱能不能放下,如何卸载,短时间内卸载不掉那如何长线对待,如何同时支撑好业务,当同时面临这些问题时,每种取舍都有它自身的底层逻辑,当我们面向未来去思考这些问题时,就知道当下该如何选择。
对于路径依赖可以很好的用一句话解释:成功可以借鉴,但不会复刻。技术的生命周期,可以从技术社区中获取,技术的周期源于大多数人对该技术的定位。如果工程师们对这项技术不再有需求,那么这项技术的命运将会毫不犹豫的被抛弃。
对技术周期的了解作为架构师的基本功,这里不再作分析。当一个架构师的技术掌握优秀时,又要避免一个误区:拿着锤子看什么都是钉子。技术是实现商业价值的一个手段,并不是唯一路径。在这个前提下技术不能拖累商业价值的最大化。所以说架构师面对公司、组织、以及工作开展的实际情况,要选择合适的技术方案。
如何定义合适的技术方案?先看三个不同的研发活动的层次:
架构师在这三个层次的研发活动中侧重点是不一样的,技术驱动需要保证技术的先进性、产品驱动保障客户的体验、业务驱动保障业务指标的全盘增长。
影响技术体系建设的外部因素还有行业发展、企业内部指标的压力、组织结构的影响等等,需要架构师获取全面的信息,通盘抓重点,找到保障商业价值最大化的关键因素和节点。
总结
最近在学习郭东白的架构课,本篇文章主要是结合自身实际的经历阐述架构师定位、架构活动如何保障企业、组织实现商业价值,以及从员工层面的执行、管理角度分析各层次的定位、方向,通过这些思考总结沉淀,帮助我们在工作中更好地做技术落地和业务支撑。
推荐阅读
基于车道级数据的导航场景构建与还原仿真
Android高性能高稳定性代码覆盖率技术实践
高德数据优化篇之OceanBase最佳实践
走近高德驾车ETA(预估到达时间)
关注「高德技术」,了解更多
相关文章:

重新认识架构—不只是软件设计
前言 什么是架构? 通常情况下,人们对架构的认知仅限于在软件工程中的定义:架构主要指软件系统的结构设计,比如常见的SOLID准则、DDD架构。一个良好的软件架构可以帮助团队更有效地进行软件开发,降低维护成本࿰…...

我的创业笔记:困境与思索
现在是2023年9月22日傍晚,我一个人走在广州的珠江边,静静地思索着当前个人创业面临的困境,不由自主地想将这些想法记录下来。 故事需要从两个月前说起。2023年7月31号,我从金山办公离职后,就满心欢喜地开启了自己的个…...

minio文件上传
1.代码 大佬仓库:https://gitee.com/Gary2016/minio-upload?_fromgitee_search 关于这个代码的讲解:来自b站 2.准备minio 参考:[1]、[2] 2.1 下载 官网:https://min.io/download#/windows 2.2 启动 ①准备一个data文件夹…...

IDEA .iml文件及.idea文件夹详解
.iml文件 idea 对module 配置信息之意, infomation of module。每个模块都有一个iml文件。 IDEA中的.iml文件是项目标识文件,缺少了这个文件,IDEA就无法识别项目。跟Eclipse的.project文件性质是一样的。并且这些文件不同的设备上的内容也会…...

使用Python做一个微信机器人
介绍 简介 该程序将微信的内部功能提取出来,然后在程序里加载Python,接着将这些功能导出成库函数,就可以在Python里使用这些函数 程序启动的时候会执行py_code目录下的main.py,类似于你在命令行使用python main.py。 现在会以…...

云计算战略:选择适合你业务的云平台
文章目录 云计算的概述选择云平台的关键因素1. 业务需求2. 预算3. 性能要求4. 数据隐私和合规性 示例:选择适合的云平台业务需求预算性能要求数据隐私和合规性 代码示例:使用云平台服务结论 🎉欢迎来到云计算技术应用专栏~云计算战略…...

Python:打印目录下每层的文件总数
代码如下: import osclass FileCount(object):def __init__(self,root_path: str):self.root_path root_pathself._count Noneself._file_count Noneself.children []def get_count(self):if self._count is None:self._count 0self._file_count 0for child_…...

LVS-NAT模式
LVS负载均衡群集 群集的定义 Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。 群集的作用 对于企业服务的的性能提升一般…...

【神印王座】龙皓晨竟然上了头版头条!内容违背,新闻真实性原则
Hello,小伙伴们,我是小郑继续为大家深度解析神印王座国漫。 大家有没有发现,当龙皓晨他们从驱魔关回到圣城时,有这么一幕,一个卖报小孩边走边说:驱魔关大捷,少年英雄龙皓晨操控守护与怜悯之神印王座&#x…...

C++之类和函数权限访问总结(二百二十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

手动部署 OceanBase 集群
手动部署一个 OB 单副本集群,包括一个 OBProxy 节点 部署环境 服务器信息 IP地址 192.168.0.26 网卡名 ifcfg-enp1s0 OS Kylin Linux Advanced Server release V10 CPU 8C 内存 32G 磁盘1 本地盘 /data/1 磁盘2 本地盘 /data/log1 机器和角色划分 …...

【操作系统笔记十二】Linux常用基础命令
Linux 常用快捷键 Tab 命令或路径等的补全键,特别常用的快捷键Ctrl insert 复制命令行内容(常用可提高效率)Shift insert 粘贴命令行内容(常用可提高效率)Ctrl C 中断当前任务(退出)Ctrl Z…...

Compose LazyColumn 对比 RecyclerView ,谁的性能更好?
LazyColumn 是 compose 中用来实现类似 RecyclerView 效果的控件 ,但是大家都说LazyColumn性能比RecyclerView差太多,毕竟 RecyclerView google优化了十多年了,比RecyclerView差一点也正常,今天我们就用实际数据来对比LazyColumn和…...

[python 刷题] 49 Group Anagrams
[python 刷题] 49 Group Anagrams 题目: Given an array of strings strs, group the anagrams together. You can return the answer in any order. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically…...

vue+element plus 使用table组件,清空用户的选择项
<el-table ref"tableRef"> .... </el-table> <script lang"ts" setup> import { onMounted, reactive, ref, nextTick } from vue const clearBtn () > {console.log(清空用户的选择项)tableRef.value.clearSelection() } </scr…...

改写软件-怎么选择改写软件
什么是改写软件?改写软件是基于自然语言处理技术的工具,它们可以分析一段文字,并将其重新表达,以保持原始意义,但使用不同的词汇和结构。这种技术可用于减少内容的重复,增加多样性,或者简化复杂…...

gateway之跨域处理
文章目录 什么是跨域跨域带来的问题 gateway解决跨域解决跨域的其他方式比较代码示例 总结提升 什么是跨域 跨域(Cross-Origin)是指在浏览器中,当一个Web应用程序试图访问与其所属页面不同的源(origin)的资源时&#…...

uniapp 实现不同用户展示不同的tabbar(底部导航栏)
一、背景 最近在做一个uniapp开发的小程序遇到一个需求,希望不同用户登录后展示不同的tabbar页面,但是uniapp项目中的pages.json是只有一个list数组的,并且是不能写成动态效果,为了实现这个需求,便自定义了tabbar组件 …...

线性归一化是什么,用python实现数据的线性归一化
线性归一化(Linear Normalization)是一种常见的数据预处理方法,也被称为 Min-Max 归一化。它通过对原始数据进行线性变换,将其缩放到特定的范围内,常用的是将数据缩放到 [0, 1] 或 [-1, 1] 范围内。 具体来说ÿ…...

超级好用绘图工具(Draw.io+Github)
超级好用绘图工具(Draw.ioGithub) 方案简介 绘图工具:Draw.io 存储方式: Github 1 Draw.io 1.2 简介 是一款免费开源的在线流程图绘制软件,可以用于创建流程图、组织结构图、网络图、UML图等各种类型的图表。…...

全国职业技能大赛云计算--高职组赛题卷③(私有云)
全国职业技能大赛云计算--高职组赛题卷③(私有云) 第一场次题目:OpenStack平台部署与运维任务1 基础运维任务(5分)任务2 OpenStack搭建任务(15分)任务3 OpenStack云平台运维(15分&am…...

Redis SCAN命令操作实战(详细)
目录 SCAN 介绍 SCAN 命令基本用法 MATCH 选项用法 COUNT 选项用法 TYPE 选项用法 补充 并发执行多个迭代 中途停止迭代 使用错误的游标进行增量式迭代 迭代终结的保证 SCAN 介绍 SCAN cursor [MATCH pattern] [COUNT count][TYPE type]:SCAN 命令及其相…...

计网第五章(运输层)(六)(TCP可靠传输的实现)
目录 一、基本概述 二、具体实现 1.前后沿: 2.利用指针描述发送窗口的状态 3.有差错情况 之前在数据链路层时已经讨论过可靠传输(计网第三章(数据链路层)(二)(可靠传输)&#x…...

酒店外卖小程序商城的作用是什么
随着线上餐品销售属性增强,传统酒店除了承接到店客户,外送也成为生意的一部分,但传统打电话、微信发送的方式无法实现餐品全面呈现和客户随时订购需求,在配送方面也无法规范化。 除此之外,还需要完善营销、会员管理、…...

居家养老一键通的功能
居家养老一键通的功能 居家养老一键通是指为老年人提供全方位的居家养老服务的平台或系统。它通过整合各种资源和服务,为老年人提供便捷、安全、舒适的居家养老环境,帮助他们解决生活中的各种难题。 居家养老一键通的功能通常包括以下几个方面ÿ…...

海外代理IP是什么?如何使用?
一、海外代理IP是什么? 首先,代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器,被称为“中介”,因为它位于最终用户和他们在线访问的网页之间。 海外IP代理是就是指从海外地区获取的IP地址,用…...

mmdetection v3避坑
命令: python tools/test.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py /data/zhangrui/mmdetection-master/checkpoints/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco_202…...

备份服务器数据库并保存到Git仓库
备份项目及数据库脚本 #!/bin/bash # MySQL数据库信息 DB_HOST"localhost" DB_USER"root" DB_PASS"************" DB_NAME"my-space" # 导出文件目录 EXPORT_PATH"/home/MySpace/mysql" # 获取当前时间并格式…...

尚硅谷wepack课程学习笔记
为什么需要使用打包工具? 开发时使用的框架、es6 语法 、less 等浏览器无法识别。 需要经过编译成浏览器能识别的css、js才可以运行。 打包工具可以帮我们编译,号可以做代码压缩、兼容处理、性能优化。 常见的打包工具有什么? vite、webpac…...

c++模版元编程-可变参数模版
在 C 中,我们可以使用模板参数包(Template Parameter Pack)和展开表达式(Expanding Expression)来定义可变参数模板。 模板参数包 模板参数包是一种特殊的语法,用于表示接受多个模板类型参数或非类型参数…...