拿到 PostgreSQL 死锁日志后,如何从中还原出是哪些语句按什么顺序持锁造成的?
围绕“拿到 PostgreSQL 死锁日志后,如何从中还原出是哪些语句按什么顺序持锁造成的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求会读日志中的进程、等待关系与涉及语句,给出固定加锁顺序的预防结论。
程序员面试题库第 82 页,收录第 4051–4100 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
围绕“拿到 PostgreSQL 死锁日志后,如何从中还原出是哪些语句按什么顺序持锁造成的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求会读日志中的进程、等待关系与涉及语句,给出固定加锁顺序的预防结论。
围绕“事务因死锁被选为牺牲者中止后,应用层的重试逻辑应该怎么写才安全”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确错误码 40P01 的识别、整事务重试与幂等性要求。
围绕“PostgreSQL 中把隔离级别设为 Read Uncommitted 会发生什么,脏读真的存在吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要指出 PostgreSQL 将其映射为 Read Committed 的实现决策。
围绕“为什么 PostgreSQL 提供 FOR NO KEY UPDATE 这种行锁,它比 FOR UPDATE 弱在哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要指出不修改键列的更新可用更弱锁从而减少与外键检查的冲突。
围绕“SELECT FOR UPDATE NOWAIT 与 SKIP LOCKED 在拿不到锁时行为有何不同,各自适合什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖分别用立即报错抢锁与跳过已锁行做任务队列的例子回答。
围绕“SELECT FOR UPDATE 与 FOR SHARE 锁住的行分别允许其他事务做什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较两种行锁强度及与 NO KEY UPDATE、KEY SHARE 的冲突关系。
围绕“为什么更新父表主键或删除父表行时可能被子表外键检查阻塞,涉及哪些锁”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明外键检查在父行上取 KEY SHARE 锁与更新锁的冲突关系。
围绕“PostgreSQL 中每条单语句自动成事务与显式 BEGIN 多语句事务在错误处理上有何差别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较单语句失败即整体回滚与显式事务出错后只能 ROLLBACK 的状态差异。
围绕“面对一个转账类业务,如何在 Read Committed、Repeatable Read、Serializable ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖按一致性需求、重试成本与吞吐给出决策依据。
围绕“PostgreSQL 的 ACCESS SHARE、ROW EXCLUSIVE、ACCESS EXCLUSIVE 这”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要能判断 DDL 与 DML 常见组合是否互斥,不深入每种子模式的罕用场景。
围绕“设计多行更新事务时,为什么建议按固定顺序(如主键升序)加锁,如何落地”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕把统一加锁顺序如何破坏循环等待讲清楚,并给出排序后批量更新的做法。
围绕“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 保存点(SAVEPOINT)允许事务内部分回滚,它与重试整条语句的方案有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用单条语句失败后保留已做工作的场景回答,并指出子事务的性能成本。
围绕“高频冲突场景下用 SAVEPOINT 包住语句逐条处理,为什么会带来子事务性能问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释子事务 ID 分配与可见性判断变复杂带来的开销及批量提交的替代。
围绕“PostgreSQL Serializable 隔离级别下事务可能因为什么失败,应用必须做什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确写偏序等序列化异常与错误码 40001 的重试要求。
围绕“PostgreSQL 中 SET TRANSACTION 与 SET SESSION CHARACTERISTICS”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分仅当前事务与会话默认两个作用域及在事务开始后不可更改的限制。
围绕“用 SELECT FOR UPDATE SKIP LOCKED 实现数据库任务队列时如何保证同一任务不被两个 wor”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答领取-处理-提交的事务边界与锁配合。
围绕“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 下直接报错的差异。
围绕“在 Svelte 组件中,如何用 `bind:attribute` 将元素的自定义属性(如 `data-id`)与响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `bind:attribute` 仅适用于自定义属性,且不会影响原生属性;不能用于 `id`、`class` 等标准属性。
围绕“在 Svelte 中,如何用 `bind:checked` 正确绑定复选框的选中状态,并处理默认值和事件冲突”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `bind:checked` 会自动处理布尔值转换,且不依赖 `@change` 事件;不能用 `@input` 替代。
围绕“如何使用 `bind:this` 将 DOM 元素引用绑定到响应式变量,以便在后续操作中访问其方法”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `bind:this` 会将元素实例赋值给变量,且可用于调用 `focus()`、`scrollIntoView()` 等方法。
围绕“如何使用 `bind:value` 将表单输入框的值与组件中的响应式变量双向绑定,且在用户输入时实时更新”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `bind:value` 创建了双向数据流,且值变更会同步到变量,同时变量变更也会刷新视图;不能仅描述单向绑定。
围绕“如何使用 `bind:select` 在 Svelte 组件中实现下拉选择框的值与响应式变量的双向绑定”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `bind:select` 会自动同步 `<select>` 元素的 `value` 属性与变量,且支持多选模式;不能仅用 `。
围绕“如何在 Svelte 组合两个组件时,通过 `export` 和 `bind` 实现数据与事件的完整通信”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `export` 提供数据出口,`bind` 提供控制入口,二者结合形成完整通信链路;不能仅依赖事件传递。
围绕“在 Svelte 组件中,如何为 `export` 属性设置默认值,使其在未传入时自动生效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明默认值应在 `export` 声明时直接赋值,且不依赖 `if` 判断;不能在组件内用 `||` 逻辑补救。
围绕“如何在 Svelte 组件中声明并使用 `export` 变量作为组件的公共属性接口”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `export` 用于声明可被父组件设置的属性,且其值可被响应式绑定;不能混淆为 `const`。
围绕“如何在 Svelte 中通过 `bind:prop` 将父组件的变量与子组件的 `export` 属性双向绑定”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `bind:prop` 会建立双向数据流,且子组件需显式声明 `export` 属性;不能仅用 `on:change` 实现。
围绕“如何在 Svelte 组件中通过类型注解明确 `export` 属性的类型,以增强开发时的类型检查”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明类型注解需配合 TypeScript,且仅在支持的工具链中生效;不能脱离编译环境讨论。