9235 lines
206 KiB
JSON
9235 lines
206 KiB
JSON
{
|
||
"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"
|
||
],
|
||
"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"
|
||
],
|
||
"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 写一个鉴权网关",
|
||
"本周验收"
|
||
]
|
||
},
|
||
{
|
||
"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": "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`)"
|
||
]
|
||
}
|
||
]
|
||
}
|