设计多行更新事务时,为什么建议按固定顺序(如主键升序)加锁,如何落地?
围绕“设计多行更新事务时,为什么建议按固定顺序(如主键升序)加锁,如何落地”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕把统一加锁顺序如何破坏循环等待讲清楚,并给出排序后批量更新的做法。
并发编程专题面试题第 9 页,显示第 401–448 题,共找到 448 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“设计多行更新事务时,为什么建议按固定顺序(如主键升序)加锁,如何落地”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕把统一加锁顺序如何破坏循环等待讲清楚,并给出排序后批量更新的做法。
围绕“PostgreSQL 的 lock_timeout 与 statement_timeout 分别在哪一阶段中断语句,”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分等锁阶段与执行阶段的超时及设置顺序的建议。
围绕“长事务对 PostgreSQL 有哪些具体危害,为什么会让 VACUUM 无法回收死元组”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答快照持有所致的最小可见事务边界阻塞清理。
围绕“并发下的丢失更新是怎么产生的,数据库有哪些手段可以阻止它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较读-改-写覆写、行锁与乐观锁三种思路的取舍。
围绕“MVCC 带来的表膨胀是怎么形成的,PostgreSQL 靠什么机制回收旧版本”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答死元组来源与 VACUUM/autovacuum 的作用。
围绕“PostgreSQL 判断一个行版本对某事务是否可见时依据哪些信息”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说出 xmin/xmax、事务提交状态与快照的关系。
围绕“不可重复读和幻读的区别是什么,分别需要哪个隔离级别才能避免”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用同一行被改与同谓词新增行两个例子区分,不深入到锁实现机制。
围绕“乐观锁与悲观锁在数据库并发控制中的区别是什么,分别适合什么冲突频率的场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖用版本号校验对比 SELECT FOR UPDATE,按冲突概率与重试成本给选型判断。
围绕“线上出现大量慢查询怀疑锁等待时,如何用 pg_locks 与 pg_stat_activity 定位是谁在阻塞谁”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出按 granted=false 找等待者再关联持锁会话的思路。
围绕“Read Committed 下单条 SQL 语句执行期间,其他事务提交的修改对该语句可见吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答语句级快照在语句开始时确定、执行中不受新提交影响的保证。
围绕“Read Committed 下 UPDATE 等待另一事务释放行锁后,为什么用最新版本重新评估 WHERE 条件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释更新基于已提交最新数据重新判断条件的语义。
围绕“PostgreSQL 中 Read Committed 与 Repeatable Read 在同一事务多次读同一行时”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确每条语句取新快照与事务级快照的差别。
围绕“PostgreSQL 的只读可延迟事务(READ ONLY DEFERRABLE)在 Serializable 下能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答等待到安全快照从而避免只读事务序列化失败的条件与限制。
围绕“设计数据库事务重试策略时,重试次数上限与退避间隔应该如何取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较立即重试加剧争用与无限重试拖垮应用的两种极端,给出上限加抖动的原则。
围绕“为什么事务重试必须要求业务操作幂等,网络中断导致提交结果未知时会发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答提交结果不确定时盲目重试可能重复扣款的问题与唯一约束/去重手段。
围绕“PostgreSQL 中行级锁和表级锁分别在什么操作下产生,如何互相影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明意向表锁与行锁的层级关系及冲突矩阵的基本思路,不列出全部锁模式细节。
围绕“PostgreSQL Serializable 隔离级别下事务可能因为什么失败,应用必须做什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确写偏序等序列化异常与错误码 40001 的重试要求。
围绕“PostgreSQL 中 SET TRANSACTION 与 SET SESSION CHARACTERISTICS”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分仅当前事务与会话默认两个作用域及在事务开始后不可更改的限制。
围绕“PostgreSQL 导出事务快照(pg_export_snapshot)解决的是什么一致性问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明多个并行连接共享同一快照做一致性读取的场景。
围绕“PostgreSQL 的 snapshot_too_old 参数为什么会让长事务报错,解决了什么运维问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答限制快照保留时间以避免无限膨胀的取舍。
围绕“PostgreSQL 的事务 ID 回卷问题是怎么产生的,为什么要求定期 VACUUM FREEZE”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 32 位事务 ID 比较机制失效的风险与冻结旧元组的防护。
围绕“PostgreSQL 预备事务(PREPARE TRANSACTION)解决什么问题,为什么残留预备事务很危险”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答跨系统两阶段提交的用途及持锁阻塞 vacuum 的运维风险。
围绕“INSERT ON CONFLICT DO UPDATE 相比先查再插为什么能避免并发下的重复键错误”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答单条语句的原子性消除查插间隙的原理。
围绕“用版本号列实现乐观并发控制时,UPDATE 语句应如何写,更新行数为 0 意味着什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答带版本条件的原子更新与零行影响的冲突判定及后续处理。
围绕“什么是写偏序(write skew),为什么 Repeatable Read 下仍可能发生”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用两个事务读同一快照再分别更新不同行破坏不变量的例子回答。
围绕“PostgreSQL 中两个事务并发更新同一行时,后到的事务会经历什么过程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 Read Committed 下等待并重读最新版本与 Repeatable Read 下直接报错的差异。
围绕“线程池隔离和信号量隔离两种熔断隔离方式的开销和适用场景是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较上下文切换开销、超时脱离能力、适用调用频率,并给出选型判断。
围绕“熔断和重试为什么必须配合超时一起设计,盲目重试会造成什么后果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明无超时重试导致的重试风暴和线程池耗尽,以及熔断对重试的抑制作用。
围绕“预约系统如何防止同一资源在同一时段被并发订出,数据库约束应做到哪一层”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较区间排他约束、事务序列化与预占状态机。
围绕“预约满员后的候补队列如何按顺序通知,且用户 5 分钟未确认就顺延”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明公平游标、确认窗口与并发释放竞争。
围绕“评论数、点赞数在高并发下如何避免计数漂移,列表页又要多快看到变化”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分精确计数、近似计数与异步校准任务的使用场景。
围绕“评论系统展示楼中楼时,如何设计分页既能按时间看新回复又能展开子线程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较邻接表、路径枚举与物化根评论计数在分页和删楼上的差异。
围绕“Playwright 的并行 worker 与分片(sharding)机制如何影响测试设计与运行速度”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确文件级并行、测试间无共享状态的前提及 CI 多分片合并报告的做法。
围绕“Vitest 并行执行测试文件时靠什么隔离模块状态,什么全局副作用仍会泄漏”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 worker 进程/线程隔离边界与文件系统、端口等共享资源风险。
围绕“Vite 中 new URL('./img.png', import.meta.url) 这种资源引用方式解决什么问”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出其对动态路径资源做静态分析与打包的机制及适用场景(如 worker、模板字符串拼接的限制)。
围绕“小程序逻辑层执行耗时任务会卡住什么,为什么渲染层动画仍可运行但事件响应变慢”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须基于双线程分工说明事件派发受阻而 WXML 已渲染页面不卡的成因。
围绕“小程序为什么采用逻辑层与渲染层分离的双线程模型,这一架构带来哪些限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明双线程的通信方式与不能直接操作 DOM 的根本原因。
围绕“小程序逻辑层和渲染层之间通过什么机制通信,为什么说频繁跨线程通信是性能瓶颈”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须讲清数据经 Native 中转序列化的成本。
围绕“小程序页面滚动卡顿、长列表渲染慢时,从双线程与 setData 角度如何定位和优化”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出减少节点数、分页加载与 IntersectionObserver 等具体手段。
围绕“小程序 Worker 适用于什么场景,它与逻辑层线程之间如何通信、有哪些限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Worker 无法操作页面与 wx API 受限的边界及典型计算场景。
围绕“WebAssembly 的 memory.atomic.wait 与 notify 解决什么问题,能在主线程用吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明原子等待/唤醒的同步语义及主线程禁止阻塞等待的限制。
围绕“WebAssembly.compile 与 WebAssembly.instantiate 的职责区别是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分编译产物 Module 可多次实例化、可跨 worker 传递。
围绕“如何检测浏览器是否支持某个 WebAssembly 特性(如 SIMD、线程)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出用最小特征字节码 validate 检测的通用方法与回退构建策略,不列全部特性常量。
围绕“编译好的 WebAssembly.Module 怎样传给 Web Worker 使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Module 是结构化克隆可传递对象、worker 内直接实例化。
围绕“WebAssembly 多线程为什么依赖 SharedArrayBuffer”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释共享线性内存作为线程通信基础,及与 JS 侧共享的关系。
围绕“WebAssembly 线程池大小在浏览器里应该如何决定”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出按硬件并发数与任务特征设池大小、避免超额创建 worker 的判断。
围绕“让 Emscripten 编译的 WebAssembly 支持 pthread 需要哪些编译与部署条件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖列出 -pthread 编译、SharedArrayBuffer 与跨域隔离部署三要素。
围绕“把 WebAssembly 计算放进 Web Worker 的架构要注意哪些边界问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讨论 postMessage 序列化成本、Transferable 与共享内存的选择。