WebAssembly
精通预计深耕 6 个月+星团 前端
岗位需求
0 核心 · 0 加分
在职岗位将其列为技能要求
核心岗位薪资带
—
核心要求岗位的月薪区间
需求趋势
上升 0稳定 0收缩 0
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. WebAssembly 是什么?它为什么快?
WebAssembly 是一种可移植的二进制指令格式,定义紧凑的栈机字节码与严格的验证规则,浏览器将其编译为原生机器码执行。快的原因:静态类型与确定性指令使引擎无需运行时推测优化(对比 JS 的解释加 JIT 热点优化与去优化抖动);二进制编码解码快、体积小;线性内存在接近原生内存布局上操作,边界检查可优化;指令级并行与寄存器分配由引擎提前完成。定位上 wasm 与 JS 是互补而非替代:wasm 是计算内核,DOM、网络、事件等平台能力仍由 JS 或宿主接口提供,通过导入导出函数协作。典型场景:音视频编解码、图像处理、游戏引擎、加密与压缩、科学计算、把 C、C++、Rust 既有库搬进网页。
2. wasm 的文本格式与二进制格式是什么关系?
wasm 有两种等价表示:二进制格式 .wasm 是紧凑的字节序列,用于分发与加载,采用 LEB128 变长编码_sections 组织(类型、导入、函数、内存、导出等节);文本格式 .wat 是可读的 S 表达式语法,一一对应二进制结构,用于调试、教学、查看反汇编(wasm2wat)与手写小模块。两者由官方工具 wabt 互转,wat 不参与运行时,浏览器只消费二进制。理解文本格式有助面试展开:函数签名、局部声明、指令栈序(无寄存器抽象的栈机)、以及导入导出的绑定声明都可在 wat 中直读。扩展提及 WASM 3.0 与宽松 SIMD、尾调用等提案说明关注标准演进。答题点:等价性、转换工具、栈机语法示意即可。
3. wasm 的线性内存模型是怎样的?
每个 wasm 模块拥有独立的线性内存:一段连续、无结构、按字节寻址的可增长缓冲区,以页为单位分配(每页 64KB),最大页数在模块声明,内存可导入导出与宿主共享。wasm 代码通过 load 与 store 指令按偏移读写,配边界检查防越界(引擎多用 guard page 技巧把检查降到接近零开销)。无 GC、无嵌套对象结构,指针就是整数偏移,C、C++、Rust 的指针模型可直接映射到偏移量上,这是移植既有代码的关键设计。JS 侧通过 TypedArray 视图操作同一段内存,传复杂数据常需手工序列化或复用缓冲区避免每次拷贝。多字节数据的端序由指令显式指定(小端常见)。答出连续页式增长、偏移寻址加边界检查、与 JS 共享视图三点即完整。
4. wasm 与 JavaScript 如何互操作?有什么限制?
交互走模块边界:模块声明导入(函数、内存、全局、表),导出自身函数与内存;宿主用 WebAssembly.instantiate 实例化时注入导入对象,JS 函数可被 wasm 回调,wasm 导出函数可被 JS 直接调用,数值参数返回值零成本传递。限制与成本:wasm 与 JS 只共享数值类型(i32、i64、f32、f64 等),字符串、对象、数组都不能直接过界,必须经线性内存序列化或用 TextEncoder 手工编解码,跨边界调用与拷贝是主要性能税,热路径应批量传数据而非逐次调用。间接调用靠表(table)机制实现函数指针。工具链如 wasm-bindgen、Emscripten 的 embind 帮你生成胶水代码隐藏这些细节。答出导入导出机制与字符串必须走内存拷贝这一经典细节即佳。
5. wasm 目前有哪些限制?组件模型要解决什么?
当前限制:不能直接访问 DOM 与 Web API,都要经 JS 胶水;宿主绑定只认数值与线性内存,跨语言共享复杂数据结构需要序列化;GC 语言(Java、Go、C#、Python)要么带运行时要么瘦身,wasm GC 提案落地后语言可直接用宿主 GC 才逐步缓解;线程依赖 SharedArrayBuffer 与跨源隔离头;调试与错误信息栈曾较难读,sourcemap 支持在完善。组件模型(Component Model)是下一代方案:在核心模块之上定义接口类型系统(记录、字符串、列表等高类型),用 WIT 语言描述接口,不同语言生成的组件可互相组合,wasm-runtime 与 WASI Preview2 让模块即插即用,服务端 wasm 与插件系统是主要受益场景。能讲 GC 提案与 WIT 即体现跟进前沿。
官方文档
2 条官方门户,规范、路线图与社区动态入口
浏览器侧 API 与概念中文参考,入门到加载调用
推荐教程
1 条rustwasm 工作组官方教程,wasm-pack 工具链实战
推荐课程
1 条按语言与概念组织的示例课程,含中文语种版本
上手实践
1 条用任意语言写卡带式小游戏,实践中练 wasm 工具链
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

