# 1. Shell 脚本的健壮性中 set -euo pipefail 与错误处理如何配合? A set -u 与变量无关 B set -e 会阻止 if 语句执行 C 管道默认返回中间命令的退出码 D set -e 失败即退、-u 未定义变量报错、-o pipefail 让管道返回非零成员退出码,但 if 条件中的失败不受 set -e 影响 ✓ 正确答案
# 2. Python 脚本中 asyncio 如何提升高 IO 场景的并发吞吐? A 事件循环可以自动识别同步阻塞调用 B asyncio 适合 CPU 密集计算 C 协程在 await IO 等待时让出控制权,单线程并发处理大量 IO,但同步阻塞调用会阻塞整个事件循环 ✓ 正确答案 D asyncio 需要多线程配合才能并发 IO
# 3. Python 脚本中 concurrent.futures 如何实现并发任务? A 进程池与线程池性能完全相同 B 线程池适合 IO 密集(GIL 在阻塞时释放),进程池绕过 GIL 适合 CPU 密集并行 ✓ 正确答案 C map 与 as_completed 语义相同 D Future.result() 不会阻塞
# 4. Python 脚本中 multiprocessing 如何利用多核处理 CPU 密集任务? A lambda 函数可以直接作为进程任务 B 多进程仍受 GIL 限制 C 子进程与主进程共享全部内存 D 进程池通过多进程绕过 GIL 并行利用多核,参数经 pickle 传递,Windows/macOS 需 spawn 并保护主入口 ✓ 正确答案
# 5. Python 脚本中 pathlib 如何简化路径处理? A glob 与 rglob 功能完全相同 B pathlib 只能处理 POSIX 路径 C Path 对象不能传给 open 函数 D Path 用 / 运算符拼接路径,提供 read_text/glob/mkdir 等封装,跨平台自动处理分隔符 ✓ 正确答案
# 6. Python 脚本中 retry/tenacity 如何实现重试与退避策略? A 所有异常都应无限重试 B stop 控制停止条件、wait 控制间隔(指数+抖动防重试风暴)、retry 控制触发条件,且重试只适合幂等操作 ✓ 正确答案 C 抖动会加剧下游压力 D 重试不需要超时配合
# 7. Python 脚本中 subprocess 如何实现子进程? A shell=True 永远更安全 B 参数列表方式默认不经 shell 解析,避免注入;run 的 check/timeout/capture_output 提供健壮错误处理 ✓ 正确答案 C communicate 与管道死锁无关 D 捕获输出不会消耗内存
# 8. Python 运维脚本的工程化要点中 argparse 参数校验、logging 分级输出与异常兜底策略如何设计 A 退出码只表示 0/非0 即可 B print 足够满足生产日志需求 C argparse 在运行前校验参数,logging 分级输出,main 返回退出码并在顶层分类捕获异常,形成可运维脚本 ✓ 正确答案 D 参数错误应在运行中再发现
# 9. crontab 环境变量缺失导致脚本手动可跑但 cron 失败的排查路径中 PATH、SHELL、HOME、MAILTO 的常见陷阱 A MAILTO 与 cron 失败无关 B cron 会加载用户 .bashrc C 手动执行正常则 cron 一定正常 D cron 在精简环境运行(默认 PATH 很小、无登录环境变量),脚本需显式设置环境并使用绝对路径与日志重定向 ✓ 正确答案
# 10. shell 函数中 local、typeset 如何限定变量作用域? A local 变量会传播到管道子 shell B 函数内变量默认是局部的 C local 把变量限定为函数局部并遮蔽全局,防止污染,但命令替换与管道子 shell 中不生效 ✓ 正确答案 D local 只能用于 POSIX sh
# 11. shell 脚本中 flock 如何实现文件锁以防止脚本并发执行? A 进程被杀后 flock 锁会残留 B flock 锁文件内容必须匹配进程名 C flock 基于内核文件锁,进程退出自动释放,-n 非阻塞模式适合 cron 防重入,优于 pidfile 锁 ✓ 正确答案 D flock 可用于跨主机互斥
# 12. shell 脚本中 getconf 如何获取系统配置常量(如页大小、参数上限)? A getconf 从 POSIX 系统限制读取页大小、ARG_MAX、OPEN_MAX 等常量,便于脚本自适应与跨平台 ✓ 正确答案 B getconf 只能查询网络参数 C getconf 与 ulimit 数据完全无关 D 页大小在任意平台都是 4096
# 13. shell 脚本中 mapfile、readarray 如何实现文件读入数组? A 空行会被自动忽略 B mapfile 会按空格拆分每行 C 数组下标从 1 开始 D mapfile -t 把输入按行保真读入数组,避免 $(cat) 的分词与空白丢失,但管道写法中数组不会传递 ✓ 正确答案
# 14. shell 脚本中 关联数组 declare -A 如何实现 KV 结构? A declare -A 声明键值对结构,支持任意字符串键,但要求 bash 4+、键序不确定、跨子 shell 需序列化 ✓ 正确答案 B 关联数组键只能是数字 C 所有 shell 都支持 declare -A D 键的顺序是插入顺序
# 15. Shell/Python 脚本的命令注入防御中如何校验外部输入、避免 eval 与命令拼接并使用参数化方式执行外部命令 A 校验输入会降低性能所以可以不做 B 引号包裹拼接的输入就绝对安全 C os.system 是安全的执行方式 D 核心是数据与代码分离:白名单校验输入、禁用 eval/拼接、用参数列表方式执行外部命令 ✓ 正确答案
# 16. 文本处理性能选型中 awk/sed 与 Python 在流式大文件处理上的耗时与内存差异以及如何用基准测试验证 A Python 处理文本总是比 awk 快 B awk/sed 是 C 实现且流式处理、内存恒定,通常比 Python 逐行处理快;复杂逻辑才用 Python,并保持流式写法 ✓ 正确答案 C 内存占用与文件大小无关 D 小文件场景也应只按性能选型
# 17. 运维脚本的可维护性中函数拆分、shellcheck/pytest 静态与单元测试如何提升脚本质量 A 脚本不需要版本控制 B shellcheck 只能检查语法错误 C 函数拆分提升复用与可测性,shellcheck 做静态检查,pytest 对纯逻辑做单元测试并 mock 外部命令 ✓ 正确答案 D 单元测试只适用于 Web 应用