news 2026/10/18 4:22:30

软件体系结构复习资料:风格、质量属性与ATAM评估考点详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
软件体系结构复习资料:风格、质量属性与ATAM评估考点详解

简介:软件体系结构复习资料(doc)是一份面向计算机相关专业学生与软件工程学习者的知识点整理文档,围绕体系结构基本概念、DSSA、构件与连接件、体系结构配置与拓扑、设计模式分类、软件产品线、生命周期模型、质量属性、ATAM评估方法及动态体系结构特征等内容,以问答和条目形式提炼答案,适合期末复习、考研冲刺或面试前快速回顾。压缩包共1个文件,为doc格式,大小72KB,便于打印或导入笔记工具使用。该资料目前已有70人学习。文档覆盖C2风格中连接件与构件的工作机制、基于构件的动态体系结构更新流程、软件复用的构件模型与领域工程要点,并整理了产生软件危机的原因、软件体系结构的定义与作用等高频考点,核心概念多以定义与简答形式直接呈现,查阅效率高,适合需要系统梳理和强化记忆的软件体系结构学习者。

1. 软件体系结构复习资料:一份把抽象考点串成答题能力的文档

软件体系结构这门课最大的问题不是难,而是散。风格、视图、质量属性、评估方法几个大块互相咬合,课堂上听懂了,一到闭卷考试就发现脑子里只剩名词、没有推理逻辑。完整的软件体系结构复习资料要解决的正是这个问题:它不是把教材重抄一遍,而是把散落的知识点按"概念—关系—应用"重排成一条复习主线,让新手能顺着章节建立框架,让有基础的人能直接跳到薄弱环节查漏补缺。这份资料适合三类人:期末备考的学生、准备软件架构相关资格考试的从业者,以及想系统梳理架构知识体系的开发人员。拿到资料先别问它全不全,该问的是它能不能帮你把考点串成答题的推理链。

2. 从四个核心考点拆解软件体系结构复习主线:风格、视图、属性与评估

2.1 体系结构风格:分层、管道-过滤器与事件驱动的辨别要点

体系结构风格是软件体系结构复习资料里的第一个重头戏,几乎所有版本的复习材料都把这一节放在最前面。风格回答的问题是"这一类系统按什么规则组织组件和连接件"。我建议不要逐个背定义,而是按"控制流和数据流"两条线索把风格排成一条从紧耦合到松耦合的光谱:最左是严格调用-返回的分层风格,最右是匿名通信的事件驱动风格,中间夹着管道-过滤器、客户端/服务器和仓库风格。考试里的风格辨别题,本质上是判断给定系统在这条光谱上的位置。

分层风格的核心机制是每层只依赖相邻下层,上层通过接口调用下层服务。它的优势集中在可修改性上:替换某一层的实现,只要接口不变,其他层基本不受影响,所以分层是银行、政务这类对可维护性要求极高的系统的首选。代价同样明显:请求逐层经过,响应时间不断叠加,性能敏感场景容易受批评;另一个常见毛病是"层穿越",上层绕过中间层直接调用底层,短期省事,长期会把分层结构腐蚀成一个大泥球。复习资料里常考的辨析题是"分层和微服务怎么区分",记住一句:分层是逻辑组织方式,微服务是部署协作方式,两者并不互斥,可以组合出现。

管道-过滤器以数据流为骨架:每个过滤器有独立的输入输出,管道负责在过滤器之间搬运数据。整套结构像一条流水线,单个过滤器可以独立替换、独立复用,处理步骤也能增量添加,非常适合编译器前端、数据处理管线这类任务。它的短板在于过滤器之间难以进行双向交互,共享全局状态更是别扭,一旦业务需要多个过滤器协同完成,这种风格就会处处掣肘。识别信号很直接:系统描述里出现"数据依次经过多步处理",基本就是管道-过滤器。

事件驱动风格也叫隐式调用,让组件通过发布事件和订阅事件通信,发布者不知道订阅者是谁。这种风格把耦合降到最低:新增一个订阅者不需要改动发布者的任何代码,扩展性因此非常好,UI 框架、消息总线、物联网平台都是典型场景。但它有两个让架构师头疼的副作用:系统运行时的行为难以追踪,出问题时不好定位"是谁触发了什么";事件在高并发下可能爆发式增长,性能模型很难预估。复习判断要点:出现"监听、广播、订阅"这类词汇,优先想到事件驱动。

客户端/服务器、微内核、仓库风格考察频率略低,但也别跳过。C/S 的考点在于识别集中式服务的瓶颈:所有请求汇聚到服务器,扩展性受限,考法通常是"为什么该系统出现性能瓶颈、如何改进"。微内核的考点是"核心最小化加插件扩展",接口设计难度高,识别信号是插件体系。仓库风格的考点是共享数据中心的协作模式,适合知识密集型系统。这部分最有效的复习方式是做一张对比表,把五种风格的核心机制、优势、劣势、识别信号横向排开,考前扫一眼比重读十遍教材有用。

风格核心机制主要优势主要劣势识别信号
分层层间调用-返回可修改性、复用性能损耗、层穿越依赖逐层传递
管道-过滤器数据流经各过滤器组件复用、增量替换组件难交互、共享难数据链式处理
事件驱动发布-订阅低耦合、易扩展行为难追踪、性能难估监听、广播
客户端/服务器请求-响应集中管理、模型简单服务器瓶颈集中服务节点
微内核核心加插件可扩展、隔离好接口设计复杂插件体系

2.2 4+1 视图模型与体系结构描述:视图、UML 与 ADL 怎么考

视图模型的考点分两个层次:第一层是背出 4+1 是哪五个视图、每个视图回答什么问题;第二层是给一段项目场景,判断某个设计决策应该落到哪个视图。很多考生只做到第一层,碰到"这个并发方案应该在哪个视图中体现"这类题就翻车。复习资料在这一节的标准写法是:先讲清五视图,再配一组"图—视图"的对应关系,最后拿一道判断题收尾。

4+1 视图模型把体系结构拆成五个相互补充的视角。逻辑视图面向功能需求,用类图和对象图表达功能分解职责;开发视图面向代码组织,表达模块划分、分层和依赖关系;进程视图面向并发和同步,表达进程、线程以及它们之间的通信方式;物理视图面向部署环境,表达组件在硬件节点上的分布;场景作为+1,用用例把四个视图串联起来,回答"这些视图如何共同满足一个具体需求"。记忆口诀是:功能看逻辑、代码看开发、并发看进程、部署看物理、需求看场景。

注意:视图划分的依据是"关注点"而不是"图类型"。同一张组件图,画的是部署节点就是物理视图,画的是进程间通信就是进程视图。做题先判断图的语义,再对视图,顺序不能反。

这一节的高频考题是"为什么软件体系结构需要多个视图"。答题要点:单一视图无法同时表达功能、并发、部署等多个维度,不同涉众关心不同视图,视图分离才能控制复杂度。另一个常考变体是"性能问题应该从哪个视图分析",答案是进程视图,因为性能、并发、同步都发生在运行时,逻辑视图和开发视图是静态结构,解释不了性能问题。把这两个要点写进答案,基本能拿满这一小题的分。

体系结构描述语言(ADL)和 UML 的关系也是固定考点。ADL 有三个核心成分:组件、连接件和配置。组件是计算单元,端口定义交互点;连接件是组件之间的交互通道,承载交互协议;配置描述组件与连接件的拓扑约束。UML 是通用建模语言,虽然可以用组件图近似表达体系结构,但缺少对连接件语义和体系结构约束的严格描述,这就是"UML 不是 ADL"的答题核心。复习时只要抓住"ADL 把交互本身建模为一等实体"这一句,足够应对绝大多数判断题和简答题。

2.3 质量属性与战术:性能、可用性、可修改性怎么落到考点

质量属性是软件体系结构里最容易被轻视的板块,因为名字听起来像常识。但考试恰恰喜欢在常识里设陷阱:问"系统要求高可用,请给出体系结构层面的支持手段",多数考生只会写"做备份、加集群",写不出战术名称,更说不出落地机制,分数卡在中间档。复习质量属性的正确顺序是"属性—场景—战术—机制"四层一起记。

属性是目标,场景是描述属性的具体方式,包含触发源、环境、响应和度量;战术是实现属性的体系结构决策,机制是战术的具体实现技术。举例:可用性属性对应场景"服务器宕机 30 秒内系统自动恢复",战术是"错误恢复中的冗余与故障切换",机制是"主备双机加心跳检测加自动切换"。考试答题写到机制这一层,才算有效答案;只写到"采用冗余"四个字,和没写差别不大。

性能属性的核心战术分三类:资源管理(引入并发、增加资源、引入缓存)、资源调度(优先级、时间片、先到先服务)和资源仲裁(负载均衡、仲裁策略)。可用性属性常用的战术是错误检测(心跳、异常检测)、错误恢复(冗余、重试、故障切换)和错误预防(事务、补偿机制)。可修改性属性的战术围绕"局部化修改"展开:模块化、高内聚低耦合、维护接口稳定、防止连锁修改。安全性属性几乎固定考认证、授权、加密、审计四件套。

战术名字特别容易串:心跳和冗余都属可用性,但一个是检测手段、一个是恢复手段;缓存属性能的资源管理,不是可修改性;负载均衡属性能的资源仲裁,不是可用性。一个靠谱的复习资料会在这一节配一张"属性→战术→机制"的映射表,复习时遮住右侧一列做自测,能写对才算过关。我见过不少考生在这张表上吃亏,不是因为难,而是因为只看不写,眼睛记住了、手没记住。

2.4 体系结构评估:SAAM 与 ATAM 的流程与关键产出

体系结构评估是复习资料的收尾大章,也是最容易在考场上写流水账的部分。SAAM 和 ATAM 名字相近、流程相似,很多考生背混:场景收集、架构描述、场景映射这些步骤两边都有,差别只在评估重心和输出物。整理复习资料时,我一般建议把两者的流程做成并排对照,而不是各背各的。

SAAM 是场景驱动的评估方法,核心回答"该体系结构能否支撑可修改性"。流程简化为四步:收集并开发场景、描述体系结构、把场景映射到体系结构视图、评估场景对体系结构的影响并给出结论。SAAM 适合在项目早期快速筛查体系结构风险,但不涉及多个质量属性之间的权衡,所以它的输出物里不会有权衡点。

ATAM 在 SAAM 基础上加了权衡这一步。输入是三部分:业务动机、体系结构描述、质量属性场景;输出是四类:体系结构描述、敏感点列表、权衡点列表、风险与非风险主题。敏感点指对某个质量属性影响显著的体系结构决策,权衡点指同时影响多个质量属性的决策点。举例:"用缓存提升性能但降低可修改性",缓存这个决策就是一个权衡点。ATAM 的完整步骤常见版本是九步,考试默写时用六步浓缩版也够:介绍方法、描述业务动机、描述体系结构、收集质量属性场景、分析场景与体系结构的映射、生成敏感点和权衡点清单。

分辨两者的口诀:SAAM 回答"好不好改",ATAM 回答"多个目标之间怎么取舍"。如果题目要求"识别体系结构中的风险"或"给出权衡分析",一定是考 ATAM 的输出物。评估章节的复习策略是多做一道高仿真综合题,把步骤、输入、输出完整写三遍,比反复默背概念可靠——这是我自己备考时验证过最有效的方式。

3. 把复习资料变成答题能力:评估流程与风格选择的推演路径

3.1 从质量场景出发:ATAM 评估题的答题模板

很多考生背下 ATAM 的九个步骤,却在案例分析题里无从下手,因为题目根本不会问"请复述 ATAM 步骤",而是给一段系统描述,让考生评估它的体系结构并给出依据。这时候需要一个可复用的答题模板。我一般建议按四段式写:先列业务动机与体系结构特征,再写质量属性场景,然后做场景到视图的映射分析,最后输出敏感点、权衡点和风险清单。

第一段不要复述需求,直接提取关键决策。假设题目给了一个订单系统,描述里反复提到"高峰期流量翻倍""促销规则经常改",你要在答案里点出两个体系结构特征:一个是处理能力依赖单一数据库,另一个是促销规则以硬编码方式散落在业务模块中。这两句话是后面所有分析的前提,写得准,后面三段才有根基。

第二段把需求转成质量属性场景。高峰期流量对应性能场景,写成"并发 500 用户提交订单时,平均响应时间不超过 200ms";促销规则频繁变更对应可修改性场景,写成"新增一种促销规则,改动范围不超过两个模块,工作量不超过 1 人日"。注意场景必须带度量,没有度量的场景在评分时会被当成功能需求,这是最容易丢分的地方。

第三段是得分核心:把每个场景映射到具体视图和具体组件。性能场景映射到进程视图,分析请求链路上哪个环节会成为瓶颈,常见落点是数据库连接池和单点数据库;可修改性场景映射到开发视图,指出规则逻辑散落在哪些模块。每写一个映射都要带一句理由,只写"该场景映射到进程视图"不给解释,和没写一样。

第四段收束为敏感点与权衡点。数据库单点既是性能敏感点,也是可用性风险;规则硬编码是可修改性敏感点。如果题目要求权衡分析,就补一句取舍建议:引入规则引擎能提升可修改性,但多一层间接调用,性能上有代价,需要评估收益是否覆盖成本。这句话同时覆盖了敏感点、权衡点和决策建议三个评分点。

3.2 给定需求选风格:综合题的推演顺序与决策依据

风格选择题是案例分析题的另一半江山。题目通常是一段业务描述加几个候选风格,让考生选出最合适的并说明理由。推演顺序是固定的:先标出系统最关键的两三个质量属性,再逐个排除候选风格,最后确认被选风格的短板在本场景中是否可以接受。

举一个推演过程的示例(仅作方法示范)。一个系统要求:支持多种外部数据源接入,每种数据源格式不同,接入后需要清洗、转换、汇总,且未来会持续增加新数据源。候选风格是分层、管道-过滤器、事件驱动。先看关键质量属性:新增数据源的可修改性最重要,处理链路的可插拔次之。管道-过滤器天然把每个处理步骤做成独立过滤器,新数据源只需新增一组过滤器和管道,旧组件零改动,与"持续增加数据源"完全匹配。分层也能做,但每加一种数据源可能要改多个层,改动范围明显更大;事件驱动适合动态装配场景,但题目里没有明显的发布-订阅需求。

决策依据要写清楚三句话:候选风格的机制与场景的匹配点、该风格的固有短板在本场景中是否致命、与次优方案的差距有多大。管道-过滤器在本题中的短板是过滤器之间难以通信,但数据源接入本来就是单向数据流,这个短板完全不致命,所以选它没有悬念。答题时把这三句话写出来,比直接写"我认为应该选管道-过滤器"得分稳得多,因为评分看的是推理过程,不是结论本身。

3.3 架构设计中的反模式与易混概念:三个高频辨析

复习资料的最后一类考点是反模式和易混概念辨析。反模式里最高频的是烟囱式系统,表现为每个业务单元自建一套垂直完整的技术栈,互不共享,导致复用率低、维护成本随业务数量线性上升,对应解法是沉淀公共服务层或平台层。其次是"架构模糊":系统没有清晰的体系结构描述,组件边界随开发逐渐消失,对应的评估手段就是拿 SAAM 或 ATAM 做一次架构体检。

易混概念里最典型的三个对比。第一个是体系结构风格与设计模式:前者是系统级组织范式,后者是类级实现方案,粒度不同,答题收尾用一句"一个作用于全局、一个作用于局部"。第二个是体系结构与框架:体系结构是设计决策的集合,框架是可供复用的半成品实现,框架是体系结构的一种具体化,考判断题时注意"框架就是体系结构"是错的。第三个是逻辑视图与开发视图:逻辑视图回答功能怎么分解,开发视图回答代码怎么组织,同一个功能可以跨多个模块,但隶属同一个逻辑视图,考试常拿这个组合考判断题。

这四个小节其实是复习资料里"应用层"的内容。我的习惯是学完概念后立刻做一整套综合题,把风格选择、视图映射、质量属性、评估方法串在一道题里,检验自己能不能从一个需求走到一个评估结论。能走通,才算把复习资料读懂了,否则只是读过了。

4. 软件体系结构复习避坑指南:五个高频踩坑现象、原因与对策

4.1 把体系结构风格和设计模式混为一谈

现象:考试问"管道-过滤器属于什么",答案写"这是一种设计模式";或者反过来,把单例、观察者写进体系结构风格列表。这两种答案在考场上都算硬伤。

原因:多数人的学习顺序是先学设计模式、后学体系结构,两个概念都讲"结构",名称又接近,潜意识里就归成了一类。加上复习资料经常把"模式"和"风格"两个词混用,教材措辞不统一,进一步加深了混淆。

解决:用"作用范围"一刀切开。设计模式作用于类的组织与交互,解决局部设计问题;体系结构风格作用于系统级组件与连接件的组织,解决全局结构问题。复习时各列一张清单,对照记忆。判断题出现"观察者模式属于体系结构风格"这类表述,直接判定错误,因为观察者是事件驱动风格在代码级的一种实现机制,方向反了。

4.2 把视图和 UML 图机械对应后套用

现象:看到"类图"就说是逻辑视图,看到"部署图"就说是物理视图,结果题目给一张带并发标注的组件图,考生就卡住了,不知道该归到哪个视图。

原因:复习资料为了便于记忆,常把视图和 UML 图做简化对应,考生把简化对应背成了硬对应,忘了视图表达的是"关注点",图只是载体。

解决:回到视图的本质——每个视图回答一类问题。逻辑视图回答功能分解,进程视图回答并发与同步。不管载体是序列图、活动图还是组件图,只要表达的是运行时的并发行为,就属于进程视图。做题先判断图的语义,再对视图,顺序不能反。这个原则在应用题里比任何图类型对照表都可靠。

4.3 把质量属性写成功能需求

现象:题目问"该系统对可修改性有什么要求",答案写"支持管理员修改订单状态"。这句描述的是功能需求,不是质量属性,在评分里直接丢分。

原因:质量属性的定义是"系统的非功能特征",但落到具体描述时,很多考生本能地举功能例子,把"能做什么"当成了"质量好不好"。

解决:质量属性描述必须带"度量"和"条件"。可修改性写成"在需求变更发生时,修改影响范围控制在两个模块以内,改动工作量不超过 1 人日";性能写成"并发 500 用户时,平均响应时间不超过 2 秒"。带度量的描述才是合格的质量属性场景,这也是案例分析题区分度最高的地方。复习时专门做一个练习:把十个功能需求改写成质量属性场景,练完这个转换就通了。

4.4 SAAM 与 ATAM 的步骤和输出张冠李戴

现象:把"生成权衡点清单"写进 SAAM 的输出,或者把"评估可修改性"说成 ATAM 的唯一目标。两个方法的名字太接近,默写时一紧张就串。

原因:两个方法共享大量公共步骤,复习时只记了公共部分,没记差异部分,考场上公共步骤写出来了,差异点全凭印象。

解决:按"输入—过程—输出"三栏做对比。SAAM 输入是场景集,过程是场景映射,输出是可修改性结论;ATAM 输入含业务动机和体系结构描述,过程多了敏感点和权衡点识别,输出是风险主题清单。做题先判断题目问的是"评估目标"还是"权衡分析",再调用对应清单。把这张对比表贴在复习资料的第一页,每次翻资料先看一遍。

4.5 只背概念不做场景题,考场上写不出推理过程

现象:名词解释都背熟了,一到案例分析题,答案写得短而空,全是"该系统具有较好的可扩展性"这类没有依据的断言,原因、映射、权衡一个都没有。

原因:复习节奏失衡。概念题是输入性记忆,场景题是输出性推理,前者花一小时能见效,后者需要反复练习,多数考生倒在舒适区,反复背概念书,一道场景题都不碰。

解决:把复习时间的四成留给场景题。找两三个综合案例,先自己写完整答案,再对照标准答案标出遗漏的质量属性、遗漏的战术名称和缺失的理由。每道题做三遍,第三遍要求在 40 分钟内独立写完。能做到这一步,第 2、3 章的内容才算真正转化为考试分数,否则只是看起来复习完了。

5. 考前一周:把复习资料从"读过"变成"能默写"的三个技巧

考前一周最怕的不是没复习完,而是翻开资料都认识、合上资料全空白。这种现象的本质是"识别性记忆"和"回忆性记忆"的差距:前者看到关键词能唤醒内容,后者需要从零生成内容,考试考的主要是后者。三个技巧可以帮你完成这个转换。

技巧一是"目录反向回忆"。把复习资料的目录当成题单,只看章名和节名,不看正文,自己在空白纸上默写每个小节应该包含哪几个知识点、每个知识点的一句话结论。默写完再对照正文,补上漏掉的内容。这个动作每天做一次,每次 20 分钟,一周下来,目录本身就成了一张知识地图,考试时看到题就能定位到地图上的位置。

技巧二是"三分钟默写卡"。挑五个高频考点——五种风格、4+1 视图、质量属性战术表、ATAM 流程、SAAM 与 ATAM 对比——各做一张卡片,正面是关键词,背面是完整内容。每天随机抽两张,限时三分钟默写,写不完的标记为薄弱项,当天晚上重点重看对应章节。这个方法比刷题更早暴露盲区,因为默写没有提示,记忆断层会完全暴露,补起来也更有针对性。

技巧三是"场景题限时训练"。找两道经典的体系结构评估题,设定 40 分钟倒计时,按第 3 章的答题模板完整写一遍。写完后过一遍答案,只改两类问题:缺度量的质量属性描述、缺理由的视图映射。考前七天每天练一道,手感和熟练度的提升比考前突击背四套概念扎实得多,因为推理能力是练出来的,不是背出来的。

我自己的收尾习惯是考前三天不再学新内容,所有时间都用于默写和限时训练。软件体系结构这门课考点有限、题型有限,查漏补缺的效率远高于开拓新知。最后一件事,把易混对照表贴在书桌正前方,每天出门前看一眼、回来再看一眼,五天下来该记住的边界自然就清了。希望这份复习路径能帮到你,祝你顺利通过。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 4:21:20

eCharts 344县区地图资源:GeoJSON注册与两种加载方式实战

简介:这是一份面向 Web 前端开发者与数据分析师的 eCharts 地图资源包,目标是在中国县级行政区划层面实现可视化展示与交互操作。资源提供 344 个县区的地图数据,并围绕两种常见集成方式给出可运行的 demo:其一是直接引用内置预置…

作者头像 李华
网站建设 2026/10/18 4:21:18

Flutter拖拽交互实战:Draggable与DragTarget从入门到排坑

拖拽交互在App里并不稀奇,但Flutter里想写一个“把数据从一个区域拖到另一个区域”的功能,很多人第一次碰Draggable还是会踩坑。不是拖不起来,就是拖过去了目标区不认,再不然就是两个列表的数据对不上、界面不刷新。今天我拿一个很…

作者头像 李华
网站建设 2026/10/18 4:17:36

C#使用Open XML SDK生成PPTX:零Office依赖的离线方案

简介:本资源是一份面向C#开发者与Office自动化实践者的Open XML SDK实战项目,聚焦于使用纯代码动态生成PowerPoint演示文稿,无需依赖PowerPoint应用程序。适用于Windows桌面应用开发、自动化报告生成、教学课件批量制作等场景,适合…

作者头像 李华
网站建设 2026/10/18 4:17:07

BLE低功耗设计-第10章第4题-定时器合并唤醒策略如何优化低功耗

蓝牙面试题解析:定时器合并唤醒策略如何优化低功耗? 难度:⭐⭐⭐⭐ 较难 | 场景:社招二面、定时器合并 | 高频:🔥🔥🔥🔥 标准答案 定时器合并将多个定时器对齐到同一时间点(或窄窗口) 触发,减少唤醒次数,延长连续深睡时间,是 BLE 软件最重要的省电手段之一。 …

作者头像 李华
网站建设 2026/10/18 4:16:19

CS自学指南课程地图:1个实验跑通,3条路线主攻

CS自学指南课程地图:1个实验跑通,3条路线主攻 【免费下载链接】cs-self-learning 计算机自学指南 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning 打开 cs-self-learning 仓库,十几个方向、上百篇课程文档列在目…

作者头像 李华
网站建设 2026/10/18 4:11:14

Revula:基于MCP的逆向工具链自动化服务实践

拿到一个来路不明的文件,先看格式,再查壳,再提字符串、拉导入表,最后丢进反编译器等伪代码——这套逆向工具链路本身很成熟,但它最大的问题不是缺工具,而是工具们谁也不跟谁说话,输出格式各写各…

作者头像 李华