跳转至

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 工程师的"工程素养"课。