SharedArrayBuffer 在 Worker 之间共享内存时,它的内存可见性如何保证?
围绕“SharedArrayBuffer 在 Worker 之间共享内存时,它的内存可见性如何保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明需要 Atomics 进行同步,且需要跨源隔离上下文。
并发编程专题面试题第 2 页,显示第 51–100 题,共找到 448 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“SharedArrayBuffer 在 Worker 之间共享内存时,它的内存可见性如何保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明需要 Atomics 进行同步,且需要跨源隔离上下文。
围绕“共享 Worker 如何向它所有的连接端口广播消息”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕遍历 ports 或用 MessageChannel 的替代。
共享 Worker 的核心是重复使用同一线程,多个客户端用独立的 MessagePort 相连。本文讲解连接流程、端口激活和 worker 生命周期,并指出常见坑。
围绕“用 SharedWorker 时,客户端通过 port 的 postMessage 与 onmessage 通信,需”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须调用 port.start() 或设置 onmessage。
本题解释 Transferable 对象(如 ArrayBuffer)在 Worker postMessage 中的零拷贝传递原理:共享所有权转移而非复制,原上下文对象被分离;对比结构化克隆,突出性能与安全优势,并给出使用边界和一些可转移对象类型。
讲解浏览器中专用 Worker、共享 Worker、Service Worker 三类线程的职责、生命周期差异,给出选型条件、常见误用边界与判断方法。
围绕“BroadcastChannel 和 SharedWorker 在跨标签页通信上有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕广播频道与共享 worker 的数据缓存和生命周期对比。
围绕“两个消息在 Worker 和主线程之间发送时,它们的到达顺序能保证吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖消息按发送顺序传递,但注意不同通道(如 port1 和 port2)的顺序。
围绕“在 Worker 中使用 console.log 的输出会显示在浏览器开发者工具哪里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕在 DevTools worker 上下文中查看。
围绕“postMessage 传递不可克隆的对象(如函数、DOM 节点)时会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕触发异常及检查,不涵盖 HTML 规范。
围绕“在一个 Worker 中的全局变量能否在多个消息任务之间共享”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕强调 Worker 每次消息处理之间变量会保留。
围绕“Worker 之间互相等待消息时可能出现死锁吗?如何避免”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕事件驱动通常无锁,但需要避免无限等待。
围绕“如何检测浏览器是否支持某个 Worker 特性(如 SharedWorker 或 SharedArrayBuffer”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕通过 typeof 或 条件判断。
围绕“Worker 内部抛出的异常如何传递到主线程并被捕获”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕事件 error 与 messageerror 的区别。
围绕“在 Worker 中抛出的 Promise 拒绝会不会触发全局错误事件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕未处理的 Promise 在 worker 中也触发 unhandledrejection。
围绕“Worker 里的事件循环和主线程的事件循环是完全独立的吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕每个独立全局都有独立事件循环,说明不会相互阻塞。
围绕“在 Worker 中通过 importScripts() 加载多个脚本时,执行的顺序和错误处理是怎样的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕同步加载,顺序执行,错误中断。
围绕“在一个 Worker 内部还能再创建新的 Worker 吗?嵌套 Worker 有什么限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕支持嵌套专用 Worker,但注意共享和 Service Worker 的差异。
解释 Web Worker 可访问与不可访问的 API 边界:独立全局作用域无 window 和 DOM,但保留网络、存储、定时器等能力,并给出工程判断方法。
围绕“有哪些常见的 Worker 内存泄漏场景,比如忘记 terminate 或停止端口”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕不用的 worker 和端口要关闭,注意事件监听。
围绕“MessageChannel 和 MessagePort 与 Worker 的 postMessage 有什么关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕如何用 MessageChannel 让两个 Worker 直接通信。
围绕“在 Worker 中用 type='module' 加载 ES 模块脚本与经典脚本有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕支持 import/export,且为异步加载。
围绕“在 Worker 中可以使用 XMLHttpRequest 或 fetch 发起网络请求吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕支持 XHR 和 fetch,但注意同源策略与 CORS。
围绕“在 Worker 中监听消息时,用 onmessage 属性和 addEventListener('message'”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕事件处理器属性覆盖行为与多个监听器共存。
围绕“当需要并行执行多个计算任务时,使用一个 Worker 池(pool)比单个 Worker 有什么好处”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕多个 worker 提升并行度,但注意资源开销。
围绕“在 Worker 与主线程之间如何处理请求-响应的模式(如消息 ID)?没有现成的 API,怎么实现”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕如何用 message data 的 id 字段匹配响应。
围绕“在主线程与 Worker 之间用 postMessage 传递复杂对象时,数据是如何拷贝的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释结构化克隆算法的拷贝行为,不涵盖 Transferable 对象。
围绕“Worker 能访问主页面所在的 cookie 吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕Worker 没有 DOM 但可 fetch 时携带 cookie,但无法直接读 document.cookie。
本题解释加载Worker脚本时的同源与CORS规则,包括跨域时所需的HTTP头、file协议限制、以及模块脚本的额外MIME要求,并提供实际场景与判断方法。
围绕“普通 Web Worker 和 Service(服务)Worker 在被用户关闭标签页后的生命周期有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕专用 worker 被终止,service worker 可能存活。
围绕“能否继承 Worker 类来创建自定义 Worker”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕可以继承,但实际中可能不如封装。
本文解释 Worker.terminate() 的强制终止机制,包括对运行中任务、事件循环、资源清理的影响,并比较与正常结束的区别,给出工程场景和边界条件。
围绕“在 Worker 内部调用 self.close() 和主线程调用 worker.terminate() 有什么异同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较主动关闭与外部终止,及各自触发的事件。
围绕“Worker 中支持 setTimeout 和 setInterval 吗?它们与主线程有何异同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕同样支持,但不涉及 requestAnimationFrame。
围绕“向量时钟如何检测两个并发写是冲突的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确两向量互不支配即判定并发冲突。
围绕“Kafka 生产者开启重试时如何避免同一分区内的消息乱序”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须结合 max.in.flight.requests.per.connection 与幂等性约束判断并发请求重排。
围绕“Dockerfile 中 CMD/ENTRYPOINT 的 shell 形式与 exec 形式对信号处理有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 shell 形式多出的 /bin/sh 父进程导致信号无法直达应用的问题。
本题解释Docker -m/--memory限制触发cgroup OOM killer的机制,说明主进程被杀时的表现(SIGKILL、退出码137),并给出通过docker inspect和dmesg验证的具体方法,同时区分容器存活与主进程被杀的情况。
围绕“Docker 的 --init 选项解决了 PID 1 不回收僵尸子进程的问题,其原理是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 tini 作为 PID 1 转发信号并回收孤儿进程的机制。
本题解释Docker容器内主进程PID为1的成因,即PID命名空间隔离。重点分析PID1在信号处理和僵尸进程回收上的特殊性,对比容器默认缺少init系统带来的问题,并提供判断和应对方法。
围绕“Docker 的 --pids-limit 如何防御 fork 炸弹,默认值是多少”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明限制容器内 PID 总数的机制与内核默认行为。
本文解释 Docker 共享宿主机 PID 和 IPC 命名空间的典型场景:调试与 System V IPC 通信,以及隔离性损失的具体表现。给出判断准则:仅在单机调试或信任容器的场合使用,生产环境慎用,因为容器内可操纵宿主进程和 IPC 对象。
围绕“为什么用 shell 形式(exec sh -c)作为容器入口会导致主进程收不到 SIGTERM”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 shell 成为 PID 1 后信号不转发给子进程及 exec 形式/显式 exec 的解法。
围绕“直接用 docker kill 或超时被 SIGKILL 对容器内应用有什么数据风险,如何设计规避”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明进程无机会 flush/关闭事务的风险与优雅停机设计要点。
围绕“在容器入口脚本中如何保证把收到的 SIGTERM 正确转发给实际业务进程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 exec 替换进程或 trap+wait 的两种正确写法及常见错误。
围绕“为什么挂载宿主机目录进 Docker 容器后经常出现权限拒绝,如何正确处理 UID 映射”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明容器进程 UID 与宿主机文件属主的对应关系及 chown/指定 --user 等解法。
围绕“INP 把一次交互分成输入延迟、处理时间、呈现延迟,分别由什么导致”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖按三段拆分交互延迟并对应到主线程占用与渲染工作。
围绕“什么是长任务,为什么 50 毫秒被当作划分界限”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明长任务阻塞输入响应与 RAIL 100ms 预算的关系。
围绕“第三方脚本拖慢总阻塞时间,有哪些不影响功能的治理手段”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明延迟加载、facade 临时标记、web worker 隔离等第三方脚本治理。
围绕“什么类型的计算应该移到 Web Worker,移过去为什么不能直接操作 DOM”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Worker 无 DOM 访问与消息传递成本决定适合纯计算任务。