服务端2月20日 11:58
Zookeeper Leader 选举机制是怎样工作的?Zookeeper 的 Leader 选举不是谁先启动谁当 Leader,而是看哪个节点最适合承接已提交历史。Fast Leader Election 会在 LOOKING 状态下交换投票,每张票通常包含 epoch、zxid 和 sid:先比较选举轮次,再看 zxid 谁更新,zxid 相同才比较 sid。某个候选者拿到超过半数投票后成为 Leader。
## 追问
### Leader 选举什么时候触发?
集群首次启动、Leader 宕机、网络分区导致多数 Follower 失联时,节点都会进入 LOOKING。短暂 GC、磁盘卡顿也可能让 Follower 误判超时。
### ...服务端2月20日 11:59
Zookeeper 如何通过 ZAB 协议保证数据一致性?Zookeeper 的一致性主要靠 ZAB 协议保证。所有写请求最终交给 Leader 排序,Leader 分配全局递增的 zxid,再把提案广播给 Follower;超过半数节点 ACK 后,事务才提交。代价是写入要等多数派,延迟不会像单机缓存那样低;好处是 Leader 宕机后,新 Leader 能根据 zxid 找到较完整的提交历史,避免已提交数据丢失或未提交数据乱入。
## 追问
### ZAB 和普通主从复制最大区别是什么?
普通主从复制常见问题是主节点确认太早,故障时从节点未必拥有同一批数据。ZAB 要求事务拿到多数派 ACK 再提交。
### zxid 为什么能决定数据...服务端2月20日 11:59
Zookeeper 性能怎么优化?哪些参数最容易踩坑?Zookeeper 性能优化先分清读多、写多还是连接多。读多可以加 Observer 或让客户端分散到 Follower;写多瓶颈通常在 Leader、事务日志 fsync 和过半确认;连接多、Watcher 多、znode 大,会把内存和网络打满。有效优化不是把参数调大,而是减少无意义写入、控制节点大小、把事务日志放到稳定低延迟磁盘。
## 追问
### 加节点一定能提升性能吗?
不一定。Follower 或 Observer 能分担读请求,但写请求仍要 Leader 发起并等待过半确认,投票节点越多,写入链路可能越长。
### dataDir 和 dataLogDir 为什么分开...服务端2月20日 12:43
Zookeeper、Etcd 和 Consul 有什么区别?该怎么选?Zookeeper、Etcd 和 Consul 都能做分布式协调,但出发点不一样。Zookeeper 更像协调原语库,擅长临时节点、顺序节点、Watcher、分布式锁和老牌 Java/大数据生态;Etcd 是强一致 KV,Raft、revision、租约和 Watch 更贴近 Kubernetes 控制面;Consul 把服务发现、健康检查、多数据中心和 KV 打包在一起,适合微服务治理。
## 追问
### Consul 是 AP 还是 CP?
不能简单说 Consul 全部是 AP。服务发现依赖 Gossip,读到的信息可能短暂滞后;Server 集群和 KV 一致读依赖 Raft...服务端2月20日 12:44
Zookeeper 连接超时、脑裂和数据不一致怎么排查?Zookeeper 出问题时不要先调参数,先判断是客户端、网络、磁盘还是集群选举问题。连接超时通常看 sessionTimeout、端口连通性和服务端负载;脑裂要看是否真的出现多个可写 Leader,多数情况下是网络分区或监控误判;数据不一致多半是读到了落后的 Follower,需要用 sync() 或改读 Leader。
## 追问
### 连接超时一定是服务端问题吗?
不一定。先用 nc 验证 2181 端口,再看客户端 DNS、负载均衡、防火墙和连接池是否耗尽。服务端 latency_max 很高时,还要查磁盘 I/O、GC 暂停和 outstanding 请求堆积。
### ...服务端2月20日 12:44
Zookeeper 运维监控要看哪些指标和告警?Zookeeper 运维的重点不是“进程活着就行”,而是确认多数派健康、写入延迟可控、客户端连接没有失控。日常先看四类指标:集群角色和节点存活、请求延迟、连接与 Watcher 数量、磁盘和 JVM 状态。`stat` 能看 leader/follower,`mntr` 适合接 Prometheus exporter,`cons` 能排查连接来源,`wchs` 可以判断 Watcher 是否异常膨胀。
## 追问
### 线上最应该优先盯哪个指标?
优先看 `zk_avg_latency`、`zk_max_latency` 和 `zk_outstanding_requests`。节点存...服务端2月20日 12:45
Zookeeper 架构和数据模型该怎么设计才稳?Zookeeper 要稳,先别把它当数据库用,而要当成“小而关键的协调层”。生产集群通常选 3 或 5 个投票节点:3 节点能容忍 1 台故障,5 节点能容忍 2 台故障;节点数不是越多越好,写入要多数派确认,7 台以上会增加选举和同步成本。部署时尽量跨机架或可用区,但不要把网络延迟拉得太大。
## 追问
### 为什么生产集群常用 3 或 5 个节点?
Zookeeper 依赖多数派,4 个节点仍然只能容忍 1 台故障,因为多数派需要 3 票。偶数节点增加机器和同步成本,却不提升容错收益。
### dataDir 和 dataLogDir 为什么建议分开?
事务日志是写请求关键路径...前端2月20日 13:28
Chrome 的 V8 引擎如何执行 JavaScript?V8 执行 JavaScript 不是直接把源码一路翻成机器码。大致流程是:源码先被解析成 AST,再由 Ignition 生成并执行字节码;运行中如果某段代码频繁执行,V8 会收集类型反馈,把它交给 TurboFan 优化成机器码。优化依赖“假设”,比如对象形状稳定、函数参数类型稳定;一旦假设被打破,就会发生去优化。
## 追问
### 隐藏类和内联缓存是什么?
V8 会给结构相似的对象建立隐藏类,用来快速定位属性。内联缓存会记录某个属性访问曾经遇到的对象形状。
### 为什么不建议频繁 delete 属性?
delete 可能改变对象形状,让原本稳定的隐藏类失效。热点路径里更常见...前端2月20日 13:28
Chrome 缓存机制有哪些?强缓存和协商缓存怎么选?Chrome 缓存是一组从近到远的命中链路。页面请求资源时,可能先被 Service Worker 接管,再命中内存缓存或磁盘缓存;HTTP 层又分强缓存和协商缓存。强缓存看 `Cache-Control: max-age`,没过期就不问服务器;协商缓存会带 `If-None-Match` 或 `If-Modified-Since` 去问服务器,没变就返回 304。
## 追问
### 强缓存和协商缓存怎么取舍?
带内容 hash 的 JS、CSS、图片适合强缓存很久;HTML 入口更适合短缓存或协商缓存,避免用户一直拿旧入口。
### ETag 和 Last-Modified 有什...前端2月20日 13:29
Chrome 事件循环中宏任务和微任务到底怎么执行?Chrome 的事件循环可以先记一句话:同步代码先进调用栈,栈清空后清空微任务,然后浏览器选择是否渲染,再执行下一个宏任务。宏任务包括 script、setTimeout、用户事件等;微任务包括 Promise.then、queueMicrotask、MutationObserver。微任务优先级高,但太多会让渲染一直没机会发生。
## 追问
### setTimeout(fn, 0) 为什么不是立刻执行?
它只是把回调放进宏任务队列,必须等当前同步代码和本轮微任务执行完。后台标签页和嵌套定时器还可能被节流。
### Promise.then 和 requestAnimationFr...