面试追问
免费试读一个预约请求从页面到数据库,经过了哪些层?
30 秒回答:页面提交预约时,Axios 拦截器自动带上 Token。后端路由通过依赖注入拿到数据库会话和当前用户,Schema 校验参数类型,Service 校验开放时间、设备状态和时段冲突,通过后写库。该预约接口返回 code、message、data,前端拦截器按 code 判断成功或提示错误。
项目已实现:第 05 节的 get_db 用 yield 提供会话,并在 finally 中关闭;第 06 节的 get_current_user 解析 Token 并查询用户;第 07 节统一 Response 结构和全局异常处理;第 08 节封装 Axios 拦截器;第 18 节在 reservation_service.create_reservation 中集中预约校验。
追问:为什么要单独分一个 Service 层?
路由函数只负责接收参数、注入依赖和返回结果,业务规则放在 Service,便于复用和测试。这个项目里最直接的收益是 AI 预约工具 create_lab_reservation 直接调用同一个 create_reservation,表单和 AI 两个入口共用一套规则。如果规则写在路由里,AI 入口就要复制一份,两边很容易不一致。
追问:get_db 为什么用 yield,Session 能不能做成全局共享?
带 yield 的依赖会在请求处理完后继续执行 finally,保证每个请求用完就关闭会话。Session 不是线程安全的,也带有本次请求的事务状态,不能在多个请求之间共享。每个请求创建一个、用完关闭,是 FastAPI 配合同步 SQLAlchemy 的常规做法。
继续阅读完整内容
其余面试追问与问题复盘,仅限有效 VIP 会员查看。
开通会员,查看完整资源包已有会员?登录查看