全栈与后端面试题库
覆盖 API、鉴权、Node.js、Go、Python、PostgreSQL、Redis、网络、测试、Docker、CI/CD 与工程场景的全量题库。
[!info] related notes
全栈与后端面试题库
使用规则
- 先折叠题卡闭卷口述,再展开答案;
题源只描述问题如何进入题库,答案依据单独描述技术正确性;NC-H代表近期公开面经主题交叉出现,不代表公司官方题库;AI-D明确表示 AI 衍生的高价值追问;- 完整知识只维护在相关长期笔记,本页保存面试表达;
- 项目题必须在面试前回动态 evidence index 核验,不临场编数字。
题源定义见 面试题来源、置信度与答案依据;回答方法见 技术面试回答框架。
HTTP / API 设计
[!question]-
P0FS-001RESTful API 的核心思想? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:RESTful API30 秒回答 以资源为中心,用 URI 标识资源,用 HTTP method 表达操作语义,并利用状态码、缓存、幂等等 HTTP 语义。REST 不是“URL 都必须写复数名词”的格式规范,更关键是接口语义一致、可预测。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-002GET / POST / PUT / PATCH / DELETE 的语义? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:RESTful API30 秒回答
- GET:读取,应该 safe、通常幂等。
- POST:创建/执行非幂等命令,语义较泛。
- PUT:整体替换或对明确 URI 做幂等写。
- PATCH:部分更新,不保证天然幂等,要看 patch 语义。
展开要点 / 原始迁移内容
- DELETE:通常期望幂等,重复删除可返回同一最终状态。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-003幂等是什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:API 幂等30 秒回答 同一个操作执行一次和重复执行多次,对系统最终业务状态的效果相同。网络重试、支付/任务创建、Agent 工具执行都需要考虑。常见实现:idempotency key、唯一约束、状态机版本、去重表。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-004什么时候用 400 / 401 / 403 / 404 / 409 / 422 / 429 / 500? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:Token 认证与刷新流程 · Promise · JWT · Token 认证流程30 秒回答
- 400:请求语法/通用输入错误。
- 401:未认证/认证失效。
- 403:已识别身份但无权限。
- 404:资源不存在,某些安全场景也用于隐藏存在性。
展开要点 / 原始迁移内容
- 409:资源状态冲突、版本冲突。
- 422:语法可解析但语义校验不通过(项目/框架可选)。
- 429:限流。
- 500:未预期服务端错误。
重点是团队错误模型一致,不要机械纠结唯一正确状态码。
继续追问
- 为什么会出现 refresh storm?
- refresh 请求自己 401 怎么办?
- 多 tab / 多窗口如何协调?
[!question]-
P0FS-005为什么客户端不能直接根据 error message 分支? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 文案会变化、可能包含内部信息。服务应提供稳定
code+ 面向用户的 message;内部日志保留 cause/stack/requestId。客户端按 code 决定重新登录、重试或展示业务提示。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
JWT / Auth
[!question]-
P0FS-006JWT 结构? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查认证生命周期、撤销、并发刷新与浏览器安全取舍。 相关知识:JWT · Token 认证流程30 秒回答
header.payload.signature。Header 描述算法/类型;payload 是 claims;signature 用密钥验证 token 未被篡改。JWT 通常是签名不是加密,payload 不应放秘密。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-007Access Token + Refresh Token 为什么分开? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查认证生命周期、撤销、并发刷新与浏览器安全取舍。 相关知识:Token 认证与刷新流程 · Promise · Vue MOC · Vue3 Proxy 响应式30 秒回答 Access token 短寿命,频繁用于 API;refresh token 更长寿命,只用于获取新 access token,风险更高,应更严格存储/轮换。这样 access token 泄露的有效窗口较小,又不需要用户频繁登录。
继续追问
- 为什么会出现 refresh storm?
- refresh 请求自己 401 怎么办?
- 多 tab / 多窗口如何协调?
[!question]-
P0FS-008JWT 如何撤销? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查认证生命周期、撤销、并发刷新与浏览器安全取舍。 相关知识:JWT · Token 认证流程30 秒回答 无状态 JWT 天然不方便立即撤销。可以用短 access TTL + refresh token server-side state/rotation;高风险场景维护 denylist/session version;或者直接使用 server-side session。JWT 不是“无需服务器状态”的绝对优势。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-009Cookie 存 token 和 localStorage 存 token 怎么权衡? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查认证生命周期、撤销、并发刷新与浏览器安全取舍。 相关知识:RAG · RAG Grounding / Faithfulness · 浏览器客户端存储30 秒回答 HttpOnly Cookie 降低 JS 直接读取风险,但浏览器自动携带,需要 CSRF 防护;localStorage 不自动携带所以 CSRF 风险低一些,但 XSS 可以直接读 token。更重要的是减少 XSS、合理 SameSite/Secure/CSP,而不是把一个方案说成绝对安全。
继续追问
- 你会先看哪一层指标定位退化?
- 证据不足时系统如何 no-result?
- 索引更新时如何防版本混读?
[!question]-
P0FS-010Refresh Token Rotation 是什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查认证生命周期、撤销、并发刷新与浏览器安全取舍。 相关知识:Token 认证与刷新流程 · Promise · Vue MOC · Vue3 Proxy 响应式30 秒回答 每次 refresh 成功都发新 refresh token,并使旧 token 失效/进入 family tracking;旧 token 被再次使用可能表示泄露。并发刷新因此需要客户端 coalescing 和服务端正确的 replay 策略。
继续追问
- 为什么会出现 refresh storm?
- refresh 请求自己 401 怎么办?
- 多 tab / 多窗口如何协调?
Node.js / Express
[!question]-
P0FS-011Node.js 为什么适合 I/O 型服务? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查 JavaScript Runtime、I/O、阻塞与服务端边界。 相关知识:Node.js MOC · Node.js Runtime30 秒回答 JS 主线程通过 event loop 协调异步 I/O,大量网络/文件操作在等待期间不占用一个 JS 线程阻塞。它不代表所有工作都“单线程”:底层 OS、libuv thread pool、worker_threads 等会参与。CPU 密集 JS 会阻塞 event loop。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-012Node event loop 与浏览器有什么区别? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:DOC(DOC-WHATWG-EVENT-LOOP/DOC-NODE-EVENT-LOOP)+KB考察意图:检查 JavaScript Runtime、I/O、阻塞与服务端边界。 相关知识:浏览器 JS Event Loop · 浏览器与 Node.js Event Loop30 秒回答 浏览器主要围绕 task、microtask checkpoint 和渲染;Node.js 则由 libuv 组织 poll、check、timers、close callbacks 等 phase,并额外处理
process.nextTick与 V8 microtasks。Node.js 20 / libuv 1.45 起,正常 iteration 中 timers 在 poll 之后运行,因此不能死背旧版 phase 图。展开要点 / 原始迁移内容 都有 task/microtask 思想,但 Node 基于 libuv,有 timers、poll、check 等 phases,
process.nextTick还有特殊队列;浏览器还要协调渲染和 Web APIs。面试不必死背每个版本细节,但要知道 Node 不是简单复制浏览器 loop。继续追问
- 为什么不能只背“同步→微任务→宏任务”?
- 递归 microtask 会怎样影响渲染?
- Node.js 出现 setImmediate / nextTick 时模型怎么变?
[!question]-
P0FS-013哪些操作会阻塞 Node event loop? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:DOC(DOC-WHATWG-EVENT-LOOP/DOC-NODE-EVENT-LOOP)+KB考察意图:检查 JavaScript Runtime、I/O、阻塞与服务端边界。 相关知识:浏览器 JS Event Loop · 浏览器与 Node.js Event Loop30 秒回答
- 大 JSON parse/stringify。
- 同步 fs/crypto/compression。
- 大量 CPU 循环/图像处理。
- pathological regex。
展开要点 / 原始迁移内容
- 无限制 microtask/nextTick。
解决:分块、worker_threads、独立 worker/service、stream、限制输入。
继续追问
- 为什么不能只背“同步→微任务→宏任务”?
- 递归 microtask 会怎样影响渲染?
- Node.js 出现 setImmediate / nextTick 时模型怎么变?
[!question]-
P0FS-014Express middleware 原理? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查 JavaScript Runtime、I/O、阻塞与服务端边界。 相关知识:Node.js MOC · Node.js Runtime30 秒回答 请求按注册顺序经过 middleware chain,每个 middleware 接收 req/res/next,调用
next()才继续后续处理。错误 middleware 有不同签名。适合 auth、logging、validation、error handling 等横切逻辑。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-015CommonJS 与 ESM? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查 JavaScript Runtime、I/O、阻塞与服务端边界。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 CJS 使用
require/module.exports,历史上同步加载;ESM 使用import/export,是语言标准,有静态结构、top-level await 等。Node 通过 package type/扩展名区分,互操作有细节。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-016Stream 为什么重要? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查 JavaScript Runtime、I/O、阻塞与服务端边界。 相关知识:Node.js MOC · Node.js Runtime30 秒回答 大文件/网络数据如果一次读入内存会高峰巨大;stream 按 chunk 处理,并通过 backpressure 协调 producer/consumer 速度。Node stream 有 readable/writable/duplex/transform。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
Go / Gin
[!question]-
P0FS-017goroutine 和 OS thread 的区别? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查并发、取消、接口与服务生命周期的基本模型。 相关知识:LangGraph · Interrupt / Resume 生命周期 · Go MOC · Go Context30 秒回答 goroutine 是 Go runtime 管理的轻量并发执行单元,初始栈小并可增长,runtime scheduler 把大量 goroutine multiplex 到少量 OS threads。它仍然可能产生 data race,需要同步。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-018channel 是什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查并发、取消、接口与服务生命周期的基本模型。 相关知识:Go MOC · Go Context30 秒回答 goroutine 间传递 typed value 的同步机制。Unbuffered channel 的 send/receive 需要配对;buffered channel 可在容量内解耦。Channel 适合 ownership/message passing,但共享状态仍可能更适合 mutex,不是“Go 并发都必须用 channel”。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-019context.Context 用来做什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查并发、取消、接口与服务生命周期的基本模型。 相关知识:React · React useEffect · Go MOC · Go Context30 秒回答 跨 API boundary 传递 deadline/cancellation 和 request-scoped values。请求取消时下游 DB/HTTP/Agent 调用应响应 ctx.Done。不要把大量业务参数塞进 context。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-020Go interface 有什么特点? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查并发、取消、接口与服务生命周期的基本模型。 相关知识:TypeScript 高级类型 · 运行时输出校验 · Go MOC · Go Context30 秒回答 类型只要实现所需 method set 就隐式满足 interface,不需要显式
implements。小接口更利于依赖反转和测试。nil interface与“interface 内部持有 typed nil”是经典坑。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-021defer 的执行时机? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查并发、取消、接口与服务生命周期的基本模型。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 在当前函数返回前 LIFO 执行。参数通常在 defer 语句执行时求值;闭包捕获变量则按闭包规则。常用于 unlock/close/trace end,但循环中大量 defer 要注意资源释放时机。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-022Gin middleware 与 Express middleware 有什么共同点? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查并发、取消、接口与服务生命周期的基本模型。 相关知识:Node.js MOC · Node.js Runtime · Go MOC · Go Context30 秒回答 都是在请求生命周期插入横切逻辑;区别在语言/framework API。Gin context 可
Next/Abort,Go 的 context.Context 另负责 cancellation/deadline,两者不要混为一谈。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
Python / FastAPI
[!question]-
P0FS-023Python async/await 什么时候有价值? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查协程、GIL、边界校验与 AI Runtime 的工程使用。 相关知识:Promise · async / await · Python MOC · Python GIL 与线程30 秒回答 当任务大量等待异步 I/O,coroutine 在 await 时让出 event loop,让同线程处理其他请求。CPU 密集 Python 代码不会因为写
async自动并行,还可能阻塞 event loop。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-024GIL 是什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查协程、GIL、边界校验与 AI Runtime 的工程使用。 相关知识:Python MOC · Python GIL 与线程 · Python 异步编程30 秒回答 CPython 中 GIL 使同一 interpreter 的多个 thread 通常不能同时执行 Python bytecode,因此 CPU-bound threading 不能线性多核扩展;I/O 阻塞和许多 C extension 会释放 GIL。可用 multiprocessing、原生库或分布式 worker 处理 CPU-heavy 工作。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-025FastAPI dependency injection 有什么用途? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查协程、GIL、边界校验与 AI Runtime 的工程使用。 相关知识:RESTful API · Python MOC · Python GIL 与线程 · Python 异步编程30 秒回答 用依赖函数表达 auth、DB session、共享参数等请求依赖,框架解析依赖图并注入;可以嵌套、复用和测试 override。它不是传统重量级 IoC container 的完全等价概念。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-026Pydantic 为什么适合 API/LLM 边界? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查协程、GIL、边界校验与 AI Runtime 的工程使用。 相关知识:RESTful API · Python MOC · Python GIL 与线程 · Python 异步编程30 秒回答 把不可信 runtime data parse 成明确模型,做类型/格式 validation 和 serialization。LLM structured output、tool args、HTTP payload 都是边界数据,非常适合 schema-first 处理。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
PostgreSQL / SQL
[!question]-
P0FS-027数据库索引为什么能加速查询? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 索引维护额外的数据结构,让数据库避免全表扫描,快速定位满足条件的 row/page。代价是额外存储、写放大和维护成本;索引不是越多越好。
继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P0FS-028为什么关系数据库索引常用 B+Tree? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 高扇出降低树高、访问路径稳定;叶子节点按 key 有序,适合等值和范围扫描;内部节点主要存 key/pointer,使一页能容纳更多分支。数据库页/磁盘访问模型比普通二叉树更适合 B+Tree。
继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P0FS-029联合索引怎么用? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 B-tree 按索引列顺序排序。查询能有效利用从左开始的连续前缀;遇到某些 range 条件后,后续列用于缩小扫描的能力受限。真正判断要看 PostgreSQL
EXPLAIN (ANALYZE, BUFFERS),不要机械背“最左前缀”就结束。继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P0FS-030什么是覆盖索引? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 查询需要的列都可从 index tuple 获得,数据库可能避免访问 heap;PostgreSQL 还受 visibility map 等影响,不是“包含所有列就一定 index-only scan”。
继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P0FS-031ACID? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:CI/CD MOC30 秒回答
- Atomicity:事务要么全成要么全回。
- Consistency:事务前后满足业务/DB invariant;它不是数据库自动保证一切业务正确。
- Isolation:并发事务的中间影响被控制。
- Durability:提交后的数据在故障恢复后可保留。
继续追问
- 产物如何追溯到唯一 commit?
- 数据库 migration 为什么限制自动回滚?
- 健康检查通过是否就等于发布成功?
[!question]-
P0FS-032隔离级别解决什么问题? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 控制并发事务可观察到哪些其他事务变化。经典异常包括 dirty read、non-repeatable read、phantom、write skew 等。PostgreSQL 的具体实现基于 MVCC,行为要按 DB 实际语义回答。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-033MVCC 是什么? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 Multi-Version Concurrency Control 让不同事务看到符合自身 snapshot 的 row version,减少读写互相阻塞。PostgreSQL 更新通常产生新 tuple version,旧版本由 vacuum 后续回收;仍有 row lock、serialization conflict 等,并非“MVCC 没有锁”。
继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P0FS-034乐观锁怎么实现? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 给 row 一个
version/revision。更新时UPDATE ... WHERE id=? AND version=?并同时 version+1;affected rows=0 表示有人已修改,需要冲突处理。适合冲突不高、希望避免长锁的场景。继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P0FS-035悲观锁呢? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 先获取数据库锁,如
SELECT ... FOR UPDATE,其他冲突事务等待/失败。适合必须在事务内保护临界状态、冲突概率较高且操作较短的场景;代价是阻塞和死锁风险。继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P0FS-036慢 SQL 怎么查? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答
- 找真实慢查询/trace,不凭猜测。
EXPLAIN ANALYZE看 plan、rows、loops、time。- 看是否 seq scan、错误 join order、sort/hash spill。
- 检查索引与数据分布/statistics。
展开要点 / 原始迁移内容 5. 减少不必要列/rows,避免 N+1。 6. 再考虑 schema/index/query 改写。
继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
[!question]-
P1FS-037什么是 N+1 查询? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 先查 N 条主记录,然后为每条再单独查关联,产生 1+N 次请求。ORM 常见。用 join/eager loading/batch loader 等解决,但也要避免一次 join 爆炸。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-038UUIDv7 为什么比 UUIDv4 更适合某些索引? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查索引、事务、MVCC、锁与查询计划的因果链。 相关知识:数据库索引 · 事务隔离级别 · MVCC30 秒回答 UUIDv7 高位包含时间信息,插入更接近递增,B-tree page locality 通常比完全随机 v4 好;同时保留分布式生成。它不是严格全局自增,也不能替代业务 sequence。
继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
pgvector
[!question]-
P0FS-039向量相似度常见指标? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:RAG · RAG Grounding / Faithfulness30 秒回答
- cosine similarity / cosine distance。
- dot product。
- Euclidean (L2)。 选择要与 embedding 模型训练/规范化方式一致。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-040精确搜索和 ANN 区别? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 精确搜索比较更多/全部向量,结果准确但规模大时慢;Approximate Nearest Neighbor 用索引牺牲少量 recall 换速度/内存。pgvector 可提供不同 ANN index 类型,具体参数需要按版本/规模 benchmark。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-041向量索引更新频繁怎么办? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:RAG · RAG Grounding / Faithfulness · 数据库索引 · 事务隔离级别30 秒回答 文档和 chunk 应有版本/id;更新时先生成新版本 embedding,再原子切换/标记 active,异步删除旧向量;大批更新要考虑 index build/maintenance 和查询一致性。业务文档版本是真值,向量索引是可重建派生物。
继续追问
- 这个结论如何用 EXPLAIN / transaction experiment 验证?
- 并发异常具体是什么?
- 什么时候索引或 MVCC 反而带来成本?
Redis
[!question]-
P0FS-042Redis 常用数据结构? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查缓存、原子性、一致性和故障场景,而不是只列数据结构。 相关知识:Redis30 秒回答
- String:cache/counter/token。
- Hash:对象字段。
- List:队列/序列(现代队列也可用 Stream)。
- Set:唯一集合。
展开要点 / 原始迁移内容
- Sorted Set:按 score 排名/时间。
- Stream:append-only 消息流和 consumer group。
还包括 bitmap、HyperLogLog、geospatial 等特殊结构。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-043缓存穿透 / 击穿 / 雪崩? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查缓存、原子性、一致性和故障场景,而不是只列数据结构。 相关知识:浏览器缓存 · Redis30 秒回答
- 穿透:查询不存在 key,持续打 DB。方案:negative cache、Bloom filter、输入保护。
- 击穿:热点 key 过期,大量并发同时回源。方案:singleflight/mutex、逻辑过期、提前刷新。
- 雪崩:大量 key 同时过期或 Redis 故障。方案:TTL jitter、多级/高可用、限流降级。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-044Cache Aside 怎么做? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查缓存、原子性、一致性和故障场景,而不是只列数据结构。 相关知识:Redis30 秒回答 读:先 cache,miss 查 DB 后回填。写:通常先写 DB,再删除 cache。仍存在并发窗口,需要根据一致性要求使用版本、延迟双删/消息、CDC 等策略。不要说“先删缓存再写 DB 就绝对一致”。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-045Redis 分布式锁需要注意什么? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查缓存、原子性、一致性和故障场景,而不是只列数据结构。 相关知识:Redis30 秒回答
SET key value NX PX ttl获取,释放时必须确认 value 是自己的(Lua 原子 compare-delete);锁超时、业务执行超过 TTL、网络分区和 fencing token 都是问题。高一致性场景要重新评估是否应该依赖 Redis lock。继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-046Redis 持久化? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查缓存、原子性、一致性和故障场景,而不是只列数据结构。 相关知识:Redis30 秒回答 RDB 是周期快照,恢复快但可能丢最近数据;AOF 记录写命令,持久性更细但日志更大;Redis 可组合使用。具体版本还有 multi-part AOF 等演进,面试回答保持概念层即可。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
网络:TCP / HTTP
[!question]-
P0FS-047TCP 如何保证可靠? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:TCP · HTTP · HTTPS30 秒回答 sequence number、ACK、checksum、retransmission、sliding window、flow control、congestion control、有序重组等共同实现。TCP 提供字节流,不保留应用消息边界,所以应用协议必须自己 framing。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-048为什么三次握手? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 双方要确认彼此的发送/接收能力和初始 sequence number。第三次 ACK 让服务端确认客户端已经收到服务端的 SYN/序列信息,避免只有两次时对旧连接请求等状态判断不完整。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-049为什么四次挥手? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 TCP 是全双工,两边发送方向独立关闭。一方 FIN 只表示“我不再发送”,对方可能仍有数据,所以 ACK 与自己的 FIN 往往分开;有时也可合并在同一个 segment。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-050TIME_WAIT 为什么存在? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:TCP · HTTP · HTTPS30 秒回答 主动关闭方等待足够时间,确保最后 ACK 丢失时能重发,也避免旧连接延迟 segment 污染新连接的相同四元组。大量短连接会产生 TIME_WAIT,因此 HTTP keep-alive 等很重要。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-051HTTP/1.1、HTTP/2、HTTP/3? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:TCP · HTTP · HTTPS30 秒回答
- HTTP/1.1:一个连接上的请求响应顺序存在 head-of-line 限制;浏览器常并行开多个 TCP 连接。
- HTTP/2:在一个 TCP 上把消息拆 frame,多 stream multiplex;应用层 stream 可交错,但底层 TCP packet 丢失仍会阻塞该连接所有 stream。
- HTTP/3:基于 QUIC/UDP,多个 QUIC stream 的丢包恢复相对独立,减少 TCP 层 HOL,并集成 TLS 1.3 handshake。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-052HTTP keep-alive 有什么价值? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 复用连接,减少 TCP/TLS handshake 和 slow start 成本。HTTP/1.1 默认持久连接;HTTP/2/3 更强调在少量连接上 multiplex。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-053HTTPS 做了什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查接口语义、错误模型、幂等与网络边界。 相关知识:TCP · HTTP · HTTPS30 秒回答 HTTP over TLS。TLS 提供服务器身份验证(证书)、加密和完整性;现代 TLS 使用非对称/证书体系协商共享密钥,实际大量数据用对称加密。HTTPS 不代表服务端本身无漏洞。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
并发 / 一致性 / 重试
[!question]-
P0FS-054Race condition 是什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 结果取决于并发操作不可控的执行顺序。例如两个请求同时读余额 100,各减 80,再写 20,造成 lost update。需要事务、锁、原子操作、版本检查等建立 happens-before/serialization。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-055并发更新一个字段怎么处理? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 根据语义:
展开要点 / 原始迁移内容
- Counter:数据库原子
SET count=count+1。- 状态机:conditional update
WHERE status=...。- 用户编辑:optimistic version。
- 强临界区:row lock。
- 跨服务命令:idempotency + durable state。
不是固定回答“上 Redis 锁”。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-056指数退避 + jitter 为什么有用? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 失败后越来越长等待避免持续压垮下游;加入随机 jitter 防止大量客户端在同一时间点同步重试形成 thundering herd。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-057Circuit Breaker? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:CI/CD MOC30 秒回答 下游持续失败达到阈值后暂时 fail fast/open,过一段时间 half-open 少量探测,恢复后 close。目标是阻止故障级联,不是替代 retry。
继续追问
- 产物如何追溯到唯一 commit?
- 数据库 migration 为什么限制自动回滚?
- 健康检查通过是否就等于发布成功?
Testing
[!question]-
P0FS-058Unit / Integration / E2E 区别? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否知道不同测试层分别证明什么,以及 mock 的边界。 相关知识:Testing MOC30 秒回答
- Unit:一个函数/模块/状态机,快、定位准。
- Integration:多个真实组件边界,如 API+DB、parser+reducer。
- E2E:从用户入口走完整系统,最接近真实但慢且脆弱。 应形成测试金字塔/分层,不是一切 E2E。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-059Mock 什么时候会害人? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否知道不同测试层分别证明什么,以及 mock 的边界。 相关知识:Testing MOC30 秒回答 mock 太多会让测试只验证“自己规定的假世界”,尤其 HTTP contract、DB behavior、framework semantics。关键边界应该有 integration/contract test,用真实 schema/adapter 验证。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-060Contract Test 是什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否知道不同测试层分别证明什么,以及 mock 的边界。 相关知识:Testing MOC30 秒回答 验证服务/adapter 对共享 contract 的可观察行为。例如 Web HTTP 与 Desktop IPC 都必须接受相同 DTO、返回相同 domain Result/error code。它关注边界协议,不必跑完整 UI。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-061为什么 AI 应用尤其需要回归 Eval,而不仅单测? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否知道不同测试层分别证明什么,以及 mock 的边界。 相关知识:Agent 测试与评估 · Agent Evals MOC30 秒回答 普通单测可验证 deterministic parser/state/tool;模型输出是概率性的,必须用 case/rubric 比较行为质量。两类测试互补:先保证软件逻辑,再评模型策略。
继续追问
- 数据集从哪里来,如何避免只测 happy path?
- 关键指标如何设置 hard gate?
- 离线结果与线上指标不一致怎么办?
Docker / CI/CD
[!question]-
P0FS-062Docker image 与 container? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查产物不可变性、构建缓存、健康检查与发布证据。 相关知识:Docker30 秒回答 Image 是不可变的文件系统/metadata 模板;container 是 image 的运行实例,加可写层、namespace/cgroup 等运行隔离。
继续追问
- 产物如何追溯到唯一 commit?
- 数据库 migration 为什么限制自动回滚?
- 健康检查通过是否就等于发布成功?
[!question]-
P0FS-063Docker 为什么不是虚拟机? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查产物不可变性、构建缓存、健康检查与发布证据。 相关知识:Docker30 秒回答 容器共享宿主 kernel,用 namespace/cgroup 等隔离进程和资源;VM 有完整 guest kernel,隔离边界更重。容器启动快、密度高,但安全模型也不同。
继续追问
- 产物如何追溯到唯一 commit?
- 数据库 migration 为什么限制自动回滚?
- 健康检查通过是否就等于发布成功?
[!question]-
P0FS-064Dockerfile 层缓存如何优化? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查产物不可变性、构建缓存、健康检查与发布证据。 相关知识:浏览器缓存 · Docker30 秒回答 把变化少的依赖声明先 COPY/install,再 COPY 高频变化源码;使用
.dockerignore缩小 context;multi-stage 减小最终镜像;固定依赖和 base digest 增强可重复性。继续追问
- 产物如何追溯到唯一 commit?
- 数据库 migration 为什么限制自动回滚?
- 健康检查通过是否就等于发布成功?
[!question]-
P0FS-065CI 最低应该做什么? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查产物不可变性、构建缓存、健康检查与发布证据。 相关知识:CI/CD MOC30 秒回答 针对当前项目:
展开要点 / 原始迁移内容
- lint / format check。
- typecheck。
- unit/integration test。
- build。
- 必要 contract/e2e。
- dependency/security checks(按项目)。
- 产物与 commit SHA 绑定。
继续追问
- 产物如何追溯到唯一 commit?
- 数据库 migration 为什么限制自动回滚?
- 健康检查通过是否就等于发布成功?
[!question]-
P0FS-066CD 为什么要 health check? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查产物不可变性、构建缓存、健康检查与发布证据。 相关知识:CI/CD MOC30 秒回答 容器“启动成功”不代表服务能处理真实请求。需要 readiness/health check 验证关键依赖和协议;发布后还要观察 error/latency。健康检查本身也不能做得过重导致依赖雪崩。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-067Blue-Green / Canary? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查产物不可变性、构建缓存、健康检查与发布证据。 相关知识:Agent 测试与评估 · Agent Evals MOC · CI/CD MOC30 秒回答
- Blue-Green:两套完整环境切流,回滚快但资源成本高。
- Canary:新版本先小比例流量,观察后扩量,适合渐进风险控制。 数据库 migration 仍必须考虑版本兼容。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
Monorepo / Nx / pnpm
[!question]-
P0FS-068Monorepo 优缺点? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查共享契约、依赖边界、任务图和 CI 收益是否真实。 相关知识:Nx + pnpm Monorepo · Monorepo 架构 · STAR 行为题结构30 秒回答 优点:跨包原子改动、统一 tooling、共享 contract、dependency graph。
展开要点 / 原始迁移内容 缺点:repo 变大、CI/权限/依赖边界复杂、shared package 容易失控。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-069pnpm 与 npm/yarn 传统 node_modules 最大差异之一? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查共享契约、依赖边界、任务图和 CI 收益是否真实。 相关知识:Nx + pnpm Monorepo · Monorepo 架构30 秒回答 pnpm 使用 content-addressable store,并通过 link 复用包,减少重复磁盘占用;严格依赖布局也更容易暴露“包没有声明却从祖先 node_modules 偷用”的问题。具体 node_modules 结构仍要按版本说明,不必背内部路径。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P1FS-070Nx 解决什么? 题源:CANON(后端基础题库) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查共享契约、依赖边界、任务图和 CI 收益是否真实。 相关知识:Nx + pnpm Monorepo · Monorepo 架构30 秒回答 在 monorepo 上建立 project/task graph、cache、affected execution、统一 target。它不是包管理器;pnpm 管 dependency/workspace,Nx 管项目任务和依赖执行关系。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
AI Native 工程题
[!question]-
P0FS-071AI Coding 生成跨服务改动怎么审? 题源:RESUME-H+AI-D(当前项目与场景追问) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:AI 辅助开发工作流 · AI Code Review30 秒回答
- 先确认需求和 contract。
- 查看改动是否越过 ownership boundary。
- DTO/schema 是否两端同步。
- error/cancel/retry 是否完整。
展开要点 / 原始迁移内容 5. migration 是否安全。 6. 执行 unit/contract/integration/E2E。 7. 用 CI 做独立 gate。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-072为什么 AI Coding 越强,CI 反而越重要? 题源:NC-H(近期 AI 全栈 / Agent 面经交叉) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:AI 辅助开发工作流 · AI Code Review · CI/CD MOC30 秒回答 生成速度提高后,代码变化量和并行度也提高,人眼逐行审查成为瓶颈。必须把类型、测试、架构约束、安全和发布一致性尽量变成自动 gate,让模型能快速收到真实反馈,同时保留人对高风险决策负责。
继续追问
- 产物如何追溯到唯一 commit?
- 数据库 migration 为什么限制自动回滚?
- 健康检查通过是否就等于发布成功?
全栈场景题
[!question]-
P0FS-073设计一个“创建任务”接口,如何防重复提交? 题源:RESUME-H+AI-D(当前项目与场景追问) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:Node.js 后端面试 MOC · 计算机基础面试 MOC30 秒回答 客户端生成 idempotency key;服务端在用户/操作范围内建立唯一约束,首次执行持久化结果;同 key 重试返回原结果。业务对象本身也可使用 client-generated UUID。只在前端禁用按钮不够。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-074一个 API 突然变慢如何排查? 题源:RESUME-H+AI-D(当前项目与场景追问) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:RESTful API30 秒回答
- 确认范围:单 endpoint/单用户/全服务。
- 看 metrics:latency percentile、error、CPU/memory/DB pool。
- trace 看时间花在 app/DB/downstream 哪。
- DB slow query/lock/explain。
展开要点 / 原始迁移内容 5. 下游 timeout/rate limit。 6. 最近 deploy/config change。 7. 建立可复现和回滚/降级。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
[!question]-
P0FS-075数据库和缓存不一致怎么办? 题源:RESUME-H+AI-D(当前项目与场景追问) 答案依据:KB+ 必要的官方文档 / 可复现实验 考察意图:检查是否能先给结论,再解释机制、边界、失败路径和验证方式。 相关知识:浏览器缓存30 秒回答 先根据业务容忍度定义一致性。常见 Cache Aside 写 DB 后删 cache;并发敏感可用 version、event/CDC 失效、短 TTL、singleflight。不能追求“任何时刻缓存和 DB 强一致”却又不接受分布式事务成本。
继续追问
- 为什么这样判断?
- 失败或边界场景怎么办?
- 如何通过测试、指标或实验验证?
从全栈观察层补充的高价值题
[!question]-
P0FS-S01RBAC 应该怎么设计? 题源:NC-1(近期 AI 全栈面经)+CANON答案依据:KB+ domain policy tests 考察意图:检查认证、角色、权限、资源范围和业务条件是否分层。 相关知识:API 认证与安全30 秒回答 认证先确认“是谁”,授权再判断“能对哪个资源做什么”。RBAC 用 user-role-permission 管稳定职责,但真实系统还要叠加 tenant/resource ownership、对象状态和环境条件;服务端在每个敏感 use case 执行授权,前端隐藏按钮只是体验,不是安全边界。
展开要点 权限变更要可审计,默认拒绝;复杂到大量条件时可以演进到 policy/ABAC,但不要一开始把所有业务规则硬塞进角色名。
继续追问
- 角色继承会带来什么问题?
- 如何防止跨租户 IDOR?
- 权限缓存失效怎样处理? [!question]-
P0FS-S02数据库 Migration 为什么不能和应用版本一起无脑回滚? 题源:NC-H(AI 全栈 / 发布追问)+RESUME-H答案依据:KB+ deployment evidence 考察意图:检查 schema 与新旧应用兼容窗口。 相关知识:CI/CD MOC · 数据库 Schema Migration 与发布兼容性30 秒回答 应用二进制可以切回旧版本,但 migration 可能已经重写、删除或转换数据,反向操作未必无损。安全发布通常采用 expand-and-contract:先加向后兼容字段/表,双读写或回填,再切流量,确认旧版本不再使用后才删除旧 schema。回滚优先切回兼容应用,而不是立刻逆向 DDL。
展开要点 每个 migration 要评估锁表、时长、回填、备份和 restore;破坏性变更必须分阶段。
继续追问
- 新增 NOT NULL 字段怎么安全上线?
- 旧代码看到新 enum 值会怎样?
- 回填任务失败后如何恢复? [!question]-
P0FS-S03Logs、Metrics、Traces 分别解决什么问题? 题源:NC-H(近期 AI 全栈 / Agent 面经) 答案依据:KB+ observability evidence 考察意图:检查是否能从聚合异常定位到单条跨服务调用。 相关知识:可观测性工程 MOC · 多服务分布式追踪30 秒回答 Metrics 看聚合趋势和告警,例如 error rate、p95 latency、queue depth;logs 记录离散事件和上下文,适合查具体错误;traces 把一次请求跨服务的 spans、依赖和耗时串起来。三者通过 service、revision、request/trace id 和业务 run id 关联,才能从“整体变慢”下钻到具体调用。
展开要点 不要把所有 payload 全打日志;要做采样、结构化字段、PII/secret 脱敏和 retention。
继续追问
- 什么时候先看 metrics,什么时候先看 trace?
- 高基数 label 为什么危险?
- Streaming Run 怎样定义 span? [!question]-
P0FS-S04requestId、traceId、runId 应该怎么分工? 题源:RESUME-H+AI-D答案依据:KB+ project evidence 考察意图:检查一次 HTTP 请求与一个长生命周期业务执行是否被区分。 相关知识:多服务分布式追踪 · Agent Runtime30 秒回答 requestId 标识一次入口请求,traceId 关联它触发的跨服务调用链,runId 标识可能跨多次请求、断线和 resume 的长期业务/Agent 执行。一次 run 可以有多个 request 和 trace;日志同时带这些 id,客户端只暴露可安全用于报障的标识。
展开要点 重连查询、审批和取消都继续使用同一 runId,但每次 HTTP 操作有新的 request/trace。
继续追问
- 一个 trace 能跨队列异步任务吗?
- runId 是否可以直接暴露给其他租户?
- 如何把 provider request id 接入 trace? [!question]-
P0FS-S05什么是 exact-SHA Release,为什么比latest可靠? 题源:RESUME-H+AI-D答案依据:PROJECT-E2/E3+KB考察意图:检查源码、CI、镜像、桌面产物和 Release 是否可追溯到同一 revision。 相关知识:CI/CD MOC · MemoFlow 多端 AI 应用架构30 秒回答 以 commit SHA 作为不可变身份:PR/CI 通过的 SHA、tag、镜像 digest、桌面安装包、manifest 和 release record 都能互相核对。
latest或环境标签只是可变指针,不能证明服务器当前运行哪次构建,也容易在多平台并行构建时形成半发布。展开要点 正式发布前做 postflight:校验所有资产、checksum、manifest、镜像 digest 和部署 revision;失败时保持 draft,不公开不完整版本。
继续追问
- tag 后源码又变化会影响产物吗?
- 多平台构建怎样汇聚到同一个 Release?
- 如何证明生产正在运行该 SHA? [!question]-
P1FS-S06API 出现“接口卡住”时怎样逐层定位? 题源:RESUME-H+CANON答案依据:EXPERIMENT+ observability evidence 考察意图:检查是否能从现象到首个错误边界,而不是直接猜数据库。 相关知识:服务请求卡顿的分层排查 · 多服务分布式追踪30 秒回答 先确认范围和时间:单用户/单区域/单 endpoint/全局。再沿 DNS → connect/TLS → proxy/HTTP → 应用 event loop/thread/queue → connection pool → DB lock/slow query → downstream 看每层耗时、timeout 和错误;结合最近 deploy/config 变化,用 trace 或分段计时定位第一段异常等待。
展开要点 “客户端超时”不代表服务端停止;必要时查询 request/run 最终状态,避免用户重试造成重复副作用。
继续追问
- 没有 tracing 时如何临时分段定位?
- 连接池耗尽有什么指标?
- DNS 慢和 TCP connect 慢怎样区分? [!question]-
P1FS-S07稳定错误码应该如何设计? 题源:NC-H(近期全栈面经) 答案依据:KB+ contract tests 考察意图:检查客户端分支是否依赖业务语义,而不是内部异常文案。 相关知识:RESTful API · 输出校验30 秒回答 HTTP status 表达协议级类别,稳定
code表达应用语义,例如AUTH_EXPIRED、VERSION_CONFLICT、RUN_CANCELLED;message 面向用户且可本地化,requestId 用于报障,内部 cause/stack/provider detail 只进日志。Code 名称和字段形成版本化 contract,由 contract tests 保护。展开要点 不要为每个内部异常创建公开 code,也不要让客户端匹配 error message。未知异常统一映射成安全的 generic code。
继续追问
- 409 与 422 怎么选?
- 错误码废弃如何兼容旧客户端?
- 批量操作部分失败怎样表达?
覆盖说明
本页由 22-fullstack-backend-data-engineering.md 中的 75 道编号题全量迁移,并从近期观察层去重补充 7 道独立高价值题,共 82 道;每题包含题源、答案依据、考察意图、知识链接和追问。近期题目趋势另由 题源注册表 管理,避免再次维护一套重复答案。