面试真题讲解
逐题讲清解题思路、关键实现与常见追问。
如何设计分布式唯一 ID 生成器?
从容量约束推导 Snowflake 位布局,处理时钟回拨、worker 身份、序列溢出和多地域故障,并比较 UUIDv7 与号段方案。
浏览器输入 URL 后发生了什么?
从 URL 解析、DNS、QUIC/TCP、TLS、HTTP 到导航提交与渲染,讲清真实请求路径、可跳过阶段和性能定位方法。
产品经理面试:DAU 突降 15%,你会如何排查?
用指标口径核验、绝对贡献分解、嵌套漏斗和时间线证据定位 DAU 异常,并根据用户影响决定修数据、暂停发布还是回滚。
如何设计动态 Top-K 高频元素数据结构?
从读写比例推导动态 Top-K 的精确数据结构,给出可运行的频次桶实现、正确性不变量与复杂度,并说明内存受限时何时改用 Space-Saving 或 Count-Min Sketch。
类别极度不平衡时,如何选择模型指标与分类阈值?
从混淆矩阵、审核容量和误判成本推导分类指标与决策阈值,并解释 AUROC、PR 曲线、概率校准及基准率变化各自解决什么问题。
如何回答‘讲一次你失败的经历’行为面试题?
用 STAR 讲清一次真实失败,把个人判断、实际影响、补救动作和已验证的改变串成完整证据链,避免把甩锅或无关痛痒的失误包装成复盘。
如何设计分布式任务调度器,避免漏跑与重复执行?
从执行实例标识、分片时间索引和至少一次投递出发,设计支持单次与 Cron 任务的多租户调度器,并处理整点洪峰、错过触发、时区、取消竞态和故障恢复。
如何防止热点缓存过期引发缓存击穿?
从软过期、请求合并和分布式租约出发,设计能够承受热点键失效、刷新者崩溃、缓存故障与延迟写回的缓存读取链路。
产品经理面试:如何为冲突的功能需求排优先级?
用目标、硬约束、证据强度、延迟成本和机会成本比较冲突需求,作出单一选择,并写清承诺、降级方案与重新决策的触发条件。
软件工程师面试:如何进行高质量代码评审?
用风险优先的两遍审查法回答代码评审面试题,说明如何理解改动意图、识别阻塞问题、写出可执行评论,并作出批准或要求修改的决定。
如何回答‘与同事发生技术分歧’的行为面试题?
用一段真实经历说明你如何把技术争论变成可决策的问题:先对齐目标和标准,用证据提出异议,尊重决策权,并在决定作出后负责执行。
机器学习中的数据泄漏是什么?如何发现和避免?
以欺诈识别模型为例,建立预测时刻契约,排查目标、时间、实体与预处理泄漏,并设计可信的数据切分、交叉验证和最终留出测试。
如何实现线程安全的有界阻塞队列?
用环形数组、互斥锁和两个条件变量实现有界阻塞队列,并从状态不变量、线性化点、虚假唤醒和中断语义证明多生产者、多消费者下的正确性。
如何设计支持短信、邮件与推送的多渠道通知系统?
以每日 10 亿个渠道投递任务为假设,设计兼顾 OTP 与营销活动的通知系统,讲清优先级隔离、交付状态、乱序回执、重试和可验证的失败恢复。
PostgreSQL 事务隔离如何防止写偏斜?
用医生值班这个跨行不变量,推导 Read Committed、Repeatable Read 与 Serializable 的真实行为,并比较串行化重试、显式锁和单行条件更新三种修复方式。
如何实现 O(1) 的 LRU 缓存?
从查找与最近使用顺序的约束推导 LRU 缓存,用哈希表和双向链表完成实现,并通过指针、淘汰与更新不变量验证正确性,避免只背模板。
软件工程师面试:如何系统排查生产故障?
以错误率和延迟突增为例,拆解影响分级、先止损、假设驱动排查、低风险验证与防复发,形成可直接口述的生产故障回答框架。
产品经理面试:如何为新功能定义成功指标?
从用户目标出发,为新功能定义一项主指标、诊断指标与护栏指标,并用可审计的口径和实验决策规则避免把使用量误当成价值。
如何回答‘在信息不完整时做决定’的行为面试题?
用 STAR 组织真实经历,并从决策时限、关键未知项、可逆性、风险护栏和复盘说明你如何在不确定中推进工作,而不是把好运包装成判断力。
流处理如何处理迟到与乱序事件,保证窗口聚合正确?
以每小时营收为例,从事件时间、水位线、允许迟到和去重状态推导流处理方案,并处理结果修正、状态清理、故障恢复与离线对账。
如何设计幂等的创建订单 API,避免重试产生重复订单?
从幂等键作用域、请求指纹和数据库唯一约束出发,设计可安全重试的创建订单 API,并处理并发请求、响应丢失、键过期与下游副作用。
如何设计分布式限流器,兼顾突发流量与故障降级?
从容量估算、令牌桶原子更新和网关接入出发,设计每秒百万次检查的多租户限流系统,并处理热点、多地域、重试与存储故障。
如何手写 JavaScript 深拷贝,正确处理循环引用和共享引用?
先定义有限的拷贝契约,再用源对象到副本的 WeakMap 实现深拷贝,使循环引用、共享引用、Map、Set 和受支持的内置对象保持一致,并判断何时应直接使用 structuredClone。
如何手写 JavaScript EventEmitter,正确处理 on、off、once 和 emit?
从事件契约出发手写 JavaScript EventEmitter,处理重复注册、派发中增删监听器、once 重入和异常传播,并用边界用例验证语义。