软件测试面试复盘:从工具使用到测试思维与工程能力的跃迁

发布时间:2026/9/3 3:16:29

软件测试面试复盘:从工具使用到测试思维与工程能力的跃迁
面试软件测试岗一上午面了4个人简历上都写着“熟悉软件测试流程”“掌握接口测试”“会自动化”结果聊到具体项目就露馅。问接口测试怎么设计用例只会说“用Postman调一下”问数据库怎么验证数据一致性反问“为什么要验证”问自动化框架怎么搭直接背八股文换一个业务场景就卡住。不是说候选人态度不行而是很多人的测试能力停留在“会用工具”的层面没有形成“测试思维 工程能力”的闭环。这篇文章不讨论谁对谁错纯粹把面试中反复踩到的共性问题做一次复盘顺便给正在准备软件测试面试的人一条可执行的提升路径。如果你是刚入门软件测试的初学者、准备跳槽的功能测试工程师或者想从手工测试转自动化测试这篇内容可以直接帮你对照查漏。1. 核心能力速览从面试官视角看软件测试岗的要求可以拆成下面几个层级不同年限对应不同要求能力项初级测试0-2年中级测试2-5年高级/资深测试5年测试理论基础熟悉测试流程、用例设计方法能独立完成测试计划与策略能搭建质量保障体系接口测试会用Postman/JMeter调试接口能独立设计接口测试用例掌握鉴权、加密、边界场景能搭建接口自动化框架并持续集成自动化测试了解Selenium/Appium基本原理能独立搭建自动化框架处理等待、断言、报告能设计测试平台或二次开发框架数据库能力会基本的增删改查能写多表关联查询会数据构造与清理能分析数据一致性、幂等性、死锁等问题性能测试了解性能测试概念能用JMeter/LoadRunner执行场景并分析结果能从代码、SQL、架构层面定位性能瓶颈Linux会看日志能操作文件、进程、端口会写Shell脚本能配合排查线上问题理解容器化环境编程能力了解一门语言基础语法能写测试脚本和简单框架能独立开发测试工具或平台4个面试者最典型的共性问题是工具用得很熟练但能力停留在“会用”层面一追问原理和场景设计就崩。下面按面试顺序把问题拆开讲。2. 面试复盘4个候选人的共性问题先说结论这4个人不是完全不会而是都有明显的“偏科”候选人A3年功能测试经验简历写“熟悉软件测试流程”。问项目细节时只描述了“根据需求文档写用例、执行用例、提Bug”再问“用例覆盖率怎么保证”“需求不明确时怎么推进”直接答不上来。这是典型的流程执行者不是质量保障者。候选人B2年经验接口测试项目写得很丰富。但让他现场设计一个“用户下单”接口的测试用例只列出了“正常下单成功”一个场景。没有考虑参数边界、鉴权失效、库存超卖、订单幂等性、第三方支付回调异常。这是把接口测试做成了“用Postman调通”没有形成系统性的接口测试设计思路。候选人C1年经验自学过自动化。问Selenium定位元素背得很熟但问“页面元素动态加载导致定位失败怎么处理”只回答“用sleep”。这是典型的背题式学习遇到真实问题没有分层排查的思路。候选人D应届生简历写了“熟悉Linux和MySQL”。让他写一个查询“近30天订单金额TOP10用户”的SQL写不出来。问他“线上发现500错误怎么查”只说“看日志”但看什么日志、怎么看、怎么定位是前端问题还是后端问题全都说不清楚。这几个问题不是个例而是软件测试面试里非常典型的“能力泡沫”。简历上所有技能都能写但面试官只要围绕“场景 为什么”连续追问真实水平立刻暴露。3. 软件测试岗位的底层能力模型面试官最看重的不是会多少工具而是遇到一个陌生业务时能不能快速找出风险点、设计出有效用例、并能通过工具和代码把验证过程落地。可以把底层能力拆成四个维度3.1 业务分析能力拿到一个需求先想清楚这个功能的价值是什么谁是用户最关键的操作路径是什么最容易被攻击或出错的环节在哪里业务分析能力决定了测试用例的有效性而不仅仅是用例数量。3.2 测试设计能力测试设计不是把需求文档里的功能点列出来而是需要掌握等价类、边界值、场景法、判定表、正交试验等设计方法并知道什么时候用哪种方法。更关键的是要有风险意识时间有限时优先测哪个场景。3.3 技术落地能力测试最终要通过工具或代码落地。接口测试要能独立处理鉴权、加密、签名、文件上传自动化测试要能处理元素等待、测试数据管理、断言、报告生成性能测试要能读懂聚合报告中的TPS、响应时间、错误率指标。3.4 质量闭环能力发现Bug只是起点还要能做Bug定位、缺陷分析、回归策略、线上监控。面试官问“如何保证测试覆盖率”时期望听到的是“需求评审 用例评审 交叉测试 线上埋点”这样的闭环思路而不是“多用几条用例”。4. 面试中最容易暴露短板的6类问题结合当天面试的实际提问整理出下面6类高频问题每一类都对应一个能力层面。准备面试时按这个清单自查即可。问题类型典型提问方式考察目标常见失败表现项目深挖“讲一个你印象最深的Bug”是否真实做过项目是否有复盘能力只讲现象不分析根因用例设计“微信朋友圈点赞功能怎么测”测试设计方法与思维广度只能列出3-5条正向用例接口测试“下单接口如何设计测试用例”接口测试的完整性与异常场景覆盖只测正常参数忽略鉴权和幂等数据库“如何统计连续3天登录的用户”SQL能力与业务结合能力基本语法会复杂查询不会自动化“元素定位失败怎么排查”是否理解自动化原理而非背API只会加sleep或换xpath排查问题“线上接口突然超时怎么排查”问题定位思路只说“看日志”5. 接口测试实战演示从Postman到自动化用例5.1 接口测试用例设计当天让候选人B设计“用户下单”接口测试用例这是一个很典型的业务接口考察点覆盖功能、鉴权、参数、异常、幂等、并发。一个相对完整的接口测试用例集至少包含以下维度测试维度具体场景预期结果正常流程用户已登录库存充足参数合法下单成功返回订单号参数校验商品ID为空、数量为0、数量为负数返回参数错误不生成订单边界值库存只剩1件下单数量为1下单成功库存扣减为0鉴权校验未登录、Token过期、Token伪造返回401/403不生成订单幂等性同一请求重复提交两次只生成一个订单并发控制多个请求同时购买最后一件商品只有一个请求成功依赖异常调用库存服务超时返回友好提示订单状态不变金额计算商品单价与数量组合、优惠券叠加订单金额计算正确只用Postman把接口“调通”和完成接口测试是两回事。面试时如果能主动说出“我要检查幂等性”“我要验证并发下库存不超卖”即使项目经验浅也会让面试官认为你有测试设计意识。5.2 接口自动化测试示例接口自动化测试的核心是“可重复执行 断言自动化”。下面给一个Python requests的示例实际项目中按自己的接口地址和鉴权方式调整import requests import pytest BASE_URL https://api.example.com TOKEN your_token_here def test_create_order_success(): 正常下单流程 url f{BASE_URL}/api/order/create headers {Authorization: fBearer {TOKEN}} payload { product_id: 1001, quantity: 2, address_id: 88 } resp requests.post(url, jsonpayload, headersheaders, timeout10) assert resp.status_code 200 data resp.json() assert data[code] 0 assert data[data][order_id] is not None def test_create_order_without_token(): 未登录下单应失败 url f{BASE_URL}/api/order/create payload { product_id: 1001, quantity: 1, address_id: 88 } resp requests.post(url, jsonpayload, timeout10) assert resp.status_code in (401, 403) def test_create_order_invalid_quantity(): 非法数量参数 url f{BASE_URL}/api/order/create headers {Authorization: fBearer {TOKEN}} payload { product_id: 1001, quantity: 0, address_id: 88 } resp requests.post(url, jsonpayload, headersheaders, timeout10) assert resp.status_code 200 data resp.json() assert data[code] 40001 # 参数错误码这个示例展示了完整用例的写法核心是三个部分构造请求、发起请求、断言响应。面试官更看重的是你能不能把异常场景覆盖完整而不是会不会requests.post。5.3 测试数据构造与清理接口测试最容易忽略的问题是测试数据管理。真实业务中下单会占用库存、生成支付单、影响用户余额。测试后不清理数据环境会越跑越脏。建议用以下方式管理每个用例使用独立测试账号避免相互影响。接口测试前通过API或SQL构造数据而不是依赖手工造数。用例结束后执行清理逻辑删除测试订单或恢复库存。针对幂等性测试可以约定一个固定的请求ID用相同的请求ID重复提交。6. 自动化测试能力验证从录制到框架搭建6.1 自动化测试面试的核心问题候选人C在面试中背了Selenium的API但问“元素定位失败怎么排查”就只会答“加sleep”这说明对自动化的理解还停留在录制回放的层面。实际上自动化测试真正要解决的是三件事元素定位稳定性页面重构、动态加载、多端适配时定位器能不能继续工作。用例执行稳定性网络波动、数据变更、环境差异下用例是否还能稳定通过。结果可读性失败时能不能快速定位是代码问题、数据问题还是环境问题。6.2 等待策略的工程写法不要把sleep当成万能药正确的是组合使用显式等待和条件判断。下面是一个简单示例from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def wait_for_element(driver, locator, timeout10): 等待元素出现并返回元素对象。 优先使用显式等待而不是固定sleep。 return WebDriverWait(driver, timeout).until( EC.presence_of_element_located(locator) ) def test_login(driver): driver.get(https://example.com/login) # 等待用户名输入框可交互 username_input wait_for_element(driver, (By.ID, username)) username_input.send_keys(test_user) # 等待密码输入框可交互 password_input wait_for_element(driver, (By.ID, password)) password_input.send_keys(test_pass) # 点击登录 login_button wait_for_element(driver, (By.ID, login-btn)) login_button.click() # 等待跳转后的首页元素出现 wait_for_element(driver, (By.CLASS_NAME, dashboard))真实项目中元素定位失败的原因往往不是“等得不够久”而是页面存在多个相同xpath定位到不可见元素。iframe嵌套导致定位不到内部元素。元素属性值是动态生成的不能用固定值匹配。页面样式更新后class属性被修改。面试时如果能答出这些说明你真的处理过自动化测试的稳定性问题而不是只跑通了一个demo。6.3 UI自动化用例设计思路UI自动化不是把手工用例全部脚本化而是优先覆盖三类用例冒烟用例主流程比如登录、首页加载、核心操作。回归用例易受需求变更影响的模块比如用户中心、订单流程。数据展示类用例列表、详情页、分页的字段展示。建议用Pytest Selenium Allure的组合Pytest负责用例组织Selenium负责浏览器操作Allure负责测试报告展示。框架搭建不是重点重点是让框架具备失败自动截图、失败重跑、用例数据驱动这三个能力。7. 数据库与线上问题排查能力7.1 面试中的SQL场景题候选人D被问到“查询近30天订单金额TOP10用户”没有写出来。这是一个典型的测试场景题因为测试过程中经常需要验证活动排名、用户分群、订单统计等业务逻辑。参考写法SELECT user_id, SUM(order_amount) AS total_amount FROM orders WHERE order_time NOW() - INTERVAL 30 DAY AND order_status SUCCESS GROUP BY user_id ORDER BY total_amount DESC LIMIT 10;测试工程师写SQL不需要像DBA那样精通性能优化但至少要做到多表关联查询比如用户表、订单表、商品表。聚合函数统计比如COUNT、SUM、GROUP BY。使用子查询或窗口函数完成复杂统计。能构造测试数据并验证统计结果的正确性。7.2 线上问题排查思路“线上接口突然超时怎么排查”是面试里经常出现的高频问题一个相对完整的排查路径是1. 确认影响范围是所有用户还是部分用户所有接口还是单个接口 2. 查看网关日志和接入层日志确认请求是否到达后端。 3. 查看应用日志找到超时堆栈或错误日志区分连接超时和读取超时。 4. 检查数据库慢查询、连接数、锁等待。 5. 检查依赖服务第三方API、消息队列、缓存是否正常。 6. 检查系统资源CPU、内存、磁盘IO、网络带宽。 7. 检查近期发布是否有新代码上线、配置变更、数据库变更。面试官问这个问题期待的是你的“排查顺序”和“分层意识”不是期待你一次性定位到根因。候选人如果只说“看日志”等于没说。8. 常见问题与排查方法问题现象可能原因排查方式解决方案测试用例写了很多但Bug漏测用例设计停留在功能点罗列缺少场景和异常覆盖对照需求文档梳理业务主流程、分支流程、异常流程使用场景法、判定表补充用例做用例评审接口测试跑通但线上出问题只测了正常参数没覆盖鉴权、边界、幂等检查接口文档和线上日志对比测试环境差异建立接口测试用例矩阵加入异常场景自动化脚本执行不稳定使用固定sleep等待元素定位不准观察失败截图和日志分析是等待问题还是定位问题改用显式等待优化定位器增加失败重跑机制线上问题无法定位缺乏分层排查思路按前端、网关、后端、数据库顺序逐步排查建立标准的线上问题排查SOP测试环境数据被污染用例之间共享数据缺少清理机制检查测试数据构造逻辑独立测试账号前置构造数据后置清理数据性能测试结果波动大压测数据不真实并发模型不合理检查压测脚本和监控数据使用真实业务比例建模多次压测取平均值面试被问项目细节就卡住项目经验流于表面没有总结复盘整理每个项目的业务背景、测试范围、典型Bug、个人贡献用STAR法则重新梳理项目经历9. 软件测试面试准备的最佳实践结合当天面试的问题给准备测试岗面试的人几个建议第一先把项目经历重新过一遍。不要只写“参与了XX系统测试”要写清楚项目业务是什么你负责哪个模块用了什么测试方法发现过什么有价值的Bug这个Bug怎么定位的项目上线后有没有出过问题很多候选人简历写得很大一深挖就虚原因是项目不是自己做的或者做完没有复盘。第二建立自己的测试用例设计模板。针对常见业务场景比如登录、下单、支付、搜索、列表分页、文件上传提前准备好一套完整的测试用例思路。面试时遇到类似场景直接按模板展开正常流程、参数校验、权限校验、异常依赖、幂等性、并发一致性。这套模板不仅能应付面试也是实际工作中的核心能力。第三接口测试和数据库是必考项。软件测试面试中接口测试和数据库几乎是必问的。接口测试要掌握请求构造、鉴权处理、断言设计、数据清理数据库要掌握增删改查、聚合统计、多表关联、窗口函数。这两项能力过关基本可以超过60%的面试者。第四自动化测试要会讲框架设计而不是只会API调用。面试官不会只问你“selenium怎么定位元素”而是会问“如果你的框架需要支持多套环境、多组测试数据、失败自动截图你怎么设计”。提前准备一个简单但完整的自动化框架项目比刷100道面试题更有效。第五性能测试要理解指标而不只是会跑JMeter。TPS、响应时间、错误率、CPU使用率、内存占用这些指标要能说清楚“用户感受到的慢”对应的是哪个指标性能瓶颈可能出现在哪类组件上。10. 总结与下一步软件测试岗位的需求正在发生变化。纯手工点点的功能测试岗位在减少越来越多的公司要求测试工程师能承担接口测试、自动化测试、性能测试、持续集成相关工作。面试时“全部都很菜”的现象本质上是很多候选人的能力还停留在“会用工具”的阶段而企业需要的是“能解决质量问题的工程师”。从面试结果看最容易拉开差距的环节不是简历写了什么而是现场能不能把“测试思维”和“工程能力”结合起来。准备面试时建议优先做三件事把最有代表性的一个项目彻底讲透从业务背景到测试设计再到Bug定位。把接口测试用例设计模板和SQL常用场景练熟这是性价比最高的两项技能。自己动手搭一个最小的自动化测试框架哪怕只是Pytest Requests Allure也比背API强。如果你正在准备软件测试面试可以从今天开始按这个清单逐项自查。哪里薄弱补哪里面试前预留两周以上的准备时间比临时刷题要有效得多。后续我也会把接口测试用例设计、自动化框架搭建、性能测试指标分析这几个方向的实战内容单独整理成文方便你按需学习。

相关新闻

技术选型不靠感觉:分布式定时任务多方案评估实战

技术选型不靠感觉:分布式定时任务多方案评估实战

2026/9/3 3:16:29

选择困难症在技术选型里并不新鲜。同一个目标,方案 A 性能表现最干净,方案 B 对周边生态最友好,方案 C 的运维负担最低,方案 D 是团队最早上手的路线。四个候选都有真实依据,评审会却很容易从技术分析滑向观点之争。第…

永磁同步电机FOC矢量控制与SVPWM仿真调参实战指南

永磁同步电机FOC矢量控制与SVPWM仿真调参实战指南

2026/9/3 3:16:28

简介:面向电气工程学生、研究人员与电机控制工程师,这份资源系统讲解现代永磁同步电机(PMSM)控制原理,并配有完整MATLAB仿真工程。核心控制策略,包括电压空间矢量调制(SVM)、直接转矩…

量子计算开发入门:从量子比特原理到Qiskit实战应用

量子计算开发入门:从量子比特原理到Qiskit实战应用

2026/9/3 3:16:28

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

Unity动作游戏技能系统架构设计:数据驱动与事件通信实战

Unity动作游戏技能系统架构设计:数据驱动与事件通信实战

2026/9/3 4:26:33

开发动作游戏,最绕不开的就是技能系统。技能本身并不可怕,麻烦的是随着角色越来越多、技能越来越花哨,代码开始频繁互相引用,一个技能改起来,其他技能跟着遭殃。这篇文章记录一次以 Unity 为基底的动作游戏技能系统架构…

碳源时空驱动AOA系统协同脱氮除磷的微生态机制与工程实践

碳源时空驱动AOA系统协同脱氮除磷的微生态机制与工程实践

2026/9/3 4:26:33

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

点云压缩RAHT改进版MATLAB实现:熵编码优化与MSE评估

点云压缩RAHT改进版MATLAB实现:熵编码优化与MSE评估

2026/9/3 4:26:33

简介:这份代码是区域自适应层次变换(RAHT)的 Matlab 工程实现,对应 Queiroz 与 Chou 提出的 RAHT-rlgr 压缩方案,面向点云压缩、三维数据处理等方向的研究者与工程人员。压缩包共 11 个文件,以 C 源文件、头…

DASOMFINSEthernet 1.5 SP1驱动库实战:部署、集成与调试指南

DASOMFINSEthernet 1.5 SP1驱动库实战:部署、集成与调试指南

2026/9/3 4:26:33

简介:DASOMFINSEthernet 1.5 SP1是Wonderware InTouch与Omron CJ/CS系列PLC之间实现以太网通信的专用驱动程序,面向工业自动化工程师和系统集成人员,用于解决HMI与PLC实时数据交换中的连接配置与通信稳定性问题。压缩包19.03MB,共…

GLM 5.3下自检方式如何影响Agent任务成功率?OpenClaw与Hermes对比

GLM 5.3下自检方式如何影响Agent任务成功率?OpenClaw与Hermes对比

2026/9/3 4:26:33

这篇不用把重点放在“谁更强”上,因为从 Rohan Paul 的实验观察来看,OpenClaw 2.0 和 Hermes Agent 在 GLM 5.3 上的核心差异,不在于模型调用链路,也不在于工具调用的丰富程度,而在于“自检方式”。也就是说&#xff0…

STM32G0轮询式FLASH模拟EEPROM:实现百万次擦写寿命的嵌入式存储方案

STM32G0轮询式FLASH模拟EEPROM:实现百万次擦写寿命的嵌入式存储方案

2026/9/3 4:16:33

简介:本资源是一套面向嵌入式物联网设备开发者的STM32G071平台FLASH存储优化实践方案,聚焦单片机片内FLASH模拟EEPROM的高可靠性实现,解决频繁写入导致的FLASH寿命衰减痛点。方案采用轮询式地址索引管理与智能页擦除策略,通过算法…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…