# 银行金融

# 招商银行真题一

# 1. 自动化是用什么工具开发的脚本?

答题思路
说明自动化测试使用的技术栈和工具,强调选择理由和实际应用效果。

话术
我们主要使用Python语言开发自动化脚本,结合Pytest测试框架和Requests库处理HTTP请求。选择Python是因为其语法简洁、生态丰富,Pytest提供了灵活的用例管理和丰富的插件(如Allure报告),Requests则简化了接口调用。此外,我们会使用Jenkins进行持续集成,定时执行脚本并通知结果。这套工具链高效稳定,覆盖了90%的接口测试需求。


# 2. 用例写了多少条?

答题思路
给出大致数量,并说明覆盖范围和优先级,体用例管理的有效性。

话术
目前积累了约800条自动化用例,覆盖核心业务模块(如贷款申请、还款计划计算等)。其中70%是接口用例,20%是数据校验用例,10%是异常场景用例。我们遵循“核心优先”原则,确保关键路径100%覆盖,非核心功能按需补充。


# 3. 一条用例对应脚本的规模?

答题思路
从代码行数和逻辑复杂度描述典型用例的规模,体现脚本设计的合理性。

话术
一条典型用例的脚本规模在10-30行代码之间。包括:

  • 请求参数构造(如JSON body)
  • 发送请求并获取响应
  • 2-5个断言验证
    我们强调脚本简洁性,避免过度封装,确保可读性和维护性。

# 4. 验证点在脚本里怎么体现的?

答题思路
说明断言的使用方式和验证内容,体现测试的严谨性。

话术
验证点通过**断言(Assert)**体现,主要包括:

  • 状态码验证assert response.status_code == 200
  • 业务码验证assert response.json()["code"] == "SUCCESS"
  • 关键字段值验证:如贷款金额、利息计算结果
  • 数据库一致性验证:查询数据库比对数据是否正确落地
    我们会在关键业务点添加多重断言,确保数据准确性。

# 5. 结合业务详细说一下断言怎么实现的?

答题思路
以贷款业务为例,说明断言如何验证业务规则和数据逻辑。

话术
贷款还款计划生成为例:

  1. 调用还款计划接口,获取JSON响应;
  2. 断言总期数assert len(repayment_plan) == 12(假设12期);
  3. 断言每期本金之和assert sum(plan["principal"] for plan in repayment_plan) == loan_amount
  4. 断言利息计算公式:验证首期利息=剩余本金×利率/365×天数;
  5. 断言还款状态:首期应为UNPAID,已还期数为PAID
    通过这些断言确保业务规则和财务计算的准确性。

# 6. 一条用例里面有几个断言?

答题思路
给出典型数量范围,并解释为什么需要多个断言。

话术
一条用例通常包含3-5个断言。例如测试贷款申请接口:

  1. 状态码=200;
  2. 业务码=SUCCESS;
  3. 返回贷款ID非空;
  4. 数据库贷款状态为“审核中”;
  5. 生成了一条风控记录。
    多断言确保接口返回、业务状态和数据一致性全部正确。

# 7. 说一下贷款的状态都有哪些?

答题思路
列举常见贷款状态及其流转,体现业务理解深度。

话术
贷款状态主要包括:

  • 申请中(PENDING):提交申请未审核
  • 审核中(UNDER_REVIEW):风控审核中
  • 已批准(APPROVED):通过审核待放款
  • 已拒绝(REJECTED):审核未通过
  • 放款中(DISBURSING):资金划拨中
  • 已放款(DISBURSED):资金到账,开始计息
  • 还款中(REPAYING):部分还款
  • 已结清(SETTLED):全部还清
  • 逾期(OVERDUE):未按时还款
  • 坏账(BAD_DEBT):长期未回收

# 8. 关于还款金额和逻辑计算做过功能测试吗?

答题思路
肯定回答,并举例测试方法和场景,体现财务测试的严谨性。

话术
是的,详细测试过。我们会:

  • 等额本息计算:验证每期本金+利息之和是否相等;
  • 提前还款:测试罚息计算和本金减少是否正确;
  • 逾期还款:验证逾期利息和违约金计算;
  • 数据源核对:与业务规则文档和财务Excel计算模板比对,确保分毫不差。

# 9. 还款方式还款逻辑是在那个系统里面进行处理的?

答题思路
说明系统架构,指出核心系统负责计算,外围系统负责触发和展示。

话术
还款逻辑计算主要在银行核心系统(Core Banking System)中处理,因为它涉及账户余额更新、利息计算和账务处理。外围系统(如贷款管理系统或手机银行APP)负责发起还款请求和展示还款计划,但实际计算由核心系统完成,确保数据一致性和准确性。


# 10. 能理解银行外围系统和核心系统的区别吗?

答题思路
对比两者的功能和特点,体现对银行IT架构的理解。

话术

  • 核心系统:处理核心账务(存、贷、汇)、会计记账、利率计算,强调事务性和数据一致性,通常采用大型机或分布式数据库。
  • 外围系统:处理渠道接入(APP、网银)、业务管理(贷款申请、客户管理),更侧重业务流程和用户体验。
    外围系统通过API或消息队列与核心系统交互,保证核心系统稳定高效。

# 11. 说一下贷款到还款的大概的流程?

答题思路
按步骤描述端到端流程,突出关键节点和状态变化。

话术

  1. 申请:客户提交贷款申请,系统进行风控审核;
  2. 审批:审核通过生成合同,客户电子签约;
  3. 放款:核心系统划拨资金到客户账户,生成还款计划;
  4. 还款:客户通过渠道还款,核心系统扣款并更新本金利息;
  5. 结清:还清后更新状态为结清,释放信用额度。
    过程中涉及核心、风控、支付等多个系统协作。

# 12. 测一个贷款业务里面金额的准确性,会设计什么样的用例或场景来覆盖?

答题思路
从边界值、计算规则、异常场景等多维度设计用例。

话术

  • 正常场景:验证等额本息/等额本金每期金额计算正确;
  • 边界值:测试最小贷款金额(如100元)、最大金额(如100万);
  • 利率变化:浮动利率下利息重新计算;
  • 提前还款:部分提前还款后计划更新,罚息计算;
  • 逾期场景:逾期天数与罚息比例匹配;
  • 数据一致性:还款后账户余额、贷款本金同步减少。
    我们会用Excel公式反向验证系统计算结果。

# 13. 实际工作中发现的bug?

答题思路
选择一个典型Bug,描述现象、根因和影响,体现测试价值。

话术
曾发现一个提前还款罚息计算错误的Bug:系统计算罚息时使用了错误的本金余额(误用了初始本金而非剩余本金),导致多收客户罚息。

  • 根因:开发混淆了本金取值逻辑;
  • 发现方式:对比业务规则文档和测试数据计算;
  • 影响:财务损失和客户投诉风险;
    修复后避免了潜在资损。

# 14. 你在测试团队当中测试绩效排名多少位置,或者年终好评?

答题思路
正面回答排名或评价,用事实和数据支撑,体现个人贡献。

话术
在最近绩效评估中,我排名团队前20%,获得了“优秀”评价。主要贡献:

  • 牵头完成了接口自动化框架搭建,覆盖率从30%提升到80%;
  • 发现并推动了多个高风险Bug修复;
  • 培养了2名新同事快速上手自动化。
    绩效量化指标包括Bug发现数、用例覆盖率、项目支持满意度等。

# 15. 是如何评价的,是有量化指标吗?

答题思路
说明绩效考核的量化指标和评价维度,体现团队管理的科学性。

话术
是的,我们有量化指标:

  • 缺陷发现率:提交有效Bug数量/总Bug数;
  • 用例覆盖率:自动化用例覆盖业务场景比例;
  • 漏测率:生产问题数量(越低越好);
  • 项目贡献:如框架开发、文档输出;
  • 团队协作:需求响应速度、开发评价。
    数据来自JIRA、测试报告和360度反馈。

# 16. 一天发现多少bug?有没有漏测的,客户生产环境和实际使用中出现的bug,实际上就问有没有收集客户反馈的问题

答题思路
给出典型Bug数量,坦诚漏测情况,强调后续改进措施。

话术

  • Bug数量:平均每天发现3-5个有效Bug,高峰时(如新版本测试)可达10+;
  • 漏测情况:偶有漏测,主要是边缘场景或兼容性问题(如特定手机型号显示异常);
  • 客户反馈:我们会收集生产问题并录入Bug系统,定期复盘,更新用例库避免复发。
    去年漏测率控制在1%以下。

# 17. 说一下python的四种数据结构

答题思路
列举并简要说明四种核心数据结构及其特点。

话术
Python四种核心数据结构:

  • 列表(List):有序、可变,可存储任意类型元素,如[1, "a", True]
  • 元组(Tuple):有序、不可变,适用于不变数据,如(1, 2, 3)
  • 字典(Dict):键值对、可变,快速查找,如{"name": "Alice", "age": 30}
  • 集合(Set):无序、元素唯一,用于去重和集合运算,如{1, 2, 3}
    它们覆盖了大多数数据存储和处理需求。

# 18. main函数

答题思路
解释main函数的作用和Python中的常见用法。

话术
在Python中,main函数是程序的入口点,通常用于组织执行逻辑:

def main():
    # 主逻辑代码
    print("Hello World")

if __name__ == "__main__":
    main()
1
2
3
4
5
6

if __name__ == "__main__"确保当脚本被直接运行时才执行main(),而被导入时不会自动执行。


# 19. 使用python写一段程序,计算一段文本中单词出现的频率

答题思路
提供简洁代码,使用字典统计词频,处理大小写和标点。

话术

from collections import defaultdict
import re

def word_frequency(text):
    words = re.findall(r'\b\w+\b', text.lower())  # 提取单词并转小写
    freq = defaultdict(int)
    for word in words:
        freq[word] += 1
    return dict(freq)

# 示例
text = "Hello world, hello Python! World of Python."
print(word_frequency(text))
# 输出: {'hello': 2, 'world': 2, 'python': 2, 'of': 1}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

这段代码使用正则提取单词,字典统计频率,忽略大小写和标点。


# 20. 接口测试是银行有自动化平台还是用外部的框架?

答题思路
根据实际情况选择回答,银行可能有自研平台,但外部框架更灵活。

话术
我们采用混合模式

  • 银行有自研的自动化测试平台,用于简单接口测试和用例管理;
  • 但对于复杂场景(如数据驱动、自定义断言),我们使用外部框架(如Pytest)开发脚本,更灵活;
  • 脚本通过CI工具集成到平台执行,兼顾规范性和灵活性。

# 21. 性能压完后是怎么做性能定位的,比如时间超长?

答题思路
说明性能分析的方法和工具使用,体现系统化排查能力。

话术
性能定位步骤:

  1. 监控工具:使用APM(如SkyWalking)定位慢事务和慢SQL;
  2. 资源分析:检查服务器CPU、内存、IO,发现资源瓶颈;
  3. 代码 profiling:用Arthas或PySpy分析Java/Python代码热点;
  4. 数据库分析:检查慢查询日志、索引缺失、锁等待;
  5. 网络分析:排查DNS、带宽、连接池问题。
    曾通过APM发现一个SQL未索引导致响应时间从200ms增至2s,添加索引后解决。

# 22. 排查下来到底在那个环节出现的问题?

答题思路
举例说明常见问题环节,如数据库、代码逻辑或中间件。

话术
问题多出现在:

  • 数据库:占70%,如索引缺失、锁竞争、全表扫描;
  • 应用代码:占20%,如循环查询DB、算法效率低、线程阻塞;
  • 中间件/网络:占10%,如Redis连接池不足、Kafka堆积、带宽打满。
    最近一个案例是数据库连接池设置过小,高并发时等待连接导致超时。

# 23. 全表扫描

答题思路
解释全表扫描的含义、危害和避免方法。

话术
全表扫描指数据库查询时未使用索引,逐行扫描整张表,性能极差(O(n)复杂度)。

  • 危害:CPU和IO飙升,响应时间慢,拖垮数据库;
  • 避免方法
    • 为查询条件字段添加索引;
    • 避免在WHERE中使用函数或表达式(如WHERE YEAR(create_time)=2023);
    • 使用EXPLAIN分析执行计划。
      我们要求所有查询必须通过索引优化。

# 24. 使用python能写导入或外挂吗?

答题思路
肯定Python的能力,举例常见应用场景。

话术
是的,Python非常适合编写数据导入脚本外挂工具

  • 数据导入:用Pandas读取Excel/CSV,清洗后批量入库;
  • 外挂工具:如自动化测试平台的外挂脚本,通过API扩展功能;
  • 协议处理:编写Socket客户端模拟第三方系统交互。
    我们曾用Python开发贷款数据迁移工具,处理百万级记录。

# 25. 开发改了一个逻辑,你是怎么去设计和分析的,他的影响范围?

答题思路
说明变更分析流程,包括代码审查、影响模块识别和回归测试。

话术

  1. 理解变更:与开发沟通修改内容和原因;
  2. 影响分析:查看代码依赖,识别受影响模块(如数据库、接口、前端);
  3. 用例更新:修改相关测试用例,添加新场景;
  4. 回归测试:执行影响模块的自动化用例,手动测试边缘场景;
  5. 沟通同步:通知上下游团队(如产品、运维)变更影响。
    我们会使用代码diff工具辅助分析。

# 26. 对常用的库表或工具,像Linux

答题思路
列举熟悉的Linux命令和常用工具,体现运维能力。

话术
熟练使用Linux:

  • 文件操作:grep, find, sed, awk;
  • 进程管理:ps, top, kill, nohup;
  • 日志分析:tail -f, less, grep error;
  • 网络调试:netstat, telnet, curl;
  • 权限管理:chmod, chown。
    日常通过SSH登录服务器排查问题,写Shell脚本自动化任务。

# 27. tomcat进程是不是还活着,想重启杀掉怎么做?

答题思路
给出检查进程和重启的Linux命令,体现实际操作经验。

话术

  • 检查进程ps -ef | grep tomcatsystemctl status tomcat(如果用了systemd);
  • 平滑杀死kill <PID> 发送SIGTERM,等待优雅关闭;
  • 强制杀死kill -9 <PID> 如果进程无响应;
  • 重启./catalina.sh start(在Tomcat的bin目录下)或 systemctl restart tomcat
    我们会先确认进程是否假死(通过curl本地接口),再决定是否重启。

# 28. 没有进行过滤吗?

答题思路
解释输入过滤的重要性,举例安全测试中的过滤漏洞。

话术
输入过滤是必须的,否则会导致安全漏洞:

  • SQL注入:未过滤单引号,攻击者可执行恶意SQL;
  • XSS:未转义HTML标签,脚本注入页面;
  • 业务绕过:如负数金额、超长字符串导致系统异常。
    我们会在测试中专门验证过滤规则,用BurpSuite扫描漏洞。

# 29. 你认为你最大的优势是什么?

答题思路
结合岗位要求,突出技术深度、业务理解或软技能,用实例证明。

话术
我最大的优势是技术与业务的结合能力

  • 技术方面:精通自动化、性能测试和Python开发,能快速解决复杂问题;
  • 业务方面:深入理解金融业务(如贷款、保险),能精准设计测试场景;
  • 案例:曾通过自动化脚本发现一个利息计算漏洞,避免百万资损。
    这使我不仅能发现问题,还能从业务角度推动优化。

# 招商银行真题二

# 1、自我介绍

答题思路
应涵盖工作经验、技术栈、项目经验和与岗位相关的技能,突出测试开发和自动化方面的能力。

答题话术
面试官您好,我叫[您的姓名],有[数字]年测试开发经验。精通接口自动化测试框架设计与开发,熟悉Python、Java等编程语言。在保险、金融等领域有丰富的项目经验,擅长构建稳定的自动化测试体系,推动测试左移和持续集成。主导过多个项目的质量保障工作,能有效提升测试效率和质量。期待能加入团队,为项目质量保驾护航。


# 2、做的这个项目业务是什么样,说说重难点(其中提到了不能重复买相同保单)

答题思路
清晰描述业务背景,重点突出业务规则复杂性和数据一致性带来的测试挑战。

答题话术
我负责的是互联网保险业务系统,用户可通过H5、小程序等渠道购买保险产品。核心业务涉及投保、核保、支付、出单等流程。
重点难点在于业务规则复杂,比如"同一用户不能重复购买相同保单"的约束:

  1. 需要验证同一用户多次购买同一产品的拦截逻辑
  2. 并发场景下如何保证数据一致性(如双重请求)
  3. 边界情况处理(如保单过期后是否可重新购买)
    测试时需要设计覆盖这些特殊场景的用例,并通过自动化手段持续验证。

# 3、这个业务里边的重点或者难点,你们测试是怎么做保障的,特别的保障手段,或者是特别的测试方法?

答题思路
从流程、技术、数据三个维度阐述质量保障体系,突出自动化建设和专项测试。

答题话术
我们采取了多层次的质量保障措施:

  1. 流程层面
    • 测试左移:早期参与需求评审,识别业务规则风险点
    • 用例评审:组织跨团队用例评审,确保场景覆盖全面
  2. 技术层面
    • 接口自动化:覆盖核心业务流和异常场景,定期回归
    • 混沌工程:注入故障模拟异常(如数据库连接失败)
    • 契约测试:保障前后端接口约定的一致性
  3. 数据层面
    • 测试数据工厂:按需生成测试数据,支持多种测试场景
    • 数据清理机制:保证测试环境数据可用性
  4. 监控预警
    • 生产环境监控关键业务指标(如保单创建成功率)
    • 建立质量度量体系,持续改进测试策略

# 5、你们测试重点是测端到端,还是接口测试,或者怎么个测试的方式?

答题思路
说明测试金字塔理念,强调接口测试的价值和自动化策略。

答题话术
我们遵循测试金字塔模型,以接口测试为重点:

  • 接口测试(占比70%):快速反馈业务逻辑正确性,执行效率高
  • 集成测试(20%):验证系统间调用和数据传递
  • 端到端测试(10%):覆盖关键用户旅程,但维护成本高

选择这个策略是因为:

  1. 保险业务逻辑复杂,接口测试能深入验证各种业务规则
  2. 执行速度快,适合持续集成流水线
  3. 相对于UI自动化,接口测试更加稳定和维护成本低

# 6、你们在做接口测试的时候主要考虑什么样的场景?

答题思路
从正常流程、异常流程、边界值、安全、性能等维度说明测试场景设计。

答题话术
我们主要考虑以下几类场景:

  1. 正常流程:合法参数请求,验证业务功能正确性
  2. 异常流程
    • 参数异常:缺失、格式错误、类型错误、长度超限
    • 业务异常:重复投保、保单不存在、用户不存在
  3. 边界值:金额边界、日期边界、数量边界等
  4. 安全测试:SQL注入、XSS攻击、权限绕过
  5. 并发场景:同时发起多个请求验证数据一致性
  6. 数据一致性:验证数据库与接口返回数据一致

# 7、你们这个自动化测试框架是怎么实现的

答题思路
介绍技术选型、框架架构、关键模块和特色功能。

答题话术
我们的自动化测试框架基于Python + pytest实现,主要包含以下模块:

  1. 核心层
    • 用例管理:基于pytest框架组织测试用例
    • 数据驱动:通过YAML文件管理测试数据
  2. 服务层
    • HTTP客户端:封装requests库处理接口请求
    • 数据库操作:封装SQLAlchemy进行数据验证
    • 断言机制:自定义断言库验证业务规则
  3. 支撑层
    • 配置管理:区分不同环境配置
    • 日志系统:记录详细执行日志
    • 报告生成:使用Allure生成可视化报告
  4. 特色功能
    • 自动重试机制:处理环境不稳定问题
    • 用例依赖管理:处理用例间依赖关系
    • 数据工厂:自动生成测试数据

# 8、你们这个框架里边是怎么保障用例可以重复地执行,然后保障它执行稳定性的。

答题思路
从环境隔离、数据管理、异常处理等方面阐述稳定性保障措施。

答题话术
我们通过以下方式保障用例稳定性和可重复执行:

  1. 环境隔离
    • 使用独立的测试环境,避免与开发环境冲突
    • 通过Docker容器化部署,保证环境一致性
  2. 数据管理
    • 前置条件:每个用例执行前构造所需测试数据
    • 数据清理:用例执行后自动清理产生的数据
    • 数据隔离:使用唯一标识(如时间戳+随机数)避免数据冲突
  3. 异常处理
    • 网络异常重试机制:对网络波动进行自动重试
    • 超时控制:设置合理的接口超时时间
  4. 稳定性提升
    • 用例独立性:保证用例间无依赖,可单独执行
    • 异步处理:对异步接口增加轮询查询机制

# 9、比如说有一些接口可能它不一定都是读的接口,可能会有一些写的接口,你是怎么保障它可以重复地去写的?

答题思路
重点说明写接口的数据管理和清理策略。

答题话术
对于写接口(如创建保单),我们采取以下策略:

  1. 数据唯一性
    • 使用唯一标识:如"保单号+时间戳+随机数"组合
    • 业务字段差异化:相同业务不同测试数据
  2. 前置清理
    • 执行前检查并清理可能冲突的测试数据
  3. 后置清理
    • 用例执行后自动清理产生的数据
  4. 数据工厂
    • 通过数据工厂按需生成测试数据
    • 支持参数化数据生成模板

# 10、你们的这个接口自动化是在什么时候执行的?

答题思路
说明测试执行时机和触发方式。

答题话术
我们的接口自动化在以下时机执行:

  1. 持续集成流水线
    • 代码提交后触发执行
    • 每日定时执行回归测试
  2. 手动触发
    • 测试人员手动选择用例集执行
  3. 预发布验证
    • 发布前执行全量回归测试
  4. 生产监控
    • 定期执行核心流程监控测试

# 11、自动框架写了400多条测试用例,你一个人维护的吗?

答题思路
说明团队协作模式和维护机制。

答题话术
不是一个人维护的,我们采用团队协作模式:

  1. 分工负责
    • 不同模块由对应测试人员负责维护
    • 我负责框架设计和核心模块维护
  2. 规范制定
    • 建立用例编写规范和维护流程
    • 提供模板和示例降低上手难度
  3. 代码评审
    • 所有用例变更都需要代码评审
    • 定期组织用例重构和优化
  4. 知识共享
    • 定期组织自动化技术分享
    • 建立知识库记录最佳实践

# 12、你们测试环境是由运维去做一个部署?

答题思路
说明测试环境部署的协作模式。

答题话术
我们采用DevOps模式进行环境部署:

  1. 运维负责
    • 基础环境搭建和维护
    • 容器平台和监控系统维护
  2. 测试参与
    • 提供环境部署需求和要求
    • 编写部署脚本和配置模板
  3. 自动化部署
    • 使用CI/CD流水线自动部署测试环境
    • 环境部署脚本版本化管理
  4. 自助服务
    • 测试人员可以按需触发环境部署
    • 支持多版本环境并行部署

# 13、你们这个不是集成到整个研发部署流程的,是吧?

答题思路
说明自动化测试与CI/CD的集成情况。

答题话术
我们的自动化测试已经深度集成到研发部署流程中:

  1. CI集成
    • 代码提交后自动触发接口测试
    • 测试通过后才能合并代码
  2. CD集成
    • 发布前自动执行回归测试套件
    • 测试通过后才能部署到生产环境
  3. 质量门禁
    • 设置测试通过率阈值
    • 关键用例失败阻断部署流程
  4. 反馈机制
    • 测试结果自动通知相关责任人
    • 生成质量报告供团队查看

# 14、测系统发现它白屏了,一般是怎么去看问题的,包括它是前端问题还是后端问题

答题思路
系统化说明白屏问题的排查思路和方法。

答题话术
白屏问题排查我们按照以下步骤进行:

  1. 初步判断
    • 打开浏览器开发者工具,查看Console错误信息
    • 检查Network面板,查看接口请求状态
  2. 前端问题特征
    • JavaScript执行错误(Console有红色错误)
    • 资源加载失败(CSS/JS文件404)
    • 接口请求正常但页面渲染失败
  3. 后端问题特征
    • 关键接口返回5xx错误码
    • 接口返回数据格式异常
    • 数据库连接失败等基础设施问题
  4. 深入排查
    • 查看前端日志和错误监控系统
    • 检查后端服务日志和性能监控
    • 使用抓包工具分析网络请求

# 25、它是容器化的,还是直接部署在物理机上面的?物理机的集群是用的Docker或者K8S这种的。

答题思路
说明技术栈和部署架构。

答题话术
我们的系统采用容器化部署:

  1. 技术栈
    • 使用Docker进行容器化封装
    • 基于Kubernetes进行容器编排和管理
  2. 部署架构
    • 微服务架构,每个服务独立部署
    • 使用Ingress进行流量管理
    • 配置中心统一管理应用配置
  3. 基础设施
    • 云原生架构,运行在私有云平台
    • 使用CI/CD工具链进行自动化部署

# 16、你们是用的Docker,大概知道的命令?

答题思路
列举常用的Docker命令和用途。

答题话术
常用的Docker命令包括:

  1. 容器管理
    docker ps -a  # 查看容器列表
    docker logs <container>  # 查看容器日志
    docker exec -it <container> bash  # 进入容器
    
    1
    2
    3
  2. 镜像管理
    docker images  # 查看镜像列表
    docker build -t <image> .  # 构建镜像
    docker push <image>  # 推送镜像
    
    1
    2
    3
  3. 生命周期
    docker run -d <image>  # 启动容器
    docker stop <container>  # 停止容器
    docker rm <container>  # 删除容器
    
    1
    2
    3
  4. 排查问题
    docker stats  # 查看容器资源使用
    docker inspect <container>  # 查看容器详情
    
    1
    2

# 17、怎么判断性能测试有没有问题的

答题思路
说明性能测试评估标准和问题判断方法。

答题话术
我们从多个维度判断性能测试结果:

  1. 性能指标
    • 响应时间:是否超过预期阈值(如P95<2s)
    • 吞吐量:是否达到预期TPS要求
    • 错误率:是否低于可接受范围(如<0.1%)
  2. 资源 utilization
    • CPU、内存使用率是否正常
    • 数据库连接池是否耗尽
    • 网络带宽是否成为瓶颈
  3. 稳定性
    • 长时间运行是否出现内存泄漏
    • 性能指标是否随时间退化
  4. 可扩展性
    • 负载增加时性能是否线性扩展
    • 系统瓶颈点在哪里

# 18、性能测试是什么样的问题?怎么排查它的。

答题思路
系统化说明性能问题类型和排查方法论。

答题话术
性能问题主要分为以下几类,排查方法如下:

  1. 高延迟问题
    • 使用APM工具分析调用链耗时
    • 检查数据库慢查询和索引优化
    • 分析网络延迟和带宽情况
  2. 低吞吐量问题
    • 检查线程池配置和并发数限制
    • 分析系统资源瓶颈(CPU、内存、IO)
    • 验证负载均衡是否正常工作
  3. 稳定性问题
    • 检查内存泄漏(Heap Dump分析)
    • 分析GC日志和垃圾回收情况
    • 监控数据库连接池使用情况
  4. 排查工具
    • 使用jstack分析线程状态
    • 使用jmap分析内存使用
    • 使用arthas进行在线诊断

# 19、代码问题,比如给你一个a、d、B、C、D这样的一个字符串,返回它这个字符串里面没有重复字符的最长的字串就是返回b、c、d

答题思路
给出算法实现思路和代码示例。

答题话术
这是一个典型的无重复字符最长子串问题,可以用滑动窗口算法解决:

def longest_unique_substring(s): # 处理大小写统一(根据需求决定) s = s.lower()

char_index = {}  # 记录字符最后出现的位置
left = 0        # 滑动窗口左边界
max_len = 0     # 最长子串长度
start_index = 0 # 最长子串起始位置

for right in range(len(s)):
    char = s[right]
    
    # 如果字符已在窗口中,移动左边界
    if char in char_index and char_index[char] >= left:
        left = char_index[char] + 1
    
    # 更新字符位置
    char_index[char] = right
    
    # 更新最大长度
    if right - left + 1 > max_len:
        max_len = right - left + 1
        start_index = left

return s[start_index:start_index + max_len]

# 测试示例

print(longest_unique_substring("adBCD")) # 输出 "abcd"

这个算法的时间复杂度是O(n),空间复杂度是O(字符集大小)。


# 20、日常工作里边写一些脚本,工作占比是什么样的

答题思路
合理分配脚本开发在工作中的比重,体现自动化思维。

答题话术
脚本开发在工作中的占比大约30-40%,主要包括:

  1. 测试自动化(60%):接口自动化脚本、性能测试脚本
  2. 工具开发(20%):测试数据生成工具、环境部署脚本
  3. 效率提升(20%):日志分析脚本、报表生成脚本
  4. 应急响应:线上问题排查和修复脚本

我坚持"自动化优先"原则,对于重复性工作都会考虑通过脚本自动化实现。


# 21、会自己写一些脚本或者工具去给自己做提效吗?

答题思路
举例说明具体提效工具和带来的价值。

答题话术
是的,我经常编写脚本工具来提升效率,比如:

  1. 测试数据生成工具
    • 根据业务规则自动生成合规测试数据
    • 支持批量生成和导出
  2. 环境部署脚本
    • 一键部署测试环境
    • 自动配置和初始化
  3. 日志分析工具
    • 自动化分析测试日志,快速定位问题
    • 生成错误报告和统计信息
  4. 报表生成脚本
    • 自动收集测试结果生成质量报表
    • 可视化展示测试进度和通过率