1、有序链表合并算法编写有序链表在单链表基础上所有节点数据按照从小到大 / 从大到小固定排序新增、插入、合并都要维持顺序。普通链表节点顺序随意有序链表节点值全局有序最常用升序# 定义链表节点 class ListNode: def __init__(self, val0, nextNone): self.val val #存下一个节点的地址链表就是靠它串起来 self.next next # 合并两个有序链表 def merge_two_lists(l1, l2): #dummy虚拟头节点用来当 “起点”不用判断空链表 dummy ListNode() cur dummy while l1 and l2: if l1.val l2.val: cur.next l1 l1 l1.next else: cur.next l2 l2 l2.next cur cur.next #当一个链表走完了直接把另一个链表剩下的全部拼上去 cur.next l1 if l1 else l2 return dummy.next2、实现日志文件的轮转Rotate保留最近 7 天的日志import logging from logging.handlers import TimedRotatingFileHandler import os # 1. 确保日志目录存在 log_dir logs os.makedirs(log_dir, exist_okTrue) # 2. 配置日志器 logger logging.getLogger(my_logger) logger.setLevel(logging.INFO) # 3. 核心配置按天切割日志 # whenmidnight 表示每天午夜切换 # interval1 表示每1天切换一次 # backupCount7 表示最多保留最近7天的备份超出的会自动删除 handler TimedRotatingFileHandler( filenameos.path.join(log_dir, app.log), whenmidnight, interval1, backupCount7, encodingutf-8 ) # 4. 设置日志文件的后缀格式即备份文件的日期格式 handler.suffix %Y-%m-%d # 5. 设置日志打印格式 formatter logging.Formatter(%(asctime)s - %(levelname)s - %(message)s) handler.setFormatter(formatter) # 6. 将处理器添加到日志器 logger.addHandler(handler) # 测试写入日志 if __name__ __main__: logger.info(这是一条测试日志脚本运行正常。) print(日志已写入 logs/app.log)3、解析一个 CSV 文件统计其中异常状态码的数量。”import csv # 配置部分 csv_file data.csv # 替换为你的 CSV 文件名 status_column status_code # 替换为你 CSV 中状态码所在的列名 error_threshold 400 # 异常状态码的阈值通常 400 为异常 error_count 0 try: with open(csv_file, r, encodingutf-8) as f: # 使用 DictReader 可以通过列名直接读取数据 reader csv.DictReader(f) for row in reader: # 获取当前行的状态码并转为整数 code int(row[status_column]) # 判断是否为异常状态码 if code error_threshold: error_count 1 print(f解析完成共发现 {error_count} 个异常状态码。) except FileNotFoundError: print(f错误找不到文件 {csv_file}请检查文件名或路径。) except KeyError: print(f错误CSV 文件中没有找到名为 {status_column} 的列请检查列名是否正确。) except Exception as e: print(f发生未知错误{e})4、设计一个简单的 HTTP 接口测试框架你会包含哪些模块设计一个简单且实用的 HTTP 接口测试框架核心在于实现代码与数据的分离以及功能模块的解耦。一个标准的轻量级框架通常包含以下 5 个核心模块1. 配置管理模块 (Config)这是框架的“大脑”负责集中管理所有的外部配置信息避免在代码中硬编码。环境切换通过读取外部配置文件如config.ini或.env管理不同环境开发、测试、生产的基础 URLBase URL。全局参数管理数据库连接信息、请求超时时间Timeout、日志级别等全局变量。敏感信息保护将 API Token、账号密码等敏感凭据独立存储如credentials.json并确保其不被泄露到版本控制系统中。2. 核心请求封装模块 (Core / Request)这是对底层 HTTP 库如 Python 的requests的二次封装是框架的“发动机”。统一请求入口将 GET、POST、PUT、DELETE 等常用 HTTP 方法进行封装对外提供统一的调用接口。公共逻辑处理在发送请求前后自动处理通用逻辑例如自动注入全局请求头Headers、自动携带 Token、统一的异常捕获与重试机制。3. 测试数据管理模块 (Data)为了实现数据驱动测试DDT需要将测试数据与测试脚本完全分离。数据文件存储使用 CSV、JSON 或 YAML 文件来存储测试用例的输入数据如用户名、密码和预期的输出结果。数据读取工具提供专门的工具函数负责从各类文件中读取、解析并预处理测试数据支持批量执行测试场景。4. 测试用例与断言模块 (TestCases)这是框架的“业务层”负责编写具体的测试场景和验证逻辑。用例组织按照业务模块如用户模块、订单模块分类存放测试脚本保持结构清晰。断言机制对接口返回的结果进行多维度验证。不仅包括 HTTP 状态码如 200、404还应包括响应体中的关键字段如code、message以及响应时间等性能指标。5. 日志与报告模块 (Utils / Report)负责记录测试过程和展示最终结果是问题排查和质量评估的依据。日志记录在测试执行过程中详细记录每个接口的请求参数、响应结果以及报错堆栈信息方便快速定位 Bug。测试报告测试结束后自动生成可视化的测试报告如 HTML 格式直观展示用例的通过率、失败原因及执行耗时。一个简单的框架目录结构参考1api_test_framework/ 2├── config/ # 配置管理模块 3│ ├── config.ini # 存放环境URL、超时时间等 4│ └── credentials.json # 存放账号密码、Token等敏感信息 5├── data/ # 测试数据管理模块 6│ ├── user_data.csv # 存放用户相关的测试数据 7│ └── order_data.json # 存放订单相关的测试数据 8├── core/ # 核心请求封装模块 9│ ├── requests_client.py # 封装底层的HTTP请求方法 10│ └── auth_handler.py # 处理登录鉴权、Token刷新逻辑 11├── testcases/ # 测试用例与断言模块 12│ ├── test_user.py # 用户模块的测试用例 13│ └── test_order.py # 订单模块的测试用例 14├── utils/ # 日志与报告模块 15│ ├── logger.py # 日志记录配置 16│ └── report.py # 测试报告生成工具 17├── run.py # 框架的统一执行入口 18└── requirements.txt # 项目依赖库清单5、判断字符串是否为回文import re def is_palindrome_advanced(text): # 1. 统一转为小写 # 2. 使用正则表达式 [^a-z0-9] 剔除所有非字母和数字的字符如空格、标点 clean_text re.sub(r[^a-z0-9], , text.lower()) # 3. 判断处理后的字符串是否等于它的反转 return clean_text clean_text[::-1] # 测试 phrase1 A man, a plan, a canal: Panama phrase2 Was it a car or a cat I saw? phrase3 Hello World print(f{phrase1} 是回文吗 {is_palindrome_advanced(phrase1)}) # True print(f{phrase2} 是回文吗 {is_palindrome_advanced(phrase2)}) # True print(f{phrase3} 是回文吗 {is_palindrome_advanced(phrase3)}) # False6、判断是否斐波那契数列判断一个数是否属于斐波那契数列最优雅且高效的方法其实不需要生成整个数列而是利用一个经典的数学性质如果一个正整数n是斐波那契数那么5*n² 4或者5*n² - 4之中必定有一个是完全平方数import math def is_perfect_square(x): 判断一个数是否是完全平方数 s int(math.sqrt(x)) return s * s x def is_fibonacci(n): 判断一个数是否是斐波那契数 # 斐波那契数都是非负整数 if n 0: return False # 利用数学性质进行判断 return is_perfect_square(5 * n * n 4) or is_perfect_square(5 * n * n - 4) # 测试 numbers [0, 1, 2, 3, 5, 8, 13, 21, 4, 10, 20] for num in numbers: if is_fibonacci(num): print(f{num} 是斐波那契数) else: print(f{num} 不是斐波那契数)7、备份某个目录下 及所有文件并且压缩import os import zipfile from datetime import datetime, timedelta # 【仅修改这两个路径】 src_dir rC:\需要备份的目录 save_zip rD:\备份存放\7天文件备份.zip # 计算7天前时间 seven_days_ago datetime.now() - timedelta(days7) with zipfile.ZipFile(save_zip, w, zipfile.ZIP_DEFLATED) as zipf: for root, _, files in os.walk(src_dir): for file in files: file_path os.path.join(root, file) # 获取文件修改时间 m_time datetime.fromtimestamp(os.path.getmtime(file_path)) # 只备份近7天文件 if m_time seven_days_ago: arcname os.path.relpath(file_path, src_dir) zipf.write(file_path, arcname) print(近7天文件备份压缩完成)