答辩老师问的技术问题其实高度集中。他们不关心你用了什么花哨的库关心的是你有没有想过为什么以及你说的和你做的是不是一回事。下面 15 个问题是前后端分离项目Spring Boot / Node / Python Vue3 MySQL答辩里出现频率最高的每个给一句话答法、一个展开点、一个能当场演示的动作。演示比解释有说服力。能演示的尽量演示。一、认证1. 为什么用 JWT 不用 Session一句话无状态后端不用存登录状态多个实例谁来都能验也不依赖 Redis。展开Session 要在服务端存会话、要处理分布式共享JWT 把用户标识签在 Token 里后端只验签。演示登录后在浏览器 Application 面板里看localStorage的 accessToken用 jwt.io 解出sub、username、type、exp。2. 为什么要两个 Token一句话accessToken 短命2 小时降低泄露风险refreshToken 长命7 天让用户不用频繁登录。展开accessToken 过期时前端用 refreshToken 换新的一对用户无感知两个 Token 用type字段区分refreshToken 不能当 accessToken 用。演示把 accessToken 改坏刷新页面Network 里看到 401 → refresh → 重放。3. 多个请求同时过期会刷新多次吗一句话不会用一个正在刷新标记加请求队列只刷新一次其余排队等新 Token。演示改坏 Token 后刷新首页首页同时发三个请求Network 里refresh只出现一次。4. refreshToken 不落库怎么让它失效一句话禁用用户即可让刷新失败需要主动作废可以加 Token 黑名单表这是扩展方向。展开这是简单优先的取舍答辩时主动说出取舍比被问出来好。5. 密码怎么存的一句话bcrypt 哈希不可逆每次加盐永不返回给前端。演示数据库里sys_user.password是$2a$10$开头的 60 位字符串接口返回的用户信息里没有 password 字段。二、权限6. 权限是前端做的还是后端做的前端隐藏按钮安全吗一句话两处都做。前端隐藏按钮只是体验后端每个写接口都校验权限码绕过前端会得到 403。演示用普通账号登录页面没有新增按钮打开 Swagger 用同一账号调新增接口返回{ code: 403, message: 没有操作权限 }。这是全场最值得做的演示。7. RBAC 是什么和直接给用户配权限有什么区别一句话权限先给角色角色再给用户直接给用户配ACL人多了没法维护。展开用户—角色—菜单控制页面角色—权限点控制按钮和接口用户不直接挂权限。8. 菜单和按钮为什么分两张表一句话菜单回答能进哪个页面权限点回答能做什么操作职责单一。展开很多框架把按钮当 type3 的菜单放一张表能用但讲不清拆开后权限点只由 SQL 维护前端按钮、后端注解、数据库记录三处对齐更容易。9. 权限改了要重新登录吗一句话不用后端每次请求重新查权限码前端权限在下次刷新页面后更新。展开每请求查库是教学优先的取舍高并发可以缓存作为扩展方向。10. 超级管理员的权限存在哪一句话不存按角色编码admin特判放行返回给前端的是通配符*:*:*。展开好处是新增菜单或权限点不用给管理员补授权也避免误删关联表导致管理员失权。三、接口与分层11. 你的接口返回格式是统一的吗错误怎么处理一句话统一{ code, message, data }code 为 0 成功失败时 HTTP 状态码与 code 相同400 参数或业务错误、401 未登录、403 无权限、404 不存在、500 服务器错误。演示调一个不存在的 ID返回 404 和中文 message提交空表单返回 400 和第一条校验提示。12. 一次点击新增从前端到数据库经过哪些文件一句话页面 → 接口封装加 Token→ 后端认证过滤器 → 权限拦截器 → 日志切面 → Controller 参数校验 → Service 业务规则 → Mapper → 数据库再一路返回。展开能按顺序说出每一层的文件名就是分层这个词最好的证明。13. Controller 和 Service 的职责怎么分一句话Controller 只做三件事声明权限码、声明日志、把参数交给 Service 并包装返回业务判断全在 Service。演示打开任一 Controller方法体只有一两行。四、数据库14. 这张表为什么不建外键一句话看业务。用户被删除后他发布的公告、上传的文件、操作日志应该保留所以这些表的用户 ID 不建外键角色—菜单这类纯关联表建外键并级联删除。展开能说出哪些建、哪些不建、为什么比全建或全不建都好。15. 表结构是代码自动生成的还是 SQL 写的一句话SQL 是唯一事实来源ORM 不自动建表每张表每个字段都有中文注释。展开自动建表的结果在不同 ORM 里有细微差异类型、索引名统一用 SQL 才能保证一致SQL 文件本身就是数据库设计文档。答辩前怎么用这份清单每个问题先自己答一遍答不出的去代码里找对应文件找不到说明项目里确实缺这块把能演示的 5 个动作解 Token、改坏 Token 刷新、普通账号 403、404 与 400 的返回、Controller 只有一两行提前在自己电脑上做一遍确认环境没问题主动说取舍。“refreshToken 不落库”“每请求查库这类点自己先说这是简单优先的取舍扩展方向是……”比被问出来好得多。我是蓝象关注“跑起来 → 看得懂 → 改得动 → 讲得清”。想继续了解我们的项目实战服务可以查看 蓝象官网。