Ch15 生产软件工程 · 闪卡 (Anki 导出)¶
100 张卡,涵盖 5 节核心。Anki Deck:
Ch15 生产软件工程
Section A: Linux/CMD¶
Card 1¶
Front: chmod 755 file 含义?
Back: 7=rwx (owner), 5=r-x (group), 5=r-x (other)。
Card 2¶
Front: ps aux | grep python 含义?
Back: 列出所有进程, 管道过滤 python 进程。
Card 3¶
Front: kill -9 PID 含义?
Back: 强制终止进程 (SIGKILL)。不可捕获。
Card 4¶
Front: chown user:group file 用途?
Back: 改文件 owner 与 group。
Card 5¶
Front: 软链接 vs 硬链接? Back: 软链 = 快捷方式 (跨 FS); 硬链 = 同一 inode (同 FS)。
Card 6¶
Front: find . -name "*.py" 含义?
Back: 在当前目录递归找所有 .py 文件。
Card 7¶
Front: grep -r "PLACEHOLDER" src/ 含义?
Back: 递归在 src/ 中找含 "PLACEHOLDER" 的行。
Card 8¶
Front: ssh -i key.pem user@host 含义?
Back: 用 key.pem 私钥 SSH 登录。
Card 9¶
Front: curl -X POST -d '{}' url 用途?
Back: 发送 POST 请求, body 是 JSON。
Card 10¶
Front: tmux 与 screen 用途?
Back: 终端复用, 防止 SSH 断开会话。
Section B: Git¶
Card 11¶
Front: git rebase vs git merge?
Back: rebase 把 commit 重放到目标分支 (线性历史); merge 保留分支结构。
Card 12¶
Front: git stash 用途?
Back: 暂存未提交修改, 切换分支后恢复。
Card 13¶
Front: git cherry-pick <commit> 用途?
Back: 把单个 commit 应用到当前分支。
Card 14¶
Front: git reset --hard HEAD^ 后果?
Back: 撤销最近 commit, 丢弃修改。不可恢复!
Card 15¶
Front: git revert <commit> 与 reset 区别?
Back: revert 创建反向 commit (可推送); reset 修改历史 (本地用)。
Card 16¶
Front: git submodule 用途?
Back: 嵌入子仓库, 用于共享代码。
Card 17¶
Front: git LFS 用途?
Back: 大文件存储 (模型权重 / 数据集)。
Card 18¶
Front: git rebase -i HEAD~3 用途?
Back: 交互式 rebase 最近 3 个 commit, 可编辑 / 合并 / 删除。
Card 19¶
Front: git reflog 用途?
Back: 查看 HEAD 历史, 用于恢复误删分支。
Card 20¶
Front: git worktree 用途?
Back: 一个仓库多个工作区, 并行开发。
Section C: 代码设计¶
Card 21¶
Front: SOLID 五原则? Back: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion。
Card 22¶
Front: REST API 关键? Back: 资源导向 (URL), HTTP 方法 (GET/POST), 无状态, 状态码。
Card 23¶
Front: GraphQL vs REST? Back: GraphQL 一次查询拿全部, 客户端定字段; REST 多端点, 服务端定字段。
Card 24¶
Front: gRPC 优势? Back: HTTP/2 + Protobuf, 二进制, 强类型, 流式。
Card 25¶
Front: 工厂模式? Back: 创建对象不直接 new, 用工厂方法。便于扩展。
Card 26¶
Front: 依赖注入 (DI)? Back: 依赖由外部传入, 不内部构造。便于测试。
Card 27¶
Front: 单例模式?
Back: 全局只一个实例。Python __new__ 或模块。
Card 28¶
Front: 观察者模式? Back: 对象状态变化通知订阅者。事件总线。
Card 29¶
Front: 装饰器模式?
Back: 动态加功能, 不改原代码。Python @decorator。
Card 30¶
Front: 策略模式? Back: 算法可替换, 运行时选。e.g., 不同损失函数。
Section D: 测试¶
Card 31¶
Front: pytest 如何发现测试?
Back: 文件名 test_*.py, 函数名 test_*。
Card 32¶
Front: fixture 是什么? Back: pytest 的 setup/teardown 机制, 提供测试数据。
Card 33¶
Front: mock 用途?
Back: 替换依赖, 隔离测试。unittest.mock。
Card 34¶
Front: 单元测试 vs 集成测试? Back: 单测: 一个函数 / 类; 集成: 多模块协同。
Card 35¶
Front: TDD 三步? Back: Red (写失败测试), Green (写最少代码通过), Refactor (重构)。
Card 36¶
Front: 覆盖率指标? Back: 行覆盖 (line), 分支覆盖 (branch), 路径覆盖 (path)。
Card 37¶
Front: 性能测试 (benchmark)?
Back: pytest-benchmark 测量函数耗时。
Card 38¶
Front: property-based testing?
Back: Hypothesis, 自动生成输入测试不变量。
Card 39¶
Front: mutation testing?
Back: mutmut 故意改代码, 看测试能否捕获。
Card 40¶
Front: CI 中测试失败? Back: 阻断合并, Slack 报警, 报告覆盖率。
Section E: DevOps¶
Card 41¶
Front: Docker 镜像 vs 容器? Back: 镜像 = 模板 (只读); 容器 = 运行实例。
Card 42¶
Front: Dockerfile 关键指令?
Back: FROM, RUN, COPY, CMD, EXPOSE。
Card 43¶
Front: Docker volume 用途? Back: 持久化数据, 容器删除不丢。
Card 44¶
Front: docker-compose 用途? Back: 多容器编排, YAML 文件定义服务。
Card 45¶
Front: K8s Pod 是什么? Back: 1+ 容器 + 共享网络/存储, K8s 最小调度单元。
Card 46¶
Front: K8s Deployment vs StatefulSet? Back: Deployment 无状态; StatefulSet 有状态 (e.g., DB)。
Card 47¶
Front: K8s Service 类型? Back: ClusterIP (内部), NodePort (节点端口), LoadBalancer (云负载均衡)。
Card 48¶
Front: Helm Chart 是什么? Back: K8s 应用包, YAML 模板 + values。
Card 49¶
Front: GitOps 核心? Back: Git 是单一真相, 部署由 Git 状态自动同步。
Card 50¶
Front: ArgoCD / Flux 是什么? Back: GitOps 工具, 自动同步 Git 仓库与 K8s。
Section F: 现实应用¶
Card 51¶
Front: LLM 服务化标准栈? Back: vLLM / TGI / Triton Inference Server + FastAPI + Docker + K8s。
Card 52¶
Front: FastAPI vs Flask? Back: FastAPI 异步原生, 自动 OpenAPI, 类型提示。Flask 同步。
Card 53¶
Front: gRPC vs REST 用于 AI? Back: 内部服务用 gRPC (快), 外部 API 用 REST (易调试)。
Card 54¶
Front: Prometheus 监控什么? Back: 指标 (CPU, GPU, RPS, latency)。配合 Grafana 可视化。
Card 55¶
Front: OpenTelemetry 是什么? Back: 标准化 tracing / metrics / logs。替换 Zipkin/Jaeger。
Card 56¶
Front: MLflow 用途? Back: 实验追踪, 模型注册, 模型部署。
Card 57¶
Front: DVC 用途? Back: 数据版本管理, 类似 Git 但管大文件。
Card 58¶
Front: LLM 推理 GPU 利用率优化? Back: PagedAttention (vLLM), Continuous batching, 量化。
Card 59¶
Front: 金丝雀发布? Back: 新版本 5% 流量 → 监控 → 全量。
Card 60¶
Front: 蓝绿部署? Back: 旧 (蓝) + 新 (绿) 两套环境, 切换流量。
Section G: 历史¶
Card 61¶
Front: Linux 起源? Back: Linus Torvalds, 1991, "Just a hobby"。
Card 62¶
Front: Git 起源? Back: Linus Torvalds, 2005, 为 Linux kernel 开发。
Card 63¶
Front: GitHub 起源? Back: 2008, Tom Preston-Werner 等。
Card 64¶
Front: Docker 起源? Back: Solomon Hykes, 2013, PyCon 演讲。
Card 65¶
Front: K8s 起源? Back: Google, 2014, Borg 系统的开源版。
Card 66¶
Front: MLflow 起源? Back: Databricks, 2018。
Card 67¶
Front: DVC 起源? Back: iterative.ai, 2017。
Card 68¶
Front: vLLM 起源? Back: UC Berkeley, 2023, PagedAttention。
Card 69¶
Front: GitHub Actions 起源? Back: 2019, GitHub 内置 CI/CD。
Card 70¶
Front: ArgoCD 起源? Back: Intuit, 2018, K8s GitOps 工具。
Section H: 工程¶
Card 71¶
Front: Python venv 用途? Back: 隔离项目依赖。
Card 72¶
Front: poetry vs pip? Back: poetry 管依赖 + 虚拟环境 + 打包; pip 只装包。
Card 73¶
Front: pre-commit 用途? Back: Git commit 前自动跑 lint / format。
Card 74¶
Front: black 与 ruff 区别? Back: black 不可配置格式化, ruff 快 + 多种 lint。
Card 75¶
Front: mypy 用途? Back: Python 静态类型检查。
Card 76¶
Front: python -m pytest 与 pytest 区别?
Back: -m 用当前 Python 环境, 避免环境错乱。
Card 77¶
Front: GitHub Actions cache 用途? Back: 缓存 pip / Docker 层, 加速 CI 10×。
Card 78¶
Front: matrix build 用途? Back: 多 OS / Python 版本测试。
Card 79¶
Front: 环境变量注入敏感信息? Back: GitHub Secrets, K8s Secret, .env (本地)。
Card 80¶
Front: 12-Factor App? Back: Heroku 提出的 12 条 SaaS 原则, e.g., 配置外置, 无状态。
Section I: 跨章¶
Card 81¶
Front: Ch13 §04 Linux 与 Ch15 §01? Back: Ch13 教 OS 原理, Ch15 教日常使用。
Card 82¶
Front: Ch14 §04 测试与 Ch15 §04? Back: Ch14 教算法测试, Ch15 教工程测试 (CI/CD)。
Card 83¶
Front: Ch07 §04 Transformer 与 Ch15 §05 部署? Back: Transformer 训练后, 用 Ch15 工具部署到生产。
Card 84¶
Front: Ch17 §02 LLM 推理与 Ch15 §05 K8s? Back: LLM 推理服务用 K8s 自动扩缩。
Card 85¶
Front: Ch05 §04 A/B 测试与 Ch15 §04 CI? Back: A/B 测试在 CI/CD 中自动跑。
Card 86¶
Front: Ch13 §02 GPU 与 Ch15 §05 Docker? Back: Docker 镜像支持 GPU (nvidia-docker)。
Card 87¶
Front: Ch03 §05 梯度与 Ch15 §04 测试? Back: 梯度计算用 pytest 测试 (梯度检查)。
Card 88¶
Front: Ch06 §04 RL 与 Ch15 §05 MLflow? Back: RL 实验追踪用 MLflow。
Card 89¶
Front: Ch12 §03 GNN 与 Ch15 §05 DVC? Back: 图数据集版本用 DVC。
Card 90¶
Front: Ch10 §05 多模态与 Ch15 §05 部署? Back: 多模态模型推理服务用 K8s + GPU。
Section J: 错误避免¶
Card 91¶
Front: git push --force 风险?
Back: 覆盖远程历史, 队友 commit 丢失。
Card 92¶
Front: Docker 容器数据持久化? Back: 必须用 volume 或 bind mount。
Card 93¶
Front: K8s 资源限制缺? Back: Pod 抢占资源, 集群抖动。
Card 94¶
Front: CI 没用 cache? Back: 每次全量装依赖, 慢 10×。
Card 95¶
Front: 测试覆盖率 100% 陷阱? Back: 高覆盖 ≠ 无 bug, 看测试质量。
Section K: 进阶¶
Card 96¶
Front: eBPF 是什么? Back: Linux 内核级 tracing / 网络, 高性能观测。
Card 97¶
Front: Service Mesh (Istio)? Back: 微服务通信层, 提供流量管理 / 安全 / 监控。
Card 98¶
Front: Argo Workflows? Back: K8s 上的工作流编排, 用于 ML pipeline。
Card 99¶
Front: Feature Store (Feast)? Back: 特征统一存储, 离线 / 在线一致性。
Card 100¶
Front: 一句话总结 Ch15。 Back: 生产软件工程 = AI 模型从原型到产品的桥梁。覆盖 §01 Linux/CMD + §02 Git + §03 代码设计 + §04 测试 + §05 DevOps (Docker/K8s/CI/CD)。是 AI 工程师的"工程素养"课。