阶段3(上):Python/asyncio/FastAPI 专题的课程、企业场景、面试题和可运行示例
This commit is contained in:
1 parent
b8010a74f3
commit
7f52513ffc
24 files changed
+2817
-33
No files matched your search
+616
-24
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user