阶段3(上):Python/asyncio/FastAPI 专题的课程、企业场景、面试题和可运行示例

This commit is contained in:
Shikui Wang committed 2026-10-23 15:44:13 +08:00
1 parent b8010a74f3
commit 7f52513ffc
24 files changed
+2817 -33

No files matched your search

+616 -24
View File
@@ -425,42 +425,48 @@
"domain": "python",
"title": "asyncio 异步编程",
"index": "topics/python/asyncio/index.md",
"lessons": 0,
"scenarios": 0,
"lessons": 2,
"scenarios": 1,
"interview_questions": {
"基础": 0,
"进阶": 0,
"场景题": 0
"基础": 4,
"进阶": 3,
"场景题": 3
},
"examples": []
"examples": [
"topics/python/asyncio/examples/fanout"
]
},
{
"stack": "fastapi",
"domain": "python",
"title": "FastAPI",
"index": "topics/python/fastapi/index.md",
"lessons": 0,
"scenarios": 0,
"lessons": 3,
"scenarios": 1,
"interview_questions": {
"基础": 0,
"进阶": 0,
"场景题": 0
"基础": 4,
"进阶": 3,
"场景题": 3
},
"examples": []
"examples": [
"topics/python/fastapi/examples/chat-api"
]
},
{
"stack": "python",
"domain": "python",
"title": "Python 语言",
"index": "topics/python/python/index.md",
"lessons": 0,
"scenarios": 0,
"lessons": 3,
"scenarios": 1,
"interview_questions": {
"基础": 0,
"进阶": 0,
"场景题": 0
"基础": 5,
"进阶": 4,
"场景题": 3
},
"examples": []
"examples": [
"topics/python/python/examples/reconcile"
]
}
],
"items": [
@@ -3777,6 +3783,84 @@
"第 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 异步编程",
@@ -3785,7 +3869,12 @@
"stack": [
"asyncio"
],
"tags": [],
"tags": [
"asyncio",
"协程",
"并发",
"超时"
],
"level": null,
"prerequisites": [],
"related": [],
@@ -3797,7 +3886,134 @@
],
"order": null,
"path": "topics/python/asyncio/index.md",
"sections": []
"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",
@@ -3807,7 +4023,12 @@
"stack": [
"fastapi"
],
"tags": [],
"tags": [
"FastAPI",
"Web 框架",
"pydantic",
"SSE"
],
"level": null,
"prerequisites": [],
"related": [],
@@ -3819,7 +4040,174 @@
],
"order": null,
"path": "topics/python/fastapi/index.md",
"sections": []
"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",
@@ -3829,7 +4217,12 @@
"stack": [
"python"
],
"tags": [],
"tags": [
"Python",
"语法",
"类型标注",
"pytest"
],
"level": null,
"prerequisites": [],
"related": [],
@@ -3839,7 +4232,206 @@
],
"order": null,
"path": "topics/python/python/index.md",
"sections": []
"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": "scenarios.index",