{ "schema_version": 1, "generated_by": "tools/build_catalog.py", "stacks": [ { "stack": "agent-design", "domain": "ai", "title": "Agent 设计", "index": "topics/ai/agent-design/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/ai/agent-design/examples/agent-patterns" ] }, { "stack": "agent-ops", "domain": "ai", "title": "Agent 评测与运维", "index": "topics/ai/agent-ops/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/ai/agent-ops/examples/eval-gate" ] }, { "stack": "ai-coding", "domain": "ai", "title": "AI 编程工具与验证", "index": "topics/ai/ai-coding/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/ai/ai-coding/examples/ai-workflow" ] }, { "stack": "function-calling", "domain": "ai", "title": "Function Calling 工具调用", "index": "topics/ai/function-calling/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 2, "场景题": 2 }, "examples": [ "topics/ai/function-calling/examples/tool-loop" ] }, { "stack": "langchain", "domain": "ai", "title": "LangChain", "index": "topics/ai/langchain/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 2, "场景题": 2 }, "examples": [ "topics/ai/langchain/examples/lc-basics" ] }, { "stack": "langgraph", "domain": "ai", "title": "LangGraph", "index": "topics/ai/langgraph/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/ai/langgraph/examples/ticket-flow" ] }, { "stack": "llm-serving", "domain": "ai", "title": "模型侧基础(了解级)", "index": "topics/ai/llm-serving/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/ai/llm-serving/examples/model-router" ] }, { "stack": "lowcode", "domain": "ai", "title": "低代码 AI 平台(Dify / Coze)", "index": "topics/ai/lowcode/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 2, "场景题": 2 }, "examples": [ "topics/ai/lowcode/examples/dify-tool-api" ] }, { "stack": "mcp", "domain": "ai", "title": "MCP 模型上下文协议", "index": "topics/ai/mcp/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 2, "场景题": 2 }, "examples": [ "topics/ai/mcp/examples/kb-server" ] }, { "stack": "prompt-engineering", "domain": "ai", "title": "提示词与上下文工程", "index": "topics/ai/prompt-engineering/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/ai/prompt-engineering/examples/prompt-kit" ] }, { "stack": "rag", "domain": "ai", "title": "RAG 检索增强生成", "index": "topics/ai/rag/index.md", "lessons": 3, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 4, "场景题": 3 }, "examples": [ "topics/ai/rag/examples/mini-rag" ] }, { "stack": "vector-db", "domain": "ai", "title": "向量数据库", "index": "topics/ai/vector-db/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/ai/vector-db/examples/vector-stores" ] }, { "stack": "data-pipeline", "domain": "backend", "title": "数据管道基础", "index": "topics/backend/data-pipeline/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/backend/data-pipeline/examples/incremental-sync" ] }, { "stack": "elasticsearch", "domain": "backend", "title": "Elasticsearch", "index": "topics/backend/elasticsearch/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/backend/elasticsearch/examples/hybrid-search" ] }, { "stack": "gin", "domain": "backend", "title": "Gin Web 框架", "index": "topics/backend/gin/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 4, "场景题": 3 }, "examples": [ "topics/backend/gin/examples/unified-api" ] }, { "stack": "go", "domain": "backend", "title": "Go 语言", "index": "topics/backend/go/index.md", "lessons": 3, "scenarios": 1, "interview_questions": { "基础": 5, "进阶": 4, "场景题": 3 }, "examples": [ "topics/backend/go/examples/batch-fetch" ] }, { "stack": "grpc-microservices", "domain": "backend", "title": "gRPC 与微服务", "index": "topics/backend/grpc-microservices/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 4, "场景题": 3 }, "examples": [ "topics/backend/grpc-microservices/examples/grpc-user", "topics/backend/grpc-microservices/examples/resilience" ] }, { "stack": "java-spring", "domain": "backend", "title": "Java / Spring Boot(了解级)", "index": "topics/backend/java-spring/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/backend/java-spring/examples/java-basics" ] }, { "stack": "mongodb", "domain": "backend", "title": "MongoDB", "index": "topics/backend/mongodb/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/backend/mongodb/examples/conversations" ] }, { "stack": "mq", "domain": "backend", "title": "消息队列(RabbitMQ / Kafka)", "index": "topics/backend/mq/index.md", "lessons": 3, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 4, "场景题": 3 }, "examples": [ "topics/backend/mq/examples/delay-cancel", "topics/backend/mq/examples/outbox" ] }, { "stack": "mysql", "domain": "backend", "title": "MySQL", "index": "topics/backend/mysql/index.md", "lessons": 3, "scenarios": 1, "interview_questions": { "基础": 5, "进阶": 4, "场景题": 3 }, "examples": [ "topics/backend/mysql/examples/deep-pagination" ] }, { "stack": "nodejs", "domain": "backend", "title": "Node.js(了解级)", "index": "topics/backend/nodejs/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/backend/nodejs/examples/express-bff" ] }, { "stack": "postgresql", "domain": "backend", "title": "PostgreSQL", "index": "topics/backend/postgresql/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 5, "进阶": 4, "场景题": 3 }, "examples": [ "topics/backend/postgresql/examples/order-state" ] }, { "stack": "redis", "domain": "backend", "title": "Redis", "index": "topics/backend/redis/index.md", "lessons": 3, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 4, "场景题": 3 }, "examples": [ "topics/backend/redis/examples/stock-lock-ratelimit" ] }, { "stack": "algorithms", "domain": "cs", "title": "数据结构与算法(面试)", "index": "topics/cs/algorithms/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/cs/algorithms/examples/patterns" ] }, { "stack": "network-os", "domain": "cs", "title": "网络与操作系统基础", "index": "topics/cs/network-os/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/cs/network-os/examples/tcp-basics" ] }, { "stack": "web-security", "domain": "cs", "title": "Web 安全基础", "index": "topics/cs/web-security/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/cs/web-security/examples/secure-api" ] }, { "stack": "cicd", "domain": "devops", "title": "CI/CD", "index": "topics/devops/cicd/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 3 }, "examples": [ "topics/devops/cicd/examples/pipeline" ] }, { "stack": "docker", "domain": "devops", "title": "Docker 与 Compose", "index": "topics/devops/docker/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 3, "场景题": 3 }, "examples": [ "topics/devops/docker/examples/go-api-compose" ] }, { "stack": "git", "domain": "devops", "title": "Git", "index": "topics/devops/git/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 3, "场景题": 3 }, "examples": [ "topics/devops/git/examples/git-lab" ] }, { "stack": "k8s", "domain": "devops", "title": "Kubernetes 基础", "index": "topics/devops/k8s/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/devops/k8s/examples/agent-api" ] }, { "stack": "linux", "domain": "devops", "title": "Linux 运维基础", "index": "topics/devops/linux/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 3, "场景题": 3 }, "examples": [ "topics/devops/linux/examples/log-analysis" ] }, { "stack": "nginx", "domain": "devops", "title": "Nginx", "index": "topics/devops/nginx/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 3, "场景题": 3 }, "examples": [ "topics/devops/nginx/examples/gateway" ] }, { "stack": "fe-testing-perf", "domain": "frontend", "title": "前端测试与性能", "index": "topics/frontend/fe-testing-perf/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/frontend/fe-testing-perf/examples/search-box" ] }, { "stack": "react", "domain": "frontend", "title": "React", "index": "topics/frontend/react/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/frontend/react/examples/task-panel" ] }, { "stack": "ssr", "domain": "frontend", "title": "SSR(Nuxt / Next.js)", "index": "topics/frontend/ssr/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/frontend/ssr/examples/next-ai-chat" ] }, { "stack": "typescript", "domain": "frontend", "title": "TypeScript", "index": "topics/frontend/typescript/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/frontend/typescript/examples/api-client" ] }, { "stack": "vite", "domain": "frontend", "title": "Vite", "index": "topics/frontend/vite/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/frontend/vite/examples/vite-config" ] }, { "stack": "vue", "domain": "frontend", "title": "Vue 3", "index": "topics/frontend/vue/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/frontend/vue/examples/ai-chat-stream" ] }, { "stack": "webpack", "domain": "frontend", "title": "webpack", "index": "topics/frontend/webpack/index.md", "lessons": 1, "scenarios": 1, "interview_questions": { "基础": 3, "进阶": 3, "场景题": 2 }, "examples": [ "topics/frontend/webpack/examples/webpack-config" ] }, { "stack": "asyncio", "domain": "python", "title": "asyncio 异步编程", "index": "topics/python/asyncio/index.md", "lessons": 2, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 3, "场景题": 3 }, "examples": [ "topics/python/asyncio/examples/fanout" ] }, { "stack": "fastapi", "domain": "python", "title": "FastAPI", "index": "topics/python/fastapi/index.md", "lessons": 3, "scenarios": 1, "interview_questions": { "基础": 4, "进阶": 3, "场景题": 3 }, "examples": [ "topics/python/fastapi/examples/chat-api" ] }, { "stack": "python", "domain": "python", "title": "Python 语言", "index": "topics/python/python/index.md", "lessons": 3, "scenarios": 1, "interview_questions": { "基础": 5, "进阶": 4, "场景题": 3 }, "examples": [ "topics/python/python/examples/reconcile" ] } ], "items": [ { "id": "ai.agent-design.context-skills-multiagent", "title": "上下文工程、Skills、多 Agent 和 A2A", "type": "lesson", "domain": "ai", "stack": [ "agent-design" ], "tags": [ "上下文工程", "Context Engineering", "Skills", "多 Agent", "Supervisor", "Handoff", "A2A" ], "level": "advanced", "prerequisites": [ "ai.agent-design.react-planning" ], "related": [ "ai.prompt-engineering.index", "ai.mcp.protocol-server", "ai.ai-coding.index", "ai.agent-design.interview" ], "est_hours": 3.5, "week": [ 11, 13 ], "order": 2, "path": "topics/ai/agent-design/02-context-skills-multiagent.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.agent-design.index", "title": "Agent 设计", "type": "index", "domain": "ai", "stack": [ "agent-design" ], "tags": [ "ReAct", "规划", "上下文工程", "Skills", "多 Agent", "A2A", "Agentic RAG" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 10, 11, 13 ], "order": null, "path": "topics/ai/agent-design/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.agent-design.interview", "title": "Agent 设计面试题", "type": "interview", "domain": "ai", "stack": [ "agent-design" ], "tags": [ "ReAct", "规划", "上下文工程", "多 Agent", "A2A", "面试" ], "level": "advanced", "prerequisites": [], "related": [ "ai.agent-design.react-planning", "ai.agent-design.context-skills-multiagent" ], "est_hours": null, "week": [ 11, 13, 16 ], "order": null, "path": "topics/ai/agent-design/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "ai.agent-design.react-planning", "title": "Agent 推理模式:ReAct、Plan-and-Execute、反思和 Agentic RAG", "type": "lesson", "domain": "ai", "stack": [ "agent-design" ], "tags": [ "ReAct", "Plan-and-Execute", "规划", "反思", "Agentic RAG", "工作流 vs Agent" ], "level": "intermediate", "prerequisites": [ "ai.function-calling.tool-loop" ], "related": [ "ai.agent-design.context-skills-multiagent", "ai.langgraph.state-graph", "ai.agent-design.interview" ], "est_hours": 3, "week": [ 10, 11 ], "order": 1, "path": "topics/ai/agent-design/01-react-planning.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.agent-design.scenario.report-agent", "title": "运营报表 Agent:规划、只读 SQL 工具、结构化输出和任务进度", "type": "scenario", "domain": "ai", "stack": [ "agent-design", "langgraph", "postgresql", "fastapi" ], "tags": [ "报表 Agent", "Text-to-SQL", "规划", "结构化输出", "任务状态", "流式进度" ], "level": "advanced", "prerequisites": [ "ai.agent-design.react-planning" ], "related": [ "ai.agent-design.interview", "ai.langgraph.persistence-hitl", "ai.agent-ops.observability-cost" ], "est_hours": 3, "week": [ 11, 13 ], "order": null, "path": "topics/ai/agent-design/scenarios/report-agent.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.agent-ops.eval-quality-gate", "title": "Agent 评测和质量门禁:评测集、打分方法、幻觉防护、Bad Case 分析", "type": "lesson", "domain": "ai", "stack": [ "agent-ops" ], "tags": [ "Agent 评测", "评测集", "LLM-as-judge", "幻觉", "质量门禁", "Bad Case", "回归测试" ], "level": "advanced", "prerequisites": [ "ai.rag.generation-eval", "ai.function-calling.tool-loop" ], "related": [ "ai.agent-ops.observability-cost", "ai.agent-ops.scenario.agent-quality-gate", "ai.agent-ops.interview" ], "est_hours": 4, "week": [ 13 ], "order": 1, "path": "topics/ai/agent-ops/01-eval-quality-gate.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.agent-ops.index", "title": "Agent 评测与运维", "type": "index", "domain": "ai", "stack": [ "agent-ops" ], "tags": [ "评测", "质量门禁", "幻觉防护", "Bad Case", "可观测性", "成本", "记忆" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 12, 13 ], "order": null, "path": "topics/ai/agent-ops/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.agent-ops.interview", "title": "Agent 评测与运维面试题", "type": "interview", "domain": "ai", "stack": [ "agent-ops" ], "tags": [ "评测", "幻觉", "可观测性", "成本", "面试" ], "level": "advanced", "prerequisites": [], "related": [ "ai.agent-ops.eval-quality-gate", "ai.agent-ops.observability-cost" ], "est_hours": null, "week": [ 13, 16 ], "order": null, "path": "topics/ai/agent-ops/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "ai.agent-ops.observability-cost", "title": "Agent 可观测性、成本和延迟:链路追踪、记忆管理、缓存和降级", "type": "lesson", "domain": "ai", "stack": [ "agent-ops" ], "tags": [ "可观测性", "链路追踪", "OpenTelemetry", "LangSmith", "Langfuse", "成本", "延迟", "记忆", "缓存" ], "level": "advanced", "prerequisites": [ "ai.agent-ops.eval-quality-gate" ], "related": [ "ai.llm-serving.index", "ai.agent-ops.interview" ], "est_hours": 3, "week": [ 13 ], "order": 2, "path": "topics/ai/agent-ops/02-observability-cost.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.agent-ops.scenario.agent-quality-gate", "title": "客服 Agent 上线流程:评测集、质量门禁、灰度和线上 Bad Case 闭环", "type": "scenario", "domain": "ai", "stack": [ "agent-ops", "cicd", "langgraph" ], "tags": [ "质量门禁", "灰度发布", "Bad Case", "评测集", "线上监控" ], "level": "advanced", "prerequisites": [ "ai.agent-ops.eval-quality-gate" ], "related": [ "ai.agent-ops.interview", "devops.cicd.release-rollback" ], "est_hours": 3, "week": [ 13 ], "order": null, "path": "topics/ai/agent-ops/scenarios/agent-quality-gate.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.ai-coding.index", "title": "AI 编程工具与验证", "type": "index", "domain": "ai", "stack": [ "ai-coding" ], "tags": [ "AI 编程", "Claude Code", "Cursor", "Codex", "Skills", "规则文件", "验证", "会话记录" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 1, 8, 10, 15 ], "order": null, "path": "topics/ai/ai-coding/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.ai-coding.interview", "title": "AI 编程工具面试题", "type": "interview", "domain": "ai", "stack": [ "ai-coding" ], "tags": [ "AI 编程", "Cursor", "Claude Code", "验证", "面试" ], "level": "basic", "prerequisites": [], "related": [ "ai.ai-coding.workflow-rules-skills", "ai.ai-coding.verify-evidence" ], "est_hours": null, "week": [ 15, 16 ], "order": null, "path": "topics/ai/ai-coding/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "ai.ai-coding.scenario.ai-assisted-feature", "title": "团队引入 AI 编程:从“各用各的”到可验证、可复用的工作流", "type": "scenario", "domain": "ai", "stack": [ "ai-coding", "cicd", "git" ], "tags": [ "AI 编程规范", "规则文件", "Skills", "代码审查", "CI", "数据安全" ], "level": "intermediate", "prerequisites": [ "ai.ai-coding.verify-evidence" ], "related": [ "ai.ai-coding.interview", "devops.git.index" ], "est_hours": 2, "week": [ 8, 15 ], "order": null, "path": "topics/ai/ai-coding/scenarios/ai-assisted-feature.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.ai-coding.verify-evidence", "title": "验证 AI 产出:测试、审查清单、真实环境验证和会话记录作为作品证据", "type": "lesson", "domain": "ai", "stack": [ "ai-coding" ], "tags": [ "AI 产出验证", "代码审查", "测试", "会话记录", "作品集", "脱敏" ], "level": "intermediate", "prerequisites": [ "ai.ai-coding.workflow-rules-skills" ], "related": [ "ai.ai-coding.scenario.ai-assisted-feature", "devops.cicd.index", "ai.ai-coding.interview" ], "est_hours": 2.5, "week": [ 8, 15 ], "order": 2, "path": "topics/ai/ai-coding/02-verify-evidence.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.ai-coding.workflow-rules-skills", "title": "AI 编程工具工作流:Claude Code / Cursor / Codex、规则文件、Skills 和 MCP", "type": "lesson", "domain": "ai", "stack": [ "ai-coding" ], "tags": [ "AI 编程", "Claude Code", "Cursor", "Codex", "AGENTS.md", "规则文件", "Skills", "MCP", "Vibe coding" ], "level": "basic", "prerequisites": [], "related": [ "ai.ai-coding.verify-evidence", "ai.agent-design.context-skills-multiagent", "ai.mcp.protocol-server", "ai.ai-coding.interview" ], "est_hours": 2.5, "week": [ 1, 8, 10 ], "order": 1, "path": "topics/ai/ai-coding/01-workflow-rules-skills.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.function-calling.index", "title": "Function Calling 工具调用", "type": "index", "domain": "ai", "stack": [ "function-calling" ], "tags": [ "Function Calling", "Tool Calling", "Agent" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 10 ], "order": null, "path": "topics/ai/function-calling/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.function-calling.interview", "title": "Function Calling 面试题", "type": "interview", "domain": "ai", "stack": [ "function-calling" ], "tags": [ "Function Calling", "工具调用", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.function-calling.tool-loop" ], "est_hours": null, "week": [ 10, 16 ], "order": null, "path": "topics/ai/function-calling/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 2, "场景题": 2 } }, { "id": "ai.function-calling.scenario.safe-business-tools", "title": "让 Agent 安全地调用内部业务接口:权限、确认、幂等和审计", "type": "scenario", "domain": "ai", "stack": [ "function-calling", "fastapi" ], "tags": [ "工具权限", "人工确认", "幂等", "审计日志", "限流", "提示词注入" ], "level": "advanced", "prerequisites": [ "ai.function-calling.tool-loop" ], "related": [ "ai.function-calling.interview", "ai.prompt-engineering.index", "ai.mcp.index" ], "est_hours": 2.5, "week": [ 10 ], "order": null, "path": "topics/ai/function-calling/scenarios/safe-business-tools.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.function-calling.tool-loop", "title": "工具调用原理:工具定义、调用循环、参数校验、并行调用和错误回传", "type": "lesson", "domain": "ai", "stack": [ "function-calling" ], "tags": [ "Function Calling", "Tool Calling", "JSON Schema", "调用循环", "参数校验" ], "level": "intermediate", "prerequisites": [ "python.python.typing-errors-testing" ], "related": [ "ai.mcp.index", "ai.langgraph.state-graph", "ai.function-calling.interview" ], "est_hours": 3, "week": [ 10 ], "order": 1, "path": "topics/ai/function-calling/01-tool-loop.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.langchain.index", "title": "LangChain", "type": "index", "domain": "ai", "stack": [ "langchain" ], "tags": [ "LangChain", "LCEL", "结构化输出", "Agent" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 6, 11 ], "order": null, "path": "topics/ai/langchain/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.langchain.interview", "title": "LangChain 面试题", "type": "interview", "domain": "ai", "stack": [ "langchain" ], "tags": [ "LangChain", "LCEL", "结构化输出", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.langchain.lcel-structured-agent" ], "est_hours": null, "week": [ 6, 11, 16 ], "order": null, "path": "topics/ai/langchain/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 2, "场景题": 2 } }, { "id": "ai.langchain.lcel-structured-agent", "title": "LangChain 1.x:模型和消息、LCEL、结构化输出、create_agent 和中间件", "type": "lesson", "domain": "ai", "stack": [ "langchain" ], "tags": [ "LangChain", "LCEL", "init_chat_model", "结构化输出", "create_agent", "middleware", "重试", "备用模型" ], "level": "intermediate", "prerequisites": [ "ai.function-calling.tool-loop" ], "related": [ "ai.langgraph.state-graph", "ai.langchain.scenario.ticket-triage", "ai.langchain.interview" ], "est_hours": 3, "week": [ 6, 11 ], "order": 1, "path": "topics/ai/langchain/01-lcel-structured-agent.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.langchain.scenario.ticket-triage", "title": "工单自动分类服务:结构化输出、批处理、重试降级和人工复核", "type": "scenario", "domain": "ai", "stack": [ "langchain", "fastapi", "postgresql" ], "tags": [ "结构化输出", "批处理", "重试", "降级", "人工复核", "成本" ], "level": "intermediate", "prerequisites": [ "ai.langchain.lcel-structured-agent" ], "related": [ "ai.langchain.interview", "ai.llm-serving.index" ], "est_hours": 2.5, "week": [ 6, 11 ], "order": null, "path": "topics/ai/langchain/scenarios/ticket-triage.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.langgraph.index", "title": "LangGraph", "type": "index", "domain": "ai", "stack": [ "langgraph" ], "tags": [ "LangGraph", "状态图", "检查点", "人机协作" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 11, 12 ], "order": null, "path": "topics/ai/langgraph/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.langgraph.interview", "title": "LangGraph 面试题", "type": "interview", "domain": "ai", "stack": [ "langgraph" ], "tags": [ "LangGraph", "检查点", "人机协作", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.langgraph.state-graph", "ai.langgraph.persistence-hitl" ], "est_hours": null, "week": [ 11, 12, 16 ], "order": null, "path": "topics/ai/langgraph/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "ai.langgraph.persistence-hitl", "title": "检查点、人机协作和异常恢复:checkpointer、interrupt、RetryPolicy、任务状态", "type": "lesson", "domain": "ai", "stack": [ "langgraph" ], "tags": [ "checkpointer", "thread_id", "interrupt", "Command", "RetryPolicy", "崩溃恢复", "任务状态" ], "level": "advanced", "prerequisites": [ "ai.langgraph.state-graph" ], "related": [ "ai.langgraph.scenario.refund-approval", "ai.agent-ops.eval-quality-gate", "ai.langgraph.interview" ], "est_hours": 4, "week": [ 12 ], "order": 2, "path": "topics/ai/langgraph/02-persistence-hitl.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.langgraph.scenario.refund-approval", "title": "退款工单 Agent:人工审批、任务状态和崩溃恢复", "type": "scenario", "domain": "ai", "stack": [ "langgraph", "fastapi", "postgresql" ], "tags": [ "人机协作", "审批流", "任务状态", "异常恢复", "幂等", "流式进度" ], "level": "advanced", "prerequisites": [ "ai.langgraph.persistence-hitl" ], "related": [ "ai.langgraph.interview", "ai.agent-ops.scenario.agent-quality-gate", "backend.postgresql.scenario.order-state-audit" ], "est_hours": 3, "week": [ 12 ], "order": null, "path": "topics/ai/langgraph/scenarios/refund-approval.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.langgraph.state-graph", "title": "LangGraph 状态图:状态、节点、边、条件路由和流式输出", "type": "lesson", "domain": "ai", "stack": [ "langgraph" ], "tags": [ "LangGraph", "StateGraph", "reducer", "条件边", "流式输出", "stream_mode" ], "level": "intermediate", "prerequisites": [ "ai.function-calling.tool-loop" ], "related": [ "ai.langgraph.persistence-hitl", "ai.agent-design.react-planning", "ai.langgraph.interview" ], "est_hours": 3, "week": [ 11 ], "order": 1, "path": "topics/ai/langgraph/01-state-graph.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.llm-serving.index", "title": "模型侧基础(了解级)", "type": "index", "domain": "ai", "stack": [ "llm-serving" ], "tags": [ "多模型路由", "vLLM", "LoRA", "微调", "模型网关" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 10, 13 ], "order": null, "path": "topics/ai/llm-serving/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.llm-serving.interview", "title": "模型侧面试题(了解级)", "type": "interview", "domain": "ai", "stack": [ "llm-serving" ], "tags": [ "模型路由", "vLLM", "LoRA", "微调", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.llm-serving.routing-vllm-lora" ], "est_hours": null, "week": [ 13, 16 ], "order": null, "path": "topics/ai/llm-serving/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "ai.llm-serving.routing-vllm-lora", "title": "模型侧基础:多模型接入和路由、vLLM 部署、LoRA / QLoRA 概念", "type": "lesson", "domain": "ai", "stack": [ "llm-serving" ], "tags": [ "多模型路由", "OpenAI 兼容接口", "降级", "熔断", "vLLM", "量化", "LoRA", "QLoRA", "微调" ], "level": "intermediate", "prerequisites": [ "python.asyncio.concurrency-control" ], "related": [ "ai.agent-ops.observability-cost", "ai.llm-serving.scenario.multi-provider-gateway", "ai.llm-serving.interview" ], "est_hours": 3, "week": [ 10, 13 ], "order": 1, "path": "topics/ai/llm-serving/01-routing-vllm-lora.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.llm-serving.scenario.multi-provider-gateway", "title": "公司级大模型网关:多厂商路由、配额、敏感数据走内网模型", "type": "scenario", "domain": "ai", "stack": [ "llm-serving", "fastapi", "redis" ], "tags": [ "模型网关", "多模型路由", "配额", "熔断", "降级", "敏感数据", "成本分摊" ], "level": "advanced", "prerequisites": [ "ai.llm-serving.routing-vllm-lora" ], "related": [ "ai.llm-serving.interview", "python.fastapi.index", "backend.redis.lock-ratelimit" ], "est_hours": 3, "week": [ 13, 14 ], "order": null, "path": "topics/ai/llm-serving/scenarios/multi-provider-gateway.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.lowcode.dify-coze", "title": "Dify / Coze 低代码 AI 平台:工作流、知识库、自定义工具和与代码开发的分工", "type": "lesson", "domain": "ai", "stack": [ "lowcode" ], "tags": [ "Dify", "Coze", "低代码", "工作流", "知识库", "自定义工具", "OpenAPI" ], "level": "basic", "prerequisites": [ "ai.rag.pipeline-chunking" ], "related": [ "ai.lowcode.scenario.poc-to-production", "ai.function-calling.tool-loop", "ai.lowcode.interview" ], "est_hours": 2.5, "week": [ 13 ], "order": 1, "path": "topics/ai/lowcode/01-dify-coze.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.lowcode.index", "title": "低代码 AI 平台(Dify / Coze)", "type": "index", "domain": "ai", "stack": [ "lowcode" ], "tags": [ "Dify", "Coze", "低代码", "工作流" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 13 ], "order": null, "path": "topics/ai/lowcode/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.lowcode.interview", "title": "低代码 AI 平台面试题", "type": "interview", "domain": "ai", "stack": [ "lowcode" ], "tags": [ "Dify", "Coze", "低代码", "面试" ], "level": "basic", "prerequisites": [], "related": [ "ai.lowcode.dify-coze" ], "est_hours": null, "week": [ 13, 16 ], "order": null, "path": "topics/ai/lowcode/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 2, "场景题": 2 } }, { "id": "ai.lowcode.scenario.poc-to-production", "title": "从 Dify 原型到生产:哪些留在平台、哪些改成代码", "type": "scenario", "domain": "ai", "stack": [ "lowcode", "fastapi", "rag" ], "tags": [ "PoC", "低代码", "私有化部署", "自定义工具", "迁移", "评测" ], "level": "intermediate", "prerequisites": [ "ai.lowcode.dify-coze" ], "related": [ "ai.lowcode.interview", "ai.agent-ops.scenario.agent-quality-gate" ], "est_hours": 2, "week": [ 13 ], "order": null, "path": "topics/ai/lowcode/scenarios/poc-to-production.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.mcp.index", "title": "MCP 模型上下文协议", "type": "index", "domain": "ai", "stack": [ "mcp" ], "tags": [ "MCP", "工具", "集成" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 10, 11 ], "order": null, "path": "topics/ai/mcp/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.mcp.interview", "title": "MCP 面试题", "type": "interview", "domain": "ai", "stack": [ "mcp" ], "tags": [ "MCP", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.mcp.protocol-server" ], "est_hours": null, "week": [ 10, 11, 16 ], "order": null, "path": "topics/ai/mcp/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 2, "场景题": 2 } }, { "id": "ai.mcp.protocol-server", "title": "MCP 协议和服务开发:tools / resources / prompts、传输方式、接入客户端", "type": "lesson", "domain": "ai", "stack": [ "mcp" ], "tags": [ "MCP", "Model Context Protocol", "tools", "resources", "prompts", "stdio", "Streamable HTTP" ], "level": "intermediate", "prerequisites": [ "ai.function-calling.tool-loop" ], "related": [ "ai.mcp.scenario.internal-tools-gateway", "ai.ai-coding.index", "ai.mcp.interview" ], "est_hours": 3, "week": [ 10, 11 ], "order": 1, "path": "topics/ai/mcp/01-protocol-server.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.mcp.scenario.internal-tools-gateway", "title": "企业内部 MCP 服务:统一接入、鉴权、审计和版本管理", "type": "scenario", "domain": "ai", "stack": [ "mcp", "fastapi", "nginx" ], "tags": [ "MCP", "企业集成", "鉴权", "审计", "工具治理", "Streamable HTTP" ], "level": "advanced", "prerequisites": [ "ai.mcp.protocol-server" ], "related": [ "ai.function-calling.scenario.safe-business-tools", "ai.mcp.interview" ], "est_hours": 2.5, "week": [ 10, 11 ], "order": null, "path": "topics/ai/mcp/scenarios/internal-tools-gateway.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.prompt-engineering.context-injection", "title": "提示词注入和防护:直接注入、间接注入、输出校验和权限兜底", "type": "lesson", "domain": "ai", "stack": [ "prompt-engineering" ], "tags": [ "提示词注入", "间接注入", "越狱", "输出校验", "数据泄露", "安全" ], "level": "advanced", "prerequisites": [ "ai.prompt-engineering.prompt-structured-output" ], "related": [ "ai.function-calling.scenario.safe-business-tools", "ai.agent-design.context-skills-multiagent", "ai.prompt-engineering.interview" ], "est_hours": 2.5, "week": [ 11, 13 ], "order": 2, "path": "topics/ai/prompt-engineering/02-context-injection.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.prompt-engineering.index", "title": "提示词与上下文工程", "type": "index", "domain": "ai", "stack": [ "prompt-engineering" ], "tags": [ "提示词", "结构化输出", "上下文工程", "提示词注入" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 5, 11, 13 ], "order": null, "path": "topics/ai/prompt-engineering/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.prompt-engineering.interview", "title": "提示词与上下文工程面试题", "type": "interview", "domain": "ai", "stack": [ "prompt-engineering" ], "tags": [ "提示词", "结构化输出", "提示词注入", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.prompt-engineering.prompt-structured-output", "ai.prompt-engineering.context-injection" ], "est_hours": null, "week": [ 5, 13, 16 ], "order": null, "path": "topics/ai/prompt-engineering/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "ai.prompt-engineering.prompt-structured-output", "title": "提示词结构、少样本、结构化输出和提示词版本管理", "type": "lesson", "domain": "ai", "stack": [ "prompt-engineering" ], "tags": [ "提示词结构", "少样本", "Few-shot", "思维链", "结构化输出", "JSON Schema", "提示词版本" ], "level": "basic", "prerequisites": [], "related": [ "ai.prompt-engineering.context-injection", "ai.langchain.lcel-structured-agent", "ai.prompt-engineering.interview" ], "est_hours": 2.5, "week": [ 5 ], "order": 1, "path": "topics/ai/prompt-engineering/01-prompt-structured-output.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.prompt-engineering.scenario.injection-defense", "title": "读邮件的办公助手:间接提示词注入的多层防护", "type": "scenario", "domain": "ai", "stack": [ "prompt-engineering", "function-calling", "agent-ops" ], "tags": [ "间接注入", "邮件助手", "权限最小化", "人工确认", "输出校验", "安全评测" ], "level": "advanced", "prerequisites": [ "ai.prompt-engineering.context-injection" ], "related": [ "ai.prompt-engineering.interview", "ai.function-calling.scenario.safe-business-tools" ], "est_hours": 2.5, "week": [ 13 ], "order": null, "path": "topics/ai/prompt-engineering/scenarios/injection-defense.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.rag.generation-eval", "title": "生成与评测:带引用的提示词、拒答、检索评测和答案评测", "type": "lesson", "domain": "ai", "stack": [ "rag" ], "tags": [ "提示词", "引用", "拒答", "幻觉", "Recall@k", "MRR", "评测集" ], "level": "intermediate", "prerequisites": [ "ai.rag.hybrid-rerank" ], "related": [ "ai.rag.scenario.permission-aware-kb", "ai.prompt-engineering.index", "ai.agent-ops.index", "ai.rag.interview" ], "est_hours": 3, "week": [ 6 ], "order": 3, "path": "topics/ai/rag/03-generation-eval.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.rag.hybrid-rerank", "title": "检索优化:向量 + 关键词混合检索、RRF 融合、重排、查询改写", "type": "lesson", "domain": "ai", "stack": [ "rag" ], "tags": [ "混合检索", "BM25", "RRF", "重排", "rerank", "查询改写" ], "level": "intermediate", "prerequisites": [ "ai.rag.pipeline-chunking" ], "related": [ "ai.rag.generation-eval", "ai.vector-db.ann-metrics", "ai.rag.interview" ], "est_hours": 3, "week": [ 6 ], "order": 2, "path": "topics/ai/rag/02-hybrid-rerank.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.rag.index", "title": "RAG 检索增强生成", "type": "index", "domain": "ai", "stack": [ "rag" ], "tags": [ "RAG", "检索", "知识库", "评测" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 5, 6 ], "order": null, "path": "topics/ai/rag/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.rag.interview", "title": "RAG 面试题", "type": "interview", "domain": "ai", "stack": [ "rag" ], "tags": [ "RAG", "检索", "评测", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.rag.pipeline-chunking", "ai.rag.hybrid-rerank", "ai.rag.generation-eval" ], "est_hours": null, "week": [ 5, 6, 16 ], "order": null, "path": "topics/ai/rag/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 4, "场景题": 3 } }, { "id": "ai.rag.pipeline-chunking", "title": "RAG 流水线和文档切分:加载、清洗、切分策略、元数据", "type": "lesson", "domain": "ai", "stack": [ "rag" ], "tags": [ "RAG", "文档加载", "切分", "chunk", "元数据", "嵌入" ], "level": "basic", "prerequisites": [ "python.python.syntax-for-js" ], "related": [ "ai.rag.hybrid-rerank", "ai.vector-db.ann-metrics", "ai.rag.interview" ], "est_hours": 3, "week": [ 5 ], "order": 1, "path": "topics/ai/rag/01-pipeline-chunking.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.rag.scenario.permission-aware-kb", "title": "带权限的企业知识库问答:不同部门看到不同内容", "type": "scenario", "domain": "ai", "stack": [ "rag", "vector-db", "elasticsearch", "fastapi" ], "tags": [ "企业知识库", "权限过滤", "文档解析", "混合检索", "重排", "拒答", "增量更新" ], "level": "advanced", "prerequisites": [ "ai.rag.generation-eval" ], "related": [ "ai.rag.interview", "ai.vector-db.scenario.multi-tenant-index", "backend.elasticsearch.index" ], "est_hours": 3, "week": [ 5, 6 ], "order": null, "path": "topics/ai/rag/scenarios/permission-aware-kb.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.vector-db.ann-metrics", "title": "向量检索原理:距离度量、暴力检索、HNSW / IVF 近似索引", "type": "lesson", "domain": "ai", "stack": [ "vector-db" ], "tags": [ "向量检索", "余弦相似度", "内积", "L2", "HNSW", "IVF", "PQ", "召回率" ], "level": "basic", "prerequisites": [ "ai.rag.pipeline-chunking" ], "related": [ "ai.vector-db.selection-pgvector", "ai.rag.hybrid-rerank", "ai.vector-db.interview" ], "est_hours": 2.5, "week": [ 5 ], "order": 1, "path": "topics/ai/vector-db/01-ann-metrics.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "ai.vector-db.index", "title": "向量数据库", "type": "index", "domain": "ai", "stack": [ "vector-db" ], "tags": [ "向量数据库", "HNSW", "pgvector", "Chroma", "Milvus" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 5, 6 ], "order": null, "path": "topics/ai/vector-db/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "ai.vector-db.interview", "title": "向量数据库面试题", "type": "interview", "domain": "ai", "stack": [ "vector-db" ], "tags": [ "向量数据库", "HNSW", "pgvector", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "ai.vector-db.ann-metrics", "ai.vector-db.selection-pgvector", "ai.rag.interview" ], "est_hours": null, "week": [ 5, 6, 16 ], "order": null, "path": "topics/ai/vector-db/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "ai.vector-db.scenario.multi-tenant-index", "title": "多租户知识库的向量索引:隔离、过滤召回和增量更新", "type": "scenario", "domain": "ai", "stack": [ "vector-db", "postgresql" ], "tags": [ "多租户", "元数据过滤", "增量更新", "召回率", "SaaS" ], "level": "advanced", "prerequisites": [ "ai.vector-db.selection-pgvector" ], "related": [ "ai.rag.scenario.permission-aware-kb", "ai.vector-db.interview" ], "est_hours": 2.5, "week": [ 6 ], "order": null, "path": "topics/ai/vector-db/scenarios/multi-tenant-index.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "ai.vector-db.selection-pgvector", "title": "向量库选型和 pgvector 实战:Chroma / pgvector / Milvus / Elasticsearch", "type": "lesson", "domain": "ai", "stack": [ "vector-db", "postgresql" ], "tags": [ "向量库选型", "pgvector", "Chroma", "Milvus", "Elasticsearch", "元数据过滤" ], "level": "intermediate", "prerequisites": [ "ai.vector-db.ann-metrics" ], "related": [ "ai.vector-db.scenario.multi-tenant-index", "backend.postgresql.index", "backend.elasticsearch.index" ], "est_hours": 3, "week": [ 5, 6 ], "order": 2, "path": "topics/ai/vector-db/02-selection-pgvector.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.data-pipeline.index", "title": "数据管道基础", "type": "index", "domain": "backend", "stack": [ "data-pipeline" ], "tags": [ "ETL", "增量同步", "幂等", "数据质量" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 14 ], "order": null, "path": "topics/backend/data-pipeline/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中" ] }, { "id": "backend.data-pipeline.interview", "title": "数据管道面试题", "type": "interview", "domain": "backend", "stack": [ "data-pipeline" ], "tags": [ "数据同步", "幂等", "重试", "数据质量", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.data-pipeline.reliability" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/backend/data-pipeline/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "backend.data-pipeline.reliability", "title": "数据管道基础:批处理与流处理、增量同步、限流重试、幂等、数据质量和告警", "type": "lesson", "domain": "backend", "stack": [ "data-pipeline" ], "tags": [ "ETL", "批处理", "流处理", "增量同步", "水位线", "限流", "重试", "幂等", "死信", "数据质量", "告警" ], "level": "intermediate", "prerequisites": [ "backend.postgresql.index-tx-mvcc", "backend.mq.reliability" ], "related": [ "backend.data-pipeline.scenario.third-party-sync", "backend.data-pipeline.interview", "backend.elasticsearch.scenario.kb-search-sync" ], "est_hours": 3, "week": [ 14 ], "order": 1, "path": "topics/backend/data-pipeline/01-batch-stream-reliability.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.data-pipeline.scenario.third-party-sync", "title": "第三方平台订单同步:限流、断点续跑、迟到数据、对账和告警", "type": "scenario", "domain": "backend", "stack": [ "data-pipeline", "postgresql", "redis", "mq" ], "tags": [ "第三方对接", "增量同步", "限流", "对账", "迟到数据", "告警" ], "level": "intermediate", "prerequisites": [ "backend.data-pipeline.reliability" ], "related": [ "backend.data-pipeline.interview", "backend.redis.lock-ratelimit" ], "est_hours": 2.5, "week": [ 14 ], "order": null, "path": "topics/backend/data-pipeline/scenarios/third-party-sync.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.elasticsearch.index", "title": "Elasticsearch", "type": "index", "domain": "backend", "stack": [ "elasticsearch" ], "tags": [ "Elasticsearch", "全文检索", "混合检索", "向量检索" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 6, 14 ], "order": null, "path": "topics/backend/elasticsearch/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.elasticsearch.interview", "title": "Elasticsearch 面试题", "type": "interview", "domain": "backend", "stack": [ "elasticsearch" ], "tags": [ "Elasticsearch", "倒排索引", "混合检索", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.elasticsearch.search-hybrid" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/backend/elasticsearch/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "backend.elasticsearch.scenario.kb-search-sync", "title": "知识库混合检索:数据库到 ES 的同步、权限过滤、分词词典和检索效果评估", "type": "scenario", "domain": "backend", "stack": [ "elasticsearch", "postgresql", "mq", "rag" ], "tags": [ "混合检索", "数据同步", "CDC", "outbox", "权限过滤", "IK 词典", "召回率" ], "level": "intermediate", "prerequisites": [ "backend.elasticsearch.search-hybrid", "ai.rag.hybrid-rerank" ], "related": [ "backend.elasticsearch.interview", "ai.rag.scenario.permission-aware-kb", "backend.mq.reliability" ], "est_hours": 2.5, "week": [ 6, 14 ], "order": null, "path": "topics/backend/elasticsearch/scenarios/kb-search-sync.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.elasticsearch.search-hybrid", "title": "Elasticsearch:倒排索引、映射与中文分词、BM25、kNN 向量检索、混合检索和别名重建", "type": "lesson", "domain": "backend", "stack": [ "elasticsearch" ], "tags": [ "Elasticsearch", "倒排索引", "BM25", "IK 分词", "cjk", "dense_vector", "kNN", "RRF", "混合检索", "别名", "reindex" ], "level": "intermediate", "prerequisites": [ "ai.rag.hybrid-rerank" ], "related": [ "backend.elasticsearch.scenario.kb-search-sync", "ai.rag.index", "backend.elasticsearch.interview" ], "est_hours": 3, "week": [ 6, 14 ], "order": 1, "path": "topics/backend/elasticsearch/01-search-basics-hybrid.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.gin.index", "title": "Gin Web 框架", "type": "index", "domain": "backend", "stack": [ "gin" ], "tags": [ "Go", "Gin", "REST", "中间件" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 1, 2, 3 ], "order": null, "path": "topics/backend/gin/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.gin.interview", "title": "Gin 面试题", "type": "interview", "domain": "backend", "stack": [ "gin" ], "tags": [ "Gin", "Web", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.gin.routing-binding", "backend.gin.middleware-auth", "backend.gin.scenario.unified-api-response" ], "est_hours": null, "week": [ 1, 2, 3, 16 ], "order": null, "path": "topics/backend/gin/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 4, "场景题": 3 } }, { "id": "backend.gin.middleware-auth", "title": "中间件、JWT 鉴权和统一错误处理", "type": "lesson", "domain": "backend", "stack": [ "gin" ], "tags": [ "Gin", "中间件", "JWT", "鉴权", "错误处理" ], "level": "intermediate", "prerequisites": [ "backend.gin.routing-binding", "backend.go.errors-concurrency" ], "related": [ "backend.gin.scenario.unified-api-response", "backend.gin.interview" ], "est_hours": 3, "week": [ 2, 3 ], "order": 2, "path": "topics/backend/gin/02-middleware-auth.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.gin.routing-binding", "title": "路由、参数绑定和校验", "type": "lesson", "domain": "backend", "stack": [ "gin" ], "tags": [ "Gin", "路由", "参数校验", "REST" ], "level": "basic", "prerequisites": [ "backend.go.basics-types" ], "related": [ "backend.gin.middleware-auth", "backend.gin.interview" ], "est_hours": 3, "week": [ 1 ], "order": 1, "path": "topics/backend/gin/01-routing-binding.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.gin.scenario.unified-api-response", "title": "企业后台接口规范:统一响应、错误码、请求 ID 和参数校验", "type": "scenario", "domain": "backend", "stack": [ "gin", "go" ], "tags": [ "接口规范", "错误码", "请求ID", "可观测性", "参数校验" ], "level": "intermediate", "prerequisites": [ "backend.gin.middleware-auth" ], "related": [ "backend.gin.interview" ], "est_hours": 2, "week": [ 2, 3 ], "order": null, "path": "topics/backend/gin/scenarios/unified-api-response.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.go.basics-types", "title": "语法、类型和接口(对照 TypeScript)", "type": "lesson", "domain": "backend", "stack": [ "go" ], "tags": [ "Go", "切片", "map", "结构体", "接口" ], "level": "basic", "prerequisites": [], "related": [ "backend.go.interview" ], "est_hours": 4, "week": [ 1 ], "order": 1, "path": "topics/backend/go/01-basics-types.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.go.errors-concurrency", "title": "错误处理和并发:goroutine、channel、context", "type": "lesson", "domain": "backend", "stack": [ "go" ], "tags": [ "Go", "错误处理", "goroutine", "channel", "context", "并发" ], "level": "intermediate", "prerequisites": [ "backend.go.basics-types" ], "related": [ "backend.go.scenario.batch-third-party-calls", "backend.go.interview" ], "est_hours": 4, "week": [ 1, 3 ], "order": 2, "path": "topics/backend/go/02-errors-concurrency.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.go.index", "title": "Go 语言", "type": "index", "domain": "backend", "stack": [ "go" ], "tags": [ "Go", "后端", "并发" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 1, 2, 3, 14 ], "order": null, "path": "topics/backend/go/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.go.interview", "title": "Go 面试题", "type": "interview", "domain": "backend", "stack": [ "go" ], "tags": [ "Go", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.go.basics-types", "backend.go.errors-concurrency", "backend.go.testing-engineering" ], "est_hours": null, "week": [ 1, 3, 16 ], "order": null, "path": "topics/backend/go/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 5, "进阶": 4, "场景题": 3 } }, { "id": "backend.go.scenario.batch-third-party-calls", "title": "批量调用第三方接口:并发控制、超时和部分失败", "type": "scenario", "domain": "backend", "stack": [ "go" ], "tags": [ "并发", "超时", "第三方接口", "限流", "重试" ], "level": "intermediate", "prerequisites": [ "backend.go.errors-concurrency" ], "related": [ "backend.go.interview", "backend.redis.lock-ratelimit" ], "est_hours": 2, "week": [ 3 ], "order": null, "path": "topics/backend/go/scenarios/batch-third-party-calls.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.go.testing-engineering", "title": "测试和工程化:表格驱动测试、httptest、模块、项目结构", "type": "lesson", "domain": "backend", "stack": [ "go" ], "tags": [ "Go", "测试", "httptest", "go mod", "项目结构" ], "level": "intermediate", "prerequisites": [ "backend.go.basics-types" ], "related": [ "backend.go.interview", "backend.gin.routing-binding" ], "est_hours": 3, "week": [ 1, 2, 3 ], "order": 3, "path": "topics/backend/go/03-testing-engineering.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.grpc-microservices.governance", "title": "服务治理:超时、重试、熔断、限流、注册发现、链路追踪、分布式事务", "type": "lesson", "domain": "backend", "stack": [ "grpc-microservices" ], "tags": [ "超时", "重试", "熔断", "限流", "服务发现", "链路追踪", "Saga", "分布式事务" ], "level": "advanced", "prerequisites": [ "backend.grpc-microservices.grpc-proto" ], "related": [ "backend.grpc-microservices.scenario.monolith-split", "backend.mq.reliability", "backend.grpc-microservices.interview" ], "est_hours": 3, "week": [ 14 ], "order": 2, "path": "topics/backend/grpc-microservices/02-governance.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.grpc-microservices.grpc-proto", "title": "gRPC 和 Protobuf:IDL、四种调用方式、错误码、超时、拦截器", "type": "lesson", "domain": "backend", "stack": [ "grpc-microservices", "go" ], "tags": [ "gRPC", "Protobuf", "HTTP/2", "拦截器", "deadline" ], "level": "intermediate", "prerequisites": [ "backend.go.errors-concurrency" ], "related": [ "backend.grpc-microservices.governance", "backend.grpc-microservices.interview" ], "est_hours": 3, "week": [ 14 ], "order": 1, "path": "topics/backend/grpc-microservices/01-grpc-proto.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.grpc-microservices.index", "title": "gRPC 与微服务", "type": "index", "domain": "backend", "stack": [ "grpc-microservices" ], "tags": [ "gRPC", "Protobuf", "微服务", "服务治理" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 14 ], "order": null, "path": "topics/backend/grpc-microservices/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.grpc-microservices.interview", "title": "gRPC 与微服务面试题", "type": "interview", "domain": "backend", "stack": [ "grpc-microservices" ], "tags": [ "gRPC", "微服务", "服务治理", "分布式事务", "面试" ], "level": "advanced", "prerequisites": [], "related": [ "backend.grpc-microservices.grpc-proto", "backend.grpc-microservices.governance" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/backend/grpc-microservices/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 4, "场景题": 3 } }, { "id": "backend.grpc-microservices.scenario.monolith-split", "title": "单体拆分:从单体到“订单 + 用户”两个服务", "type": "scenario", "domain": "backend", "stack": [ "grpc-microservices", "go", "mq" ], "tags": [ "单体拆分", "绞杀者模式", "数据拆分", "gRPC", "灰度" ], "level": "advanced", "prerequisites": [ "backend.grpc-microservices.governance" ], "related": [ "backend.grpc-microservices.interview", "backend.mq.reliability" ], "est_hours": 2, "week": [ 14 ], "order": null, "path": "topics/backend/grpc-microservices/scenarios/monolith-split.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.java-spring.awareness", "title": "Java / Spring Boot(了解级):读懂项目结构、IoC 与依赖注入、分层、事务注解和与 Go / Python 的对照", "type": "lesson", "domain": "backend", "stack": [ "java-spring" ], "tags": [ "Java", "Spring Boot", "IoC", "依赖注入", "注解", "事务", "JPA", "MyBatis", "虚拟线程" ], "level": "basic", "prerequisites": [ "backend.go.index" ], "related": [ "backend.java-spring.scenario.call-java-service", "backend.java-spring.interview" ], "est_hours": 2, "week": [ 14 ], "order": 1, "path": "topics/backend/java-spring/01-java-spring-awareness.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.java-spring.index", "title": "Java / Spring Boot(了解级)", "type": "index", "domain": "backend", "stack": [ "java-spring" ], "tags": [ "Java", "Spring Boot", "了解级" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 14 ], "order": null, "path": "topics/backend/java-spring/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中" ] }, { "id": "backend.java-spring.interview", "title": "Java / Spring Boot(了解级)面试题", "type": "interview", "domain": "backend", "stack": [ "java-spring" ], "tags": [ "Java", "Spring Boot", "IoC", "事务", "面试" ], "level": "basic", "prerequisites": [], "related": [ "backend.java-spring.awareness" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/backend/java-spring/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "backend.java-spring.scenario.call-java-service", "title": "Python Agent 调用公司已有的 Java 业务系统:读接口、封装工具、错误映射和联调", "type": "scenario", "domain": "backend", "stack": [ "java-spring", "function-calling", "fastapi" ], "tags": [ "系统对接", "工具封装", "错误码映射", "OpenAPI", "联调", "幂等" ], "level": "intermediate", "prerequisites": [ "backend.java-spring.awareness", "ai.function-calling.tool-loop" ], "related": [ "backend.java-spring.interview", "ai.function-calling.scenario.safe-business-tools" ], "est_hours": 2, "week": [ 14 ], "order": null, "path": "topics/backend/java-spring/scenarios/call-java-service.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.mongodb.document-model", "title": "MongoDB 基础:文档建模(嵌入还是引用)、索引与 ESR、聚合、事务和变更流", "type": "lesson", "domain": "backend", "stack": [ "mongodb" ], "tags": [ "MongoDB", "文档模型", "嵌入", "引用", "复合索引", "ESR", "聚合管道", "事务", "变更流", "副本集" ], "level": "basic", "prerequisites": [ "backend.postgresql.index" ], "related": [ "backend.mongodb.scenario.conversation-store", "backend.elasticsearch.index", "backend.mongodb.interview" ], "est_hours": 3, "week": [ 14 ], "order": 1, "path": "topics/backend/mongodb/01-document-model.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.mongodb.index", "title": "MongoDB", "type": "index", "domain": "backend", "stack": [ "mongodb" ], "tags": [ "MongoDB", "文档数据库", "NoSQL" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 14 ], "order": null, "path": "topics/backend/mongodb/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.mongodb.interview", "title": "MongoDB 面试题", "type": "interview", "domain": "backend", "stack": [ "mongodb" ], "tags": [ "MongoDB", "文档模型", "索引", "事务", "面试" ], "level": "basic", "prerequisites": [], "related": [ "backend.mongodb.document-model" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/backend/mongodb/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "backend.mongodb.scenario.conversation-store", "title": "AI 客服会话存储:海量对话记录的建模、查询、归档和同步", "type": "scenario", "domain": "backend", "stack": [ "mongodb", "postgresql", "elasticsearch" ], "tags": [ "对话记录", "文档建模", "TTL", "归档", "变更流", "多租户" ], "level": "intermediate", "prerequisites": [ "backend.mongodb.document-model" ], "related": [ "backend.mongodb.interview", "scenario.data-sync", "scenario.customer-service-kb" ], "est_hours": 2, "week": [ 14 ], "order": null, "path": "topics/backend/mongodb/scenarios/conversation-store.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.mq.index", "title": "消息队列(RabbitMQ / Kafka)", "type": "index", "domain": "backend", "stack": [ "mq" ], "tags": [ "消息队列", "RabbitMQ", "Kafka", "异步", "削峰" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 3, 14 ], "order": null, "path": "topics/backend/mq/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.mq.interview", "title": "消息队列面试题", "type": "interview", "domain": "backend", "stack": [ "mq" ], "tags": [ "RabbitMQ", "Kafka", "可靠性", "幂等", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.mq.rabbitmq", "backend.mq.kafka", "backend.mq.reliability" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/backend/mq/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 4, "场景题": 3 } }, { "id": "backend.mq.kafka", "title": "Kafka:主题、分区、消费组、位移和顺序", "type": "lesson", "domain": "backend", "stack": [ "mq" ], "tags": [ "Kafka", "分区", "消费组", "offset", "顺序消息", "ISR" ], "level": "intermediate", "prerequisites": [ "backend.mq.rabbitmq" ], "related": [ "backend.mq.reliability", "backend.mq.interview" ], "est_hours": 3, "week": [ 14 ], "order": 2, "path": "topics/backend/mq/02-kafka.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.mq.rabbitmq", "title": "RabbitMQ:交换机、队列、确认机制、死信和延迟", "type": "lesson", "domain": "backend", "stack": [ "mq" ], "tags": [ "RabbitMQ", "AMQP", "交换机", "ACK", "死信", "延迟队列" ], "level": "basic", "prerequisites": [], "related": [ "backend.mq.reliability", "backend.mq.scenario.delayed-order-cancel", "backend.mq.interview" ], "est_hours": 3, "week": [ 3, 14 ], "order": 1, "path": "topics/backend/mq/01-rabbitmq.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.mq.reliability", "title": "可靠性:不丢消息、幂等消费、发件箱模式、积压处理", "type": "lesson", "domain": "backend", "stack": [ "mq" ], "tags": [ "可靠投递", "幂等", "发件箱", "Outbox", "消息积压", "最终一致性" ], "level": "intermediate", "prerequisites": [ "backend.mq.rabbitmq" ], "related": [ "backend.mq.kafka", "backend.mq.scenario.delayed-order-cancel", "backend.mq.interview", "backend.postgresql.scenario.order-state-audit" ], "est_hours": 3, "week": [ 3, 14 ], "order": 3, "path": "topics/backend/mq/03-reliability.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.mq.scenario.delayed-order-cancel", "title": "订单超时自动取消:延迟消息、幂等和兜底扫描", "type": "scenario", "domain": "backend", "stack": [ "mq", "redis", "mysql" ], "tags": [ "延迟消息", "死信", "订单超时", "幂等", "定时任务" ], "level": "intermediate", "prerequisites": [ "backend.mq.rabbitmq" ], "related": [ "backend.mq.reliability", "backend.redis.scenario.stock-reservation", "backend.mq.interview" ], "est_hours": 2, "week": [ 14 ], "order": null, "path": "topics/backend/mq/scenarios/delayed-order-cancel.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.mysql.index", "title": "MySQL", "type": "index", "domain": "backend", "stack": [ "mysql" ], "tags": [ "数据库", "SQL", "MySQL", "InnoDB" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 2, 14 ], "order": null, "path": "topics/backend/mysql/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.mysql.index-explain", "title": "InnoDB 索引:B+ 树、聚簇索引、回表、最左前缀和 EXPLAIN", "type": "lesson", "domain": "backend", "stack": [ "mysql" ], "tags": [ "索引", "B+树", "聚簇索引", "回表", "EXPLAIN" ], "level": "basic", "prerequisites": [ "backend.postgresql.schema-sql" ], "related": [ "backend.mysql.tx-locks-mvcc", "backend.postgresql.index-tx-mvcc", "backend.mysql.interview" ], "est_hours": 3, "week": [ 2 ], "order": 1, "path": "topics/backend/mysql/01-index-explain.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.mysql.interview", "title": "MySQL 面试题", "type": "interview", "domain": "backend", "stack": [ "mysql" ], "tags": [ "MySQL", "InnoDB", "索引", "事务", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.mysql.index-explain", "backend.mysql.tx-locks-mvcc", "backend.mysql.ops-scale", "backend.postgresql.interview" ], "est_hours": null, "week": [ 2, 14, 16 ], "order": null, "path": "topics/backend/mysql/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 5, "进阶": 4, "场景题": 3 } }, { "id": "backend.mysql.ops-scale", "title": "运维与扩展:慢查询、主从复制、读写分离、分库分表", "type": "lesson", "domain": "backend", "stack": [ "mysql" ], "tags": [ "慢查询", "主从复制", "读写分离", "分库分表", "在线 DDL" ], "level": "intermediate", "prerequisites": [ "backend.mysql.tx-locks-mvcc" ], "related": [ "backend.mysql.scenario.deep-pagination", "backend.mysql.interview" ], "est_hours": 3, "week": [ 14 ], "order": 3, "path": "topics/backend/mysql/03-ops-scale.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.mysql.scenario.deep-pagination", "title": "大表深分页和历史数据:游标分页、延迟关联、归档", "type": "scenario", "domain": "backend", "stack": [ "mysql" ], "tags": [ "深分页", "游标分页", "延迟关联", "归档", "大表" ], "level": "intermediate", "prerequisites": [ "backend.mysql.index-explain" ], "related": [ "backend.mysql.ops-scale", "backend.mysql.interview" ], "est_hours": 2, "week": [ 2, 14 ], "order": null, "path": "topics/backend/mysql/scenarios/deep-pagination.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.mysql.tx-locks-mvcc", "title": "事务、隔离级别、MVCC 和锁(行锁、间隙锁、死锁)", "type": "lesson", "domain": "backend", "stack": [ "mysql" ], "tags": [ "事务", "隔离级别", "MVCC", "间隙锁", "死锁", "undo log", "redo log" ], "level": "intermediate", "prerequisites": [ "backend.mysql.index-explain" ], "related": [ "backend.postgresql.index-tx-mvcc", "backend.mysql.interview" ], "est_hours": 4, "week": [ 2, 14 ], "order": 2, "path": "topics/backend/mysql/02-tx-locks-mvcc.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.nodejs.express-nest", "title": "Node.js 后端(了解级):事件循环、Express 5 中间件与错误处理、NestJS 的模块化思路、做 BFF", "type": "lesson", "domain": "backend", "stack": [ "nodejs" ], "tags": [ "Node.js", "事件循环", "Express 5", "中间件", "错误处理", "NestJS", "依赖注入", "BFF", "SSE" ], "level": "basic", "prerequisites": [ "frontend.typescript.type-system" ], "related": [ "frontend.ssr.nextjs-app-router", "backend.nodejs.scenario.ai-bff", "backend.nodejs.interview" ], "est_hours": 2.5, "week": [ 7, 14 ], "order": 1, "path": "topics/backend/nodejs/01-express-nest-basics.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.nodejs.index", "title": "Node.js(了解级)", "type": "index", "domain": "backend", "stack": [ "nodejs" ], "tags": [ "Node.js", "Express", "NestJS", "BFF" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7, 14 ], "order": null, "path": "topics/backend/nodejs/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中" ] }, { "id": "backend.nodejs.interview", "title": "Node.js 面试题", "type": "interview", "domain": "backend", "stack": [ "nodejs" ], "tags": [ "Node.js", "事件循环", "Express", "NestJS", "面试" ], "level": "basic", "prerequisites": [], "related": [ "backend.nodejs.express-nest" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/backend/nodejs/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "backend.nodejs.scenario.ai-bff", "title": "用 Node.js 给 AI 应用做 BFF:鉴权、限流、流式转发、超时和断开处理", "type": "scenario", "domain": "backend", "stack": [ "nodejs", "redis", "nginx", "fastapi" ], "tags": [ "BFF", "SSE", "流式转发", "限流", "超时", "request id" ], "level": "intermediate", "prerequisites": [ "backend.nodejs.express-nest" ], "related": [ "backend.nodejs.interview", "frontend.ssr.scenario.help-center" ], "est_hours": 2, "week": [ 14 ], "order": null, "path": "topics/backend/nodejs/scenarios/ai-bff.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.postgresql.index", "title": "PostgreSQL", "type": "index", "domain": "backend", "stack": [ "postgresql" ], "tags": [ "数据库", "SQL", "PostgreSQL" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 2, 3, 6 ], "order": null, "path": "topics/backend/postgresql/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.postgresql.index-tx-mvcc", "title": "索引、EXPLAIN、事务、隔离级别和 MVCC", "type": "lesson", "domain": "backend", "stack": [ "postgresql" ], "tags": [ "索引", "EXPLAIN", "事务", "隔离级别", "MVCC", "锁" ], "level": "intermediate", "prerequisites": [ "backend.postgresql.schema-sql" ], "related": [ "backend.postgresql.scenario.order-state-audit", "backend.mysql.tx-locks-mvcc", "backend.postgresql.interview" ], "est_hours": 4, "week": [ 2, 3 ], "order": 2, "path": "topics/backend/postgresql/02-index-tx-mvcc.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.postgresql.interview", "title": "PostgreSQL 面试题", "type": "interview", "domain": "backend", "stack": [ "postgresql" ], "tags": [ "PostgreSQL", "SQL", "事务", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.postgresql.schema-sql", "backend.postgresql.index-tx-mvcc", "backend.mysql.interview" ], "est_hours": null, "week": [ 2, 16 ], "order": null, "path": "topics/backend/postgresql/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 5, "进阶": 4, "场景题": 3 } }, { "id": "backend.postgresql.scenario.order-state-audit", "title": "订单状态机:状态流转、乐观锁和审计日志", "type": "scenario", "domain": "backend", "stack": [ "postgresql", "go" ], "tags": [ "状态机", "乐观锁", "审计", "并发", "事务" ], "level": "intermediate", "prerequisites": [ "backend.postgresql.index-tx-mvcc" ], "related": [ "backend.postgresql.interview", "backend.mq.reliability" ], "est_hours": 2, "week": [ 2, 3 ], "order": null, "path": "topics/backend/postgresql/scenarios/order-state-audit.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "backend.postgresql.schema-sql", "title": "表设计和 SQL:约束、JOIN、CTE、窗口函数、JSONB、UPSERT", "type": "lesson", "domain": "backend", "stack": [ "postgresql" ], "tags": [ "SQL", "表设计", "约束", "JOIN", "窗口函数", "JSONB" ], "level": "basic", "prerequisites": [], "related": [ "backend.postgresql.index-tx-mvcc", "backend.postgresql.interview" ], "est_hours": 4, "week": [ 2 ], "order": 1, "path": "topics/backend/postgresql/01-schema-sql.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.redis.cache-patterns", "title": "缓存模式:旁路缓存、穿透 / 击穿 / 雪崩、一致性", "type": "lesson", "domain": "backend", "stack": [ "redis" ], "tags": [ "旁路缓存", "缓存穿透", "缓存击穿", "缓存雪崩", "一致性", "singleflight" ], "level": "intermediate", "prerequisites": [ "backend.redis.data-structures" ], "related": [ "backend.redis.lock-ratelimit", "backend.redis.interview" ], "est_hours": 3, "week": [ 3, 6 ], "order": 2, "path": "topics/backend/redis/02-cache-patterns.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.redis.data-structures", "title": "数据结构和常用命令:String、Hash、List、Set、ZSet、Stream", "type": "lesson", "domain": "backend", "stack": [ "redis" ], "tags": [ "String", "Hash", "ZSet", "Stream", "过期时间" ], "level": "basic", "prerequisites": [], "related": [ "backend.redis.cache-patterns", "backend.redis.interview" ], "est_hours": 2, "week": [ 3 ], "order": 1, "path": "topics/backend/redis/01-data-structures.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.redis.index", "title": "Redis", "type": "index", "domain": "backend", "stack": [ "redis" ], "tags": [ "缓存", "Redis", "分布式锁", "限流" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 3, 6, 14 ], "order": null, "path": "topics/backend/redis/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "backend.redis.interview", "title": "Redis 面试题", "type": "interview", "domain": "backend", "stack": [ "redis" ], "tags": [ "Redis", "缓存", "分布式锁", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "backend.redis.data-structures", "backend.redis.cache-patterns", "backend.redis.lock-ratelimit" ], "est_hours": null, "week": [ 3, 14, 16 ], "order": null, "path": "topics/backend/redis/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 4, "场景题": 3 } }, { "id": "backend.redis.lock-ratelimit", "title": "分布式锁和限流:SET NX、Lua、令牌释放、固定窗口与滑动窗口", "type": "lesson", "domain": "backend", "stack": [ "redis" ], "tags": [ "分布式锁", "Lua", "限流", "滑动窗口", "令牌桶" ], "level": "intermediate", "prerequisites": [ "backend.redis.data-structures" ], "related": [ "backend.redis.scenario.stock-reservation", "backend.redis.interview", "backend.gin.middleware-auth" ], "est_hours": 3, "week": [ 3, 14 ], "order": 3, "path": "topics/backend/redis/03-lock-ratelimit.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "backend.redis.scenario.stock-reservation", "title": "抢购库存预扣:Lua 原子扣减、防重复下单、异步落库", "type": "scenario", "domain": "backend", "stack": [ "redis", "mq", "mysql" ], "tags": [ "秒杀", "库存", "Lua", "防超卖", "削峰" ], "level": "advanced", "prerequisites": [ "backend.redis.lock-ratelimit" ], "related": [ "backend.redis.lock-ratelimit", "backend.mq.reliability", "backend.redis.interview" ], "est_hours": 3, "week": [ 14 ], "order": null, "path": "topics/backend/redis/scenarios/stock-reservation.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "cs.algorithms.complexity-patterns", "title": "复杂度分析和九个高频模式:哈希、滑动窗口、二分、堆、BFS、拓扑排序、动态规划、LRU、区间合并", "type": "lesson", "domain": "cs", "stack": [ "algorithms" ], "tags": [ "时间复杂度", "哈希表", "滑动窗口", "二分查找", "堆", "Top K", "BFS", "DFS", "拓扑排序", "动态规划", "LRU" ], "level": "basic", "prerequisites": [ "python.python.index" ], "related": [ "cs.algorithms.scenario.business-algorithms", "cs.algorithms.interview" ], "est_hours": 6, "week": [ 16 ], "order": 1, "path": "topics/cs/algorithms/01-complexity-patterns.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "cs.algorithms.index", "title": "数据结构与算法(面试)", "type": "index", "domain": "cs", "stack": [ "algorithms" ], "tags": [ "算法", "数据结构", "复杂度", "手写代码" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 16 ], "order": null, "path": "topics/cs/algorithms/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中" ] }, { "id": "cs.algorithms.interview", "title": "数据结构与算法面试题", "type": "interview", "domain": "cs", "stack": [ "algorithms" ], "tags": [ "算法", "数据结构", "手写代码", "面试" ], "level": "basic", "prerequisites": [], "related": [ "cs.algorithms.complexity-patterns" ], "est_hours": null, "week": [ 16 ], "order": null, "path": "topics/cs/algorithms/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "cs.algorithms.scenario.business-algorithms", "title": "业务中的算法:热门问题 Top K、任务依赖排序、相似问题去重和缓存淘汰", "type": "scenario", "domain": "cs", "stack": [ "algorithms", "redis", "langgraph" ], "tags": [ "Top K", "拓扑排序", "编辑距离", "LRU", "去重", "复杂度" ], "level": "intermediate", "prerequisites": [ "cs.algorithms.complexity-patterns" ], "related": [ "cs.algorithms.interview" ], "est_hours": 1.5, "week": [ 16 ], "order": null, "path": "topics/cs/algorithms/scenarios/business-algorithms.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "cs.network-os.http-tcp", "title": "网络基础:从输入 URL 到页面展示、TCP 握手挥手与粘包、HTTP/1.1 / 2 / 3、HTTPS、长连接与 SSE", "type": "lesson", "domain": "cs", "stack": [ "network-os" ], "tags": [ "TCP", "三次握手", "四次挥手", "TIME_WAIT", "粘包", "HTTP/2", "HTTP/3", "HTTPS", "TLS", "DNS", "keep-alive", "SSE", "WebSocket" ], "level": "basic", "prerequisites": [], "related": [ "cs.network-os.os-basics", "cs.network-os.scenario.connection-troubleshooting", "devops.nginx.https-stream-limit" ], "est_hours": 3, "week": [ 14, 16 ], "order": 1, "path": "topics/cs/network-os/01-http-tcp.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "cs.network-os.index", "title": "网络与操作系统基础", "type": "index", "domain": "cs", "stack": [ "network-os" ], "tags": [ "TCP", "HTTP", "HTTPS", "进程线程", "I/O 多路复用" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/cs/network-os/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中" ] }, { "id": "cs.network-os.interview", "title": "网络与操作系统面试题", "type": "interview", "domain": "cs", "stack": [ "network-os" ], "tags": [ "TCP", "HTTP", "HTTPS", "进程线程", "I/O 多路复用", "面试" ], "level": "basic", "prerequisites": [], "related": [ "cs.network-os.http-tcp", "cs.network-os.os-basics" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/cs/network-os/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "cs.network-os.os-basics", "title": "操作系统基础:进程线程协程、I/O 模型与多路复用、内存与虚拟内存、文件描述符、死锁", "type": "lesson", "domain": "cs", "stack": [ "network-os" ], "tags": [ "进程", "线程", "协程", "GIL", "I/O 多路复用", "epoll", "虚拟内存", "OOM", "文件描述符", "死锁" ], "level": "basic", "prerequisites": [ "cs.network-os.http-tcp" ], "related": [ "python.asyncio.index", "devops.linux.troubleshooting", "cs.network-os.interview" ], "est_hours": 3, "week": [ 14, 16 ], "order": 2, "path": "topics/cs/network-os/02-os-basics.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "cs.network-os.scenario.connection-troubleshooting", "title": "线上连接问题排查:大量 TIME_WAIT、连接池耗尽、fd 用尽和事件循环阻塞", "type": "scenario", "domain": "cs", "stack": [ "network-os", "linux", "fastapi" ], "tags": [ "TIME_WAIT", "连接池", "文件描述符", "事件循环阻塞", "超时", "排查" ], "level": "intermediate", "prerequisites": [ "cs.network-os.http-tcp", "cs.network-os.os-basics" ], "related": [ "cs.network-os.interview", "devops.linux.scenario.incident-troubleshooting" ], "est_hours": 2, "week": [ 14, 16 ], "order": null, "path": "topics/cs/network-os/scenarios/connection-troubleshooting.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "cs.web-security.common-attacks", "title": "Web 安全基础:XSS、CSRF、SQL 注入、CORS、SSRF 的原理、防御和在 AI 应用中的新形态", "type": "lesson", "domain": "cs", "stack": [ "web-security" ], "tags": [ "XSS", "CSRF", "SQL 注入", "CORS", "SSRF", "CSP", "SameSite", "参数化查询", "OWASP" ], "level": "basic", "prerequisites": [ "cs.network-os.http-tcp" ], "related": [ "cs.web-security.scenario.ai-app-security", "ai.prompt-engineering.scenario.injection-defense", "cs.web-security.interview" ], "est_hours": 3, "week": [ 7, 14, 16 ], "order": 1, "path": "topics/cs/web-security/01-xss-csrf-sqli-cors-ssrf.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "cs.web-security.index", "title": "Web 安全基础", "type": "index", "domain": "cs", "stack": [ "web-security" ], "tags": [ "XSS", "CSRF", "SQL 注入", "CORS", "SSRF", "OWASP" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7, 14, 16 ], "order": null, "path": "topics/cs/web-security/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "参考" ] }, { "id": "cs.web-security.interview", "title": "Web 安全面试题", "type": "interview", "domain": "cs", "stack": [ "web-security" ], "tags": [ "XSS", "CSRF", "SQL 注入", "CORS", "SSRF", "面试" ], "level": "basic", "prerequisites": [], "related": [ "cs.web-security.common-attacks" ], "est_hours": null, "week": [ 7, 14, 16 ], "order": null, "path": "topics/cs/web-security/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "cs.web-security.scenario.ai-app-security", "title": "AI 客服上线前的安全评审:回答渲染 XSS、抓取工具 SSRF、Text-to-SQL 注入和跨域配置", "type": "scenario", "domain": "cs", "stack": [ "web-security", "fastapi", "vue", "function-calling" ], "tags": [ "安全评审", "XSS", "SSRF", "Text-to-SQL", "CORS", "CSP", "最小权限" ], "level": "intermediate", "prerequisites": [ "cs.web-security.common-attacks" ], "related": [ "cs.web-security.interview", "ai.function-calling.scenario.safe-business-tools", "ai.prompt-engineering.scenario.injection-defense" ], "est_hours": 2.5, "week": [ 14, 16 ], "order": null, "path": "topics/cs/web-security/scenarios/ai-app-security.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "devops.cicd.index", "title": "CI/CD", "type": "index", "domain": "devops", "stack": [ "cicd" ], "tags": [ "CI/CD", "持续集成", "持续部署", "流水线", "发布" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 3, 7, 14 ], "order": null, "path": "topics/devops/cicd/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "devops.cicd.interview", "title": "CI/CD 面试题", "type": "interview", "domain": "devops", "stack": [ "cicd" ], "tags": [ "CI/CD", "发布", "回滚", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "devops.cicd.pipeline", "devops.cicd.release-rollback" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/devops/cicd/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 3 } }, { "id": "devops.cicd.pipeline", "title": "流水线设计:触发、阶段、缓存、服务容器、密钥", "type": "lesson", "domain": "devops", "stack": [ "cicd" ], "tags": [ "流水线", "GitHub Actions", "缓存", "服务容器", "密钥管理" ], "level": "basic", "prerequisites": [], "related": [ "devops.cicd.release-rollback", "devops.cicd.interview", "devops.git.index" ], "est_hours": 2, "week": [ 3, 7 ], "order": 1, "path": "topics/devops/cicd/01-pipeline.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.cicd.release-rollback", "title": "发布与回滚:镜像标签、环境、滚动 / 蓝绿 / 金丝雀、数据库迁移", "type": "lesson", "domain": "devops", "stack": [ "cicd" ], "tags": [ "发布策略", "回滚", "蓝绿发布", "金丝雀", "数据库迁移", "特性开关" ], "level": "intermediate", "prerequisites": [ "devops.cicd.pipeline" ], "related": [ "devops.cicd.scenario.multi-lang-pipeline", "devops.nginx.https-stream-limit", "devops.cicd.interview" ], "est_hours": 3, "week": [ 14 ], "order": 2, "path": "topics/devops/cicd/02-release-rollback.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.cicd.scenario.multi-lang-pipeline", "title": "多语言仓库的流水线:Go + Python + 前端,按改动构建、自动部署和回滚", "type": "scenario", "domain": "devops", "stack": [ "cicd", "docker", "go", "python", "vue" ], "tags": [ "Monorepo", "流水线", "路径过滤", "自动部署", "回滚" ], "level": "intermediate", "prerequisites": [ "devops.cicd.pipeline" ], "related": [ "devops.cicd.release-rollback", "devops.cicd.interview", "devops.docker.scenario.compose-dev-env" ], "est_hours": 2, "week": [ 14, 15 ], "order": null, "path": "topics/devops/cicd/scenarios/multi-lang-pipeline.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "devops.docker.compose-network-volume", "title": "Compose、网络和数据卷:多服务编排、健康检查、环境变量", "type": "lesson", "domain": "devops", "stack": [ "docker" ], "tags": [ "Compose", "网络", "数据卷", "健康检查", "环境变量" ], "level": "basic", "prerequisites": [ "devops.docker.image-dockerfile" ], "related": [ "devops.docker.scenario.compose-dev-env", "devops.docker.interview" ], "est_hours": 2, "week": [ 3, 6, 13 ], "order": 2, "path": "topics/devops/docker/02-compose-network-volume.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.docker.image-dockerfile", "title": "镜像和 Dockerfile:分层缓存、多阶段构建、非 root、信号处理", "type": "lesson", "domain": "devops", "stack": [ "docker" ], "tags": [ "Dockerfile", "多阶段构建", "镜像分层", "构建缓存", "distroless" ], "level": "basic", "prerequisites": [], "related": [ "devops.docker.compose-network-volume", "devops.docker.interview" ], "est_hours": 3, "week": [ 3, 6 ], "order": 1, "path": "topics/devops/docker/01-image-dockerfile.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.docker.index", "title": "Docker 与 Compose", "type": "index", "domain": "devops", "stack": [ "docker" ], "tags": [ "Docker", "容器", "Compose", "镜像" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 3, 6, 13, 14 ], "order": null, "path": "topics/devops/docker/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "devops.docker.interview", "title": "Docker 面试题", "type": "interview", "domain": "devops", "stack": [ "docker" ], "tags": [ "Docker", "容器", "Compose", "面试" ], "level": "basic", "prerequisites": [], "related": [ "devops.docker.image-dockerfile", "devops.docker.compose-network-volume" ], "est_hours": null, "week": [ 3, 14, 16 ], "order": null, "path": "topics/devops/docker/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 3, "场景题": 3 } }, { "id": "devops.docker.scenario.compose-dev-env", "title": "一条命令拉起开发环境:Go API + Python AI 服务 + PostgreSQL + Redis", "type": "scenario", "domain": "devops", "stack": [ "docker", "go", "fastapi", "postgresql", "redis" ], "tags": [ "Compose", "开发环境", "多语言", "健康检查", "配置管理" ], "level": "intermediate", "prerequisites": [ "devops.docker.compose-network-volume" ], "related": [ "devops.docker.interview", "devops.nginx.index" ], "est_hours": 2, "week": [ 3, 13, 14 ], "order": null, "path": "topics/devops/docker/scenarios/compose-dev-env.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "devops.git.branch-commit", "title": "分支模型和提交规范:主干开发、Git Flow、Conventional Commits、代码评审", "type": "lesson", "domain": "devops", "stack": [ "git" ], "tags": [ "分支模型", "Git Flow", "主干开发", "提交规范", "Code Review" ], "level": "basic", "prerequisites": [], "related": [ "devops.git.merge-rebase-recovery", "devops.cicd.pipeline", "devops.git.interview" ], "est_hours": 1.5, "week": [ 1, 8 ], "order": 1, "path": "topics/devops/git/01-branch-commit.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.git.index", "title": "Git", "type": "index", "domain": "devops", "stack": [ "git" ], "tags": [ "Git", "版本控制", "分支", "协作" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 1, 8, 15 ], "order": null, "path": "topics/devops/git/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "devops.git.interview", "title": "Git 面试题", "type": "interview", "domain": "devops", "stack": [ "git" ], "tags": [ "Git", "分支", "撤销", "面试" ], "level": "basic", "prerequisites": [], "related": [ "devops.git.branch-commit", "devops.git.merge-rebase-recovery" ], "est_hours": null, "week": [ 15, 16 ], "order": null, "path": "topics/devops/git/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 3, "场景题": 3 } }, { "id": "devops.git.merge-rebase-recovery", "title": "合并、变基和撤销:merge / rebase / cherry-pick、revert / reset、reflog 找回", "type": "lesson", "domain": "devops", "stack": [ "git" ], "tags": [ "merge", "rebase", "cherry-pick", "revert", "reset", "reflog", "stash" ], "level": "intermediate", "prerequisites": [ "devops.git.branch-commit" ], "related": [ "devops.git.scenario.hotfix-and-leaked-secret", "devops.git.interview" ], "est_hours": 2, "week": [ 8, 15 ], "order": 2, "path": "topics/devops/git/02-merge-rebase-recovery.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.git.scenario.hotfix-and-leaked-secret", "title": "线上紧急修复和密钥误提交:热修复分支、cherry-pick、清理历史和轮换密钥", "type": "scenario", "domain": "devops", "stack": [ "git", "cicd" ], "tags": [ "热修复", "cherry-pick", "密钥泄露", "历史清理", "安全" ], "level": "intermediate", "prerequisites": [ "devops.git.merge-rebase-recovery" ], "related": [ "devops.git.interview", "devops.cicd.pipeline" ], "est_hours": 1.5, "week": [ 8, 15 ], "order": null, "path": "topics/devops/git/scenarios/hotfix-and-leaked-secret.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "devops.k8s.core-objects", "title": "Kubernetes 基础:Pod / Deployment / Service / Ingress、配置与密钥、探针、滚动更新和扩缩容", "type": "lesson", "domain": "devops", "stack": [ "k8s" ], "tags": [ "Kubernetes", "Pod", "Deployment", "Service", "Ingress", "ConfigMap", "Secret", "探针", "滚动更新", "HPA", "PDB", "kubectl" ], "level": "basic", "prerequisites": [ "devops.docker.image-dockerfile" ], "related": [ "devops.k8s.scenario.agent-rollout", "devops.nginx.scenario.ai-gateway-sse-canary", "devops.k8s.interview" ], "est_hours": 3, "week": [ 14 ], "order": 1, "path": "topics/devops/k8s/01-core-objects.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.k8s.index", "title": "Kubernetes 基础", "type": "index", "domain": "devops", "stack": [ "k8s" ], "tags": [ "Kubernetes", "部署", "探针", "滚动更新" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 14 ], "order": null, "path": "topics/devops/k8s/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "devops.k8s.interview", "title": "Kubernetes 基础面试题", "type": "interview", "domain": "devops", "stack": [ "k8s" ], "tags": [ "Kubernetes", "探针", "滚动更新", "排查", "面试" ], "level": "basic", "prerequisites": [], "related": [ "devops.k8s.core-objects" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/devops/k8s/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "devops.k8s.scenario.agent-rollout", "title": "AI Agent 服务上 K8s:发布时流式回答不中断、慢启动、密钥管理和按负载扩容", "type": "scenario", "domain": "devops", "stack": [ "k8s", "docker", "nginx", "cicd" ], "tags": [ "滚动更新", "优雅退出", "SSE", "探针", "HPA", "Secret", "回滚" ], "level": "intermediate", "prerequisites": [ "devops.k8s.core-objects", "devops.docker.image-dockerfile" ], "related": [ "devops.k8s.interview", "devops.cicd.release-rollback" ], "est_hours": 2.5, "week": [ 14 ], "order": null, "path": "topics/devops/k8s/scenarios/agent-rollout.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "devops.linux.commands", "title": "常用命令:文件、文本处理、进程、端口、权限、systemd", "type": "lesson", "domain": "devops", "stack": [ "linux" ], "tags": [ "grep", "awk", "ps", "ss", "chmod", "systemd", "journalctl" ], "level": "basic", "prerequisites": [], "related": [ "devops.linux.troubleshooting", "devops.linux.interview" ], "est_hours": 3, "week": [ 14 ], "order": 1, "path": "topics/devops/linux/01-commands.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.linux.index", "title": "Linux 运维基础", "type": "index", "domain": "devops", "stack": [ "linux" ], "tags": [ "Linux", "命令行", "运维", "线上排查" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 14 ], "order": null, "path": "topics/devops/linux/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "devops.linux.interview", "title": "Linux 面试题", "type": "interview", "domain": "devops", "stack": [ "linux" ], "tags": [ "Linux", "命令", "排查", "面试" ], "level": "basic", "prerequisites": [], "related": [ "devops.linux.commands", "devops.linux.troubleshooting" ], "est_hours": null, "week": [ 14, 16 ], "order": null, "path": "topics/devops/linux/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 3, "场景题": 3 } }, { "id": "devops.linux.scenario.incident-troubleshooting", "title": "线上故障排查:接口变慢、磁盘写满、进程被 OOM 杀掉", "type": "scenario", "domain": "devops", "stack": [ "linux", "go", "nginx" ], "tags": [ "故障排查", "OOM", "磁盘满", "pprof", "复盘" ], "level": "intermediate", "prerequisites": [ "devops.linux.troubleshooting" ], "related": [ "devops.linux.interview", "devops.nginx.interview" ], "est_hours": 2, "week": [ 14 ], "order": null, "path": "topics/devops/linux/scenarios/incident-troubleshooting.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "devops.linux.troubleshooting", "title": "线上排查:CPU、内存、磁盘、网络、日志的定位思路", "type": "lesson", "domain": "devops", "stack": [ "linux" ], "tags": [ "排查", "top", "负载", "OOM", "磁盘", "TIME_WAIT", "pprof" ], "level": "intermediate", "prerequisites": [ "devops.linux.commands" ], "related": [ "devops.linux.scenario.incident-troubleshooting", "devops.linux.interview" ], "est_hours": 3, "week": [ 14 ], "order": 2, "path": "topics/devops/linux/02-troubleshooting.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.nginx.https-stream-limit", "title": "HTTPS、SSE / WebSocket、限流和灰度", "type": "lesson", "domain": "devops", "stack": [ "nginx" ], "tags": [ "HTTPS", "TLS", "SSE", "WebSocket", "limit_req", "灰度发布" ], "level": "intermediate", "prerequisites": [ "devops.nginx.proxy-static" ], "related": [ "devops.nginx.scenario.ai-gateway-sse-canary", "devops.nginx.interview" ], "est_hours": 3, "week": [ 7, 14 ], "order": 2, "path": "topics/devops/nginx/02-https-stream-limit.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.nginx.index", "title": "Nginx", "type": "index", "domain": "devops", "stack": [ "nginx" ], "tags": [ "Nginx", "反向代理", "HTTPS", "负载均衡", "SSE" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 3, 7, 14 ], "order": null, "path": "topics/devops/nginx/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "devops.nginx.interview", "title": "Nginx 面试题", "type": "interview", "domain": "devops", "stack": [ "nginx" ], "tags": [ "Nginx", "反向代理", "负载均衡", "面试" ], "level": "basic", "prerequisites": [], "related": [ "devops.nginx.proxy-static", "devops.nginx.https-stream-limit" ], "est_hours": null, "week": [ 7, 14, 16 ], "order": null, "path": "topics/devops/nginx/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 3, "场景题": 3 } }, { "id": "devops.nginx.proxy-static", "title": "反向代理、负载均衡和静态资源:location 匹配、proxy_pass、SPA 回退", "type": "lesson", "domain": "devops", "stack": [ "nginx" ], "tags": [ "反向代理", "location", "proxy_pass", "upstream", "try_files", "gzip" ], "level": "basic", "prerequisites": [], "related": [ "devops.nginx.https-stream-limit", "devops.nginx.interview" ], "est_hours": 2, "week": [ 3, 7 ], "order": 1, "path": "topics/devops/nginx/01-proxy-static.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "devops.nginx.scenario.ai-gateway-sse-canary", "title": "AI 应用网关:流式输出不卡顿、按用户灰度新版本", "type": "scenario", "domain": "devops", "stack": [ "nginx", "fastapi" ], "tags": [ "SSE", "流式输出", "灰度发布", "限流", "网关" ], "level": "intermediate", "prerequisites": [ "devops.nginx.https-stream-limit" ], "related": [ "devops.nginx.interview", "devops.docker.scenario.compose-dev-env" ], "est_hours": 2, "week": [ 7, 13, 14 ], "order": null, "path": "topics/devops/nginx/scenarios/ai-gateway-sse-canary.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "frontend.fe-testing-perf.index", "title": "前端测试与性能", "type": "index", "domain": "frontend", "stack": [ "fe-testing-perf" ], "tags": [ "Vitest", "Testing Library", "Playwright", "Web Vitals", "性能优化" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7 ], "order": null, "path": "topics/frontend/fe-testing-perf/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "frontend.fe-testing-perf.interview", "title": "前端测试与性能面试题", "type": "interview", "domain": "frontend", "stack": [ "fe-testing-perf" ], "tags": [ "测试", "性能优化", "Web Vitals", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.fe-testing-perf.testing", "frontend.fe-testing-perf.web-vitals" ], "est_hours": null, "week": [ 7, 16 ], "order": null, "path": "topics/frontend/fe-testing-perf/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "frontend.fe-testing-perf.scenario.perf-regression", "title": "性能治理:真实用户监控、定位慢页面、CI 性能预算和测试防回归", "type": "scenario", "domain": "frontend", "stack": [ "fe-testing-perf", "cicd" ], "tags": [ "性能监控", "RUM", "Lighthouse CI", "性能预算", "回归测试", "INP" ], "level": "intermediate", "prerequisites": [ "frontend.fe-testing-perf.web-vitals", "frontend.fe-testing-perf.testing" ], "related": [ "frontend.fe-testing-perf.interview", "frontend.webpack.scenario.build-speed" ], "est_hours": 2.5, "week": [ 7 ], "order": null, "path": "topics/frontend/fe-testing-perf/scenarios/perf-regression.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "frontend.fe-testing-perf.testing", "title": "前端测试:Vitest 单元测试、Testing Library 组件测试、Playwright 端到端测试", "type": "lesson", "domain": "frontend", "stack": [ "fe-testing-perf" ], "tags": [ "Vitest", "Testing Library", "Playwright", "假定时器", "Mock", "竞态", "测试金字塔" ], "level": "intermediate", "prerequisites": [ "frontend.react.hooks-rendering" ], "related": [ "frontend.fe-testing-perf.web-vitals", "frontend.fe-testing-perf.interview", "ai.ai-coding.verify-evidence" ], "est_hours": 2.5, "week": [ 7 ], "order": 1, "path": "topics/frontend/fe-testing-perf/01-testing-pyramid.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.fe-testing-perf.web-vitals", "title": "前端性能:Core Web Vitals(LCP / INP / CLS)、长任务和优化清单", "type": "lesson", "domain": "frontend", "stack": [ "fe-testing-perf" ], "tags": [ "性能优化", "Core Web Vitals", "LCP", "INP", "CLS", "长任务", "监控" ], "level": "intermediate", "prerequisites": [ "frontend.ssr.rendering-modes" ], "related": [ "frontend.fe-testing-perf.scenario.perf-regression", "frontend.webpack.scenario.build-speed" ], "est_hours": 2.5, "week": [ 7 ], "order": 2, "path": "topics/frontend/fe-testing-perf/02-web-vitals.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.react.hooks-rendering", "title": "React 渲染机制、Hooks 规则、状态管理和 React 19 新特性", "type": "lesson", "domain": "frontend", "stack": [ "react" ], "tags": [ "React", "Hooks", "useEffect", "useReducer", "渲染", "memo", "并发特性", "React 19", "React Compiler" ], "level": "intermediate", "prerequisites": [ "frontend.typescript.type-system" ], "related": [ "frontend.react.scenario.long-task-ui", "frontend.ssr.nextjs-app-router", "frontend.react.interview" ], "est_hours": 3, "week": [ 7 ], "order": 1, "path": "topics/frontend/react/01-hooks-rendering.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.react.index", "title": "React", "type": "index", "domain": "frontend", "stack": [ "react" ], "tags": [ "React", "Hooks", "状态管理", "React 19" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7 ], "order": null, "path": "topics/frontend/react/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "frontend.react.interview", "title": "React 面试题", "type": "interview", "domain": "frontend", "stack": [ "react" ], "tags": [ "React", "Hooks", "渲染", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.react.hooks-rendering" ], "est_hours": null, "week": [ 7, 16 ], "order": null, "path": "topics/frontend/react/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "frontend.react.scenario.long-task-ui", "title": "长任务界面:Agent 任务的状态机、事件去重、乐观更新和恢复", "type": "scenario", "domain": "frontend", "stack": [ "react", "typescript", "fastapi" ], "tags": [ "任务状态", "状态机", "useReducer", "SSE", "幂等", "乐观更新", "异常恢复" ], "level": "advanced", "prerequisites": [ "frontend.react.hooks-rendering" ], "related": [ "frontend.react.interview", "ai.langgraph.scenario.refund-approval", "frontend.vue.scenario.ai-chat-stream" ], "est_hours": 2.5, "week": [ 7, 12 ], "order": null, "path": "topics/frontend/react/scenarios/long-task-ui.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "frontend.ssr.index", "title": "SSR(Nuxt / Next.js)", "type": "index", "domain": "frontend", "stack": [ "ssr" ], "tags": [ "SSR", "SSG", "水合", "Next.js", "Nuxt" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7 ], "order": null, "path": "topics/frontend/ssr/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "frontend.ssr.interview", "title": "SSR 与 Next.js 面试题", "type": "interview", "domain": "frontend", "stack": [ "ssr" ], "tags": [ "SSR", "Next.js", "Nuxt", "水合", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.ssr.rendering-modes", "frontend.ssr.nextjs-app-router" ], "est_hours": null, "week": [ 7, 16 ], "order": null, "path": "topics/frontend/ssr/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "frontend.ssr.nextjs-app-router", "title": "Next.js App Router:服务端组件、客户端组件、路由处理器做 AI 流式接口、缓存", "type": "lesson", "domain": "frontend", "stack": [ "ssr", "react" ], "tags": [ "Next.js", "App Router", "Server Components", "use client", "Route Handlers", "Server Actions", "流式响应", "Turbopack" ], "level": "intermediate", "prerequisites": [ "frontend.react.hooks-rendering", "frontend.ssr.rendering-modes" ], "related": [ "frontend.ssr.scenario.help-center", "backend.nodejs.index", "frontend.ssr.interview" ], "est_hours": 3, "week": [ 7 ], "order": 2, "path": "topics/frontend/ssr/02-nextjs-app-router.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.ssr.rendering-modes", "title": "渲染模式:CSR / SSR / SSG / ISR、水合、流式渲染和 Nuxt 基础", "type": "lesson", "domain": "frontend", "stack": [ "ssr" ], "tags": [ "CSR", "SSR", "SSG", "ISR", "水合", "Hydration", "流式渲染", "Nuxt", "SEO" ], "level": "intermediate", "prerequisites": [ "frontend.vue.reactivity-composition" ], "related": [ "frontend.ssr.nextjs-app-router", "frontend.fe-testing-perf.index", "frontend.ssr.interview" ], "est_hours": 2.5, "week": [ 7 ], "order": 1, "path": "topics/frontend/ssr/01-rendering-modes.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.ssr.scenario.help-center", "title": "帮助中心 + 智能客服:SEO、渲染模式组合和 BFF 设计", "type": "scenario", "domain": "frontend", "stack": [ "ssr", "react", "nginx", "fastapi" ], "tags": [ "SEO", "SSG", "ISR", "BFF", "流式接口", "鉴权", "CDN 缓存" ], "level": "intermediate", "prerequisites": [ "frontend.ssr.nextjs-app-router" ], "related": [ "frontend.ssr.interview", "devops.nginx.scenario.ai-gateway-sse-canary" ], "est_hours": 2.5, "week": [ 7 ], "order": null, "path": "topics/frontend/ssr/scenarios/help-center.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "frontend.typescript.index", "title": "TypeScript", "type": "index", "domain": "frontend", "stack": [ "typescript" ], "tags": [ "TypeScript", "类型系统", "运行时校验", "接口契约" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7 ], "order": null, "path": "topics/frontend/typescript/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "frontend.typescript.interview", "title": "TypeScript 面试题", "type": "interview", "domain": "frontend", "stack": [ "typescript" ], "tags": [ "TypeScript", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.typescript.type-system" ], "est_hours": null, "week": [ 7, 16 ], "order": null, "path": "topics/frontend/typescript/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "frontend.typescript.scenario.api-contract", "title": "前后端类型契约:OpenAPI 生成类型、运行时校验和接口变更管理", "type": "scenario", "domain": "frontend", "stack": [ "typescript", "fastapi", "gin" ], "tags": [ "OpenAPI", "类型生成", "运行时校验", "zod", "接口变更", "契约测试" ], "level": "intermediate", "prerequisites": [ "frontend.typescript.type-system" ], "related": [ "frontend.typescript.interview", "python.fastapi.index", "backend.gin.scenario.unified-api-response" ], "est_hours": 2.5, "week": [ 7 ], "order": null, "path": "topics/frontend/typescript/scenarios/api-contract.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "frontend.typescript.type-system", "title": "TypeScript 类型系统进阶:泛型、条件类型、类型收窄、satisfies 和严格配置", "type": "lesson", "domain": "frontend", "stack": [ "typescript" ], "tags": [ "TypeScript", "泛型", "条件类型", "infer", "映射类型", "可辨识联合", "satisfies", "tsconfig" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.typescript.scenario.api-contract", "frontend.vue.index", "frontend.typescript.interview" ], "est_hours": 3, "week": [ 7 ], "order": 1, "path": "topics/frontend/typescript/01-type-system.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.vite.dev-build-config", "title": "Vite 8:开发服务器原理、Rolldown 构建、环境变量、代理(含 SSE)、插件和拆包", "type": "lesson", "domain": "frontend", "stack": [ "vite" ], "tags": [ "Vite", "Rolldown", "ESM", "HMR", "环境变量", "代理", "插件", "虚拟模块", "拆包" ], "level": "intermediate", "prerequisites": [ "frontend.typescript.type-system" ], "related": [ "frontend.webpack.build-optimization", "frontend.vite.scenario.webpack-to-vite", "frontend.vite.interview" ], "est_hours": 2.5, "week": [ 7 ], "order": 1, "path": "topics/frontend/vite/01-dev-build-config.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.vite.index", "title": "Vite", "type": "index", "domain": "frontend", "stack": [ "vite" ], "tags": [ "Vite", "Rolldown", "构建工具" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7 ], "order": null, "path": "topics/frontend/vite/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "frontend.vite.interview", "title": "Vite 面试题", "type": "interview", "domain": "frontend", "stack": [ "vite" ], "tags": [ "Vite", "Rolldown", "HMR", "插件", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.vite.dev-build-config", "frontend.webpack.interview" ], "est_hours": null, "week": [ 7, 16 ], "order": null, "path": "topics/frontend/vite/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "frontend.vite.scenario.webpack-to-vite", "title": "老项目从 webpack 迁移到 Vite:评估、步骤、风险和回滚", "type": "scenario", "domain": "frontend", "stack": [ "vite", "webpack" ], "tags": [ "迁移", "构建工具", "CommonJS", "环境变量", "灰度" ], "level": "intermediate", "prerequisites": [ "frontend.vite.dev-build-config", "frontend.webpack.build-optimization" ], "related": [ "frontend.vite.interview", "frontend.webpack.interview" ], "est_hours": 2, "week": [ 7 ], "order": null, "path": "topics/frontend/vite/scenarios/webpack-to-vite.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "frontend.vue.index", "title": "Vue 3", "type": "index", "domain": "frontend", "stack": [ "vue" ], "tags": [ "Vue 3", "响应式", "组合式函数", "Pinia", "AI 对话界面" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7 ], "order": null, "path": "topics/frontend/vue/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "frontend.vue.interview", "title": "Vue 面试题", "type": "interview", "domain": "frontend", "stack": [ "vue" ], "tags": [ "Vue 3", "响应式", "Pinia", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.vue.reactivity-composition" ], "est_hours": null, "week": [ 7, 16 ], "order": null, "path": "topics/frontend/vue/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "frontend.vue.reactivity-composition", "title": "Vue 3 响应式原理、组合式函数、Pinia 和性能优化", "type": "lesson", "domain": "frontend", "stack": [ "vue" ], "tags": [ "Vue 3", "响应式", "Proxy", "ref", "reactive", "computed", "watch", "组合式函数", "Pinia", "性能" ], "level": "intermediate", "prerequisites": [ "frontend.typescript.type-system" ], "related": [ "frontend.vue.scenario.ai-chat-stream", "frontend.react.index", "frontend.vue.interview" ], "est_hours": 3, "week": [ 7 ], "order": 1, "path": "topics/frontend/vue/01-reactivity-composition.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.vue.scenario.ai-chat-stream", "title": "AI 对话界面:流式渲染、任务状态、停止生成和断线续传", "type": "scenario", "domain": "frontend", "stack": [ "vue", "typescript", "fastapi", "nginx" ], "tags": [ "流式输出", "SSE", "任务状态", "断线重连", "Last-Event-ID", "结构化输出", "AI 原生前端" ], "level": "advanced", "prerequisites": [ "frontend.vue.reactivity-composition" ], "related": [ "frontend.vue.interview", "python.fastapi.scenario.streaming-chat-api", "devops.nginx.scenario.ai-gateway-sse-canary" ], "est_hours": 3, "week": [ 7, 12 ], "order": null, "path": "topics/frontend/vue/scenarios/ai-chat-stream.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "frontend.webpack.build-optimization", "title": "webpack 5:loader 与 plugin、splitChunks、tree shaking、缓存、模块联邦", "type": "lesson", "domain": "frontend", "stack": [ "webpack" ], "tags": [ "webpack", "loader", "plugin", "splitChunks", "tree shaking", "contenthash", "持久化缓存", "Module Federation" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.vite.dev-build-config", "frontend.webpack.scenario.build-speed", "frontend.webpack.interview" ], "est_hours": 2.5, "week": [ 7 ], "order": 1, "path": "topics/frontend/webpack/01-build-optimization.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "frontend.webpack.index", "title": "webpack", "type": "index", "domain": "frontend", "stack": [ "webpack" ], "tags": [ "webpack", "构建工具", "性能优化" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 7 ], "order": null, "path": "topics/frontend/webpack/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "frontend.webpack.interview", "title": "webpack 面试题", "type": "interview", "domain": "frontend", "stack": [ "webpack" ], "tags": [ "webpack", "loader", "plugin", "tree shaking", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "frontend.webpack.build-optimization", "frontend.vite.interview" ], "est_hours": null, "week": [ 7, 16 ], "order": null, "path": "topics/frontend/webpack/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 3, "进阶": 3, "场景题": 2 } }, { "id": "frontend.webpack.scenario.build-speed", "title": "大型项目构建慢、包体积大:度量、优化和防退化", "type": "scenario", "domain": "frontend", "stack": [ "webpack", "fe-testing-perf", "cicd" ], "tags": [ "构建速度", "包体积", "splitChunks", "持久化缓存", "体积预算", "CI" ], "level": "intermediate", "prerequisites": [ "frontend.webpack.build-optimization" ], "related": [ "frontend.webpack.interview", "frontend.vite.scenario.webpack-to-vite" ], "est_hours": 2, "week": [ 7 ], "order": null, "path": "topics/frontend/webpack/scenarios/build-speed.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "plan.index", "title": "转岗计划总纲", "type": "index", "domain": "plan", "stack": [], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [], "order": null, "path": "plan/README.md", "sections": [ "1. 背景、起点和目标", "2. 技术栈(已确定)", "3. 十六周总路线", "4. 岗位要求对照", "5. 学习原则和每周文件的写法", "6. 时间不够怎么砍", "7. 阶段 0~4 和五个学习重点", "8. 案例卡模板(直接复制)", "9. 每周节奏和戒律", "10. 脱敏和保密", "11. 简历和投递建议", "12. 仓库结构、文件清单和换设备", "13. 进度记录", "14. 终点验收清单(全部勾选才算完结)" ] }, { "id": "plan.week01", "title": "第 1 周:Go 基础 + Gin 写 REST 接口", "type": "week", "domain": "plan", "stack": [ "go", "gin", "git" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 1 ], "order": 1, "path": "plan/week01-go-gin.md", "sections": [ "本周最终目录", "第 1 天:环境、变量、函数和错误返回", "第 2 天:切片、map、结构体、方法、接口", "第 3 天:错误包装、并发、单元测试", "第 4 天:从 net/http 到 Gin", "第 5 天:分层:model / store / handler", "第 6 天:中间件和接口测试", "第 7 天:配置、优雅关机、接前端", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week02", "title": "第 2 周:数据库(PostgreSQL 为主,兼顾 MySQL)+ 注册登录与 JWT", "type": "week", "domain": "plan", "stack": [ "go", "gin", "postgresql", "mysql" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 2 ], "order": 2, "path": "plan/week02-db-auth.md", "sections": [ "本周最终目录(在上周 `todo-api/backend` 基础上新增)", "第 1 天:用 Docker 跑 PostgreSQL,写基础 SQL 和表设计", "第 2 天:多表查询、索引、EXPLAIN", "第 3 天:迁移和 Go 访问数据库(pgx)", "第 4 天:事务、隔离级别、幂等写入", "第 5 天:密码哈希和 JWT", "第 6 天:注册、登录、鉴权中间件", "第 7 天:配置切换、接口测试、集成测试、收尾", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week03", "title": "第 3 周:项目一“团队任务看板”:权限 + Redis + 消息队列 + Docker 部署", "type": "week", "domain": "plan", "stack": [ "go", "gin", "postgresql", "redis", "mq", "docker", "nginx", "cicd" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 3 ], "order": 3, "path": "plan/week03-project1.md", "sections": [ "本周最终目录", "第 1 天:看板建模和权限", "第 2 天:看板和任务接口、拖动排序的事务", "第 3 天:Redis 基础和缓存", "第 4 天:限流和分布式锁", "第 5 天:消息队列入门(Redis Streams),了解 RabbitMQ / Kafka", "第 6 天:Docker、Compose、Nginx", "第 7 天:部署到服务器 + CI + 收尾", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week04", "title": "第 4 周:Python 速成(给 JS 开发者)+ FastAPI 基础", "type": "week", "domain": "plan", "stack": [ "python", "asyncio", "fastapi" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 4 ], "order": 4, "path": "plan/week04-python.md", "sections": [ "本周最终目录", "第 1 天:包管理和基础语法", "第 2 天:类型标注、dataclass、Protocol、pytest", "第 3 天:异常、上下文管理器、文件和日志", "第 4 天:asyncio(本周最重要)", "第 5 天:pydantic 和配置", "第 6 天:httpx 异步请求、重试、测试替身", "第 7 天:FastAPI(Uvicorn、依赖注入、中间件、鉴权、生命周期、SSE)", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week05", "title": "第 5 周:RAG 知识库问答(上)——手写主流程", "type": "week", "domain": "plan", "stack": [ "asyncio", "fastapi", "rag", "vector-db", "prompt-engineering" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 5 ], "order": 5, "path": "plan/week05-rag-1.md", "sections": [ "项目二总览", "第 1 天:RAG 概念、项目初始化、模型客户端", "第 2 天:加载和切分", "第 3 天:向量库和幂等入库", "第 4 天:检索、提示词、带引用的生成", "第 5 天:FastAPI 接口和流式输出", "第 6 天:命令行、接入真实模型、人工试验", "第 7 天:整理、README、复盘", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week06", "title": "第 6 周:RAG 知识库问答(下)——评测、混合检索、重排、记忆、缓存、LangChain、部署", "type": "week", "domain": "plan", "stack": [ "postgresql", "redis", "docker", "rag", "vector-db", "langchain" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 6 ], "order": 6, "path": "plan/week06-rag-2.md", "sections": [ "第 1 天:评测集和指标", "第 2 天:BM25 关键词检索 + RRF 混合检索", "第 3 天:重排(Rerank)", "第 4 天:多轮追问——问题改写 + 会话短期记忆(Redis)", "第 5 天:缓存、配置组装、多轮对话接口", "第 6 天:LangChain 对照实现 + Milvus / pgvector", "第 7 天:Docker Compose 部署 + 复盘", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week07", "title": "第 7 周:前端工程化查漏补缺 + 两个项目的界面", "type": "week", "domain": "plan", "stack": [ "nginx", "cicd", "vue", "react", "typescript", "vite", "webpack", "ssr", "fe-testing-perf" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 7 ], "order": 7, "path": "plan/week07-frontend.md", "sections": [ "本周最终目录", "第 1 天:pnpm monorepo、TS 严格配置、ESLint + Prettier、共享请求封装", "第 2 天:SSE 流式解析(fetch + ReadableStream)", "第 3 天:Vue 3 应用——项目一的任务看板", "第 4 天:React 应用——项目二的知识库问答界面", "第 5 天:构建工具和性能优化", "第 6 天:SSR 基础(Nuxt / Next.js)", "第 7 天:前端 CI、构建产物部署、复盘", "本周相关专题", "本周自查清单(对照招聘“熟悉 Vue / React”的延伸要求)" ] }, { "id": "plan.week08", "title": "第 8 周:阶段 0 盘点 + 阶段 1 读通与画图", "type": "week", "domain": "plan", "stack": [ "git" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 8 ], "order": 8, "path": "plan/week08-inventory-architecture.md", "sections": [ "第 1 天:阶段 0——盘点", "第 2 天:脱敏机制——提交前自动检查", "第 3 天:阶段 1——怎么读一个大项目", "第 4 天:画架构图,标出断点", "第 5 天:接口职责表", "第 6 天:把流程画成状态机,并用代码验证思路", "第 7 天:阶段 1 验收 + 口述初稿", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week09", "title": "第 9 周:阶段 2——五个重点 A~E 深挖 + 案例卡", "type": "week", "domain": "plan", "stack": [], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 9 ], "order": 9, "path": "plan/week09-case-cards.md", "sections": [ "第 1 天:A 多 Agent 编排", "第 2 天:C 流式与长任务", "第 3 天:B 状态与权威源", "第 4 天:D 人机协作", "第 5 天:E 与业务系统集成", "第 6 天:补写和打磨案例卡", "第 7 天:汇总设计输入", "本周相关专题", "本周自查清单" ] }, { "id": "plan.week10", "title": "第 10 周:项目三 M1——手写工具调用循环 + 手写多 Agent 循环 + MCP 服务", "type": "week", "domain": "plan", "stack": [ "mcp", "function-calling" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 10 ], "order": 10, "path": "plan/week10-agent-m1-tools-mcp.md", "sections": [ "项目三总览", "第 1 天:初始化 + 支持工具调用的最小模型客户端", "第 2 天:手写工具调用循环", "第 3 天:手写多 Agent 循环", "第 4 天:MCP 概念 + 写一个 MCP 服务", "第 5 天:在 Cursor 和自己的 Agent 里用 MCP", "第 6 天:真实模型试跑 + 对照文档(上半)", "第 7 天:M1 验收", "本周相关专题" ] }, { "id": "plan.week11", "title": "第 11 周:项目三 M2——用 LangGraph 实现多 Agent 编排", "type": "week", "domain": "plan", "stack": [ "langchain", "langgraph", "mcp", "prompt-engineering" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 11 ], "order": 11, "path": "plan/week11-agent-m2-langgraph.md", "sections": [ "第 1 天:LangGraph 基础", "第 2 天:State、结构化决定、路由规则", "第 3 天:模型、工具、提示词、节点", "第 4 天:组装图 + 测试", "第 5 天:MCP 工具接入 LangGraph + 命令行", "第 6 天:真实模型试跑和调提示词", "第 7 天:对照文档 + M2 验收", "本周相关专题" ] }, { "id": "plan.week12", "title": "第 12 周:项目三 M3——检查点续跑、人机协作、后台作业、SSE、长期记忆", "type": "week", "domain": "plan", "stack": [ "asyncio", "fastapi", "langgraph", "agent-ops" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 12 ], "order": 12, "path": "plan/week12-agent-m3-persistence.md", "sections": [ "核心设计:两层状态", "第 1 天:检查点和续跑", "第 2 天:长期记忆(Store)", "第 3 天:业务表和租约", "第 4 天:后台运行器(RunManager)和报告", "第 5 天:FastAPI 接口和 SSE", "第 6 天:页面 + 崩溃恢复演示", "第 7 天:走查 + M3 验收", "本周相关专题" ] }, { "id": "plan.week13", "title": "第 13 周:项目三 M4——评测集、可观测性、文档、Docker + Dify / Coze 体验", "type": "week", "domain": "plan", "stack": [ "docker", "prompt-engineering", "agent-ops", "lowcode" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 13 ], "order": 13, "path": "plan/week13-agent-m4-eval-lowcode.md", "sections": [ "第 1 天:评测集和规则检查", "第 2 天:评测脚本、回归测试、用评测驱动改进", "第 3 天:可观测性(回调、LangSmith / Langfuse)", "第 4 天:文档(架构、设计取舍、映射表)", "第 5 天:README、Docker、从零验证、讲解稿", "第 6~7 天:Dify / Coze 体验(低代码平台)", "本周相关专题" ] }, { "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", "elasticsearch", "mongodb", "k8s", "data-pipeline", "nodejs", "java-spring", "network-os", "web-security" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 14 ], "order": 14, "path": "plan/week14-backend-extend-deploy.md", "sections": [ "本周最终目录", "第 1 天:消息队列——RabbitMQ 动手 + Kafka 概念", "第 2 天:微服务概念 + gRPC", "第 3 天:Redis 面试专题——锁、缓存三大问题、限流", "第 4 天:MySQL 面试专题——索引、EXPLAIN、事务和隔离级别", "第 5 天:把三个项目部署到一台服务器", "第 6 天:CI/CD——测试、构建镜像、自动部署", "第 7 天(可选):用 Go 写一个鉴权网关", "本周相关专题", "第 7 天(调整):了解级扩展——ES、MongoDB、K8s、数据管道、Node.js、Java、计算机基础", "本周验收" ] }, { "id": "plan.week15", "title": "第 15 周:阶段 4(上)——作品集、简历、STAR 经历、口述稿", "type": "week", "domain": "plan", "stack": [ "git" ], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 15 ], "order": 15, "path": "plan/week15-package-resume.md", "sections": [ "本周最终目录", "第 1 天:整理作品集(3 个公开仓库)", "第 2 天:简历结构、学历和技能栏", "第 3 天:项目经历怎么写", "第 4 天:工作经历——3 条 STAR", "第 5 天:针对岗位调整简历(关键词对照)", "第 6 天:口述稿和演示视频", "第 7 天:自查、请人审阅、阶段 4(上)验收", "本周相关专题" ] }, { "id": "plan.week16", "title": "第 16 周:阶段 4(下)——面试准备、终点验收、投递", "type": "week", "domain": "plan", "stack": [], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": 12, "week": [ 16 ], "order": 16, "path": "plan/week16-interview.md", "sections": [ "本周最终目录", "第 1 天:面试笔记(上)——Python 和 FastAPI", "第 2 天:面试笔记(中)——RAG 和 Agent", "第 3 天:面试笔记(下)——后端、前端、Go", "第 4 天:项目深挖和系统设计", "第 5 天:模拟面试和抽题练习", "第 6 天:终点验收", "第 7 天:开始投递,建立复盘循环", "本周相关专题" ] }, { "id": "python.asyncio.concurrency-control", "title": "并发控制:gather / TaskGroup、Semaphore、超时、取消、阻塞调用", "type": "lesson", "domain": "python", "stack": [ "asyncio" ], "tags": [ "TaskGroup", "Semaphore", "timeout", "取消", "to_thread", "背压" ], "level": "intermediate", "prerequisites": [ "python.asyncio.coroutines-tasks" ], "related": [ "python.asyncio.scenario.concurrent-llm-calls", "python.asyncio.interview", "backend.go.errors-concurrency" ], "est_hours": 3, "week": [ 4, 5, 12 ], "order": 2, "path": "topics/python/asyncio/02-concurrency-control.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "python.asyncio.coroutines-tasks", "title": "协程、任务和事件循环:和 JS Promise 对照", "type": "lesson", "domain": "python", "stack": [ "asyncio" ], "tags": [ "协程", "事件循环", "Task", "await", "async for" ], "level": "basic", "prerequisites": [ "python.python.syntax-for-js" ], "related": [ "python.asyncio.concurrency-control", "python.asyncio.interview" ], "est_hours": 2, "week": [ 4 ], "order": 1, "path": "topics/python/asyncio/01-coroutines-tasks.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "python.asyncio.index", "title": "asyncio 异步编程", "type": "index", "domain": "python", "stack": [ "asyncio" ], "tags": [ "asyncio", "协程", "并发", "超时" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 4, 5, 12 ], "order": null, "path": "topics/python/asyncio/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "python.asyncio.interview", "title": "asyncio 面试题", "type": "interview", "domain": "python", "stack": [ "asyncio" ], "tags": [ "asyncio", "协程", "并发", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "python.asyncio.coroutines-tasks", "python.asyncio.concurrency-control" ], "est_hours": null, "week": [ 4, 16 ], "order": null, "path": "topics/python/asyncio/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 3, "场景题": 3 } }, { "id": "python.asyncio.scenario.concurrent-llm-calls", "title": "并发调用多个模型和外部接口:限并发、超时、重试、部分失败", "type": "scenario", "domain": "python", "stack": [ "asyncio", "fastapi" ], "tags": [ "并发", "大模型调用", "超时", "重试", "限流", "部分失败" ], "level": "intermediate", "prerequisites": [ "python.asyncio.concurrency-control" ], "related": [ "python.asyncio.interview", "backend.go.scenario.batch-third-party-calls" ], "est_hours": 2, "week": [ 5, 12 ], "order": null, "path": "topics/python/asyncio/scenarios/concurrent-llm-calls.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "python.fastapi.deps-auth-errors", "title": "依赖注入、鉴权、中间件和统一错误处理", "type": "lesson", "domain": "python", "stack": [ "fastapi" ], "tags": [ "Depends", "鉴权", "JWT", "中间件", "异常处理器", "多租户" ], "level": "intermediate", "prerequisites": [ "python.fastapi.routing-validation" ], "related": [ "python.fastapi.streaming-testing", "backend.gin.middleware-auth", "python.fastapi.interview" ], "est_hours": 3, "week": [ 4, 5 ], "order": 2, "path": "topics/python/fastapi/02-deps-auth-errors.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "python.fastapi.index", "title": "FastAPI", "type": "index", "domain": "python", "stack": [ "fastapi" ], "tags": [ "FastAPI", "Web 框架", "pydantic", "SSE" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 4, 5, 12 ], "order": null, "path": "topics/python/fastapi/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "python.fastapi.interview", "title": "FastAPI 面试题", "type": "interview", "domain": "python", "stack": [ "fastapi" ], "tags": [ "FastAPI", "pydantic", "依赖注入", "面试" ], "level": "intermediate", "prerequisites": [], "related": [ "python.fastapi.routing-validation", "python.fastapi.deps-auth-errors", "python.fastapi.streaming-testing" ], "est_hours": null, "week": [ 4, 5, 16 ], "order": null, "path": "topics/python/fastapi/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 4, "进阶": 3, "场景题": 3 } }, { "id": "python.fastapi.routing-validation", "title": "路由和参数校验:路径 / 查询 / 请求体、pydantic 模型、响应模型", "type": "lesson", "domain": "python", "stack": [ "fastapi" ], "tags": [ "路由", "pydantic", "参数校验", "响应模型", "OpenAPI" ], "level": "basic", "prerequisites": [ "python.python.typing-errors-testing" ], "related": [ "python.fastapi.deps-auth-errors", "backend.gin.routing-binding", "python.fastapi.interview" ], "est_hours": 2, "week": [ 4 ], "order": 1, "path": "topics/python/fastapi/01-routing-validation.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "python.fastapi.scenario.streaming-chat-api", "title": "大模型对话 API:鉴权、统一错误、SSE 流式、客户端断开即停止", "type": "scenario", "domain": "python", "stack": [ "fastapi", "asyncio", "nginx" ], "tags": [ "对话 API", "SSE", "鉴权", "错误处理", "可测试性" ], "level": "intermediate", "prerequisites": [ "python.fastapi.streaming-testing" ], "related": [ "python.fastapi.interview", "devops.nginx.scenario.ai-gateway-sse-canary" ], "est_hours": 2, "week": [ 5, 12 ], "order": null, "path": "topics/python/fastapi/scenarios/streaming-chat-api.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "python.fastapi.streaming-testing", "title": "流式输出(SSE)、生命周期、测试和部署", "type": "lesson", "domain": "python", "stack": [ "fastapi" ], "tags": [ "SSE", "StreamingResponse", "lifespan", "TestClient", "pytest", "uvicorn" ], "level": "intermediate", "prerequisites": [ "python.fastapi.deps-auth-errors" ], "related": [ "python.fastapi.scenario.streaming-chat-api", "devops.nginx.https-stream-limit", "python.fastapi.interview" ], "est_hours": 3, "week": [ 5, 12 ], "order": 3, "path": "topics/python/fastapi/03-streaming-testing.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "python.python.index", "title": "Python 语言", "type": "index", "domain": "python", "stack": [ "python" ], "tags": [ "Python", "语法", "类型标注", "pytest" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [ 4 ], "order": null, "path": "topics/python/python/index.md", "sections": [ "学习路线", "企业场景", "面试题", "示例代码", "在 16 周计划中", "官方资料" ] }, { "id": "python.python.interview", "title": "Python 面试题", "type": "interview", "domain": "python", "stack": [ "python" ], "tags": [ "Python", "基础", "面试" ], "level": "basic", "prerequisites": [], "related": [ "python.python.syntax-for-js", "python.python.typing-errors-testing", "python.python.project-packaging" ], "est_hours": null, "week": [ 4, 16 ], "order": null, "path": "topics/python/python/interview.md", "sections": [ "基础", "进阶", "场景题" ], "questions": { "基础": 5, "进阶": 4, "场景题": 3 } }, { "id": "python.python.project-packaging", "title": "工程化:虚拟环境、uv / pip、项目结构、导入、日志和配置", "type": "lesson", "domain": "python", "stack": [ "python" ], "tags": [ "虚拟环境", "uv", "pip", "pyproject.toml", "导入", "logging", "配置" ], "level": "basic", "prerequisites": [ "python.python.syntax-for-js" ], "related": [ "python.fastapi.routing-validation", "python.python.interview" ], "est_hours": 2, "week": [ 4 ], "order": 3, "path": "topics/python/python/03-project-packaging.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "python.python.scenario.order-reconciliation", "title": "订单对账脚本:从“能跑的脚本”到可测试、可维护的工具", "type": "scenario", "domain": "python", "stack": [ "python" ], "tags": [ "对账", "CSV", "Decimal", "数据处理", "测试" ], "level": "basic", "prerequisites": [ "python.python.typing-errors-testing" ], "related": [ "python.python.interview", "backend.mq.reliability" ], "est_hours": 2, "week": [ 4 ], "order": null, "path": "topics/python/python/scenarios/order-reconciliation.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "python.python.syntax-for-js", "title": "给 JS 开发者的 Python:语法、数据结构、推导式、函数、类", "type": "lesson", "domain": "python", "stack": [ "python" ], "tags": [ "语法", "list", "dict", "推导式", "解包", "类" ], "level": "basic", "prerequisites": [], "related": [ "python.python.typing-errors-testing", "python.python.interview" ], "est_hours": 3, "week": [ 4 ], "order": 1, "path": "topics/python/python/01-syntax-for-js.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "python.python.typing-errors-testing", "title": "类型标注、dataclass、异常和上下文管理器、pytest", "type": "lesson", "domain": "python", "stack": [ "python" ], "tags": [ "类型标注", "dataclass", "Protocol", "异常", "with", "生成器", "pytest" ], "level": "basic", "prerequisites": [ "python.python.syntax-for-js" ], "related": [ "python.python.scenario.order-reconciliation", "python.asyncio.coroutines-tasks", "python.python.interview" ], "est_hours": 3, "week": [ 4 ], "order": 2, "path": "topics/python/python/02-typing-errors-testing.md", "sections": [ "解释说明", "案例", "代码示例", "易错点", "面试常问" ] }, { "id": "research.boss-2026-10-23", "title": "BOSS直聘北京岗位调研(2026-10-23)", "type": "research", "domain": "plan", "stack": [], "tags": [ "岗位调研", "BOSS直聘", "北京", "AI 应用", "Agent", "全栈" ], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [], "order": null, "path": "research/boss-2026-10-23.md", "sections": [ "原始记录:BOSS直聘 北京岗位调研(2026-10-23,登录后只读)", "技术出现次数(约数)", "反复出现、计划里要补强的要求", "代表岗位(职位 | 公司 | 经验 | URL 前缀 https://www.zhipin.com)" ] }, { "id": "research.index", "title": "岗位调研记录", "type": "index", "domain": "plan", "stack": [], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [], "order": null, "path": "research/index.md", "sections": [] }, { "id": "scenario.approval-human-in-loop", "title": "审批流 + 人工介入的 Agent:高风险操作暂停审批、断点续跑、超时和幂等执行", "type": "scenario", "domain": "cross", "stack": [ "langgraph", "function-calling", "postgresql", "redis", "fastapi", "vue" ], "tags": [ "人机协作", "interrupt", "检查点", "审批", "幂等", "超时", "审计" ], "level": "advanced", "prerequisites": [ "ai.langgraph.index", "ai.function-calling.index" ], "related": [ "ai.langgraph.scenario.refund-approval", "ai.function-calling.scenario.safe-business-tools", "ai.agent-design.index" ], "est_hours": 3, "week": [ 11, 12 ], "order": null, "path": "scenarios/approval-human-in-loop.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenario.content-moderation", "title": "内容审核:规则 + 模型的分层审核、异步流水线、人工复审、申诉和效果度量", "type": "scenario", "domain": "cross", "stack": [ "mq", "redis", "postgresql", "prompt-engineering", "agent-ops", "fastapi", "react" ], "tags": [ "内容审核", "分层过滤", "敏感词", "大模型审核", "人工复审", "异步", "召回率", "误杀率" ], "level": "intermediate", "prerequisites": [ "backend.mq.index", "ai.prompt-engineering.index" ], "related": [ "ai.prompt-engineering.scenario.injection-defense", "ai.agent-ops.scenario.agent-quality-gate", "backend.mq.reliability" ], "est_hours": 2.5, "week": [ 13, 14 ], "order": null, "path": "scenarios/content-moderation.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenario.customer-service-kb", "title": "客服知识库问答:从文档接入到带引用的流式回答、权限、评测和转人工", "type": "scenario", "domain": "cross", "stack": [ "rag", "vector-db", "elasticsearch", "fastapi", "vue", "redis", "data-pipeline", "agent-ops" ], "tags": [ "RAG", "混合检索", "权限", "流式输出", "评测", "转人工", "引用" ], "level": "intermediate", "prerequisites": [ "ai.rag.index", "python.fastapi.index" ], "related": [ "ai.rag.scenario.permission-aware-kb", "backend.elasticsearch.scenario.kb-search-sync", "frontend.vue.scenario.ai-chat-stream", "ai.agent-ops.scenario.agent-quality-gate" ], "est_hours": 3, "week": [ 5, 6, 13, 15 ], "order": null, "path": "scenarios/customer-service-kb.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenario.data-sync", "title": "数据同步:业务库到搜索引擎 / 向量库 / 报表库,outbox 与 CDC、幂等、顺序、对账和重建", "type": "scenario", "domain": "cross", "stack": [ "data-pipeline", "postgresql", "mongodb", "elasticsearch", "vector-db", "mq" ], "tags": [ "数据同步", "outbox", "CDC", "变更流", "幂等", "顺序", "对账", "全量重建" ], "level": "advanced", "prerequisites": [ "backend.data-pipeline.index", "backend.mq.index" ], "related": [ "backend.elasticsearch.scenario.kb-search-sync", "backend.data-pipeline.scenario.third-party-sync", "backend.mongodb.scenario.conversation-store", "backend.mq.reliability" ], "est_hours": 3, "week": [ 6, 14 ], "order": null, "path": "scenarios/data-sync.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenario.flash-sale", "title": "秒杀 / 高并发抢购:流量削峰、Redis 原子扣库存、异步下单、防超卖和防刷", "type": "scenario", "domain": "cross", "stack": [ "redis", "mq", "postgresql", "gin", "nginx", "vue" ], "tags": [ "秒杀", "高并发", "库存", "Lua", "削峰", "异步下单", "幂等", "限流", "防刷" ], "level": "advanced", "prerequisites": [ "backend.redis.index", "backend.mq.index" ], "related": [ "backend.redis.scenario.stock-reservation", "backend.mq.scenario.delayed-order-cancel", "backend.redis.lock-ratelimit" ], "est_hours": 3, "week": [ 3, 14, 16 ], "order": null, "path": "scenarios/flash-sale.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenario.multi-tenant-saas", "title": "多租户 SaaS:数据隔离方案、租户上下文、配额与限流、AI 成本分摊和租户级配置", "type": "scenario", "domain": "cross", "stack": [ "postgresql", "vector-db", "redis", "fastapi", "gin", "llm-serving", "k8s" ], "tags": [ "多租户", "数据隔离", "行级安全", "租户上下文", "配额", "限流", "成本分摊", "噪声邻居" ], "level": "advanced", "prerequisites": [ "backend.postgresql.index", "ai.vector-db.index" ], "related": [ "ai.vector-db.scenario.multi-tenant-index", "ai.rag.scenario.permission-aware-kb", "ai.llm-serving.scenario.multi-provider-gateway" ], "est_hours": 3, "week": [ 6, 13, 14 ], "order": null, "path": "scenarios/multi-tenant-saas.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenario.report-agent", "title": "报表生成 Agent:自然语言查数、安全的 Text-to-SQL、结果校验、图表和成本控制", "type": "scenario", "domain": "cross", "stack": [ "agent-design", "function-calling", "postgresql", "data-pipeline", "web-security", "react", "agent-ops" ], "tags": [ "Text-to-SQL", "报表", "只读账号", "SQL 校验", "语义层", "行级安全", "评测" ], "level": "advanced", "prerequisites": [ "ai.agent-design.index", "backend.postgresql.index" ], "related": [ "ai.agent-design.scenario.report-agent", "cs.web-security.scenario.ai-app-security", "backend.data-pipeline.scenario.third-party-sync" ], "est_hours": 3, "week": [ 10, 13, 14 ], "order": null, "path": "scenarios/report-agent.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenario.ticket-system", "title": "工单系统:AI 自动分类与路由、状态机、SLA 超时升级和坐席协作", "type": "scenario", "domain": "cross", "stack": [ "postgresql", "mq", "redis", "langchain", "gin", "fastapi", "react" ], "tags": [ "工单", "状态机", "自动分类", "路由", "SLA", "延迟队列", "审计", "乐观锁" ], "level": "intermediate", "prerequisites": [ "backend.postgresql.index", "ai.langchain.index" ], "related": [ "ai.langchain.scenario.ticket-triage", "backend.postgresql.scenario.order-state-audit", "backend.mq.scenario.delayed-order-cancel", "frontend.react.scenario.long-task-ui" ], "est_hours": 3, "week": [ 3, 11, 14 ], "order": null, "path": "scenarios/ticket-system.md", "sections": [ "业务背景与问题", "约束", "方案设计", "关键代码", "取舍", "易错点", "面试怎么讲" ] }, { "id": "scenarios.index", "title": "跨技术栈企业服务场景", "type": "index", "domain": "cross", "stack": [], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [], "order": null, "path": "scenarios/index.md", "sections": [] }, { "id": "topics.index", "title": "专项学习总目录", "type": "index", "domain": "plan", "stack": [], "tags": [], "level": null, "prerequisites": [], "related": [], "est_hours": null, "week": [], "order": null, "path": "topics/index.md", "sections": [ "后端(`backend`)", "运维与工程(`devops`)", "Python(`python`)", "AI 应用(`ai`)", "前端(`frontend`)", "计算机基础(`cs`)" ] } ] }