diff --git a/.revision-progress b/.revision-progress index 74ba764..c5b0f5d 100644 --- a/.revision-progress +++ b/.revision-progress @@ -13,3 +13,4 @@ phase5c done (backend mongodb/elasticsearch/data-pipeline/nodejs) phase5d done (java-spring awareness, k8s, run_examples java support) phase5 done: all 43 stacks pass --strict (cs algorithms/network-os/web-security added) phase6a done (8 cross scenarios) +phase6 done: week topics generator, week14 了解级扩展, week15 应聘材料, week16 CS/algorithms, README links; run_examples 64 pass / 0 fail / 12 skip diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa98c1d..b451eea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,8 @@ zhuangang/ ├── schema/frontmatter.schema.json ├── tools/ │ ├── build_catalog.py # 校验 + 生成 catalog.json -│ ├── run_examples.py # 运行示例代码 +│ ├── gen_week_topics.py # 根据 week 字段生成周计划的“本周相关专题” +│ ├── run_examples.py # 运行示例代码(Python / Go / TypeScript / 单文件 Java) │ └── check_sensitive.py # 提交前脱敏检查(第 8 周建立) ├── plan/ # 16 周学习计划(日程),链接到专题,不重复讲概念 │ ├── README.md # 总纲 @@ -129,6 +130,7 @@ order: 2 ```bash python3 tools/build_catalog.py # 校验并更新 catalog.json +python3 tools/gen_week_topics.py # 修改了 week 字段时,重新生成周计划的“本周相关专题” python3 tools/run_examples.py # 运行示例(可加关键词只跑部分,例如 redis) python3 tools/check_sensitive.py # 脱敏检查(如果已经按第 8 周装好钩子,会自动执行) ``` diff --git a/README.md b/README.md index 4defeef..0608422 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ | --- | --- | | 按 16 周计划一步步学 | [plan/README.md](plan/README.md)(总纲、进度记录),每周文件链接到对应专题 | | 单独补某个技术栈 | [topics/index.md](topics/index.md)(43 个技术栈,分后端、DevOps、Python、AI、前端、计算机基础六个领域:课程、场景、面试题、示例) | -| 看企业里的综合方案 | [scenarios/index.md](scenarios/index.md)(客服知识库、工单、审批流、秒杀、多租户……) | +| 看企业里的综合方案 | [scenarios/index.md](scenarios/index.md)(8 个跨栈场景:客服知识库、工单、审批流 + 人工介入、报表 Agent、秒杀、多租户 SaaS、内容审核、数据同步) | | 看岗位要求和调研 | [plan/README.md 第 4 节](plan/README.md)(岗位要求对照、延伸技术栈)、[research/](research/index.md)(2026-10-23 BOSS直聘北京约 34 个岗位的调研记录) | | 准备面试 | 每个技术栈目录下的 `interview.md`(基础 / 进阶 / 场景题,带参考答案和追问) | | 写新内容 / 做学习平台 | [CONTRIBUTING.md](CONTRIBUTING.md)(目录、frontmatter、各类型写法)、`catalog.json`(自动生成的内容目录) | @@ -20,7 +20,7 @@ plan/ 16 周日程(type: week),链接到专题,不重复讲概念 research/ 岗位调研记录(type: research),只记录实际看到的内容 topics/ 专项学习:<领域>/<技术栈>/{index.md, NN-课程.md, scenarios/, interview.md, examples/} scenarios/ 跨技术栈的企业服务场景 -tools/ build_catalog.py(校验 + 生成目录)、run_examples.py(运行示例)、check_sensitive.py(脱敏检查) +tools/ build_catalog.py(校验 + 生成目录)、gen_week_topics.py(生成周计划的“本周相关专题”)、run_examples.py(运行示例)、check_sensitive.py(脱敏检查) schema/ frontmatter 的 JSON Schema catalog.json 内容目录(由 tools/build_catalog.py 生成,不要手改) ``` @@ -30,7 +30,8 @@ catalog.json 内容目录(由 tools/build_catalog.py 生成,不要手改) ## 常用命令 ```bash -python3 tools/build_catalog.py # 校验所有内容并更新 catalog.json +python3 tools/build_catalog.py # 校验所有内容并更新 catalog.json(--strict:每个技术栈都要有课程、场景、面试题) +python3 tools/gen_week_topics.py # 根据 week 字段重新生成各周的“本周相关专题” python3 tools/run_examples.py redis # 运行某个技术栈的示例代码 python3 tools/check_sensitive.py --self-test ``` diff --git a/catalog.json b/catalog.json index 4331ab8..777a331 100644 --- a/catalog.json +++ b/catalog.json @@ -8015,6 +8015,7 @@ "第 5 天:分层:model / store / handler", "第 6 天:中间件和接口测试", "第 7 天:配置、优雅关机、接前端", + "本周相关专题", "本周自查清单" ] }, @@ -8048,6 +8049,7 @@ "第 5 天:密码哈希和 JWT", "第 6 天:注册、登录、鉴权中间件", "第 7 天:配置切换、接口测试、集成测试、收尾", + "本周相关专题", "本周自查清单" ] }, @@ -8085,6 +8087,7 @@ "第 5 天:消息队列入门(Redis Streams),了解 RabbitMQ / Kafka", "第 6 天:Docker、Compose、Nginx", "第 7 天:部署到服务器 + CI + 收尾", + "本周相关专题", "本周自查清单" ] }, @@ -8117,6 +8120,7 @@ "第 5 天:pydantic 和配置", "第 6 天:httpx 异步请求、重试、测试替身", "第 7 天:FastAPI(Uvicorn、依赖注入、中间件、鉴权、生命周期、SSE)", + "本周相关专题", "本周自查清单" ] }, @@ -8151,6 +8155,7 @@ "第 5 天:FastAPI 接口和流式输出", "第 6 天:命令行、接入真实模型、人工试验", "第 7 天:整理、README、复盘", + "本周相关专题", "本周自查清单" ] }, @@ -8185,6 +8190,7 @@ "第 5 天:缓存、配置组装、多轮对话接口", "第 6 天:LangChain 对照实现 + Milvus / pgvector", "第 7 天:Docker Compose 部署 + 复盘", + "本周相关专题", "本周自查清单" ] }, @@ -8223,6 +8229,7 @@ "第 5 天:构建工具和性能优化", "第 6 天:SSR 基础(Nuxt / Next.js)", "第 7 天:前端 CI、构建产物部署、复盘", + "本周相关专题", "本周自查清单(对照招聘“熟悉 Vue / React”的延伸要求)" ] }, @@ -8252,6 +8259,7 @@ "第 5 天:接口职责表", "第 6 天:把流程画成状态机,并用代码验证思路", "第 7 天:阶段 1 验收 + 口述初稿", + "本周相关专题", "本周自查清单" ] }, @@ -8279,6 +8287,7 @@ "第 5 天:E 与业务系统集成", "第 6 天:补写和打磨案例卡", "第 7 天:汇总设计输入", + "本周相关专题", "本周自查清单" ] }, @@ -8309,7 +8318,8 @@ "第 4 天:MCP 概念 + 写一个 MCP 服务", "第 5 天:在 Cursor 和自己的 Agent 里用 MCP", "第 6 天:真实模型试跑 + 对照文档(上半)", - "第 7 天:M1 验收" + "第 7 天:M1 验收", + "本周相关专题" ] }, { @@ -8340,7 +8350,8 @@ "第 4 天:组装图 + 测试", "第 5 天:MCP 工具接入 LangGraph + 命令行", "第 6 天:真实模型试跑和调提示词", - "第 7 天:对照文档 + M2 验收" + "第 7 天:对照文档 + M2 验收", + "本周相关专题" ] }, { @@ -8372,7 +8383,8 @@ "第 4 天:后台运行器(RunManager)和报告", "第 5 天:FastAPI 接口和 SSE", "第 6 天:页面 + 崩溃恢复演示", - "第 7 天:走查 + M3 验收" + "第 7 天:走查 + M3 验收", + "本周相关专题" ] }, { @@ -8402,7 +8414,8 @@ "第 3 天:可观测性(回调、LangSmith / Langfuse)", "第 4 天:文档(架构、设计取舍、映射表)", "第 5 天:README、Docker、从零验证、讲解稿", - "第 6~7 天:Dify / Coze 体验(低代码平台)" + "第 6~7 天:Dify / Coze 体验(低代码平台)", + "本周相关专题" ] }, { @@ -8419,7 +8432,15 @@ "docker", "nginx", "linux", - "cicd" + "cicd", + "elasticsearch", + "mongodb", + "k8s", + "data-pipeline", + "nodejs", + "java-spring", + "network-os", + "web-security" ], "tags": [], "level": null, @@ -8440,6 +8461,8 @@ "第 5 天:把三个项目部署到一台服务器", "第 6 天:CI/CD——测试、构建镜像、自动部署", "第 7 天(可选):用 Go 写一个鉴权网关", + "本周相关专题", + "第 7 天(调整):了解级扩展——ES、MongoDB、K8s、数据管道、Node.js、Java、计算机基础", "本周验收" ] }, @@ -8469,7 +8492,8 @@ "第 4 天:工作经历——3 条 STAR", "第 5 天:针对岗位调整简历(关键词对照)", "第 6 天:口述稿和演示视频", - "第 7 天:自查、请人审阅、阶段 4(上)验收" + "第 7 天:自查、请人审阅、阶段 4(上)验收", + "本周相关专题" ] }, { @@ -8496,7 +8520,8 @@ "第 4 天:项目深挖和系统设计", "第 5 天:模拟面试和抽题练习", "第 6 天:终点验收", - "第 7 天:开始投递,建立复盘循环" + "第 7 天:开始投递,建立复盘循环", + "本周相关专题" ] }, { diff --git a/plan/README.md b/plan/README.md index a2b31d8..1a49f95 100644 --- a/plan/README.md +++ b/plan/README.md @@ -104,9 +104,17 @@ stack: [] | 11 | 项目三 M2:LangGraph 多 Agent 编排、MCP 工具接入 | LangGraph 版跑通 | `week11-agent-m2-langgraph.md` | | 12 | 项目三 M3:检查点续跑、interrupt 人机协作、后台作业 + 租约、SSE、长期记忆 | 可演示崩溃恢复 | `week12-agent-m3-persistence.md` | | 13 | 项目三 M4:评测集、可观测性、文档和映射表、Docker + Dify / Coze 体验 | 项目三完成 | `week13-agent-m4-eval-lowcode.md` | -| 14 | 后端补强:RabbitMQ / Kafka、gRPC、Redis 和 MySQL 面试专题、全部项目部署、CI/CD、(可选)Go 网关 | `backend-extend/`、`deploy/` | `week14-backend-extend-deploy.md` | -| 15 | 阶段 4(上):作品集、简历、STAR 经历、口述稿 | `career/` | `week15-package-resume.md` | -| 16 | 阶段 4(下):面试笔记、模拟面试、终点验收、投递 | 开始投递 | `week16-interview.md` | +| 14 | 后端补强:RabbitMQ / Kafka、gRPC、Redis 和 MySQL 面试专题、全部项目部署、CI/CD;第 7 天了解级扩展(ES 混合检索、数据管道、K8s、MongoDB、Node.js、Java、网络 / 安全基础);(可选)Go 网关 | `backend-extend/`、`deploy/`、`notes/extend.md` | `week14-backend-extend-deploy.md` | +| 15 | 阶段 4(上):1~2 个代表项目(链接 / 截图 / 视频 / 负责范围)、从问题到上线案例、AI 编程 + 验证案例(附脱敏会话记录)、简历、STAR、口述稿 | `career/` | `week15-package-resume.md` | +| 16 | 阶段 4(下):面试笔记、算法与计算机基础、8 个跨栈场景练系统设计、模拟面试、终点验收、投递 | 开始投递 | `week16-interview.md` | + +**依据 BOSS直聘 2026-10-23 调研的调整**(详见第 4 节): + +- Go 保持约 3 周(第 1~3 周)不再加码:34 个有效岗位中 Go 只有 2 个是硬性要求;Python / Agent / RAG 和作品集是重点。 +- **AI 编程练习从第 1 周开始**:每周至少一个功能用 AI 编程工具完成并保存验证证据,第 15 周整理成应聘案例(每个周计划文件的“本周相关专题”一节都有这条)。 +- 第 14 周第 7 天改为了解级扩展(ES、数据管道、K8s、MongoDB、Node.js、Java、网络 / 安全);算法和计算机基础在第 16 周。 +- 第 15 周按招聘方要求的应聘材料准备:代表项目的链接 / 截图 / 视频 / 负责范围、从问题到上线的案例、AI 编程案例和质量控制方式。 +- 每个周计划文件末尾的“本周相关专题”由 `tools/gen_week_topics.py` 自动生成,链接到 `topics/` 和 `scenarios/`。 精力不够时可以整体拉长,但顺序不要变,也不要跳过验收。 diff --git a/plan/week01-go-gin.md b/plan/week01-go-gin.md index 1093b29..3a67efc 100644 --- a/plan/week01-go-gin.md +++ b/plan/week01-go-gin.md @@ -1228,6 +1228,23 @@ cd frontend && npm install && npm run dev --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [AI 编程工具与验证](../topics/ai/ai-coding/index.md) | 课程:[AI 编程工具工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) | +| [Gin Web 框架](../topics/backend/gin/index.md) | 课程:[路由、参数绑定和校验](../topics/backend/gin/01-routing-binding.md);[面试题](../topics/backend/gin/interview.md) | +| [Go 语言](../topics/backend/go/index.md) | 课程:[语法、类型和接口(对照 TypeScript)](../topics/backend/go/01-basics-types.md);课程:[错误处理和并发](../topics/backend/go/02-errors-concurrency.md);课程:[测试和工程化](../topics/backend/go/03-testing-engineering.md);[面试题](../topics/backend/go/interview.md) | +| [Git](../topics/devops/git/index.md) | 课程:[分支模型和提交规范](../topics/devops/git/01-branch-commit.md) | + + + ## 本周自查清单 - [ ] 会用 `:=`、切片、map、结构体、方法、接口 diff --git a/plan/week02-db-auth.md b/plan/week02-db-auth.md index 7e72bf1..d6cc6cd 100644 --- a/plan/week02-db-auth.md +++ b/plan/week02-db-auth.md @@ -1271,6 +1271,23 @@ TEST_DATABASE_URL=postgres://todo:todo@localhost:5432/todo?sslmode=disable go te --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [Gin Web 框架](../topics/backend/gin/index.md) | 课程:[中间件、JWT 鉴权和统一错误处理](../topics/backend/gin/02-middleware-auth.md);场景:[企业后台接口规范](../topics/backend/gin/scenarios/unified-api-response.md);[面试题](../topics/backend/gin/interview.md) | +| [Go 语言](../topics/backend/go/index.md) | 课程:[测试和工程化](../topics/backend/go/03-testing-engineering.md) | +| [MySQL](../topics/backend/mysql/index.md) | 课程:[InnoDB 索引](../topics/backend/mysql/01-index-explain.md);课程:[事务、隔离级别、MVCC 和锁(行锁、间隙锁、死锁)](../topics/backend/mysql/02-tx-locks-mvcc.md);场景:[大表深分页和历史数据](../topics/backend/mysql/scenarios/deep-pagination.md);[面试题](../topics/backend/mysql/interview.md) | +| [PostgreSQL](../topics/backend/postgresql/index.md) | 课程:[表设计和 SQL](../topics/backend/postgresql/01-schema-sql.md);课程:[索引、EXPLAIN、事务、隔离级别和 MVCC](../topics/backend/postgresql/02-index-tx-mvcc.md);场景:[订单状态机](../topics/backend/postgresql/scenarios/order-state-audit.md);[面试题](../topics/backend/postgresql/interview.md) | + + + ## 本周自查清单 - [ ] 会建表、加约束,会设计一对多和多对多 diff --git a/plan/week03-project1.md b/plan/week03-project1.md index ffe660e..2984980 100644 --- a/plan/week03-project1.md +++ b/plan/week03-project1.md @@ -845,6 +845,29 @@ jobs: --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [Gin Web 框架](../topics/backend/gin/index.md) | 课程:[中间件、JWT 鉴权和统一错误处理](../topics/backend/gin/02-middleware-auth.md);场景:[企业后台接口规范](../topics/backend/gin/scenarios/unified-api-response.md);[面试题](../topics/backend/gin/interview.md) | +| [Go 语言](../topics/backend/go/index.md) | 课程:[错误处理和并发](../topics/backend/go/02-errors-concurrency.md);课程:[测试和工程化](../topics/backend/go/03-testing-engineering.md);场景:[批量调用第三方接口](../topics/backend/go/scenarios/batch-third-party-calls.md);[面试题](../topics/backend/go/interview.md) | +| [消息队列(RabbitMQ / Kafka)](../topics/backend/mq/index.md) | 课程:[RabbitMQ](../topics/backend/mq/01-rabbitmq.md);课程:[可靠性](../topics/backend/mq/03-reliability.md) | +| [PostgreSQL](../topics/backend/postgresql/index.md) | 课程:[索引、EXPLAIN、事务、隔离级别和 MVCC](../topics/backend/postgresql/02-index-tx-mvcc.md);场景:[订单状态机](../topics/backend/postgresql/scenarios/order-state-audit.md) | +| [Redis](../topics/backend/redis/index.md) | 课程:[数据结构和常用命令](../topics/backend/redis/01-data-structures.md);课程:[缓存模式](../topics/backend/redis/02-cache-patterns.md);课程:[分布式锁和限流](../topics/backend/redis/03-lock-ratelimit.md);[面试题](../topics/backend/redis/interview.md) | +| [CI/CD](../topics/devops/cicd/index.md) | 课程:[流水线设计](../topics/devops/cicd/01-pipeline.md) | +| [Docker 与 Compose](../topics/devops/docker/index.md) | 课程:[镜像和 Dockerfile](../topics/devops/docker/01-image-dockerfile.md);课程:[Compose、网络和数据卷](../topics/devops/docker/02-compose-network-volume.md);场景:[一条命令拉起开发环境](../topics/devops/docker/scenarios/compose-dev-env.md);[面试题](../topics/devops/docker/interview.md) | +| [Nginx](../topics/devops/nginx/index.md) | 课程:[反向代理、负载均衡和静态资源](../topics/devops/nginx/01-proxy-static.md) | + +**跨技术栈场景**:[秒杀 / 高并发抢购](../scenarios/flash-sale.md)、[工单系统](../scenarios/ticket-system.md) + + + ## 本周自查清单 - [ ] 权限在后端 service 层判断,有测试;能讲清 401 / 403 / 404 的选择 diff --git a/plan/week04-python.md b/plan/week04-python.md index ccde268..3d308c2 100644 --- a/plan/week04-python.md +++ b/plan/week04-python.md @@ -861,6 +861,22 @@ uv run pytest -v --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [asyncio 异步编程](../topics/python/asyncio/index.md) | 课程:[协程、任务和事件循环](../topics/python/asyncio/01-coroutines-tasks.md);课程:[并发控制](../topics/python/asyncio/02-concurrency-control.md);[面试题](../topics/python/asyncio/interview.md) | +| [FastAPI](../topics/python/fastapi/index.md) | 课程:[路由和参数校验](../topics/python/fastapi/01-routing-validation.md);课程:[依赖注入、鉴权、中间件和统一错误处理](../topics/python/fastapi/02-deps-auth-errors.md);[面试题](../topics/python/fastapi/interview.md) | +| [Python 语言](../topics/python/python/index.md) | 课程:[给 JS 开发者的 Python](../topics/python/python/01-syntax-for-js.md);课程:[类型标注、dataclass、异常和上下文管理器、pytest](../topics/python/python/02-typing-errors-testing.md);课程:[工程化](../topics/python/python/03-project-packaging.md);场景:[订单对账脚本](../topics/python/python/scenarios/order-reconciliation.md);[面试题](../topics/python/python/interview.md) | + + + ## 本周自查清单 - [ ] 会用 uv,知道 pip / venv / poetry 的对应关系 diff --git a/plan/week05-rag-1.md b/plan/week05-rag-1.md index 624b966..c8d6dbb 100644 --- a/plan/week05-rag-1.md +++ b/plan/week05-rag-1.md @@ -1406,6 +1406,26 @@ uv run ruff check . && uv run pyright src && uv run pytest -v --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [提示词与上下文工程](../topics/ai/prompt-engineering/index.md) | 课程:[提示词结构、少样本、结构化输出和提示词版本管理](../topics/ai/prompt-engineering/01-prompt-structured-output.md);[面试题](../topics/ai/prompt-engineering/interview.md) | +| [RAG 检索增强生成](../topics/ai/rag/index.md) | 课程:[RAG 流水线和文档切分](../topics/ai/rag/01-pipeline-chunking.md);场景:[带权限的企业知识库问答](../topics/ai/rag/scenarios/permission-aware-kb.md);[面试题](../topics/ai/rag/interview.md) | +| [向量数据库](../topics/ai/vector-db/index.md) | 课程:[向量检索原理](../topics/ai/vector-db/01-ann-metrics.md);课程:[向量库选型和 pgvector 实战](../topics/ai/vector-db/02-selection-pgvector.md);[面试题](../topics/ai/vector-db/interview.md) | +| [asyncio 异步编程](../topics/python/asyncio/index.md) | 课程:[并发控制](../topics/python/asyncio/02-concurrency-control.md);场景:[并发调用多个模型和外部接口](../topics/python/asyncio/scenarios/concurrent-llm-calls.md) | +| [FastAPI](../topics/python/fastapi/index.md) | 课程:[依赖注入、鉴权、中间件和统一错误处理](../topics/python/fastapi/02-deps-auth-errors.md);课程:[流式输出(SSE)、生命周期、测试和部署](../topics/python/fastapi/03-streaming-testing.md);场景:[大模型对话 API](../topics/python/fastapi/scenarios/streaming-chat-api.md);[面试题](../topics/python/fastapi/interview.md) | + +**跨技术栈场景**:[客服知识库问答](../scenarios/customer-service-kb.md) + + + ## 本周自查清单 - [ ] 能画出 RAG 两条流水线,讲清向量和余弦相似度 diff --git a/plan/week06-rag-2.md b/plan/week06-rag-2.md index 077645b..dc0d80d 100644 --- a/plan/week06-rag-2.md +++ b/plan/week06-rag-2.md @@ -1196,6 +1196,27 @@ docker compose restart api && curl localhost:8000/documents # 重启后数据 --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [LangChain](../topics/ai/langchain/index.md) | 课程:[LangChain 1.x](../topics/ai/langchain/01-lcel-structured-agent.md);场景:[工单自动分类服务](../topics/ai/langchain/scenarios/ticket-triage.md);[面试题](../topics/ai/langchain/interview.md) | +| [RAG 检索增强生成](../topics/ai/rag/index.md) | 课程:[检索优化](../topics/ai/rag/02-hybrid-rerank.md);课程:[生成与评测](../topics/ai/rag/03-generation-eval.md);场景:[带权限的企业知识库问答](../topics/ai/rag/scenarios/permission-aware-kb.md);[面试题](../topics/ai/rag/interview.md) | +| [向量数据库](../topics/ai/vector-db/index.md) | 课程:[向量库选型和 pgvector 实战](../topics/ai/vector-db/02-selection-pgvector.md);场景:[多租户知识库的向量索引](../topics/ai/vector-db/scenarios/multi-tenant-index.md);[面试题](../topics/ai/vector-db/interview.md) | +| [Elasticsearch](../topics/backend/elasticsearch/index.md) | 课程:[Elasticsearch](../topics/backend/elasticsearch/01-search-basics-hybrid.md);场景:[知识库混合检索](../topics/backend/elasticsearch/scenarios/kb-search-sync.md) | +| [Redis](../topics/backend/redis/index.md) | 课程:[缓存模式](../topics/backend/redis/02-cache-patterns.md) | +| [Docker 与 Compose](../topics/devops/docker/index.md) | 课程:[镜像和 Dockerfile](../topics/devops/docker/01-image-dockerfile.md);课程:[Compose、网络和数据卷](../topics/devops/docker/02-compose-network-volume.md) | + +**跨技术栈场景**:[客服知识库问答](../scenarios/customer-service-kb.md)、[数据同步](../scenarios/data-sync.md)、[多租户 SaaS](../scenarios/multi-tenant-saas.md) + + + ## 本周自查清单 - [ ] 评测集 ≥ 30 条(含拒答题),会算 Hit@K、MRR、拒答准确率 diff --git a/plan/week07-frontend.md b/plan/week07-frontend.md index 148c18c..7792f1d 100644 --- a/plan/week07-frontend.md +++ b/plan/week07-frontend.md @@ -1650,6 +1650,30 @@ pnpm lint && pnpm typecheck && pnpm test && pnpm build --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [Node.js(了解级)](../topics/backend/nodejs/index.md) | 课程:[Node.js 后端(了解级)](../topics/backend/nodejs/01-express-nest-basics.md) | +| [Web 安全基础](../topics/cs/web-security/index.md) | 课程:[Web 安全基础](../topics/cs/web-security/01-xss-csrf-sqli-cors-ssrf.md);[面试题](../topics/cs/web-security/interview.md) | +| [CI/CD](../topics/devops/cicd/index.md) | 课程:[流水线设计](../topics/devops/cicd/01-pipeline.md) | +| [Nginx](../topics/devops/nginx/index.md) | 课程:[反向代理、负载均衡和静态资源](../topics/devops/nginx/01-proxy-static.md);课程:[HTTPS、SSE / WebSocket、限流和灰度](../topics/devops/nginx/02-https-stream-limit.md);场景:[AI 应用网关](../topics/devops/nginx/scenarios/ai-gateway-sse-canary.md);[面试题](../topics/devops/nginx/interview.md) | +| [前端测试与性能](../topics/frontend/fe-testing-perf/index.md) | 课程:[前端测试](../topics/frontend/fe-testing-perf/01-testing-pyramid.md);课程:[前端性能](../topics/frontend/fe-testing-perf/02-web-vitals.md);场景:[性能治理](../topics/frontend/fe-testing-perf/scenarios/perf-regression.md);[面试题](../topics/frontend/fe-testing-perf/interview.md) | +| [React](../topics/frontend/react/index.md) | 课程:[React 渲染机制、Hooks 规则、状态管理和 React 19 新特性](../topics/frontend/react/01-hooks-rendering.md);场景:[长任务界面](../topics/frontend/react/scenarios/long-task-ui.md);[面试题](../topics/frontend/react/interview.md) | +| [SSR(Nuxt / Next.js)](../topics/frontend/ssr/index.md) | 课程:[渲染模式](../topics/frontend/ssr/01-rendering-modes.md);课程:[Next.js App Router](../topics/frontend/ssr/02-nextjs-app-router.md);场景:[帮助中心 + 智能客服](../topics/frontend/ssr/scenarios/help-center.md);[面试题](../topics/frontend/ssr/interview.md) | +| [TypeScript](../topics/frontend/typescript/index.md) | 课程:[TypeScript 类型系统进阶](../topics/frontend/typescript/01-type-system.md);场景:[前后端类型契约](../topics/frontend/typescript/scenarios/api-contract.md);[面试题](../topics/frontend/typescript/interview.md) | +| [Vite](../topics/frontend/vite/index.md) | 课程:[Vite 8](../topics/frontend/vite/01-dev-build-config.md);场景:[老项目从 webpack 迁移到 Vite](../topics/frontend/vite/scenarios/webpack-to-vite.md);[面试题](../topics/frontend/vite/interview.md) | +| [Vue 3](../topics/frontend/vue/index.md) | 课程:[Vue 3 响应式原理、组合式函数、Pinia 和性能优化](../topics/frontend/vue/01-reactivity-composition.md);场景:[AI 对话界面](../topics/frontend/vue/scenarios/ai-chat-stream.md);[面试题](../topics/frontend/vue/interview.md) | +| [webpack](../topics/frontend/webpack/index.md) | 课程:[webpack 5](../topics/frontend/webpack/01-build-optimization.md);场景:[大型项目构建慢、包体积大](../topics/frontend/webpack/scenarios/build-speed.md);[面试题](../topics/frontend/webpack/interview.md) | + + + ## 本周自查清单(对照招聘“熟悉 Vue / React”的延伸要求) - [ ] pnpm monorepo、workspace 依赖、幽灵依赖 diff --git a/plan/week08-inventory-architecture.md b/plan/week08-inventory-architecture.md index d14e682..d20600a 100644 --- a/plan/week08-inventory-architecture.md +++ b/plan/week08-inventory-architecture.md @@ -499,6 +499,21 @@ python3 notes/state_machine_demo.py # 把上面的代码存成这个文件 --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [AI 编程工具与验证](../topics/ai/ai-coding/index.md) | 课程:[AI 编程工具工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md);课程:[验证 AI 产出](../topics/ai/ai-coding/02-verify-evidence.md);场景:[团队引入 AI 编程](../topics/ai/ai-coding/scenarios/ai-assisted-feature.md) | +| [Git](../topics/devops/git/index.md) | 课程:[分支模型和提交规范](../topics/devops/git/01-branch-commit.md);课程:[合并、变基和撤销](../topics/devops/git/02-merge-rebase-recovery.md);场景:[线上紧急修复和密钥误提交](../topics/devops/git/scenarios/hotfix-and-leaked-secret.md) | + + + ## 本周自查清单 - [ ] `notes/00-inventory.md`:目标、模块清单、A~E 自评 diff --git a/plan/week09-case-cards.md b/plan/week09-case-cards.md index 21457da..bee1474 100644 --- a/plan/week09-case-cards.md +++ b/plan/week09-case-cards.md @@ -543,6 +543,16 @@ python3 notes/experiments/e_integration.py --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + + + ## 本周自查清单 - [ ] 5 个实验脚本都跑过,能讲清每个实验演示了什么 diff --git a/plan/week10-agent-m1-tools-mcp.md b/plan/week10-agent-m1-tools-mcp.md index 4e23831..a19e14f 100644 --- a/plan/week10-agent-m1-tools-mcp.md +++ b/plan/week10-agent-m1-tools-mcp.md @@ -1039,3 +1039,23 @@ uv run ruff check . && uv run pyright src && uv run pytest -v - [ ] 自己的 Agent 能动态加载 MCP 工具 - [ ] 能讲清 MCP 和 Function Calling 的关系 - [ ] 在总纲进度表勾掉第 10 周 + + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [Agent 设计](../topics/ai/agent-design/index.md) | 课程:[Agent 推理模式](../topics/ai/agent-design/01-react-planning.md) | +| [AI 编程工具与验证](../topics/ai/ai-coding/index.md) | 课程:[AI 编程工具工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) | +| [Function Calling 工具调用](../topics/ai/function-calling/index.md) | 课程:[工具调用原理](../topics/ai/function-calling/01-tool-loop.md);场景:[让 Agent 安全地调用内部业务接口](../topics/ai/function-calling/scenarios/safe-business-tools.md);[面试题](../topics/ai/function-calling/interview.md) | +| [模型侧基础(了解级)](../topics/ai/llm-serving/index.md) | 课程:[模型侧基础](../topics/ai/llm-serving/01-routing-vllm-lora.md) | +| [MCP 模型上下文协议](../topics/ai/mcp/index.md) | 课程:[MCP 协议和服务开发](../topics/ai/mcp/01-protocol-server.md);场景:[企业内部 MCP 服务](../topics/ai/mcp/scenarios/internal-tools-gateway.md);[面试题](../topics/ai/mcp/interview.md) | + +**跨技术栈场景**:[报表生成 Agent](../scenarios/report-agent.md) + + diff --git a/plan/week11-agent-m2-langgraph.md b/plan/week11-agent-m2-langgraph.md index 2cf5e08..b92cfd7 100644 --- a/plan/week11-agent-m2-langgraph.md +++ b/plan/week11-agent-m2-langgraph.md @@ -802,3 +802,23 @@ uv run ruff check . && uv run pyright src && uv run pytest -v - [ ] MCP 工具接入了 LangGraph - [ ] 能讲清 State、节点、条件边、reducer,以及和手写版的对应关系 - [ ] 在总纲进度表勾掉第 11 周 + + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [Agent 设计](../topics/ai/agent-design/index.md) | 课程:[Agent 推理模式](../topics/ai/agent-design/01-react-planning.md);课程:[上下文工程、Skills、多 Agent 和 A2A](../topics/ai/agent-design/02-context-skills-multiagent.md);场景:[运营报表 Agent](../topics/ai/agent-design/scenarios/report-agent.md);[面试题](../topics/ai/agent-design/interview.md) | +| [LangChain](../topics/ai/langchain/index.md) | 课程:[LangChain 1.x](../topics/ai/langchain/01-lcel-structured-agent.md);场景:[工单自动分类服务](../topics/ai/langchain/scenarios/ticket-triage.md);[面试题](../topics/ai/langchain/interview.md) | +| [LangGraph](../topics/ai/langgraph/index.md) | 课程:[LangGraph 状态图](../topics/ai/langgraph/01-state-graph.md);[面试题](../topics/ai/langgraph/interview.md) | +| [MCP 模型上下文协议](../topics/ai/mcp/index.md) | 课程:[MCP 协议和服务开发](../topics/ai/mcp/01-protocol-server.md);场景:[企业内部 MCP 服务](../topics/ai/mcp/scenarios/internal-tools-gateway.md);[面试题](../topics/ai/mcp/interview.md) | +| [提示词与上下文工程](../topics/ai/prompt-engineering/index.md) | 课程:[提示词注入和防护](../topics/ai/prompt-engineering/02-context-injection.md) | + +**跨技术栈场景**:[审批流 + 人工介入的 Agent](../scenarios/approval-human-in-loop.md)、[工单系统](../scenarios/ticket-system.md) + + diff --git a/plan/week12-agent-m3-persistence.md b/plan/week12-agent-m3-persistence.md index c757db8..002186f 100644 --- a/plan/week12-agent-m3-persistence.md +++ b/plan/week12-agent-m3-persistence.md @@ -1140,3 +1140,23 @@ uv run ruff check . && uv run pyright src && uv run pytest -v - [ ] 6 个走查场景符合预期 - [ ] 能讲清:两层状态、为什么编排不能放在浏览器里、什么时候停下来问人、怎么防双跑、长期记忆写什么不写什么 - [ ] 在总纲进度表勾掉第 12 周 + + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [LangGraph](../topics/ai/langgraph/index.md) | 课程:[检查点、人机协作和异常恢复](../topics/ai/langgraph/02-persistence-hitl.md);场景:[退款工单 Agent](../topics/ai/langgraph/scenarios/refund-approval.md);[面试题](../topics/ai/langgraph/interview.md) | +| [React](../topics/frontend/react/index.md) | 场景:[长任务界面](../topics/frontend/react/scenarios/long-task-ui.md) | +| [Vue 3](../topics/frontend/vue/index.md) | 场景:[AI 对话界面](../topics/frontend/vue/scenarios/ai-chat-stream.md) | +| [asyncio 异步编程](../topics/python/asyncio/index.md) | 课程:[并发控制](../topics/python/asyncio/02-concurrency-control.md);场景:[并发调用多个模型和外部接口](../topics/python/asyncio/scenarios/concurrent-llm-calls.md) | +| [FastAPI](../topics/python/fastapi/index.md) | 课程:[流式输出(SSE)、生命周期、测试和部署](../topics/python/fastapi/03-streaming-testing.md);场景:[大模型对话 API](../topics/python/fastapi/scenarios/streaming-chat-api.md) | + +**跨技术栈场景**:[审批流 + 人工介入的 Agent](../scenarios/approval-human-in-loop.md) + + diff --git a/plan/week13-agent-m4-eval-lowcode.md b/plan/week13-agent-m4-eval-lowcode.md index 5b6ab13..714447f 100644 --- a/plan/week13-agent-m4-eval-lowcode.md +++ b/plan/week13-agent-m4-eval-lowcode.md @@ -590,3 +590,25 @@ git clone https://github.com/langgenius/dify.git && cd dify/docker && cp .env.ex - [ ] 架构图和 README 一致;测试、ruff、pyright 通过;脱敏检查完成 - [ ] Dify 或 Coze 至少搭过一个知识库应用和一个工作流,写了对比笔记 - [ ] 在总纲进度表勾掉第 13 周和“阶段 3”,填上“项目三路径:`zhuangang/agent-mini/`” + + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [Agent 设计](../topics/ai/agent-design/index.md) | 课程:[上下文工程、Skills、多 Agent 和 A2A](../topics/ai/agent-design/02-context-skills-multiagent.md);场景:[运营报表 Agent](../topics/ai/agent-design/scenarios/report-agent.md);[面试题](../topics/ai/agent-design/interview.md) | +| [Agent 评测与运维](../topics/ai/agent-ops/index.md) | 课程:[Agent 评测和质量门禁](../topics/ai/agent-ops/01-eval-quality-gate.md);课程:[Agent 可观测性、成本和延迟](../topics/ai/agent-ops/02-observability-cost.md);场景:[客服 Agent 上线流程](../topics/ai/agent-ops/scenarios/agent-quality-gate.md);[面试题](../topics/ai/agent-ops/interview.md) | +| [模型侧基础(了解级)](../topics/ai/llm-serving/index.md) | 课程:[模型侧基础](../topics/ai/llm-serving/01-routing-vllm-lora.md);场景:[公司级大模型网关](../topics/ai/llm-serving/scenarios/multi-provider-gateway.md);[面试题](../topics/ai/llm-serving/interview.md) | +| [低代码 AI 平台(Dify / Coze)](../topics/ai/lowcode/index.md) | 课程:[Dify / Coze 低代码 AI 平台](../topics/ai/lowcode/01-dify-coze.md);场景:[从 Dify 原型到生产](../topics/ai/lowcode/scenarios/poc-to-production.md);[面试题](../topics/ai/lowcode/interview.md) | +| [提示词与上下文工程](../topics/ai/prompt-engineering/index.md) | 课程:[提示词注入和防护](../topics/ai/prompt-engineering/02-context-injection.md);场景:[读邮件的办公助手](../topics/ai/prompt-engineering/scenarios/injection-defense.md);[面试题](../topics/ai/prompt-engineering/interview.md) | +| [Docker 与 Compose](../topics/devops/docker/index.md) | 课程:[Compose、网络和数据卷](../topics/devops/docker/02-compose-network-volume.md);场景:[一条命令拉起开发环境](../topics/devops/docker/scenarios/compose-dev-env.md) | +| [Nginx](../topics/devops/nginx/index.md) | 场景:[AI 应用网关](../topics/devops/nginx/scenarios/ai-gateway-sse-canary.md) | + +**跨技术栈场景**:[内容审核](../scenarios/content-moderation.md)、[客服知识库问答](../scenarios/customer-service-kb.md)、[多租户 SaaS](../scenarios/multi-tenant-saas.md)、[报表生成 Agent](../scenarios/report-agent.md) + + diff --git a/plan/week14-backend-extend-deploy.md b/plan/week14-backend-extend-deploy.md index 5e47f57..15d2317 100644 --- a/plan/week14-backend-extend-deploy.md +++ b/plan/week14-backend-extend-deploy.md @@ -3,7 +3,7 @@ id: plan.week14 title: "第 14 周:后端补强——消息队列、gRPC、Redis / MySQL 专题、全部项目部署、CI/CD" type: week domain: plan -stack: [go, mysql, redis, mq, grpc-microservices, docker, nginx, linux, cicd] +stack: [go, mysql, redis, mq, grpc-microservices, docker, nginx, linux, cicd, elasticsearch, mongodb, k8s, data-pipeline, nodejs, java-spring, network-os, web-security] week: [14] est_hours: 12 order: 14 @@ -17,6 +17,8 @@ order: 14 **原则**:每个专题做到“能跑一个最小例子 + 能用自己的话回答面试题”,不深挖源码。Go 网关是**可选**内容,时间不够直接跳过(见总纲第 6 节)。 +**根据 BOSS直聘 2026-10-23 调研的调整**:Go 只有 2 个岗位是硬性要求,所以 Go 网关继续保持可选;调研中出现的 ES 混合检索、MongoDB、K8s、数据管道、Node.js、Java(各有若干岗位提到)以及计算机基础,放到下面的“第 7 天(调整)”做**了解级**扩展:每项跑通专题里的示例、读完面试题,不做项目。 + **本周环境**(2026-10 实际验证):RabbitMQ 4.0、Redis 7 以上、MySQL 8(我在 MariaDB 11.8 上跑过同样的 SQL,`EXPLAIN` 的主要列相同)、Python 3.12 + aio-pika 9 / redis-py / PyMySQL / grpcio 1.84、Go 1.27。 **参考资料** @@ -1539,11 +1541,62 @@ JWT_SECRET=$(openssl rand -hex 32) UPSTREAM=http://127.0.0.1:8100 go run . --- + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成,按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则,按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后),第 15 周整理成“AI 编程 + 验证方法”的应聘案例。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [模型侧基础(了解级)](../topics/ai/llm-serving/index.md) | 场景:[公司级大模型网关](../topics/ai/llm-serving/scenarios/multi-provider-gateway.md) | +| [数据管道基础](../topics/backend/data-pipeline/index.md) | 课程:[数据管道基础](../topics/backend/data-pipeline/01-batch-stream-reliability.md);场景:[第三方平台订单同步](../topics/backend/data-pipeline/scenarios/third-party-sync.md);[面试题](../topics/backend/data-pipeline/interview.md) | +| [Elasticsearch](../topics/backend/elasticsearch/index.md) | 课程:[Elasticsearch](../topics/backend/elasticsearch/01-search-basics-hybrid.md);场景:[知识库混合检索](../topics/backend/elasticsearch/scenarios/kb-search-sync.md);[面试题](../topics/backend/elasticsearch/interview.md) | +| [gRPC 与微服务](../topics/backend/grpc-microservices/index.md) | 课程:[gRPC 和 Protobuf](../topics/backend/grpc-microservices/01-grpc-proto.md);课程:[服务治理](../topics/backend/grpc-microservices/02-governance.md);场景:[单体拆分](../topics/backend/grpc-microservices/scenarios/monolith-split.md);[面试题](../topics/backend/grpc-microservices/interview.md) | +| [Java / Spring Boot(了解级)](../topics/backend/java-spring/index.md) | 课程:[Java / Spring Boot(了解级)](../topics/backend/java-spring/01-java-spring-awareness.md);场景:[Python Agent 调用公司已有的 Java 业务系统](../topics/backend/java-spring/scenarios/call-java-service.md);[面试题](../topics/backend/java-spring/interview.md) | +| [MongoDB](../topics/backend/mongodb/index.md) | 课程:[MongoDB 基础](../topics/backend/mongodb/01-document-model.md);场景:[AI 客服会话存储](../topics/backend/mongodb/scenarios/conversation-store.md);[面试题](../topics/backend/mongodb/interview.md) | +| [消息队列(RabbitMQ / Kafka)](../topics/backend/mq/index.md) | 课程:[RabbitMQ](../topics/backend/mq/01-rabbitmq.md);课程:[Kafka](../topics/backend/mq/02-kafka.md);课程:[可靠性](../topics/backend/mq/03-reliability.md);场景:[订单超时自动取消](../topics/backend/mq/scenarios/delayed-order-cancel.md);[面试题](../topics/backend/mq/interview.md) | +| [MySQL](../topics/backend/mysql/index.md) | 课程:[事务、隔离级别、MVCC 和锁(行锁、间隙锁、死锁)](../topics/backend/mysql/02-tx-locks-mvcc.md);课程:[运维与扩展](../topics/backend/mysql/03-ops-scale.md);场景:[大表深分页和历史数据](../topics/backend/mysql/scenarios/deep-pagination.md);[面试题](../topics/backend/mysql/interview.md) | +| [Node.js(了解级)](../topics/backend/nodejs/index.md) | 课程:[Node.js 后端(了解级)](../topics/backend/nodejs/01-express-nest-basics.md);场景:[用 Node.js 给 AI 应用做 BFF](../topics/backend/nodejs/scenarios/ai-bff.md);[面试题](../topics/backend/nodejs/interview.md) | +| [Redis](../topics/backend/redis/index.md) | 课程:[分布式锁和限流](../topics/backend/redis/03-lock-ratelimit.md);场景:[抢购库存预扣](../topics/backend/redis/scenarios/stock-reservation.md);[面试题](../topics/backend/redis/interview.md) | +| [网络与操作系统基础](../topics/cs/network-os/index.md) | 课程:[网络基础](../topics/cs/network-os/01-http-tcp.md);课程:[操作系统基础](../topics/cs/network-os/02-os-basics.md);场景:[线上连接问题排查](../topics/cs/network-os/scenarios/connection-troubleshooting.md);[面试题](../topics/cs/network-os/interview.md) | +| [Web 安全基础](../topics/cs/web-security/index.md) | 课程:[Web 安全基础](../topics/cs/web-security/01-xss-csrf-sqli-cors-ssrf.md);场景:[AI 客服上线前的安全评审](../topics/cs/web-security/scenarios/ai-app-security.md);[面试题](../topics/cs/web-security/interview.md) | +| [CI/CD](../topics/devops/cicd/index.md) | 课程:[发布与回滚](../topics/devops/cicd/02-release-rollback.md);场景:[多语言仓库的流水线](../topics/devops/cicd/scenarios/multi-lang-pipeline.md);[面试题](../topics/devops/cicd/interview.md) | +| [Docker 与 Compose](../topics/devops/docker/index.md) | 场景:[一条命令拉起开发环境](../topics/devops/docker/scenarios/compose-dev-env.md);[面试题](../topics/devops/docker/interview.md) | +| [Kubernetes 基础](../topics/devops/k8s/index.md) | 课程:[Kubernetes 基础](../topics/devops/k8s/01-core-objects.md);场景:[AI Agent 服务上 K8s](../topics/devops/k8s/scenarios/agent-rollout.md);[面试题](../topics/devops/k8s/interview.md) | +| [Linux 运维基础](../topics/devops/linux/index.md) | 课程:[常用命令](../topics/devops/linux/01-commands.md);课程:[线上排查](../topics/devops/linux/02-troubleshooting.md);场景:[线上故障排查](../topics/devops/linux/scenarios/incident-troubleshooting.md);[面试题](../topics/devops/linux/interview.md) | +| [Nginx](../topics/devops/nginx/index.md) | 课程:[HTTPS、SSE / WebSocket、限流和灰度](../topics/devops/nginx/02-https-stream-limit.md);场景:[AI 应用网关](../topics/devops/nginx/scenarios/ai-gateway-sse-canary.md);[面试题](../topics/devops/nginx/interview.md) | + +**跨技术栈场景**:[内容审核](../scenarios/content-moderation.md)、[数据同步](../scenarios/data-sync.md)、[秒杀 / 高并发抢购](../scenarios/flash-sale.md)、[多租户 SaaS](../scenarios/multi-tenant-saas.md)、[报表生成 Agent](../scenarios/report-agent.md)、[工单系统](../scenarios/ticket-system.md) + + + +## 第 7 天(调整):了解级扩展——ES、MongoDB、K8s、数据管道、Node.js、Java、计算机基础 + +> 依据 BOSS直聘 2026-10-23 调研新增。时间有限时按顺序做,前 3 项优先(与 RAG / Agent 项目关系最紧);Go 网关(上面的可选第 7 天)放到时间富余时再做。 + +| 顺序 | 内容 | 用时 | 做什么 | 专题 | +| --- | --- | --- | --- | --- | +| 1 | ES 混合检索 | 1.5 小时 | 跑通 `es_hybrid.py`(BM25 + kNN + RRF + 别名切换),对比第 6 周自己写的 BM25 | [Elasticsearch](../topics/backend/elasticsearch/index.md) | +| 2 | 数据管道 | 1 小时 | 读懂并运行 `incremental-sync`(水位线、限流、重试、幂等、质量检查),想清楚项目二的文档同步怎么改造 | [数据管道](../topics/backend/data-pipeline/index.md) | +| 3 | K8s 基础 | 1 小时 | 读懂 `agent-api` 清单,用 kubeconform 校验;有条件用 kind / minikube 部署一次 | [Kubernetes](../topics/devops/k8s/index.md) | +| 4 | MongoDB | 45 分钟 | 单节点副本集 + `mongo_demo.py`(建模、ESR 索引、事务、变更流) | [MongoDB](../topics/backend/mongodb/index.md) | +| 5 | Node.js / Java | 45 分钟 | Express BFF 示例跑测试;`java OrderDemo.java` 跑一次,能读懂 Spring Boot 分层 | [Node.js](../topics/backend/nodejs/index.md)、[Java](../topics/backend/java-spring/index.md) | +| 6 | 计算机基础 | 1 小时 | 网络(粘包、多路复用示例)和 Web 安全(`secure-api` 13 个攻击测试);算法放到第 16 周 | [网络与操作系统](../topics/cs/network-os/index.md)、[Web 安全](../topics/cs/web-security/index.md) | + +### 完成标准 + +- 上表每项的示例都在本机运行过(或写明为什么没有运行,例如没有 K8s 集群),每个专题的面试题能用自己的话回答“基础”部分。 +- `notes/extend.md` 记录每项“我能讲清楚的 3 句话”。 + ## 本周验收 - [ ] RabbitMQ、gRPC、Redis、MySQL 四组测试在本机全部通过(连接对应服务,不是跳过) - [ ] `notes/mq.md`、`notes/microservices.md`、`notes/redis.md`、`notes/mysql.md` 写完,每个面试题都能脱稿回答 - [ ] 三个项目部署完成(或本机 Compose 全部跑通),`deploy/deploy.md` 写清备份和回滚 - [ ] CI 能自动跑测试;(有服务器时)推送后自动部署 +- [ ] 第 7 天(调整)的了解级扩展完成,`notes/extend.md` 写完 - [ ] (可选)Go 网关测试通过并接入部署 - [ ] 在总纲进度表勾掉第 14 周 diff --git a/plan/week15-package-resume.md b/plan/week15-package-resume.md index 245959f..0b4928c 100644 --- a/plan/week15-package-resume.md +++ b/plan/week15-package-resume.md @@ -13,7 +13,21 @@ order: 15 > 第四段的第 2 周。上周 `week14-backend-extend-deploy.md`,下周 `week16-interview.md`。 -**本周目标**:把前 14 周的成果变成招聘方能快速看懂的材料:3 个公开仓库 + 1 份简历 + 3 条 STAR 工作经历 + 1 份口述稿(含演示视频)。 +**本周目标**:把前 14 周的成果变成招聘方能快速看懂的材料:1~2 个重点展示的代表项目(共 3 个公开仓库)+ 1 份简历 + 3 条 STAR 工作经历 + 1 个“从问题到上线”的完整案例 + 1 个“AI 编程 + 验证方法”案例 + 1 份口述稿(含演示视频)。 + +**应聘材料清单(对照 BOSS直聘 2026-10-23 调研)** + +调研中多个岗位在 JD 里直接写了应聘时要提供的材料:1~2 个代表项目(产品链接 / 仓库 / 截图 / 演示视频)、独立负责的范围、从问题定义到上线迭代的完整案例、AI 编程开发案例和质量控制方式,有的还要求提交 AI 会话记录;开源 / 技术博客加分(原始记录见 [research/boss-2026-10-23.md](../research/boss-2026-10-23.md))。本周的产出逐项对应: + +| 招聘方要的 | 你交付的文件 | 怎么准备 | +| --- | --- | --- | +| 1~2 个代表项目(链接 / 仓库 / 截图 / 视频) | `career/portfolio.md` | 从 3 个仓库中选 1~2 个重点展示(建议 RAG 客服问答 + Agent 项目),每个给出:仓库地址、在线演示地址(没有就写本地一键启动命令)、3~5 张截图、1~3 分钟演示视频(第 1、6 天) | +| 独立负责的范围 | `career/portfolio.md` 每个项目的“我负责的部分” | 写清哪些是自己从零设计和实现的,哪些用了框架 / 开源组件;学习项目就如实写“独立完成” | +| 从问题定义到上线迭代的完整案例 | `career/cases/problem-to-launch.md` | 按“问题和指标 → 方案和取舍 → 实现 → 上线 / 部署 → 数据 → 下一轮改进”写;素材来自第 5~6 周 RAG 评测(召回率从基线到改进后的变化)或第 12~13 周 Agent 的崩溃恢复和评测;可以参考[跨技术栈场景](../scenarios/index.md)的结构 | +| AI 编程案例 + 质量控制方式 | `career/cases/ai-coding.md` + `career/session-logs/` | 选一个用 AI 编程工具完成的功能:需求和规则(AGENTS.md / rules / Skills)、AI 产出了什么、你发现并修正了什么、怎么验证(测试、故意破坏后测试失败、代码审查、真实环境验证);附**脱敏后**的会话记录。方法见 [AI 编程专题](../topics/ai/ai-coding/index.md) | +| 开源 / 技术博客(加分) | `career/portfolio.md` 的“文章”部分 | 可选:把 1~2 个踩坑经历写成文章(例如“SSE 流式输出经过 Nginx 被缓冲”“LangGraph 检查点续跑”) | + +> 会话记录和截图在公开前必须脱敏:去掉公司名、内部地址、密钥、真实客户数据,提交前运行脱敏检查脚本(第 8 周第 2 天)。 **原则** @@ -29,7 +43,12 @@ career/ ├── resume-variants/ # 针对不同岗位微调的版本 ├── star.md # 3 条 STAR 工作经历 ├── pitch.md # 口述稿:3 分钟架构 + 1 分钟踩坑 -├── portfolio.md # 作品清单:仓库地址、演示链接、视频 +├── portfolio.md # 作品清单:1~2 个代表项目的仓库、演示链接、截图、视频、我负责的部分 +├── cases/ +│ ├── problem-to-launch.md # 从问题定义到上线迭代的完整案例 +│ └── ai-coding.md # AI 编程案例:规则、产出、修正、验证方法 +├── session-logs/ # 脱敏后的 AI 编程会话记录(配合 cases/ai-coding.md) +├── screenshots/ # 代表项目截图 ├── jd/ # 收集的岗位描述(纯文本,一个岗位一个文件) ├── keyword_check.py # 简历和岗位描述的关键词对照 └── tests/test_keyword_check.py @@ -70,6 +89,19 @@ docker compose up -d && open http://localhost:8100 ### 要建的文件 - 3 个公开仓库:`task-board`(含 `web/board-vue` 前端)、`rag-qa`(含 `web/rag-react`)、`agent-mini`;`career/portfolio.md` 记录地址和演示链接 +- `career/portfolio.md` 中选出 1~2 个代表项目(建议 `rag-qa` 和 `agent-mini`),每个写:一句话介绍、仓库地址、演示地址或一键启动命令、3~5 张截图(放 `career/screenshots/`)、演示视频链接、**我负责的部分**、可以被追问的技术点 +- `career/cases/problem-to-launch.md`(模板见下)和 `career/cases/ai-coding.md`(第 6 天前完成) + +```markdown +# 从问题到上线:<项目名> + +1. 问题和目标:谁遇到了什么问题?用什么指标衡量(例如召回率@5、首 token 延迟、崩溃后能否续跑)?基线是多少? +2. 方案和取舍:考虑过哪几种方案,为什么选这个(引用 scenarios/ 中对应场景的取舍表) +3. 实现:我负责的模块、关键设计(2~3 条) +4. 上线 / 部署:怎么部署、怎么回滚、怎么监控 +5. 结果:指标变化(只写自己测出来的数字,注明测试集和方法) +6. 下一轮迭代:发现了什么 Bad Case,怎么改的,改完的数据 +``` ### 运行方式 @@ -82,6 +114,7 @@ python3 ~/zhuangang/tools/check_sensitive.py && git commit -m "agent-mini 初始 ### 完成标准 - 3 个仓库公开;每个 README 顶部有一句话介绍、动图或视频、快速开始;脱敏检查通过。 +- `portfolio.md` 中 1~2 个代表项目的截图、视频、负责范围齐全;`problem-to-launch.md` 每一节都有内容。 --- @@ -369,10 +402,24 @@ python keyword_check.py jd/某公司.txt resume.md ### 要建的文件 - `career/pitch.md`(自我介绍 + 项目讲解),演示视频链接写进 `career/portfolio.md` +- `career/cases/ai-coding.md`:从第 1~14 周每周的 AI 编程练习中选 1 个最完整的功能,按下面的结构写,并把对应会话记录脱敏后放进 `career/session-logs/` + +```markdown +# AI 编程案例:<功能名> + +1. 任务:要实现什么,验收标准是什么 +2. 给 AI 的上下文:AGENTS.md / rules / Skills 里写了什么约束(贴片段) +3. AI 的产出:生成了哪些文件;哪些直接可用 +4. 我发现并修正的问题:例如边界条件遗漏、竞态、越权、测试是假的(断言为空) +5. 验证方法:单元 / 集成测试、故意破坏关键逻辑后测试变红、类型检查、代码审查、真实环境冒烟;贴命令和输出 +6. 结论:AI 节省了哪些时间(如实描述),哪些部分必须自己把关 +7. 会话记录:session-logs/<文件名>(已脱敏) +``` ### 完成标准 - 自我介绍 ≤ 1 分钟、项目讲解 ≤ 4 分钟,各计时 3 遍;视频已录好。 +- `cases/ai-coding.md` 的“验证方法”一节有可复现的命令和输出;会话记录已脱敏并通过检查脚本。 --- @@ -389,6 +436,9 @@ python keyword_check.py jd/某公司.txt resume.md [ ] 项目经历每一行都是“做了什么 + 怎么做 + 结果”,数字都能找到出处 [ ] 工作经历已脱敏,没有公司内部名称、接口、数据 [ ] 仓库、演示链接都能打开(用手机和别人的电脑试一次) +[ ] 1~2 个代表项目都有截图和演示视频,写清“我负责的部分” +[ ] “从问题到上线”案例有问题、指标、取舍、上线和迭代数据 +[ ] “AI 编程”案例写清验证方法,附脱敏后的会话记录 [ ] 简历 PDF 两页以内,没有错别字,联系方式正确 ``` @@ -398,8 +448,25 @@ python keyword_check.py jd/某公司.txt resume.md ### 完成标准(阶段 4 上半验收) -- [ ] 3 个公开仓库 + 演示视频 +- [ ] 3 个公开仓库 + 演示视频;其中 1~2 个代表项目有截图、视频和负责范围说明(`portfolio.md`) +- [ ] `cases/problem-to-launch.md`、`cases/ai-coding.md` 写完,`session-logs/` 已脱敏 - [ ] 简历(主版本 + 3 个岗位方向版本) - [ ] 3 条 STAR、口述稿计时达标 - [ ] 至少 1 位他人审阅过并完成修改 - [ ] 在总纲进度表勾掉第 15 周 + + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [AI 编程工具与验证](../topics/ai/ai-coding/index.md) | 课程:[验证 AI 产出](../topics/ai/ai-coding/02-verify-evidence.md);场景:[团队引入 AI 编程](../topics/ai/ai-coding/scenarios/ai-assisted-feature.md);[面试题](../topics/ai/ai-coding/interview.md) | +| [CI/CD](../topics/devops/cicd/index.md) | 场景:[多语言仓库的流水线](../topics/devops/cicd/scenarios/multi-lang-pipeline.md) | +| [Git](../topics/devops/git/index.md) | 课程:[合并、变基和撤销](../topics/devops/git/02-merge-rebase-recovery.md);场景:[线上紧急修复和密钥误提交](../topics/devops/git/scenarios/hotfix-and-leaked-secret.md);[面试题](../topics/devops/git/interview.md) | + +**跨技术栈场景**:[客服知识库问答](../scenarios/customer-service-kb.md) + + diff --git a/plan/week16-interview.md b/plan/week16-interview.md index 925bce0..beb1d66 100644 --- a/plan/week16-interview.md +++ b/plan/week16-interview.md @@ -118,6 +118,15 @@ career/ --- +### 补充:计算机基础和算法(依据 BOSS直聘 2026-10-23 调研) + +调研中有岗位提到算法 / 数据结构和计算机基础,部分公司一面会现场写题。本周每天抽 30~45 分钟: + +- 算法:按 [数据结构与算法](../topics/cs/algorithms/index.md) 的 9 个模式各做 1~2 道力扣中等题,先说思路和复杂度再写;示例 `patterns.py` 的测试要能自己重写一遍。 +- 网络 / 操作系统:[面试题](../topics/cs/network-os/interview.md) 的“基础”部分能脱稿回答(输入 URL 发生了什么、三次握手、进程线程协程、epoll)。 +- Web 安全:[面试题](../topics/cs/web-security/interview.md) 中 XSS / CSRF / SQL 注入 / SSRF 能结合自己的 AI 项目讲防御。 +- 系统设计:第 4 天用 [跨技术栈场景](../scenarios/index.md) 中的 8 个场景练习,每个能讲 5 分钟。 + ## 第 4 天:项目深挖和系统设计 ### 学习内容 @@ -303,3 +312,59 @@ python drill.py interview-notes.md 5 - [ ] 第一批至少 10 个岗位已投递 - [ ] 面试复盘循环已经开始(至少有一条复盘记录) - [ ] 总纲开头状态改为“已完成(YYYY-MM-DD)”,并写下“下一步如果继续学”选哪一个(总纲第 12 节),提交并推送 + + + +## 本周相关专题 + +> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;想调整就修改对应专题文件的 frontmatter 后重新生成。 + +| 技术栈 | 课程 / 场景 / 面试题 | +| --- | --- | +| [Agent 设计](../topics/ai/agent-design/index.md) | [面试题](../topics/ai/agent-design/interview.md) | +| [Agent 评测与运维](../topics/ai/agent-ops/index.md) | [面试题](../topics/ai/agent-ops/interview.md) | +| [AI 编程工具与验证](../topics/ai/ai-coding/index.md) | [面试题](../topics/ai/ai-coding/interview.md) | +| [Function Calling 工具调用](../topics/ai/function-calling/index.md) | [面试题](../topics/ai/function-calling/interview.md) | +| [LangChain](../topics/ai/langchain/index.md) | [面试题](../topics/ai/langchain/interview.md) | +| [LangGraph](../topics/ai/langgraph/index.md) | [面试题](../topics/ai/langgraph/interview.md) | +| [模型侧基础(了解级)](../topics/ai/llm-serving/index.md) | [面试题](../topics/ai/llm-serving/interview.md) | +| [低代码 AI 平台(Dify / Coze)](../topics/ai/lowcode/index.md) | [面试题](../topics/ai/lowcode/interview.md) | +| [MCP 模型上下文协议](../topics/ai/mcp/index.md) | [面试题](../topics/ai/mcp/interview.md) | +| [提示词与上下文工程](../topics/ai/prompt-engineering/index.md) | [面试题](../topics/ai/prompt-engineering/interview.md) | +| [RAG 检索增强生成](../topics/ai/rag/index.md) | [面试题](../topics/ai/rag/interview.md) | +| [向量数据库](../topics/ai/vector-db/index.md) | [面试题](../topics/ai/vector-db/interview.md) | +| [数据管道基础](../topics/backend/data-pipeline/index.md) | [面试题](../topics/backend/data-pipeline/interview.md) | +| [Elasticsearch](../topics/backend/elasticsearch/index.md) | [面试题](../topics/backend/elasticsearch/interview.md) | +| [Gin Web 框架](../topics/backend/gin/index.md) | [面试题](../topics/backend/gin/interview.md) | +| [Go 语言](../topics/backend/go/index.md) | [面试题](../topics/backend/go/interview.md) | +| [gRPC 与微服务](../topics/backend/grpc-microservices/index.md) | [面试题](../topics/backend/grpc-microservices/interview.md) | +| [Java / Spring Boot(了解级)](../topics/backend/java-spring/index.md) | [面试题](../topics/backend/java-spring/interview.md) | +| [MongoDB](../topics/backend/mongodb/index.md) | [面试题](../topics/backend/mongodb/interview.md) | +| [消息队列(RabbitMQ / Kafka)](../topics/backend/mq/index.md) | [面试题](../topics/backend/mq/interview.md) | +| [MySQL](../topics/backend/mysql/index.md) | [面试题](../topics/backend/mysql/interview.md) | +| [Node.js(了解级)](../topics/backend/nodejs/index.md) | [面试题](../topics/backend/nodejs/interview.md) | +| [PostgreSQL](../topics/backend/postgresql/index.md) | [面试题](../topics/backend/postgresql/interview.md) | +| [Redis](../topics/backend/redis/index.md) | [面试题](../topics/backend/redis/interview.md) | +| [数据结构与算法(面试)](../topics/cs/algorithms/index.md) | 课程:[复杂度分析和九个高频模式](../topics/cs/algorithms/01-complexity-patterns.md);场景:[业务中的算法](../topics/cs/algorithms/scenarios/business-algorithms.md);[面试题](../topics/cs/algorithms/interview.md) | +| [网络与操作系统基础](../topics/cs/network-os/index.md) | 课程:[网络基础](../topics/cs/network-os/01-http-tcp.md);课程:[操作系统基础](../topics/cs/network-os/02-os-basics.md);场景:[线上连接问题排查](../topics/cs/network-os/scenarios/connection-troubleshooting.md);[面试题](../topics/cs/network-os/interview.md) | +| [Web 安全基础](../topics/cs/web-security/index.md) | 课程:[Web 安全基础](../topics/cs/web-security/01-xss-csrf-sqli-cors-ssrf.md);场景:[AI 客服上线前的安全评审](../topics/cs/web-security/scenarios/ai-app-security.md);[面试题](../topics/cs/web-security/interview.md) | +| [CI/CD](../topics/devops/cicd/index.md) | [面试题](../topics/devops/cicd/interview.md) | +| [Docker 与 Compose](../topics/devops/docker/index.md) | [面试题](../topics/devops/docker/interview.md) | +| [Git](../topics/devops/git/index.md) | [面试题](../topics/devops/git/interview.md) | +| [Kubernetes 基础](../topics/devops/k8s/index.md) | [面试题](../topics/devops/k8s/interview.md) | +| [Linux 运维基础](../topics/devops/linux/index.md) | [面试题](../topics/devops/linux/interview.md) | +| [Nginx](../topics/devops/nginx/index.md) | [面试题](../topics/devops/nginx/interview.md) | +| [前端测试与性能](../topics/frontend/fe-testing-perf/index.md) | [面试题](../topics/frontend/fe-testing-perf/interview.md) | +| [React](../topics/frontend/react/index.md) | [面试题](../topics/frontend/react/interview.md) | +| [SSR(Nuxt / Next.js)](../topics/frontend/ssr/index.md) | [面试题](../topics/frontend/ssr/interview.md) | +| [TypeScript](../topics/frontend/typescript/index.md) | [面试题](../topics/frontend/typescript/interview.md) | +| [Vite](../topics/frontend/vite/index.md) | [面试题](../topics/frontend/vite/interview.md) | +| [Vue 3](../topics/frontend/vue/index.md) | [面试题](../topics/frontend/vue/interview.md) | +| [webpack](../topics/frontend/webpack/index.md) | [面试题](../topics/frontend/webpack/interview.md) | +| [asyncio 异步编程](../topics/python/asyncio/index.md) | [面试题](../topics/python/asyncio/interview.md) | +| [FastAPI](../topics/python/fastapi/index.md) | [面试题](../topics/python/fastapi/interview.md) | +| [Python 语言](../topics/python/python/index.md) | [面试题](../topics/python/python/interview.md) | + +**跨技术栈场景**:[秒杀 / 高并发抢购](../scenarios/flash-sale.md) + + diff --git a/tools/gen_week_topics.py b/tools/gen_week_topics.py new file mode 100644 index 0000000..cf97a1a --- /dev/null +++ b/tools/gen_week_topics.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +"""根据 catalog.json 中每个条目的 week 字段,在 plan/weekNN-*.md 中生成“本周相关专题”一节。 + +- 生成内容放在 和 之间,重复运行会替换,不会重复插入 +- 第一次插入的位置:“## 本周自查清单 / ## 本周验收”之前(代码块之外);没有这两个标题时放在文末 +- 先运行 tools/build_catalog.py 生成 catalog.json + +用法:python3 tools/gen_week_topics.py [--check] (--check 只检查是否需要更新,需要时返回 1) +""" +from __future__ import annotations + +import json +import re +import sys +from collections import defaultdict +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +START, END = "", "" +ANCHOR = re.compile(r"^## (本周自查清单|本周验收)") +FENCE = re.compile(r"^\s*(```|~~~)") +TYPE_ORDER = {"lesson": 0, "scenario": 1, "interview": 2} +TYPE_NAME = {"lesson": "课程", "scenario": "场景", "interview": "面试题"} +AI_CODING_NOTE = ("- **AI 编程练习(每周)**:本周至少一个功能用 AI 编程工具(Cursor / Claude Code / Codex 等)完成," + "按 [AI 编程:工作流](../topics/ai/ai-coding/01-workflow-rules-skills.md) 写清需求和规则," + "按 [验证与证据](../topics/ai/ai-coding/02-verify-evidence.md) 保存测试结果和会话记录(脱敏后)," + "第 15 周整理成“AI 编程 + 验证方法”的应聘案例。") + + +def build_section(week: int, items: list[dict], stacks: dict[str, dict]) -> str: + by_stack: dict[str, list[dict]] = defaultdict(list) + cross: list[dict] = [] + for it in items: + if it["type"] == "scenario" and it["domain"] == "cross": + cross.append(it) + elif it["type"] in TYPE_ORDER and it.get("stack"): + by_stack[it["path"].split("/")[2]].append(it) + lines = [START, "", "## 本周相关专题", "", + "> 本节由 `tools/gen_week_topics.py` 根据专题文件的 `week` 字段自动生成,请勿手改;" + "想调整就修改对应专题文件的 frontmatter 后重新生成。", ""] + if week <= 14: + lines += [AI_CODING_NOTE, ""] + if by_stack: + lines += ["| 技术栈 | 课程 / 场景 / 面试题 |", "| --- | --- |"] + for sid in sorted(by_stack, key=lambda s: (stacks.get(s, {}).get("domain", ""), s)): + st = stacks.get(sid, {}) + name = f"[{st.get('title', sid)}](../{st['index']})" if st.get("index") else sid + links = [] + for it in sorted(by_stack[sid], key=lambda x: (TYPE_ORDER[x["type"]], x.get("order") or 0, x["path"])): + title = TYPE_NAME[it["type"]] if it["type"] == "interview" else it["title"].split(":")[0] + links.append(f"{TYPE_NAME[it['type']]}:[{title}](../{it['path']})" if it["type"] != "interview" + else f"[面试题](../{it['path']})") + lines.append(f"| {name} | {';'.join(links)} |") + lines.append("") + if cross: + lines += ["**跨技术栈场景**:" + "、".join(f"[{c['title'].split(':')[0]}](../{c['path']})" for c in sorted(cross, key=lambda c: c["path"])), ""] + lines.append(END) + return "\n".join(lines) + + +def insert(text: str, section: str) -> str: + if START in text and END in text: + return re.sub(re.escape(START) + r".*?" + re.escape(END), lambda _: section, text, count=1, flags=re.S) + in_fence = False + lines = text.split("\n") + for i, line in enumerate(lines): + if FENCE.match(line): + in_fence = not in_fence + elif not in_fence and ANCHOR.match(line): + return "\n".join(lines[:i] + [section, ""] + lines[i:]) + return text.rstrip("\n") + "\n\n" + section + "\n" + + +def main() -> int: + check = "--check" in sys.argv + cat = json.loads((ROOT / "catalog.json").read_text(encoding="utf-8")) + stacks = {s["stack"]: s for s in cat["stacks"]} + per_week: dict[int, list[dict]] = defaultdict(list) + for it in cat["items"]: + if it["path"].startswith(("topics/", "scenarios/")): + for w in it.get("week") or []: + per_week[int(w)].append(it) + stale = [] + for f in sorted((ROOT / "plan").glob("week*.md")): + week = int(re.match(r"week(\d+)", f.name).group(1)) + old = f.read_text(encoding="utf-8") + new = insert(old, build_section(week, per_week.get(week, []), stacks)) + if new != old: + stale.append(f.name) + if not check: + f.write_text(new, encoding="utf-8") + if check: + if stale: + print("需要重新生成:" + "、".join(stale)) + return 1 + print("各周“本周相关专题”已是最新") + return 0 + print(f"已更新 {len(stale)} 个周计划文件") + return 0 + + +if __name__ == "__main__": + sys.exit(main())